{"version":3,"file":"sinequa-components-labels.mjs","sources":["../../../projects/components/labels/label.pipe.ts","../../../projects/components/labels/labels.service.ts","../../../projects/components/labels/labels.component.ts","../../../projects/components/labels/labels.component.html","../../../projects/components/labels/result-labels.component.ts","../../../projects/components/labels/result-labels.component.html","../../../projects/components/labels/labels-autocomplete.directive.ts","../../../projects/components/labels/labels.module.ts","../../../projects/components/labels/bootstrap/labels-autocomplete/labels-autocomplete.component.ts","../../../projects/components/labels/bootstrap/labels-autocomplete/labels-autocomplete.component.html","../../../projects/components/labels/bootstrap/rename-label/rename-label.ts","../../../projects/components/labels/bootstrap/rename-label/rename-label.html","../../../projects/components/labels/bootstrap/labels-menu/labels-menu.component.ts","../../../projects/components/labels/bootstrap/labels-menu/labels-menu.component.html","../../../projects/components/labels/bootstrap/delete-label/delete-label.ts","../../../projects/components/labels/bootstrap/delete-label/delete-label.html","../../../projects/components/labels/bootstrap/add-label/add-label.ts","../../../projects/components/labels/bootstrap/add-label/add-label.html","../../../projects/components/labels/bootstrap/edit-label/edit-label.ts","../../../projects/components/labels/bootstrap/edit-label/edit-label.html","../../../projects/components/labels/bootstrap/labels.module.ts","../../../projects/components/labels/messages/en.ts","../../../projects/components/labels/messages/fr.ts","../../../projects/components/labels/messages/de.ts","../../../projects/components/labels/messages/index.ts","../../../projects/components/labels/sinequa-components-labels.ts"],"sourcesContent":["import {Pipe} from \"@angular/core\";\nimport {AbstractIntlPipe} from \"@sinequa/core/intl\";\n\n@Pipe({\n    name: \"sqLabel\", pure: false,\n    standalone: false\n})\nexport class LabelPipe extends AbstractIntlPipe<string, boolean> {\n\n    override updateValue(value: string, _public?: boolean): void {\n        super.updateValue(value, _public);\n        this.value = value;\n        this.value = this.intlService.formatMessage(this.value);\n    }\n}\n","import { Observable, of, Subscription } from \"rxjs\";\n\nimport {\n    Inject,\n    Injectable,\n    InjectionToken,\n    OnDestroy,\n    Type,\n} from \"@angular/core\";\n\nimport { Action } from \"@sinequa/components/action\";\nimport { SearchService } from \"@sinequa/components/search\";\nimport { SelectionService } from \"@sinequa/components/selection\";\nimport { AppService, ValueItem } from \"@sinequa/core/app-utils\";\nimport { Utils } from \"@sinequa/core/base\";\nimport { IntlService } from \"@sinequa/core/intl\";\nimport { ModalResult, ModalService } from \"@sinequa/core/modal\";\nimport { NotificationsService } from \"@sinequa/core/notification\";\nimport {\n    AuditEventType,\n    LabelsRights,\n    LabelsWebService,\n    PrincipalWebService,\n    StringFilter\n} from \"@sinequa/core/web-services\";\n\nexport interface LabelsComponents {\n    renameModal: Type<any>;\n    labelsAutocompleteComponent: Type<any>;\n    deleteModal: Type<any>;\n    addModal: Type<any>;\n    editModal: Type<any>;\n}\n\nexport interface ModalProperties {\n    public: boolean;\n    allowEditPublicLabels: boolean;\n    allowManagePublicLabels: boolean;\n    allowNewLabels: boolean;\n    disableAutocomplete: boolean;\n    action: number;\n    radioButtons: any[];\n}\n\nexport const enum UpdateLabelsAction {\n    add,\n    remove,\n    rename,\n    delete,\n    bulkAdd,\n    bulkRemove,\n    edit,\n}\n\nexport const LABELS_COMPONENTS = new InjectionToken<LabelsComponents>(\n    \"LABELS_COMPONENTS\"\n);\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class LabelsService implements OnDestroy {\n    private static readonly defaultLabelsRights: LabelsRights = {\n        canManagePublicLabels: true,\n        canEditPublicLabels: true,\n    };\n    private labelsRightsSubscription: Subscription | undefined;\n    private labelsRights: LabelsRights | undefined;\n\n    constructor(\n        private labelsWebService: LabelsWebService,\n        private appService: AppService,\n        private searchService: SearchService,\n        private modalService: ModalService,\n        private principalWebService: PrincipalWebService,\n        private intlService: IntlService,\n        private notificationService: NotificationsService,\n        private selectionService: SelectionService,\n        @Inject(LABELS_COMPONENTS) public labelsComponents: LabelsComponents\n    ) {\n        this.principalWebService.events.subscribe((event) => {\n            switch (event.type) {\n                case \"changed\":\n                    this.labelsRights = undefined;\n                    this.labelsRightsSubscription = undefined;\n                    break;\n            }\n        });\n    }\n\n    public get publicLabelsField(): string | undefined {\n        return this.appService.cclabels\n            ? this.appService.cclabels.publicLabelsField\n            : undefined;\n    }\n\n    public get privateLabelsField(): string | undefined {\n        return this.appService.cclabels\n            ? this.appService.cclabels.privateLabelsField\n            : undefined;\n    }\n\n    public get labelsAutoSuggestWildcard(): string | undefined {\n        return this.appService.cclabels\n            ? this.appService.cclabels.labelsAutoSuggestWildcard\n            : undefined;\n    }\n\n    public get allowPublicLabelsManagement(): boolean {\n        return this.appService.cclabels\n            ? this.appService.cclabels.allowPublicLabelsCreation\n            : false;\n    }\n\n    public get allowPublicLabelsEdition(): boolean {\n        return this.appService.cclabels\n            ? this.appService.cclabels.allowPublicLabelsModification\n            : false;\n    }\n\n    public get userLabelsRights(): LabelsRights {\n        let rights: LabelsRights | undefined;\n        if (!this.labelsRights) {\n            if (!this.labelsRightsSubscription) {\n                const observable = this.labelsWebService.getUserRights();\n                this.labelsRightsSubscription = Utils.subscribe(\n                    observable,\n                    (response) => (rights = response)\n                );\n            } else {\n                rights = LabelsService.defaultLabelsRights;\n            }\n            this.labelsRights = !!rights\n                ? rights\n                : LabelsService.defaultLabelsRights;\n        }\n        return this.labelsRights;\n    }\n\n    ngOnDestroy() {\n        if (this.labelsRightsSubscription) {\n            this.labelsRightsSubscription.unsubscribe();\n        }\n    }\n\n    /** From navbar */\n    public renameLabelModal(): Promise<ModalResult> {\n        const data = {\n            oldValues: [],\n            newValue: \"\",\n            properties: this._modalProperties(UpdateLabelsAction.rename),\n        };\n        return this.modalService.open(this.labelsComponents.renameModal, {\n            model: data,\n        });\n    }\n\n    public deleteLabelModal(): Promise<ModalResult> {\n        const data = {\n            values: [],\n            properties: this._modalProperties(UpdateLabelsAction.delete),\n        };\n        return this.modalService.open(this.labelsComponents.deleteModal, {\n            model: data,\n        });\n    }\n\n    public bulkAddLabelModal(): Promise<ModalResult> {\n        const data = {\n            values: [],\n            properties: this._modalProperties(UpdateLabelsAction.bulkAdd),\n        };\n        return this.modalService.open(this.labelsComponents.addModal, {\n            model: data,\n        });\n    }\n\n    public bulkRemoveLabelModal(): Promise<ModalResult> {\n        const data = {\n            values: [],\n            properties: this._modalProperties(UpdateLabelsAction.bulkRemove),\n        };\n        return this.modalService.open(this.labelsComponents.deleteModal, {\n            model: data,\n        });\n    }\n\n    private _modalProperties(action: number): ModalProperties {\n        const allowManagePublicLabels: boolean =\n            this.allowPublicLabelsManagement &&\n            this.userLabelsRights &&\n            this.userLabelsRights.canManagePublicLabels;\n        const allowEditPublicLabels: boolean =\n            this.allowPublicLabelsEdition &&\n            this.userLabelsRights &&\n            this.userLabelsRights.canEditPublicLabels;\n        let allowNewLabels: boolean = false;\n        let radioButtonsConf: any;\n\n        switch (action) {\n            case UpdateLabelsAction.rename:\n            case UpdateLabelsAction.remove:\n            case UpdateLabelsAction.delete:\n            case UpdateLabelsAction.bulkRemove:\n                allowNewLabels = false;\n                break;\n            case UpdateLabelsAction.add:\n            case UpdateLabelsAction.bulkAdd:\n            case UpdateLabelsAction.edit:\n                allowNewLabels = true;\n                break;\n            default:\n                break;\n        }\n\n        switch (action) {\n            case UpdateLabelsAction.rename:\n            case UpdateLabelsAction.delete:\n                radioButtonsConf = this._getModalRadioButtonsConf(\n                    allowManagePublicLabels\n                );\n                break;\n            case UpdateLabelsAction.add:\n            case UpdateLabelsAction.bulkAdd:\n            case UpdateLabelsAction.remove:\n            case UpdateLabelsAction.bulkRemove:\n            case UpdateLabelsAction.edit:\n                radioButtonsConf = this._getModalRadioButtonsConf(\n                    allowManagePublicLabels || allowEditPublicLabels\n                );\n                break;\n            default:\n                break;\n        }\n\n        return {\n            allowEditPublicLabels: allowEditPublicLabels,\n            allowManagePublicLabels: allowManagePublicLabels,\n            allowNewLabels: allowNewLabels,\n            action: action,\n            ...radioButtonsConf,\n        };\n    }\n\n    private _getModalRadioButtonsConf(publicRight: boolean): any {\n        let isPublic: boolean = true;\n        let disableAutocomplete: boolean = false;\n        let radioButtons: any[] = [];\n        let publicRadioButton = {\n            id: \"publicLabel\",\n            name: \"msg#labels.public\",\n            value: true,\n            disabled: false,\n            checked: true,\n        };\n        let privateRadioButton = {\n            id: \"privateLabel\",\n            name: \"msg#labels.private\",\n            value: false,\n            disabled: false,\n            checked: false,\n        };\n        if (!!this.publicLabelsField && !!this.privateLabelsField) {\n            if (publicRight) {\n                isPublic = true;\n                radioButtons = [publicRadioButton, privateRadioButton];\n            } else {\n                isPublic = false;\n                publicRadioButton = {\n                    ...publicRadioButton,\n                    disabled: true,\n                    checked: false,\n                };\n                privateRadioButton = {\n                    ...privateRadioButton,\n                    disabled: true,\n                    checked: true,\n                };\n                radioButtons = [publicRadioButton, privateRadioButton];\n            }\n        } else if (!!this.publicLabelsField) {\n            if (publicRight) {\n                isPublic = true;\n                publicRadioButton = {\n                    ...publicRadioButton,\n                    disabled: true,\n                    checked: true,\n                };\n                radioButtons = [publicRadioButton];\n            } else {\n                isPublic = false;\n                disableAutocomplete = true;\n                publicRadioButton = {\n                    ...publicRadioButton,\n                    disabled: true,\n                    checked: false,\n                };\n                radioButtons = [publicRadioButton];\n            }\n        } else if (!!this.privateLabelsField) {\n            isPublic = false;\n            privateRadioButton = {\n                ...privateRadioButton,\n                disabled: true,\n                checked: true,\n            };\n            radioButtons = [privateRadioButton];\n        }\n\n        return {\n            public: isPublic,\n            disableAutocomplete: disableAutocomplete,\n            radioButtons: radioButtons,\n        };\n    }\n    /** END From navbar */\n\n    /** From result selector */\n    public buildSelectionAction(): Action | undefined {\n        if (!this.publicLabelsField && !this.privateLabelsField) {\n            return undefined;\n        }\n        const action = new Action({\n            icon: \"fas fa-tags\",\n            title: \"msg#labels.labels\",\n            name: \"labels\",\n            action: () => {\n                this.editLabelModal();\n            },\n        });\n        if (action) {\n            action.updater = (item) => {\n                item.hidden = !this.selectionService.haveSelectedRecords;\n            };\n            action.hidden = true;\n        }\n        return action;\n    }\n\n    public editLabelModal(): Promise<ModalResult> {\n        const data = {\n            valuesToBeAdded: [],\n            valuesToBeRemoved: [],\n            properties: this._modalProperties(UpdateLabelsAction.edit),\n        };\n        return this.modalService.open(this.labelsComponents.editModal, {\n            model: data,\n        });\n    }\n    /** END result selector */\n\n\n    addLabels(\n        labels: string[],\n        ids: string[],\n        _public: boolean\n    ): Observable<void> {\n        if (!labels || labels.length === 0 || !ids || ids.length === 0) {\n            return of();\n        }\n        const observable = this.labelsWebService.add(labels, ids, _public);\n        return observable;\n    }\n\n    removeLabels(\n        labels: string[],\n        ids: string[],\n        _public: boolean\n    ): Observable<void> {\n        if (!labels || labels.length === 0 || !ids || ids.length === 0) {\n            return of();\n        }\n        const observable = this.labelsWebService.remove(labels, ids, _public);\n        return observable;\n    }\n\n    selectLabels(labels: string[], _public: boolean): Promise<boolean> {\n        const field =\n            this.appService.cclabels &&\n            (_public\n                ? this.appService.cclabels.publicLabelsField\n                : this.appService.cclabels.privateLabelsField);\n        if (!field) {\n            return Promise.resolve(false);\n        }\n        const items: ValueItem[] = [];\n        const selectedLabels: string[] = this.getSelectedLabels(field);\n        for (const label of labels) {\n            const display = label;\n            if (selectedLabels.indexOf(label) === -1) {\n                items.push({\n                    value: label,\n                    display: display,\n                });\n            }\n        }\n\n        this.searchService.addFieldSelect(field, items);\n        return this.searchService.search(undefined, {\n            type: AuditEventType.Label_Open,\n            detail: {\n                label: !!labels ? labels.toString() : null,\n                public: _public,\n            },\n        });\n    }\n\n    /**\n     * Retrieves the labels that are not in the current filters of breadcrumbs\n     *\n     * @param field The column index containing the labels.\n     * @returns The selected labels\n     */\n    private getSelectedLabels(field: string): string[] {\n        return this.searchService.query\n            .findAllFilters(f => f.operator === 'eq' || !f.operator && f.field === field)\n            .filter<StringFilter>((f): f is StringFilter => typeof ((f as StringFilter).value) === 'string')\n            .map(f => f.value);\n    }\n\n    renameLabels(\n        labels: string[],\n        newLabel: string,\n        _public: boolean\n    ): Observable<void> {\n        if (!labels || labels.length === 0) {\n            return of();\n        }\n        const observable = this.labelsWebService.rename(\n            labels,\n            newLabel,\n            _public\n        );\n        Utils.subscribe(\n            observable,\n            () => {},\n            () => {\n                this.notificationService.error(\"msg#renameLabel.errorFeedback\");\n            },\n            () => {\n                this.notificationService.success(\n                    \"msg#renameLabel.successFeedback\"\n                );\n                this.searchService.search(); /** Update the display immediately in the components and facets*/\n            }\n        );\n        return observable;\n    }\n\n    deleteLabels(labels: string[], _public: boolean): Observable<void> {\n        if (!labels || labels.length === 0) {\n            return of();\n        }\n        const observable = this.labelsWebService.delete(labels, _public);\n        Utils.subscribe(\n            observable,\n            () => {},\n            () => {\n                this.notificationService.error(\"msg#deleteLabel.errorFeedback\");\n            },\n            () => {\n                this.notificationService.success(\n                    \"msg#deleteLabel.successFeedback\"\n                );\n                this.searchService.search(); /** Update the display immediately in the components and facets*/\n            }\n        );\n        return observable;\n    }\n\n    bulkAddLabels(labels: string[], _public: boolean): Observable<void> {\n        if (!labels || labels.length === 0) {\n            return of();\n        }\n        const observable = this.labelsWebService.bulkAdd(\n            labels,\n            this.searchService.query,\n            _public\n        );\n        Utils.subscribe(\n            observable,\n            () => {},\n            () => {\n                this.notificationService.error(\n                    \"msg#bulkAddLabel.errorFeedback\"\n                );\n            },\n            () => {\n                this.notificationService.success(\n                    \"msg#bulkAddLabel.successFeedback\"\n                );\n                this.searchService.search(); /** Update the display immediately in the components and facets*/\n            }\n        );\n        return observable;\n    }\n\n    bulkRemoveLabels(labels: string[], _public: boolean): Observable<void> {\n        if (!labels || labels.length === 0) {\n            return of();\n        }\n        const observable = this.labelsWebService.bulkRemove(\n            labels,\n            this.searchService.query,\n            _public\n        );\n        Utils.subscribe(\n            observable,\n            () => {},\n            () => {\n                this.notificationService.error(\n                    \"msg#bulkRemoveLabel.errorFeedback\"\n                );\n            },\n            () => {\n                this.notificationService.success(\n                    \"msg#bulkRemoveLabel.successFeedback\"\n                );\n                this.searchService.search(); /** Update the display immediately in the components and facets*/\n            }\n        );\n        return observable;\n    }\n\n    sort(labels: string[]): string[] {\n        if (!labels) return labels;\n        return labels.sort((a, b) => {\n            if (!a) return -1;\n            if (!b) return 1;\n            a = this.intlService.formatMessage(a);\n            b = this.intlService.formatMessage(b);\n            return a.localeCompare(b);\n        });\n    }\n\n    split(labels: string): string[] {\n        if (!labels) {\n            return [];\n        }\n        return labels\n            .trim()\n            .split(/\\s*;\\s*/)\n            .filter((value) => value !== \"\");\n    }\n}\n","import { Component, Input, OnChanges, HostBinding } from \"@angular/core\";\n\nimport { AppService } from \"@sinequa/core/app-utils\";\nimport { Record } from \"@sinequa/core/web-services\";\n\nimport { LabelsService } from \"./labels.service\";\n\n@Component({\n    selector: \"sq-labels\",\n    // We need the two spans to get whitespace between each label\n    // change size by adding h1-6 class to .sq-label div (default is h5)\n    templateUrl: \"./labels.component.html\",\n    styles: [\n        `\n            .sq-labels-public {\n                background-color: #4fc3f7;\n            }\n            .sq-labels-private {\n                background-color: #7283a7;\n            }\n            .sq-label-remove {\n                margin-left: 3px;\n            }\n            .clickable {\n                cursor: pointer;\n            }\n            .clickable:hover {\n                opacity: 85%;\n            }\n        `,\n    ],\n    standalone: false\n})\nexport class Labels implements OnChanges {\n    @Input() record: Record;\n    @Input() public: boolean;\n    @Input() enableDelete: boolean = false; /** Display the delete button in the label tag */\n\n    protected labelsField: string;\n    showLabels: boolean;\n    labels: string[];\n\n    @HostBinding(\"class\") hostClasses;\n\n    constructor(\n        private appService: AppService,\n        private labelsService: LabelsService\n    ) {}\n\n    ngOnChanges() {\n        const field = this.public\n            ? this.labelsService.publicLabelsField\n            : this.labelsService.privateLabelsField;\n        this.labelsField = this.appService.resolveColumnAlias(field);\n        this.showLabels = !!this.labelsField;\n        this.makeLabels();\n    }\n\n    private makeLabels() {\n        if (!this.showLabels) {\n            this.labels = [];\n            return;\n        }\n        const labels = this.record[this.labelsField];\n        if (Array.isArray(labels)) {\n            this.labels = this.labelsService.sort(labels.slice());\n        } else {\n            this.labels = [];\n        }\n    }\n\n    select(label: string) {\n        this.labelsService.selectLabels([label], this.public);\n    }\n\n    remove(index: number) {\n        if (this.canRemove()) {\n            const label = this.labels[index];\n            this.labelsService.removeLabels(\n                [label],\n                [this.record.id],\n                this.public\n            );\n        }\n    }\n\n    canRemove(): boolean {\n        return this.public\n            ? this.enableDelete &&\n                this.labelsService.allowPublicLabelsManagement &&\n                this.labelsService.userLabelsRights &&\n                this.labelsService.userLabelsRights.canManagePublicLabels\n            : this.enableDelete && true;\n    }\n}\n","<div *ngIf=\"showLabels\" class=\"d-inline\">\n    <div *ngFor=\"let label of labels; let $index = index\"\n        class=\"badge rounded-pill me-1\" \n        [ngClass]=\"{'sq-labels-public': public, 'sq-labels-private': !public}\"\n        title=\"{{(public ? 'msg#labels.selectPublicLabelTitle' : 'msg#labels.selectPrivateLabelTitle') | sqMessage}}\">\n        <span (click)=\"select(label)\">{{label | sqLabel:public}}</span>\n        <i *ngIf=\"canRemove()\"\n            class=\"sq-label-remove fas fa-times-circle clickable\"\n            (click)=\"remove($index)\"\n            title=\"{{(public ? 'msg#labels.removePublicLabelTitle' : 'msg#labels.removePrivateLabelTitle') | sqMessage}}\">\n        </i>\n    </div>\n</div>\n","import {Component, Input} from \"@angular/core\";\nimport {Record} from \"@sinequa/core/web-services\";\n\n@Component({\n    selector: \"sq-result-labels\",\n    templateUrl: \"./result-labels.component.html\",\n    standalone: false\n})\nexport class ResultLabels {\n    @Input() record: Record;\n    @Input() caption: string;\n    @Input() public: boolean;\n}\n","<span *ngIf=\"caption\" class=\"sq-text\">{{caption | sqMessage}}</span>\n<sq-labels [record]=\"record\" [public]=\"public\"></sq-labels>\n","import {\n    Directive,\n    Input,\n    EventEmitter,\n    SimpleChanges,\n    Output,\n    HostListener,\n    OnInit,\n    OnChanges,\n} from \"@angular/core\";\nimport {\n    Autocomplete,\n    AutocompleteState,\n    AutocompleteItem,\n} from \"@sinequa/components/autocomplete\";\nimport { LabelsWebService, Labels } from \"@sinequa/core/web-services\";\nimport { Keys } from \"@sinequa/core/base\";\nimport { LabelsService } from \"./labels.service\";\n\n@Directive({\n    selector: \"[sqAutocompleteLabels]\",\n    standalone: false\n})\nexport class LabelsAutocomplete extends Autocomplete implements OnInit, OnChanges {\n    /** Event synchronizing the list of selected labels in the parent component */\n    @Output() itemsUpdate = new EventEmitter<AutocompleteItem[]>();\n\n    /** Whether the labels are public or not */\n    @Input() public: boolean;\n\n    /** Enable adding new labels in labelsItems or not */\n    @Input() allowNewLabels: boolean = false;\n\n    /** Define the right of adding new labels in labelsItems or not */\n    @Input() allowManagePublicLabels: boolean = false;\n\n    /** Stores the selected labels items selected via Tab */\n    @Input() labelsItems: AutocompleteItem[] = [];\n\n    /** Stores the suggestions retrieved by th server in order to perform checks on key.enter events */\n    private _suggestions: string[] = [];\n\n    constructor(\n        private labelsWebService: LabelsWebService,\n        private labelsService: LabelsService\n    ) {\n        super();\n    }\n\n    /**\n     * The ngOnInit() method from the original directive is overriden\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, true); // An item was selected from the autocomplete => take the value\n        });\n        this.start();\n    }\n\n    /**\n     * If the inputs changes state, react accordingly\n     * @param changes\n     */\n    override ngOnChanges(changes: SimpleChanges) {\n        if (changes[\"labelsItems\"]) {\n            this.updatePlaceholder();\n        }\n\n        // Override start() by using init() instead, so that no double queries are generated and autocomplete dropdown is shown only on focus\n        if (changes[\"off\"] && !this.off) {\n            this.init();\n        }\n\n        // If labels category changes, we must remove the selected labels items and reinitialize the autocomplete\n        if (changes[\"public\"] && !changes[\"public\"].firstChange) {\n            const newInitLabels = [...changes[\"labelsItems\"].currentValue];\n            this.inputElement.blur();\n            /** Reset the input Value*/\n            this.setInputValue(\"\");\n            /** initialize the input needed specially for labels edit cases */\n            this.updatePlaceholder();\n            this.itemsUpdate.next(newInitLabels);\n        }\n    }\n\n    /**\n     * The getSuggests() method from the original directive is overriden to\n     * use the labelsService rather than suggest service.\n     */\n    protected override getSuggests() {\n        const value = this.getInputValue();\n\n        if (value) {\n            // parse\n            const labels = value.split(\";\");\n\n            // find label at caret location\n            const position = this.getInputPosition();\n            let length = 0;\n            let val:\n                | { value: string, start: number, length: number }\n                | undefined;\n            for (const label of labels) {\n                if (position >= length && position <= length + label.length) {\n                    val = {\n                        value: label,\n                        start: length,\n                        length: label.length,\n                    };\n                    break;\n                }\n                length += label.length + 1;\n            }\n\n            // Get suggestions from web service\n            if (val) {\n                this._getLabelsSuggestions(val.value);\n            }\n        } else {\n            if (!!this.labelsService.labelsAutoSuggestWildcard) {\n                this._getLabelsSuggestions(\n                    this.labelsService.labelsAutoSuggestWildcard\n                );\n            } else {\n                this.start();\n            }\n        }\n    }\n\n    private _getLabelsSuggestions(val: string) {\n        this.labelsWebService.list(val, this.public).subscribe(\n            (labels: Labels) => {\n                if (\n                    this.getState() === AutocompleteState.ACTIVE ||\n                    this.getState() === AutocompleteState.OPENED\n                ) {\n                    /** Eliminate suggestions that are already selected */\n                    labels.labels = labels.labels.filter(\n                        (label) =>\n                            !this.labelsItems.find(\n                                (item) => item.display === label\n                            )\n                    );\n\n                    /** update the local list of suggestions */\n                    this._suggestions = labels.labels;\n\n                    /** limit the suggestions to be displayed to 10  */\n                    labels.labels = labels.labels.slice(0, 10);\n\n                    this.dropdown.update(\n                        true,\n                        labels.labels.map((label) => ({\n                                display: label,\n                                category: \"\",\n                            }))\n                    );\n                }\n            },\n            () => {\n                this.dropdown.update(false);\n            },\n            () => {\n                if (\n                    this.dropdown.hasItems &&\n                    this.getState() === AutocompleteState.ACTIVE\n                ) {\n                    this.open(); // Switch from ACTIVE to OPENED (if not already)\n                } else if (\n                    !this.dropdown.hasItems &&\n                    this.getState() === AutocompleteState.OPENED\n                ) {\n                    // No data\n                    this.active(); // Switch from OPENED to ACTIVE (if not already)\n                }\n            }\n        );\n    }\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 labels items don't need to be searched\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.labelsItems.push(item);\n            this.updatePlaceholder();\n            this.itemsUpdate.next(this.labelsItems);\n            this.setInputValue(\"\");\n        }\n        return false;\n    }\n\n    /**\n     * The startOrActive() method from the original directive is overriden to\n     * immediately switch to ACTIVE if it is not the case\n     */\n    protected override startOrActive(): void {\n        if (\n            this.getState() !== AutocompleteState.ACTIVE &&\n            this.getState() !== AutocompleteState.OPENED\n        ) {\n            // Avoid flickering\n            this.start();\n            this.active();\n        }\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 labels items, enhance the enter key to support adding new labels.\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.labelsItems.pop();\n                    this.updatePlaceholder();\n                    this.itemsUpdate.next(this.labelsItems);\n                }\n            }\n            /** Allow the selection one of new labels that not exists in the list */\n            if (event.key === Keys.enter) {\n                this._manageSetAutocompleteItem();\n            }\n        }\n        return keydown;\n    }\n\n    /**\n     * Listens to focus events on the <input> host and overrides the parent focus events in order to launch the autocomplete\n     * If empty input :\n     * - display top relevent labels if the auto-suggest wildcard is configured\n     * - restart the autocomplete if no auto-suggest wildcard is found\n     * If not empty input :\n     * retrieve suggestions based on this input text\n     */\n    @HostListener(\"focus\") override focus() {\n        this.start();\n        this.active();\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(event: FocusEvent) {\n        this._manageSetAutocompleteItem();\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        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    /**\n     * Updates the <input>'s placeholder to avoid displaying something\n     * when there are labelsItems displayed to the left.\n     */\n    updatePlaceholder() {\n        this._placeholder = this.labelsItems.length > 0 ? \"\" : this.placeholder;\n    }\n\n    private _manageSetAutocompleteItem(): void {\n        /** Always consider if there is text in the <input> and that it is not yet added in the labelsItems  */\n        if (!!this.getInputValue() && this.getInputValue() !== \"\") {\n            if (this.allowNewLabels) {\n                /** When it is an add Labels action ==> check the privilege to create new label */\n                if (\n                    !this.public ||\n                    (this.public && this.allowManagePublicLabels)\n                ) {\n                    this.setAutocompleteItem({\n                        display: this.getInputValue(),\n                        category: \"\",\n                    });\n                }\n            } else {\n                /** For all other actions on the labels, check if the typed text equals an existing label in the _suggestions  */\n                if (this._suggestions.indexOf(this.getInputValue()) > -1) {\n                    this.setAutocompleteItem({\n                        display: this.getInputValue(),\n                        category: \"\",\n                    });\n                }\n            }\n        }\n    }\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\";\nimport {ValidationModule} from \"@sinequa/core/validation\";\nimport {UtilsModule} from \"@sinequa/components/utils\";\n\nimport {BsModalModule} from \"@sinequa/components/modal\";\n\nimport {BsAutocompleteModule} from \"@sinequa/components/autocomplete\";\n\nimport {LabelPipe} from \"./label.pipe\";\nimport {Labels} from \"./labels.component\";\nimport {ResultLabels} from \"./result-labels.component\";\nimport {LabelsAutocomplete} from \"./labels-autocomplete.directive\";\n\n@NgModule({\n    imports: [\n        FormsModule, ReactiveFormsModule,\n        CommonModule,\n\n        IntlModule,\n        ValidationModule,\n\n        UtilsModule,\n        BsModalModule,\n        BsAutocompleteModule,\n    ],\n    declarations: [\n        LabelPipe, Labels, ResultLabels, LabelsAutocomplete\n    ],\n    exports: [\n        LabelPipe, Labels, ResultLabels, LabelsAutocomplete\n    ],\n})\nexport class LabelsModule {\n}\n","import {\n    Component,\n    ElementRef,\n    EventEmitter,\n    Output,\n    Input,\n    OnChanges,\n    SimpleChanges,\n} from \"@angular/core\";\nimport { Keys } from \"@sinequa/core/base\";\nimport { AutocompleteItem } from \"@sinequa/components/autocomplete\";\n\n/**\n * Component containing a form and autocomplete to search\n * through the list labels according to a specific type (public/private) and select one(s) of them\n *\n * The component can be used as custom component in the Action\n * menu's modals.\n */\n\n@Component({\n    selector: \"sq-labels-autocomplete\",\n    templateUrl: \"./labels-autocomplete.component.html\",\n    styles: [\n        `\n            .sq-dropdown-form {\n                min-width: 13rem;\n                display: inline;\n            }\n            .disabled {\n                cursor: not-allowed;\n            }\n            :host ::ng-deep .sq-autocomplete-list {\n                width: 50% !important;\n            }\n            .clickable {\n                cursor: pointer;\n            }\n            .clickable:hover {\n                opacity: 85%;\n            }\n            .label-public {\n                background-color: #4fc3f7;\n                margin: 2px;\n            }\n            .label-private {\n                background-color: #7283a7;\n                margin: 2px;\n            }\n\n            :host div {\n                width: 100%;\n                display: flex;\n                flex-wrap: wrap;\n                align-items: center;\n                height: unset !important;\n            }\n            :host input {\n                border: none;\n                flex-grow: 1;\n                flex-basis: 100px;\n                min-width: 100px;\n            }\n            :host input:focus {\n                outline: none;\n            }\n            /* simulate the input focus on the parent control of the input*/\n            :host .form-control:focus-within {\n                color: rgb(33, 37, 41);\n                background-color: rgb(255, 255, 255);\n                box-shadow: rgba(13, 110, 253, 0.25) 0px 0px 0px 0.25rem;\n                border-color: rgb(134, 183, 254);\n                outline: 0px;\n            }\n        `,\n    ],\n    standalone: false\n})\nexport class BsLabelsAutocompleteComponent implements OnChanges {\n    /** Event synchronizing the list of selected labels and label's type in the parent component */\n    @Output() labelsUpdate = new EventEmitter<string[]>();\n\n    @Input() public: boolean; /** Whether labels are public/private */\n    @Input() disableAutocomplete: boolean = false /** Whether the autocomplete input is disabled or not */;\n    @Input() allowNewLabels: boolean; /** Whether enable adding new labels or not */\n    @Input() allowManagePublicLabels: boolean; /** Define the right of adding new labels */\n    @Input() initLabels: string[] = []; /** Initial labels to be displayed in the labelsAutocomplete input*/\n\n    labelsItems: AutocompleteItem[] = []; /** List of assigned labels to selected record(s) */\n\n    constructor(private elementRef: ElementRef) {}\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.public) {\n            this.labelsItems = [];\n        }\n        if (changes.initLabels) {\n            this.labelsItems = this.initLabels.map((label) => {\n                return {\n                    display: label,\n                    category: \"\",\n                };\n            });\n        }\n    }\n\n    removeItem(item: AutocompleteItem) {\n        this.labelsItems.splice(this.labelsItems.indexOf(item), 1);\n        this.labelsItems = [\n            ...this.labelsItems,\n        ]; /** Need to programmatically update this.labelsItems object in order to fire ngOnChanges hook in sqAutocompleteLabels */\n        this.labelsUpdate.next(this.labelsItems.map((item) => item.display));\n    }\n\n    onLabelsItemsChanged(labelsItems: AutocompleteItem[]) {\n        this.labelsItems = labelsItems; /** Need to Programmatically update this.labelsItems to catch updates happening in the sqAutocompleteLabels  */\n        this.labelsUpdate.next(labelsItems.map((item) => item.display));\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    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","<form name=\"labelsForm\" class=\"d-inline\">\n    <section class=\"sq-dropdown-form\">\n        <div class=\"form-control\">\n            <span\n                *ngFor=\"let item of labelsItems\"\n                class=\"badge rounded-pill align-self-center\"\n                [ngClass]=\"{'label-public': public, 'label-private': !public}\">\n                {{ item.display }}\n                <span class=\"fas fa-times-circle clickable\" (click)=\"removeItem(item)\"></span>\n            </span>\n            <input type=\"text\"\n                class=\"input-autocomplete flex-grow-1\"\n                name=\"labelName\"\n                spellcheck=\"false\"\n                autocomplete=\"off\"\n                sqAutocompleteLabels\n                [public]=\"public\"\n                [placeholder]=\"'msg#labels.selectLabel' | sqMessage\"\n                [dropdown]=\"dropdown\"\n                [allowNewLabels]=\"allowNewLabels\"\n                [allowManagePublicLabels]=\"allowManagePublicLabels\"\n                (keydown)=\"keydown($event)\"\n                (keypress)=\"keypress($event)\"\n                (itemsUpdate)=\"onLabelsItemsChanged($event)\"\n                [disabled]=\"disableAutocomplete\"\n                [off]=\"disableAutocomplete\"\n                [class.disabled]=\"disableAutocomplete\"\n                [labelsItems]=\"labelsItems\">\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</form>\n\n\n","import {\n    Component,\n    OnInit,\n    OnDestroy,\n    Inject,\n    ChangeDetectorRef,\n} from \"@angular/core\";\nimport {\n    UntypedFormBuilder,\n    UntypedFormGroup,\n    UntypedFormControl,\n    Validators,\n} from \"@angular/forms\";\nimport { Subscription } from \"rxjs\";\nimport {\n    ModalButton,\n    ModalResult,\n    MODAL_MODEL,\n    ModalRef,\n} from \"@sinequa/core/modal\";\nimport { Utils } from \"@sinequa/core/base\";\nimport { ModalProperties, LabelsService } from \"../../labels.service\";\n\n@Component({\n    selector: \"sq-rename-label\",\n    templateUrl: \"./rename-label.html\",\n    styles: [\n        `\n            .clickable {\n                cursor: pointer;\n            }\n            .clickable:hover {\n                opacity: 85%;\n            }\n        `,\n    ],\n    standalone: false\n})\nexport class BsRenameLabel implements OnInit, OnDestroy {\n    public labelControl: UntypedFormControl;\n    public form: UntypedFormGroup;\n    public formChanges: Subscription;\n    public buttons: ModalButton[];\n    public isProcessing: boolean = false;\n\n    constructor(\n        @Inject(MODAL_MODEL)\n        public model: {\n            oldValues: string[],\n            newValue: string,\n            properties: ModalProperties\n        },\n        private formBuilder: UntypedFormBuilder,\n        private labelsService: LabelsService,\n        private changeDetectorRef: ChangeDetectorRef,\n        private modalRef: ModalRef\n    ) {}\n\n    ngOnInit() {\n        this.labelControl = new UntypedFormControl(\n            this.model.newValue,\n            Validators.required\n        );\n        this.form = this.formBuilder.group({\n            label: this.labelControl,\n        });\n        this.formChanges = Utils.subscribe(this.form.valueChanges, () => {\n            this.model.newValue = this.labelControl.value;\n        });\n\n        this.buttons = [\n            new ModalButton({\n                text: \"msg#renameLabel.btnRename\",\n                primary: true,\n                validation: this.form,\n                result: ModalResult.Custom,\n                anchor: true,\n                action: () => {\n                    const observable = this.labelsService.renameLabels(\n                        this.model.oldValues,\n                        this.model.newValue,\n                        this.model.properties.public\n                    );\n                    if (observable) {\n                        this.isProcessing = true;\n                        this.changeDetectorRef.markForCheck();\n                        Utils.subscribe(\n                            observable,\n                            () => {},\n                            (error) => {\n                                this.modalRef.close(error);\n                            },\n                            () => {\n                                this.isProcessing = false;\n                                this.modalRef.close(ModalResult.OK);\n                            }\n                        );\n                    }\n                },\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel,\n            }),\n        ];\n    }\n\n    ngOnDestroy() {\n        this.formChanges?.unsubscribe();\n    }\n\n    updateLabelsNature(nature: boolean) {\n        this.model.properties.public = nature;\n    }\n\n    onLabelsChanged(values: string[]) {\n        this.model.oldValues = values;\n    }\n}\n","<form name=\"renameLabel\" novalidate [formGroup]=\"form\">\n    <sq-modal [title]=\"'msg#renameLabel.title'\" [buttons]=\"buttons\" [isProcessingState]=\"isProcessing\">\n        <div class=\"mb-3 sq-form-group\">\n            <div class=\"alert alert-danger\" role=\"alert\">\n                {{'msg#renameLabel.alertText' | sqMessage}}\n            </div>\n            <section class=\"mb-3\">\n                <div *ngFor=\"let item of model.properties.radioButtons\" class=\"form-check\">\n                    <input type=\"radio\" class=\"form-check-input\" id=\"{{item.id}}\" name=\"nature\" value=\"{{item.value}}\"\n                        [checked]=\"item.checked\" [disabled]=\"item.disabled\" (click)=\"updateLabelsNature(item.value)\" [ngClass]=\"{'disabled': item.disabled, 'clickable': !item.disabled}\">\n                    <label role=\"button\" class=\"form-check-label\" for=\"{{item.id}}\">{{ item.name | sqMessage }}</label>\n                </div>\n            </section>\n            \n            <section class=\"mb-3\">\n                <label class=\"form-label fw-bold\" for=\"label\">{{'msg#renameLabel.oldLabels' | sqMessage}}</label>\n                <sq-labels-autocomplete\n                    (labelsUpdate)=\"onLabelsChanged($event)\"\n                    [public]=\"model.properties.public\"\n                    [disableAutocomplete]=\"model.properties.disableAutocomplete\"\n                    [allowNewLabels]=\"model.properties.allowNewLabels\"\n                    [allowManagePublicLabels]=\"model.properties.allowManagePublicLabels\">\n                </sq-labels-autocomplete>\n            </section>\n            \n            <section>\n                <label class=\"form-label fw-bold\" for=\"label\">{{'msg#renameLabel.newLabel' | sqMessage}}</label>\n                <input\n                    [sqValidation]=\"form\"\n                    type=\"text\"\n                    class=\"form-control\"\n                    id=\"label\"\n                    formControlName=\"label\"\n                    autocomplete=\"off\"\n                    spellcheck=\"off\"\n                    placeholder=\"{{'msg#renameLabel.newLabel' | sqMessage}}\">\n            </section>\n        </div>\n    </sq-modal>\n</form>\n","import {\n    Component,\n    OnInit,\n    Input,\n    OnChanges,\n    SimpleChanges,\n    OnDestroy,\n} from \"@angular/core\";\nimport { Action } from \"@sinequa/components/action\";\nimport { LoginService } from \"@sinequa/core/login\";\nimport { LabelsService } from \"../../labels.service\";\nimport { Results } from \"@sinequa/core/web-services\";\nimport { Subscription } from \"rxjs\";\n\n@Component({\n    selector: \"sq-labels-menu\",\n    templateUrl: \"./labels-menu.component.html\",\n    standalone: false\n})\nexport class BsLabelsMenuComponent implements OnInit, OnChanges, OnDestroy {\n    @Input() results: Results;\n    @Input() icon: string = \"fas fa-tags\";\n    @Input() autoAdjust: boolean = true;\n    @Input() autoAdjustBreakpoint: string = \"xl\";\n    @Input() collapseBreakpoint: string = \"sm\";\n    @Input() size: string;\n\n    menu: Action | undefined;\n\n    // Labels  actions\n    renameAction: Action;\n    deleteAction: Action;\n    bulkAddAction: Action;\n    bulkDeleteAction: Action;\n\n    private _loginServiceSubscription: Subscription;\n\n    constructor(\n        public loginService: LoginService,\n        public labelsService: LabelsService\n    ) {\n        this.renameAction = new Action({\n            text: \"msg#renameLabel.title\",\n            action: () => {\n                this.labelsService.renameLabelModal();\n            },\n        });\n\n        this.deleteAction = new Action({\n            text: \"msg#deleteLabel.title\",\n            action: () => {\n                this.labelsService.deleteLabelModal();\n            },\n        });\n\n        this.bulkAddAction = new Action({\n            text: \"msg#bulkAddLabel.title\",\n            action: () => {\n                this.labelsService.bulkAddLabelModal();\n            },\n        });\n\n        this.bulkDeleteAction = new Action({\n            text: \"msg#bulkRemoveLabel.title\",\n            action: () => {\n                this.labelsService.bulkRemoveLabelModal();\n            },\n        });\n    }\n\n    ngOnInit() {\n        this._loginServiceSubscription = this.loginService.events.subscribe(\n            (event) => {\n                if (event.type === \"session-changed\") {\n                    this.updateMenu();\n                }\n            }\n        );\n    }\n\n    ngOnDestroy() {\n        if (this._loginServiceSubscription) {\n            this._loginServiceSubscription.unsubscribe();\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.results) {\n            this.updateMenu();\n        }\n    }\n\n    updateMenu() {\n        if (!this.loginService.complete) {\n            this.menu = undefined;\n            return;\n        }\n\n        if (\n            !this.labelsService.publicLabelsField &&\n            !this.labelsService.privateLabelsField\n        ) {\n            this.menu = undefined;\n            return;\n        }\n\n        const labelsActions: Action[] = [this.renameAction, this.deleteAction];\n\n        /** Allow Bulk actions only if there are some results */\n        if (!!this.results && !!this.results.records) {\n            labelsActions.push(this.bulkAddAction);\n            labelsActions.push(this.bulkDeleteAction);\n        }\n\n        this.menu = new Action({\n            icon: this.icon,\n            text: \"msg#labels.labels\",\n            children: labelsActions,\n        });\n    }\n}\n","<li *ngIf=\"!!menu && !menu.hidden\" class=\"nav-item dropdown\" \n    [sq-action-item]=\"{item: menu, size: size, autoAdjust: autoAdjust, autoAdjustBreakpoint: autoAdjustBreakpoint, inMenu: true, rightAligned: true}\"\n    [collapseBreakpoint]=\"collapseBreakpoint\"\n></li>","import { Component, OnInit, Inject, ChangeDetectorRef } from \"@angular/core\";\nimport {\n    ModalButton,\n    ModalResult,\n    MODAL_MODEL,\n    ModalRef,\n} from \"@sinequa/core/modal\";\nimport {\n    UpdateLabelsAction,\n    ModalProperties,\n    LabelsService,\n} from \"../../labels.service\";\nimport { Utils } from \"@sinequa/core/base\";\n\n@Component({\n    selector: \"sq-delete-label\",\n    templateUrl: \"./delete-label.html\",\n    styles: [\n        `\n            .clickable {\n                cursor: pointer;\n            }\n            .clickable:hover {\n                opacity: 85%;\n            }\n        `,\n    ],\n    standalone: false\n})\nexport class BsDeleteLabel implements OnInit {\n    public buttons: ModalButton[];\n    public title: string;\n    public alert: string;\n    public btnText: string;\n    public isProcessing: boolean = false;\n\n    private _action: () => void;\n\n    constructor(\n        @Inject(MODAL_MODEL)\n        public model: {\n            values: string[],\n            properties: ModalProperties\n        },\n        private labelsService: LabelsService,\n        private changeDetectorRef: ChangeDetectorRef,\n        private modalRef: ModalRef\n    ) {}\n\n    ngOnInit() {\n        switch (this.model.properties.action) {\n            case UpdateLabelsAction.delete:\n                this.title = \"msg#deleteLabel.title\";\n                this.btnText = \"msg#deleteLabel.btnDelete\";\n                this.alert = \"msg#deleteLabel.alertText\";\n                this._action = () => {\n                    const observable = this.labelsService.deleteLabels(\n                        this.model.values,\n                        this.model.properties.public\n                    );\n                    if (observable) {\n                        this.isProcessing = true;\n                        this.changeDetectorRef.markForCheck();\n                        Utils.subscribe(\n                            observable,\n                            () => {},\n                            (error) => {\n                                this.modalRef.close(error);\n                            },\n                            () => {\n                                this.isProcessing = false;\n                                this.modalRef.close(ModalResult.OK);\n                            }\n                        );\n                    }\n                };\n                break;\n            case UpdateLabelsAction.bulkRemove:\n                this.title = \"msg#bulkRemoveLabel.title\";\n                this.btnText = \"msg#bulkRemoveLabel.btnBulkRemove\";\n                this.alert = \"msg#bulkRemoveLabel.alertText\";\n                this._action = () => {\n                    const observable = this.labelsService.bulkRemoveLabels(\n                        this.model.values,\n                        this.model.properties.public\n                    );\n                    if (observable) {\n                        this.isProcessing = true;\n                        this.changeDetectorRef.markForCheck();\n                        Utils.subscribe(\n                            observable,\n                            () => {},\n                            (error) => {\n                                this.modalRef.close(error);\n                            },\n                            () => {\n                                this.isProcessing = false;\n                                this.modalRef.close(ModalResult.OK);\n                            }\n                        );\n                    }\n                };\n                break;\n            default:\n                this.title = \"\";\n                this.btnText = \"\";\n                this.alert = \"\";\n                break;\n        }\n\n        this.buttons = [\n            new ModalButton({\n                text: this.btnText,\n                primary: true,\n                result: ModalResult.Custom,\n                anchor: true,\n                action: this._action,\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel,\n            }),\n        ];\n    }\n\n    updateLabelsNature(nature: boolean) {\n        this.model.properties.public = nature;\n    }\n\n    onLabelsChanged(values: string[]) {\n        this.model.values = values;\n    }\n}\n","<form name=\"deleteLabel\" novalidate>\n    <sq-modal [title]=\"title\" [buttons]=\"buttons\" [isProcessingState]=\"isProcessing\">\n        <div class=\"mb-3 sq-form-group\">\n            <div class=\"alert\" [ngClass]=\"{'alert-danger': model.properties.action === 3, 'alert-warning': model.properties.action === 5}\" role=\"alert\">\n                {{alert | sqMessage}}\n            </div>\n            <section class=\"mb-3\">\n                <div *ngFor=\"let item of model.properties.radioButtons\" class=\"form-check\">\n                    <input type=\"radio\" class=\"form-check-input\" id=\"{{item.id}}\" name=\"nature\" value=\"{{item.value}}\"\n                        [checked]=\"item.checked\" [disabled]=\"item.disabled\" (click)=\"updateLabelsNature(item.value)\" [ngClass]=\"{'disabled': item.disabled, 'clickable': !item.disabled}\">\n                    <label role=\"button\" class=\"form-check-label\" for=\"{{item.id}}\">{{ item.name | sqMessage }}</label>\n                </div>\n            </section>\n            <label class=\"form-label fw-bold\" for=\"label\">{{'msg#labels.labels' | sqMessage}}</label>\n            <sq-labels-autocomplete\n                (labelsUpdate)=\"onLabelsChanged($event)\"\n                [public]=\"model.properties.public\"\n                [disableAutocomplete]=\"model.properties.disableAutocomplete\"\n                [allowNewLabels]=\"model.properties.allowNewLabels\"\n                [allowManagePublicLabels]=\"model.properties.allowManagePublicLabels\">\n            </sq-labels-autocomplete>\n        </div>\n    </sq-modal>\n</form>\n","import { Component, OnInit, Inject, ChangeDetectorRef } from \"@angular/core\";\nimport {\n    ModalButton,\n    ModalResult,\n    MODAL_MODEL,\n    ModalRef,\n} from \"@sinequa/core/modal\";\nimport { ModalProperties, LabelsService } from \"../../labels.service\";\nimport { Utils } from \"@sinequa/core/base\";\n\n@Component({\n    selector: \"sq-add-label\",\n    templateUrl: \"./add-label.html\",\n    styles: [\n        `\n            .clickable {\n                cursor: pointer;\n            }\n            .clickable:hover {\n                opacity: 85%;\n            }\n        `,\n    ],\n    standalone: false\n})\nexport class BsAddLabel implements OnInit {\n    public buttons: ModalButton[];\n    public isProcessing: boolean = false;\n\n    constructor(\n        @Inject(MODAL_MODEL)\n        public model: {\n            values: string[],\n            properties: ModalProperties\n        },\n        private labelsService: LabelsService,\n        private changeDetectorRef: ChangeDetectorRef,\n        private modalRef: ModalRef\n    ) {}\n\n    ngOnInit() {\n        this.buttons = [\n            new ModalButton({\n                text: \"msg#bulkAddLabel.btnBulkAdd\",\n                primary: true,\n                result: ModalResult.Custom,\n                anchor: true,\n                action: () => {\n                    const observable = this.labelsService.bulkAddLabels(\n                        this.model.values,\n                        this.model.properties.public\n                    );\n                    if (observable) {\n                        this.isProcessing = true;\n                        this.changeDetectorRef.markForCheck();\n                        Utils.subscribe(\n                            observable,\n                            () => {},\n                            (error) => {\n                                this.modalRef.close(error);\n                            },\n                            () => {\n                                this.isProcessing = false;\n                                this.modalRef.close(ModalResult.OK);\n                            }\n                        );\n                    }\n                },\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel,\n            }),\n        ];\n    }\n\n    updateLabelsNature(nature: boolean) {\n        this.model.properties.public = nature;\n    }\n\n    onLabelsChanged(values: string[]) {\n        this.model.values = values;\n    }\n}\n","<form name=\"addLabel\" novalidate>\n    <sq-modal [title]=\"'msg#bulkAddLabel.title'\" [buttons]=\"buttons\" [isProcessingState]=\"isProcessing\">\n        <div class=\"mb-3 sq-form-group\">\n            <div class=\"alert alert-warning\" role=\"alert\">\n                {{'msg#bulkAddLabel.alertText' | sqMessage}}\n            </div>\n            <div *ngIf=\"model.properties.allowManagePublicLabels || !model.properties.public \" class=\"alert alert-info\" role=\"alert\">\n                {{'msg#bulkAddLabel.infoText' | sqMessage}}\n            </div>\n            <section class=\"mb-3\">\n                <div *ngFor=\"let item of model.properties.radioButtons\" class=\"form-check\">\n                    <input type=\"radio\" class=\"form-check-input\" id=\"{{item.id}}\" name=\"nature\" value=\"{{item.value}}\"\n                        [checked]=\"item.checked\" [disabled]=\"item.disabled\" (click)=\"updateLabelsNature(item.value)\" [ngClass]=\"{'disabled': item.disabled, 'clickable': !item.disabled}\">\n                    <label class=\"form-check-label\" for=\"{{item.id}}\">{{ item.name | sqMessage }}</label>\n                </div>\n            </section>\n            <label class=\"form-label fw-bold\" for=\"label\">{{'msg#labels.labels' | sqMessage}}</label>\n            <sq-labels-autocomplete\n                (labelsUpdate)=\"onLabelsChanged($event)\"\n                [public]=\"model.properties.public\"\n                [disableAutocomplete]=\"model.properties.disableAutocomplete\"\n                [allowNewLabels]=\"model.properties.allowNewLabels\"\n                [allowManagePublicLabels]=\"model.properties.allowManagePublicLabels\">\n            </sq-labels-autocomplete>\n        </div>\n    </sq-modal>\n</form>\n","import { Component, OnInit, Inject, ChangeDetectorRef } from \"@angular/core\";\nimport {\n    ModalButton,\n    ModalResult,\n    MODAL_MODEL,\n    ModalRef,\n} from \"@sinequa/core/modal\";\nimport { ModalProperties, LabelsService } from \"../../labels.service\";\nimport { SelectionService } from \"@sinequa/components/selection\";\nimport { AppService } from \"@sinequa/core/app-utils\";\nimport { Record } from \"@sinequa/core/web-services\";\nimport { SearchService } from \"@sinequa/components/search\";\nimport { Utils } from \"@sinequa/core/base\";\nimport { NotificationsService } from \"@sinequa/core/notification\";\n\n@Component({\n    selector: \"sq-edit-label\",\n    templateUrl: \"./edit-label.html\",\n    styles: [\n        `\n            .clickable {\n                cursor: pointer;\n            }\n            .clickable:hover {\n                opacity: 85%;\n            }\n        `,\n    ],\n    standalone: false\n})\nexport class BsEditLabel implements OnInit {\n    public selectedRecordsIds: string[];\n    public buttons: ModalButton[];\n    /** Initial labels list assigned to a record */\n    public initialLabels: string[] = [];\n    public record: Record | undefined;\n    public isProcessing: boolean = false;\n\n    constructor(\n        @Inject(MODAL_MODEL)\n        public model: {\n            valuesToBeAdded: string[],\n            valuesToBeRemoved: string[],\n            properties: ModalProperties\n        },\n        private appService: AppService,\n        private selectionService: SelectionService,\n        private labelsService: LabelsService,\n        private searchService: SearchService,\n        private notificationService: NotificationsService,\n        private changeDetectorRef: ChangeDetectorRef,\n        private modalRef: ModalRef\n    ) {}\n\n    ngOnInit() {\n        this.selectedRecordsIds = !!this.selectionService.getSelectedIds()\n            ? this.selectionService.getSelectedIds()\n            : [];\n        if (this.selectedRecordsIds.length === 1) {\n            this.record = this.searchService.getRecordFromId(\n                this.selectedRecordsIds[0]\n            );\n            this.initialLabels = this._getInitialRecordLabels();\n        }\n        this.buttons = [\n            new ModalButton({\n                text: \"msg#editLabel.btnEdit\",\n                primary: true,\n                result: ModalResult.Custom,\n                anchor: true,\n                action: () => {\n                    const observable = this.labelsService.addLabels(\n                        this.model.valuesToBeAdded,\n                        this.selectionService.getSelectedIds(),\n                        this.model.properties.public\n                    );\n                    if (observable) {\n                        this.isProcessing = true;\n                        this.changeDetectorRef.markForCheck();\n                        Utils.subscribe(\n                            observable,\n                            () => {},\n                            (error) => {\n                                this.notificationService.error(\n                                    \"msg#editLabel.errorFeedback\"\n                                );\n                                this.modalRef.close(error);\n                            },\n                            () => {\n                                this.labelsService\n                                    .removeLabels(\n                                        this.model.valuesToBeRemoved,\n                                        this.selectionService.getSelectedIds(),\n                                        this.model.properties.public\n                                    )\n                                    .subscribe(\n                                        () => {},\n                                        (error) => {\n                                            this.notificationService.error(\n                                                \"msg#editLabel.errorFeedback\"\n                                            );\n                                            this.modalRef.close(error);\n                                        },\n                                        () => {\n                                            this.isProcessing = false;\n                                            this.modalRef.close(ModalResult.OK);\n                                            this.notificationService.success(\n                                                \"msg#editLabel.successFeedback\"\n                                            );\n                                            this.searchService.search(); /** Update the display immediately in the components and facets*/\n                                        }\n                                    );\n                            }\n                        );\n                    }\n                },\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel,\n            }),\n        ];\n    }\n\n    updateLabelsNature(nature: boolean) {\n        this.model.properties.public = nature;\n        this.model.valuesToBeRemoved = [];\n        this.model.valuesToBeAdded = [];\n        if (this.selectedRecordsIds.length === 1) {\n            this.initialLabels = this._getInitialRecordLabels(); /** update initial labels */\n        }\n    }\n\n    onLabelsChanged(values: string[]) {\n        if (!!this.initialLabels) {\n            this.model.valuesToBeAdded = values.filter(\n                (value) => !this.initialLabels.find((label) => label === value)\n            );\n            this.model.valuesToBeRemoved = this.initialLabels.filter(\n                (label) => !values.find((value) => value === label)\n            );\n        } else {\n            this.model.valuesToBeAdded = values;\n            this.model.valuesToBeRemoved = [];\n        }\n    }\n\n    onLabelsToBeAddedChanged(values: string[]) {\n        this.model.valuesToBeAdded = values;\n    }\n\n    onLabelsToBeRemovedChanged(values: string[]) {\n        this.model.valuesToBeRemoved = values;\n    }\n\n    /**\n     * Return the list of labels already assigned to the selected record\n     */\n    private _getInitialRecordLabels(): string[] {\n        if (!!this.record) {\n            const field = this.model.properties.public\n                ? this.labelsService.publicLabelsField\n                : this.labelsService.privateLabelsField;\n            const labelsField = this.appService.resolveColumnAlias(field);\n            return this.record[labelsField] || [];\n        } else {\n            return [];\n        }\n    }\n}\n","<form name=\"editLabel\" novalidate>\n    <sq-modal [title]=\"'msg#editLabel.title'\" [buttons]=\"buttons\" [isProcessingState]=\"isProcessing\">\n        <div class=\"mb-3 sq-form-group\">\n            <div class=\"alert alert-warning\" role=\"alert\">\n                {{'msg#editLabel.alertText' | sqMessage}}\n            </div>\n            <div *ngIf=\"model.properties.allowManagePublicLabels || !model.properties.public \" class=\"alert alert-info\" role=\"alert\">\n                {{'msg#editLabel.infoText' | sqMessage}}\n            </div>\n            <section class=\"d-flex gap-3 mb-3\">\n                <div *ngFor=\"let item of model.properties.radioButtons\" class=\"form-check\">\n                    <input type=\"radio\" class=\"form-check-input\" id=\"{{item.id}}\" name=\"nature\" value=\"{{item.value}}\"\n                        [checked]=\"item.checked\" [disabled]=\"item.disabled\" (click)=\"updateLabelsNature(item.value)\" [ngClass]=\"{'disabled': item.disabled, 'clickable': !item.disabled}\">\n                    <label role=\"button\" class=\"form-check-label\" for=\"{{item.id}}\">{{ item.name | sqMessage }}</label>\n                </div>\n            </section>\n\n            <section *ngIf=\"record\">\n                <label class=\"form-label fw-bold\" for=\"label\">{{'msg#labels.labels' | sqMessage}}</label>\n                <sq-labels-autocomplete\n                    (labelsUpdate)=\"onLabelsChanged($event)\"\n                    [public]=\"model.properties.public\"\n                    [disableAutocomplete]=\"model.properties.disableAutocomplete\"\n                    [allowNewLabels]=\"model.properties.allowNewLabels\"\n                    [allowManagePublicLabels]=\"model.properties.allowManagePublicLabels\"\n                    [initLabels]=\"initialLabels\">\n                </sq-labels-autocomplete>\n            </section>\n\n            <section *ngIf=\"!record\">\n                <label class=\"form-label fw-bold\" for=\"label\">{{'msg#editLabel.labelsToBeAdded' | sqMessage}}</label>\n                <sq-labels-autocomplete\n                    (labelsUpdate)=\"onLabelsToBeAddedChanged($event)\"\n                    [public]=\"model.properties.public\"\n                    [disableAutocomplete]=\"model.properties.disableAutocomplete\"\n                    [allowNewLabels]=\"model.properties.allowNewLabels\"\n                    [allowManagePublicLabels]=\"model.properties.allowManagePublicLabels\">\n                </sq-labels-autocomplete>\n                <label class=\"form-label fw-bold\" for=\"label\">{{'msg#editLabel.labelsToBeRemoved' | sqMessage}}</label>\n                <sq-labels-autocomplete\n                    (labelsUpdate)=\"onLabelsToBeRemovedChanged($event)\"\n                    [public]=\"model.properties.public\"\n                    [disableAutocomplete]=\"model.properties.disableAutocomplete\"\n                    [allowNewLabels]=\"model.properties.allowNewLabels\"\n                    [allowManagePublicLabels]=\"model.properties.allowManagePublicLabels\">\n                </sq-labels-autocomplete>\n            </section>\n\n        </div>\n    </sq-modal>\n</form>\n","import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\n\nimport {IntlModule} from \"@sinequa/core/intl\";\nimport {ValidationModule} from \"@sinequa/core/validation\";\n\nimport {UtilsModule} from \"@sinequa/components/utils\";\nimport {BsSelectionModule} from \"@sinequa/components/selection\";\nimport {BsModalModule} from \"@sinequa/components/modal\";\nimport {BsActionModule} from \"@sinequa/components/action\";\nimport {BsAutocompleteModule} from \"@sinequa/components/autocomplete\";\nimport {LabelsModule} from \"../labels.module\";\n\nimport {BsRenameLabel} from \"./rename-label/rename-label\";\nimport {BsLabelsMenuComponent} from \"./labels-menu/labels-menu.component\";\n\nimport {LABELS_COMPONENTS, LabelsComponents} from \"../labels.service\";\nimport { BsDeleteLabel } from './delete-label/delete-label';\nimport { BsAddLabel } from './add-label/add-label';\nimport { BsLabelsAutocompleteComponent } from './labels-autocomplete/labels-autocomplete.component';\nimport { BsEditLabel } from './edit-label/edit-label';\n\nexport const defaultLabelComponents: LabelsComponents = {\n    labelsAutocompleteComponent: BsLabelsAutocompleteComponent,\n    renameModal: BsRenameLabel,\n    deleteModal: BsDeleteLabel,\n    addModal: BsAddLabel,\n    editModal: BsEditLabel\n};\n\n@NgModule({\n    imports: [\n        FormsModule, ReactiveFormsModule,\n        CommonModule,\n\n        IntlModule,\n        ValidationModule,\n\n        UtilsModule,\n        BsSelectionModule,\n        BsModalModule,\n        BsAutocompleteModule,\n        BsActionModule,\n        LabelsModule\n    ],\n    declarations: [\n        BsLabelsAutocompleteComponent,\n        BsRenameLabel,\n        BsLabelsMenuComponent,\n        BsDeleteLabel,\n        BsAddLabel,\n        BsEditLabel\n    ],\n    exports: [\n        LabelsModule,\n        BsLabelsAutocompleteComponent,\n        BsRenameLabel,\n        BsLabelsMenuComponent,\n        BsDeleteLabel,\n        BsAddLabel,\n        BsEditLabel\n    ],\n    providers: [\n        {provide: LABELS_COMPONENTS, useValue: defaultLabelComponents},\n    ]\n})\nexport class BsLabelsModule {\n}\n","export default {\n    \"labels\": {\n        \"labels\": \"Labels\",\n        \"publicLabels\": \"Public Labels\",\n        \"privateLabels\": \"Private Labels\",\n        \"public\": \"Public\",\n        \"private\": \"Private\",\n        \"selectLabel\": \"Select label(s)\",\n        \"deleteLabelAreYouSure\": \"Are you sure you want to remove the label: {name}?\",\n        \"bulkAddLabelAreYouSure\": \"Are you sure you want to bulk add the label: {name} to the results of the current query?\",\n        \"bulkRemoveLabelAreYouSure\": \"Are you sure you want to bulk remove the label: {name} to the results of the current query?\",\n        \"addPublicLabelText\": \"+\",\n        \"removePublicLabelText\": \"×\",\n        \"addPublicLabelTitle\": \"Add public label\",\n        \"selectPublicLabelTitle\": \"Select public label\",\n        \"removePublicLabelTitle\": \"Remove public label\",\n        \"addPrivateLabelText\": \"+\",\n        \"removePrivateLabelText\": \"×\",\n        \"addPrivateLabelTitle\": \"Add private label\",\n        \"selectPrivateLabelTitle\": \"Select private label\",\n        \"removePrivateLabelTitle\": \"Remove private label\"\n    },\n\n    \"renameLabel\": {\n        \"title\": \"Rename Label(s) globally\",\n        \"btnRename\": \"Rename\",\n        \"newLabel\": \"New Label\",\n        \"oldLabels\": \"Old label(s)\",\n        \"alertText\": \"This action renames the label(s) in the index and is irreversible\",\n        \"successFeedback\": \"Label(s) renamed in the index\",\n        \"errorFeedback\": \"An error occurred. Request failed\"\n    },\n\n    \"deleteLabel\": {\n        \"title\": \"Delete label(s) globally\",\n        \"btnDelete\": \"Delete\",\n        \"alertText\": \"This action deletes the selected label(s) from the index and is irreversible\",\n        \"successFeedback\": \"Label(s) deleted from the index\",\n        \"errorFeedback\": \"An error occurred. Request failed\"\n    },\n\n    \"bulkRemoveLabel\": {\n        \"title\": \"Remove label(s) from the current results\",\n        \"btnBulkRemove\": \"Remove\",\n        \"alertText\": \"This action removes the selected label(s) from all results reported by the engine (not only from the first page)\",\n        \"successFeedback\": \"Label(s) removed from all results reported by the engine\",\n        \"errorFeedback\": \"An error occurred. Request failed\"\n    },\n\n    \"bulkAddLabel\": {\n        \"title\": \"Add label(s) to the current results\",\n        \"btnBulkAdd\": \"Add\",\n        \"alertText\": \"This action assigns the selected label(s) to all results reported by the engine (not only to the first page)\",\n        \"infoText\": \"Press 'Enter' to add a new label that does not exist in the suggestions\",\n        \"successFeedback\": \"Label(s) assigned to all results reported by the engine\",\n        \"errorFeedback\": \"An error occurred. Request failed\"\n    },\n\n    \"editLabel\": {\n        \"title\": \"Edit the label(s) of the selected result(s)\",\n        \"btnEdit\": \"Save\",\n        \"alertText\": \"This action edits the label(s) of the selected result(s)\",\n        \"infoText\": \"Press 'Enter' to add a new label that does not exist in the suggestions\",\n        \"labelsToBeRemoved\": \"Label(s) to be removed\",\n        \"labelsToBeAdded\": \"Label(s) to be added\",\n        \"successFeedback\": \"Label(s) of the selected result(s) edited\",\n        \"errorFeedback\": \"An error occurred. Request failed\"\n    }\n\n};\n","export default {\n    \"labels\": {\n        \"labels\": \"Libellés\",\n        \"publicLabels\": \"Libellés publics\",\n        \"privateLabels\": \"Libellés privés\",\n        \"public\": \"Public\",\n        \"private\": \"Privé\",\n        \"selectLabel\": \"Sélectionner le(s) libellé(s)\",\n        \"deleteLabelAreYouSure\": \"Etes-vous sûr de vouloir effacer le libellé: {name} ?\",\n        \"bulkAddLabelAreYouSure\": \"Etes-vous sûr de vouloir ajouter en lot le libellé: {name} aux résultats de la requête courante ? \",\n        \"bulkRemoveLabelAreYouSure\": \"Etes-vous sûr de vouloir enlever en lot le libellé: {name} aux résultats de la requête courante ?\",\n        \"addPublicLabelText\": \"+\",\n        \"removePublicLabelText\": \"×\",\n        \"addPublicLabelTitle\": \"Ajouter un libellé public\",\n        \"selectPublicLabelTitle\": \"Sélectionner le libellé public\",\n        \"removePublicLabelTitle\": \"Supprimer le libellé public\",\n        \"addPrivateLabelText\": \"+\",\n        \"removePrivateLabelText\": \"×\",\n        \"addPrivateLabelTitle\": \"Ajouter un libellé privé\",\n        \"selectPrivateLabelTitle\": \"Sélectionner le libellé privé\",\n        \"removePrivateLabelTitle\": \"Supprimer le libellé privé\"\n    },\n\n    \"renameLabel\": {\n        \"title\": \"Renommer le(s) libellé(s) globalement\",\n        \"btnRename\": \"Renommer\",\n        \"newLabel\": \"Nouveau Libellé\",\n        \"oldLabels\": \"Ancien(s) libellé(s)\",\n        \"alertText\": \"Cette action renomme le(s) libellé(s) sélectionné(s) dans l'index et est irréversible\",\n        \"successFeedback\": \"Libellé(s) renommé(s) dans l'index\",\n        \"errorFeedback\": \"Une erreur s'est produite. Requête non aboutie\"\n    },\n\n    \"deleteLabel\": {\n        \"title\": \"Supprimer le(s) libellé(s) globalement\",\n        \"btnDelete\": \"Supprimer\",\n        \"alertText\": \"Cette action supprime le(s) libellé(s) sélectionné(s) de l'index et est irréversible\",\n        \"successFeedback\": \"Libellé(s) supprimé(s) de l'index\",\n        \"errorFeedback\": \"Une erreur s'est produite. Requête non aboutie\"\n    },\n\n    \"bulkRemoveLabel\": {\n        \"title\": \"Enlever le(s) libellé des résultats courants\",\n        \"btnBulkRemove\": \"Enlever\",\n        \"alertText\": \"Cette action enlève le(s) libellé(s) sélectionné(s) de tous les résultats remontés par le moteur (pas seulement de la première page)\",\n        \"successFeedback\": \"Libellé(s) enlevé(s) de tous les résultats remontés par le moteur\",\n        \"errorFeedback\": \"Une erreur s'est produite. Requête non aboutie\"\n    },\n\n    \"bulkAddLabel\": {\n        \"title\": \"Ajouter le(s) libellé(s) aux résultats courants\",\n        \"btnBulkAdd\": \"Ajouter\",\n        \"alertText\": \"Cette action ajoute le(s) libellé(s) sélectionné(s) à tous les résultats remontés par le moteur (pas seulement à la première page)\",\n        \"infoText\": \"Appuyez sur 'Entrée' pour ajouter un nouveau libellé qui n'existe pas dans les suggestions\",\n        \"successFeedback\": \"Libellé(s) ajouté(s) à tous les résultats remontés par le moteur\",\n        \"errorFeedback\": \"Une erreur s'est produite. Requête non aboutie\"\n    },\n\n    \"editLabel\": {\n        \"title\": \"Editer le(s) libellé(s) de(s) résultat(s) sélectionné(s)\",\n        \"btnEdit\": \"Sauvegarder\",\n        \"alertText\": \"Cette action édite le(s) libellé(s) de(s) résultat(s) sélectionné(s)\",\n        \"infoText\": \"Appuyez sur 'Entrée' pour ajouter un nouveau libellé qui n'existe pas dans les suggestions\",\n        \"labelsToBeRemoved\": \"Libellé(s) à enlever\",\n        \"labelsToBeAdded\": \"Libellé(s) à ajouter\",\n        \"successFeedback\": \"Libellé(s) de(s) résultat(s) sélectionné(s) édité(s)\",\n        \"errorFeedback\": \"Une erreur s'est produite. Requête non aboutie\"\n    }\n};\n","export default {\n    \"labels\": {\n        \"labels\": \"Etiketten\",\n        \"publicLabels\": \"Öffentliche Etiketten\",\n        \"privateLabels\": \"Private Etiketten\",\n        \"public\": \"Öffentliche\",\n        \"private\": \"Private\",\n        \"selectLabel\": \"Etikett(en) auswählen\",\n        \"deleteLabelAreYouSure\": \"Möchten Sie dieses Etikett wirklich löschen: {name}?\",\n        \"bulkAddLabelAreYouSure\": \"Möchten Sie wirklich das Etikett {name} zu allen Ergebnissen der aktuellen Suche hinzufügen?\",\n        \"bulkRemoveLabelAreYouSure\": \"Möchten Sie wirklich das Etikett {name} von allen Ergebnissen der aktuellen Suche entfernen?\",\n        \"addPublicLabelText\": \"+\",\n        \"removePublicLabelText\": \"×\",\n        \"addPublicLabelTitle\": \"Öffentliches Etikett hinzufügen\",\n        \"selectPublicLabelTitle\": \"Öffentliches Etikett auswählen\",\n        \"removePublicLabelTitle\": \"Öffentliches Etikett entfernen\",\n        \"addPrivateLabelText\": \"+\",\n        \"removePrivateLabelText\": \"×\",\n        \"addPrivateLabelTitle\": \"Privates Etikett hinzufügen\",\n        \"selectPrivateLabelTitle\": \"Privates Etikett auswählen\",\n        \"removePrivateLabelTitle\": \"Privates Etikett entfernen\"\n    },\n\n    \"renameLabel\": {\n        \"title\": \"Etikett(en) unbenennen\",\n        \"btnRename\": \"Umbennen\",\n        \"newLabel\": \"Neuen Etikett\",\n        \"oldLabels\": \"Altes Etikett(en)\",\n        \"alertText\": \"Diese Aktion benennt das (die) ausgewählte(n) Etikett(en) im Index um und ist unwiderruflich\",\n        \"successFeedback\": \"Etikett(en), das (die) im Index umbenannt wurde(n)\",\n        \"errorFeedback\": \"Ein Fehler ist aufgetreten. Die Suchanfrage war erfolglos\"\n    },\n\n    \"deleteLabel\": {\n        \"title\": \"Etikett(en) global entfernen\",\n        \"btnDelete\": \"Löschen\",\n        \"alertText\": \"Diese Aktion löscht das (die) ausgewählte(n) Etikett(en) aus dem Index und ist unwiderruflich\",\n        \"successFeedback\": \"Etikett(en), das (die) aus dem Index gelöscht wurde(n)\",\n        \"errorFeedback\": \"Ein Fehler ist aufgetreten. Die Suchanfrage war erfolglos\"\n    },\n\n    \"bulkRemoveLabel\": {\n        \"title\": \"Etikett(en) von aktuellen Ergebnissen entfernen\",\n        \"btnBulkRemove\": \"Entfernen\",\n        \"alertText\": \"Diese Aktion löscht das (die) ausgewählte(n) Etikett(en) aus allen gefundenen Ergebnisse (nicht nur die der ersten Seite)\",\n        \"successFeedback\": \"Etikett(en), das (die) aus allen gefundenen Ergebnissen gelöscht wurde(n)\",\n        \"errorFeedback\": \"Ein Fehler ist aufgetreten. Die Suchanfrage war erfolglos\"\n    },\n\n    \"bulkAddLabel\": {\n        \"title\": \"Etikett(en) zu aktuellen Ergebnissen hinzufügen\",\n        \"btnBulkAdd\": \"Hinzufügen\",\n        \"alertText\": \"Diese Aktion fügt das (die) ausgewählte(n) Etikett(en) zu allen gefundenen Ergebnissen (nicht nur denen der ersten Seite) hinzu\",\n        \"infoText\": \"klicken Sie auf 'Enter', um ein neues Etikett, das nicht in den Vorschlägen existiert, hinzuzufügen\",\n        \"successFeedback\": \"Etikett(en), das (die) allen gefundenen Ergebnissen hinzugefügt wurde(n)\",\n        \"errorFeedback\": \"Ein Fehler ist aufgetreten. Die Suchanfrage war erfolglos\"\n    },\n\n    \"editLabel\": {\n        \"title\": \"Bearbeiten des (der) Etikett(en) aus dem (den) ausgewählten Ergebnis(sen)\",\n        \"btnEdit\": \"speichern\",\n        \"alertText\": \"Diese Aktion bearbeitet das (die) Etikett(en) des (der) ausgewählten Ergebnisse(s)\",\n        \"infoText\": \"klicken Sie auf 'Enter', um ein neues Etikett, das nicht in den Vorschlägen existiert, hinzuzufügen\",\n        \"labelsToBeRemoved\": \"Zu löschende(s) Etikett(en)\",\n        \"labelsToBeAdded\": \"Hinzuzufügende(s) Etikett(en)\",\n        \"successFeedback\": \"Etikett(en), das (die) zu dem (den) ausgewählten Ergebnis(sen) bearbeit(en)\",\n        \"errorFeedback\": \"Ein Fehler ist aufgetreten. Die Suchanfrage war erfolglos\"\n    }\n};\n","import {Utils} from \"@sinequa/core/base\";\nimport {enSearch, frSearch, deSearch} from \"@sinequa/components/search\";\nimport {enModal, frModal, deModal} from \"@sinequa/components/modal\";\nimport _enLabels from \"./en\";\nimport _frLabels from \"./fr\";\nimport _deLabels from \"./de\";\n\nconst enLabels = Utils.merge({}, _enLabels, enSearch, enModal);\nconst frLabels = Utils.merge({}, _frLabels, frSearch, frModal);\nconst deLabels = Utils.merge({}, _deLabels, deSearch, deModal);\n\nexport { enLabels, frLabels, deLabels };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.LabelsService","i3","i4","i5.LabelPipe","i2.Labels","i2","i4.LabelsAutocomplete","i5","i6","i7.BsLabelsAutocompleteComponent","i8","i1.LabelsService","i6.BsLabelsAutocompleteComponent","i7","i3.LabelsService","i9","i10.BsLabelsAutocompleteComponent","i11"],"mappings":"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"}