{"version":3,"file":"sinequa-components-user-settings.mjs","sources":["../../../projects/components/user-settings/bootstrap/user-settings-editor/jsonInfo.model.ts","../../../projects/components/user-settings/bootstrap/user-settings-editor/user-settings-editor.ts","../../../projects/components/user-settings/bootstrap/user-settings-editor/user-settings-editor.html","../../../projects/components/user-settings/bootstrap/edit-user-settings/edit-user-settings.ts","../../../projects/components/user-settings/bootstrap/edit-user-settings/edit-user-settings.html","../../../projects/components/user-settings/bootstrap/user-menu/user-menu.component.ts","../../../projects/components/user-settings/bootstrap/user-menu/user-menu.component.html","../../../projects/components/user-settings/bootstrap/help-button/help-button.component.ts","../../../projects/components/user-settings/bootstrap/help-button/help-button.component.html","../../../projects/components/user-settings/bootstrap/user-settings.module.ts","../../../projects/components/user-settings/messages/en.ts","../../../projects/components/user-settings/messages/fr.ts","../../../projects/components/user-settings/messages/de.ts","../../../projects/components/user-settings/messages/index.ts","../../../projects/components/user-settings/user-preferences.ts","../../../projects/components/user-settings/sinequa-components-user-settings.ts"],"sourcesContent":["import { Validator } from \"@sinequa/core/validation\";\r\n\r\nexport module JsonInfo {\r\n  export interface Entry {\r\n      type: string;\r\n      path: string;\r\n      valueType: string;\r\n      label: string;\r\n      list?: string;\r\n      pattern?: string;\r\n      min?: number | Date;\r\n      max?: number | Date;\r\n      validators?: Validator[];\r\n  }\r\n\r\n  export enum InputType {\r\n      Entry = 'JsonEntryInput',\r\n      Range = 'JsonRangeInput',\r\n      MultiEntry = 'JsonMultiEntryInput',\r\n  }\r\n\r\n  export enum ValueType {\r\n      String = 'String',\r\n      Int = 'Int',\r\n      Number = 'Number',\r\n      Date = 'Date',\r\n      Bool = 'Bool',\r\n  }\r\n\r\n  export interface EntryInput extends Entry {\r\n      type: InputType.Entry;\r\n  }\r\n\r\n  export interface RangeInput extends Entry {\r\n      type: InputType.Range;\r\n  }\r\n\r\n  export interface MultiEntryInput extends Entry {\r\n      type: InputType.MultiEntry;\r\n      distinct?: boolean;\r\n      nbVisibleLines?: number;\r\n  }\r\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { AppService } from \"@sinequa/core/app-utils\";\nimport { Locale, IntlService } from \"@sinequa/core/intl\";\nimport {MapOf} from \"@sinequa/core/base\";\n\nimport {JsonInfo} from './jsonInfo.model';\n\n\n/**\n * Editor for User settings.\n * <p>\n * This component can add form control for modifiable settings which are not shown by JsonEditor component.\n *\n */\n@Component({\n    selector: 'sq-user-settings-editor',\n    templateUrl: './user-settings-editor.html',\n    standalone: false\n})\nexport class BsUserSettingsEditor implements OnInit {\n\n    @Input() public form: UntypedFormGroup;\n    @Input() public model: MapOf<any>;\n    @Input() public layout: MapOf<JsonInfo.Entry>;\n    @Input() showUILanguageSelector: boolean;\n    public locales: Locale[];\n\n    constructor(\n        private appService: AppService,\n        private intlService: IntlService,\n        private formBuilder: UntypedFormBuilder\n    ) {\n    }\n\n    ngOnInit(): void {\n        if (!this.appService.app) {\n            return; // logout\n        }\n\n        // Locale is treated separately because it is not really stored in the user settings.\n        this.locales = [];\n        if (this.intlService.locales.length > 0) {\n            for (const locale of this.intlService.locales) {\n                this.locales.push(locale);\n            }\n        }\n\n        this.model['language'] = this.intlService.currentLocale.name;\n        this.form.addControl('selectedLocale', this.formBuilder.control(this.intlService.currentLocale.name));\n/*\n        if (this.config && this.config.items) {\n            this.config.items.forEach(item => {\n                if (item.active && JsonEditor.isInputComponent(item)) {\n                    const entry = <JsonInfo.Entry>item;\n                    const paths = Utils.split(entry.path, '.');\n                    const pathLength = paths.length;\n                    const currentValue = this.userSettingsService.readUserSetting(paths)\n                    const entryKey = paths[pathLength - 1];\n\n                    // Add model value\n                    this.setModelValue(paths, currentValue);\n\n                    // Add layout\n                    this.layout[entryKey] = entry;\n\n                    // Add form control\n                    this.form.addControl(\n                        entryKey,\n                        this.formBuilder.control(currentValue, Validators.compose(JsonEditor.makeValidatorFunctions(entry, this.validationService))));\n                }\n            });\n        }\n        */\n    }\n\n    /**\n     * Sets the current value of an entry to our JSON model.\n     *\n     * @param paths The paths to the entry in the JSON model.\n     * @param value The value to set.\n     */\n    /*private setModelValue(paths: string[], value: any): void {\n        const nbPaths = paths.length;\n        let json = this.model;\n        if (nbPaths > 1) {\n            for (let i = 0; i < nbPaths - 1; ++i) {\n                const path = paths[i];\n                if (!json[path]) {\n                    json[path] = {};\n                }\n                json = json[path];\n            }\n        }\n\n        const key = paths[nbPaths - 1];\n        json[key] = value;\n    }*/\n\n    /**\n     * Indicates if the UI language selector is shown in the User settings editor dialog.\n     * By default, returns true.\n     *\n     * @returns true if the UI language selector is shown in the User settings editor dialog.\n     */\n    public showLanguageSelector(): boolean {\n        return this.showUILanguageSelector;\n    }\n}\n","<div [formGroup]=\"form\">\n    <div [hidden]=\"!showLanguageSelector()\">\n        <label class=\"form-label\" for=\"locales\">{{'msg#editUserSettings.language' | sqMessage}}</label>\n        <select [sqValidation]=\"form\" class=\"form-select\" formControlName=\"selectedLocale\" id=\"selectedLocale\" sqAutofocus>\n            <option [value]=\"locale.name\" *ngFor=\"let locale of locales\">{{locale.display | sqMessage}}</option>\n        </select>\n    </div>\n    <!--sq-json-editor [form]=\"form\" [model]=\"model\" [layout]=\"layout\" [config]=\"config\"></sq-json-editor-->\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\n\nimport { Utils } from \"@sinequa/core/base\";\nimport { IntlService } from \"@sinequa/core/intl\";\nimport { ModalButton, ModalResult } from \"@sinequa/core/modal\";\nimport { UserSettingsWebService } from \"@sinequa/core/web-services\";\n\nimport { JsonInfo } from '../user-settings-editor/jsonInfo.model';\n\n/**\n * Opens a dialog to modify the user settings.\n *\n */\n@Component({\n    selector: 'sq-edit-user-settings',\n    templateUrl: './edit-user-settings.html',\n    standalone: false\n})\nexport class BsEditUserSettings implements OnInit {\n\n    @Input() visibleThreshold = 0;\n    @Input() showUILanguageSelector?: boolean;\n\n    public model: Record<string, any>;\n    public layout: Record<string, JsonInfo.Entry>;\n    public form: UntypedFormGroup;\n    public buttons: ModalButton[];\n\n    constructor(\n        private userSettingsService: UserSettingsWebService,\n        private intlService: IntlService,\n        private formBuilder: UntypedFormBuilder,\n    ) {\n    }\n\n    ngOnInit(): void {\n        this.layout = {};\n        this.model = {\n            'language': this.intlService.currentLocale.name\n        };\n        this.form = this.formBuilder.group({\n            'selectedLocale': [this.intlService.currentLocale.name]\n        });\n\n        const onOkClicked = (_) => {\n            if (this.form.dirty) {\n                // Locale is treated separately because it is not really stored in the user settings.\n                const newLocale = this.form.value['selectedLocale'];\n                this.form.removeControl('selectedLocale');\n                if (!Utils.eqNC(this.model['language'], newLocale)) {\n                    this.intlService.use(newLocale).subscribe(response => console.log('editUserSettings UI language changed.'))\n                }\n\n                const patch = this.calculatePatch();\n                if (!Utils.isUndefined(patch) && !Utils.isEmpty(patch)) {\n                    const observable = this.userSettingsService.patch(patch);\n                    Utils.subscribe(\n                        observable,\n                        response => {\n                            if (this.userSettingsService.userSettings) {\n                                this.setNewValue(this.userSettingsService.userSettings, patch);\n                            }\n                            console.log('editUserSettings saved.');\n                        },\n                        error => console.log('editUserSettings save failed: ', error)\n                    );\n                }\n            }\n        };\n\n        this.buttons = [\n            new ModalButton({\n                result: ModalResult.OK,\n                primary: true,\n                validation: this.form as any,\n                action: onOkClicked\n            }),\n            new ModalButton({\n                result: ModalResult.Cancel\n            })\n        ];\n    }\n\n    private setNewValue(obj: Record<string, any>, newObj: Record<string, any>): void {\n        for (const key of Object.keys(newObj)) {\n            const value = newObj[key];\n            if (value === null) {\n                /* NOTE: Don't use delete obj[key] because some component may put an observer on the user settings property */\n                obj[key] = undefined;\n            }\n            else if (Utils.isObject(value)) {\n                if (Utils.isDate(value)) {\n                    obj[key] = new Date(value.getTime());\n                }\n                else if (Utils.isRegExp(value)) {\n                    obj[key] = new RegExp(value);\n                }\n                else if (Array.isArray(value)) {\n                    obj[key] = value.slice(0); // clone the array\n                }\n                else {\n                    if (!Utils.isObject(obj[key])) {\n                        obj[key] = Array.isArray(value) ? [] : {};\n                    }\n                    this.setNewValue(obj[key], value);\n                }\n            }\n            else {\n                obj[key] = value;\n            }\n        }\n    }\n\n    /**\n     * Calculates the update patch for user settings.\n     *\n     * @returns the update patch.\n     */\n    private calculatePatch(): Record<string, any> {\n        const patch = {};\n        Object.keys(this.form.value).forEach(key => {\n            const formValue = this.ensureType(this.layout[key], this.readFormValue(key));\n            const paths = Utils.split(this.layout[key].path, '.');\n            const currentValue = this.userSettingsService.readUserSetting(paths);\n\n            let includedInPatch = false;\n            if (!Utils.isUndefined(currentValue)) {\n                if (formValue !== currentValue) {\n                    includedInPatch = true;\n                }\n            } else {\n                if (!Utils.isUndefined(formValue)) {\n                    includedInPatch = true;\n                }\n            }\n\n            if (includedInPatch) {\n                this.setValue(patch, paths, formValue);\n            }\n        });\n\n        return patch;\n    }\n\n    /**\n     * Ensures that the form value is of the same type as the user setting before saving it.\n     *\n     * @param entryInfo The entry information.\n     * @param value The form value.\n     * @returns The conformed value for the user setting.\n     */\n    private ensureType(entryInfo: JsonInfo.Entry, value: any): any {\n        const inputType = entryInfo.type as JsonInfo.InputType;\n        const valueType = entryInfo.valueType as JsonInfo.ValueType;\n\n        switch (valueType as JsonInfo.ValueType) {\n            case JsonInfo.ValueType.Bool:\n                // For the case of boolean, we ignore the input type because we only support having a JSON boolean\n                return !!value;\n            case JsonInfo.ValueType.Date:\n                return this.cast<Date>(inputType, value, Utils.asDate);\n            case JsonInfo.ValueType.Int:\n            case JsonInfo.ValueType.Number:\n                return this.cast<number>(inputType, value, Utils.asNumber);\n            case JsonInfo.ValueType.String:\n            default:\n                return this.cast<string>(inputType, value, Utils.asString);\n        }\n    }\n\n\n    /**\n     * Casts the value of a given type to another type.\n     * <p>\n     * If the given value is of array type, it is casted into another array containing element of the\n     * desired type.\n     *\n     * @template T The desired type after casting.\n     * @param inputType The type of form input where the value comes.\n     * @param value The value to cast.\n     * @param castFn The casting function.\n     * @returns the cast result.\n     */\n    private cast<T>(\n        inputType: JsonInfo.InputType, value: any, castFn: (params: any) => T | undefined\n    ): T | T[] | undefined {\n        if (Array.isArray(value)) {\n            const array = value as any[];\n            const empty = array.length === 0;\n            switch (inputType) {\n                case JsonInfo.InputType.Entry:\n                    return !empty ? castFn(array[0]) : undefined;\n                case JsonInfo.InputType.MultiEntry:\n                case JsonInfo.InputType.Range:\n                    const result: T[] = [];\n                    for (const v of array) {\n                        result.push(castFn(v) as T);\n                    }\n                    return result;\n            }\n            return undefined;\n        }\n\n        return castFn(value);\n    }\n\n    /**\n     * Reads the form value for the given entry.\n     *\n     * @param key The entry key.\n     * @returns The form value.\n     */\n    private readFormValue(key: string): any {\n        const formValue = this.form.value[key];\n        if (Array.isArray(formValue)) {\n            switch (this.layout[key].type as JsonInfo.InputType) {\n                case JsonInfo.InputType.Entry:\n                    // The entry is single-value type whereas its corresponding form control has an array value.\n                    // This should be because its form control is represented by a Select component.\n                    // The array value should be then a singleton array, we simply return the first element.\n                    const array = <any[]>formValue;\n                    if (array.length !== 1) {\n                        console.log('editUserSettings.readFormValue not a singleton array.');\n                    }\n                    return array[0];\n                case JsonInfo.InputType.MultiEntry:\n                    break;\n                case JsonInfo.InputType.Range:\n                    break;\n            }\n        }\n        return formValue;\n    }\n\n    /**\n     * Sets a JSON value.\n     *\n     * @param json The JSON to set.\n     * @param paths The path of the value in the JSON.\n     * @param value The value to set.\n     */\n    private setValue(json: Record<string, any>, paths: string[], value: any): void {\n        const nbPaths = paths.length;\n        if (nbPaths > 1) {\n            for (let i = 0; i < nbPaths - 1; ++i) {\n                const path = paths[i];\n                if (!json[path]) {\n                    json[path] = {};\n                }\n                json = json[path];\n            }\n        }\n\n        json[paths[nbPaths - 1]] = Utils.isEmpty(value) ? null : value;\n    }\n\n    /**\n     * Indicates the height of the dialog content to trigger scroll behavior when there are too many input controls.\n     *\n     * @return the height of the dialog content to trigger scroll behavior when there are too many input controls.\n     */\n    public get maxHeight(): string {\n        //If size is undefined use 5 as default\n        return (((this.visibleThreshold | 0) || 5) * 10) + \"ex\";\n    }\n}\n","<form name=\"editUserSettings\" novalidate [formGroup]=\"form\">\n    <sq-modal [title]=\"'msg#editUserSettings.title'\" [buttons]=\"buttons\">\n        <div class=\"sq-user-settings-modal-body\" [style.max-height]=\"maxHeight\">\n            <sq-user-settings-editor [form]=\"form\" [model]=\"model\" [layout]=\"layout\" [showUILanguageSelector]=\"showUILanguageSelector\"></sq-user-settings-editor>\n        </div>\n    </sq-modal>\n</form>\n","import { Component, ChangeDetectorRef, Input, OnDestroy, InjectionToken, Inject, Optional, OnChanges, SimpleChanges } from '@angular/core';\nimport { merge, Subscription, filter } from 'rxjs';\nimport { Action, ActionSeparator } from '@sinequa/components/action';\nimport { Principal, PrincipalWebService, UserSettingsWebService } from '@sinequa/core/web-services';\nimport { AuthenticationService, LoginService, UserOverride } from '@sinequa/core/login';\nimport { IntlService, Locale } from '@sinequa/core/intl';\nimport { Utils } from '@sinequa/core/base';\nimport { BsOverrideUser } from '@sinequa/components/modal';\nimport { ModalService, ModalResult, ConfirmType, ModalButton } from '@sinequa/core/modal';\nimport { AppService } from '@sinequa/core/app-utils';\nimport { NotificationsService, NotificationType } from '@sinequa/core/notification';\nimport { UIService } from '@sinequa/components/utils';\n\n/** A token that is used to inject the help folder options.\n *\n * Expects a {@link HelpFolderOptions} object.\n*/\nexport const APP_HELP_FOLDER_OPTIONS = new InjectionToken<HelpFolderOptions>('APP_HELP_FOLDER_OPTIONS');\n/**\n * `HelpFolderOptions` is an object with four properties: `name`, `indexFile`, `useLocale`, and\n * `useLocaleAsPrefix`.\n *\n * @property folder - The name of the folder.\n * @property indexFile - The name of the file that will be used as the index file for the folder.\n * @property useLocale - If true, the locale will be used to determine the folder to use.\n * @property useLocaleAsPrefix - If true, the locale will be used as a prefix for the help\n * folder. For example, if the locale is \"en-US\", the help folder will be inside \"en-US/\" folder.\n * If false, no locale will be used as a prefix.\n */\nexport type HelpFolderOptions = {\n  path: string,\n  folder?: string,\n  indexFile?: string,\n  useLocale?: boolean,\n  useLocaleAsPrefix?: boolean\n}\n\n@Component({\n    selector: 'sq-user-menu',\n    templateUrl: './user-menu.component.html',\n    standalone: false\n})\nexport class BsUserMenuComponent implements OnChanges, OnDestroy {\n\n  @Input() icon: string = \"fas fa-user\";\n  @Input() autoAdjust: boolean = true;\n  @Input() autoAdjustBreakpoint: string = 'xl';\n  @Input() collapseBreakpoint: string = 'sm';\n  @Input() size: string;\n  @Input() enableDarkMode = true;\n  @Input() enableHelp = true;\n  @Input() showCredits = true;\n  @Input() display: keyof Principal = 'fullName';\n  @Input() showText = false;\n  @Input() customActions: Action[];\n  @Input() customHelpActions: Action[];\n  @Input() customCreditActions: Action[];\n\n  menu: Action;\n\n  // User actions\n  loginAction: Action;\n  logoutAction: Action;\n  overrideAction: Action;\n  revertOverrideAction: Action;\n  adminAction: Action;\n  languageAction: Action;\n  resetUserSettings: Action;\n  darkModeAction: Action;\n  creditAction: Action;\n  helpAction: Action;\n\n\n  /** helper function to retrieve the help html file accordingly with the current locale */\n  static getHelpIndexUrl = (locale: string, options: HelpFolderOptions): string => {\n    const { useLocale, useLocaleAsPrefix, indexFile, path, folder } = options;\n\n    const localeFolder = useLocale ? `${locale}/` : null;\n    const file = useLocaleAsPrefix ? `${locale}.${indexFile}` : indexFile ?? '';\n\n    return [path, folder, `${localeFolder ? localeFolder : ''}${file}`]\n      .filter(item => item !== undefined)\n      .join('/');\n  };\n\n  constructor(\n    private readonly ui: UIService,\n    public principalService: PrincipalWebService,\n    public authenticationService: AuthenticationService,\n    public intlService: IntlService,\n    public loginService: LoginService,\n    public modalService: ModalService,\n    public appService: AppService,\n    public userSettingsService: UserSettingsWebService,\n    public notificationsService: NotificationsService,\n    public changeDetectorRef: ChangeDetectorRef,\n    @Optional() @Inject(APP_HELP_FOLDER_OPTIONS) private helpDefaultFolderOptions: HelpFolderOptions | null | undefined) {\n\n    // Actions objects are initialized in the constructor\n\n    // User Menu\n\n    // Login\n    this.loginAction = new Action({\n      text: \"msg#userMenu.login\",\n      title: \"msg#userMenu.login\",\n      action: () => {\n        this.loginService.login();\n      }\n    });\n\n    // Logout\n    this.logoutAction = new Action({\n      text: \"msg#userMenu.logout\",\n      action: () => {\n        this.loginService.logout();\n        this.changeDetectorRef.markForCheck();\n      }\n    });\n\n    // Override a user's identity\n    this.overrideAction = new Action({\n      text: \"msg#userMenu.overrideUser\",\n      action: () => {\n        let userOverride = this.authenticationService.userOverride ?\n          Utils.copy<UserOverride>(this.authenticationService.userOverride) : undefined;\n        if (!userOverride) {\n          userOverride = {\n            userName: \"\",\n            domain: \"\"\n          };\n        }\n        this.modalService.open(BsOverrideUser, {model: userOverride})\n          .then((result) => {\n            if (result === ModalResult.OK) {\n              this.loginService.overrideUser(userOverride);\n              this.changeDetectorRef.markForCheck();\n            }\n          });\n      }\n    });\n\n    // Cancel user override\n    this.revertOverrideAction = new Action({\n      text: \"msg#userMenu.revertUserOverride\",\n      action: () => {\n        this.loginService.overrideUser(undefined);\n        this.changeDetectorRef.markForCheck();\n      }\n    });\n\n    // Link to the admin\n    this.adminAction = new Action({\n      text: \"msg#userMenu.administration\",\n      href: this.appService.adminUrl\n    });\n\n    // Language menu\n    this.languageAction = new Action({\n      text: \"msg#userMenu.language\",\n      children: this.intlService.locales.map(locale =>\n        new Action({\n          text: locale.display,   // \"French\"\n          data: locale,   // French locale\n          selected: locale === this.intlService.currentLocale, // Whether French is the current locale\n          iconAfter: \"sq-image sq-flag-\" + locale.name,\n          action: (item: Action, $event: UIEvent) => {    // On click, switch to this language\n            this.intlService.use((item.data as Locale).name).subscribe(\n              (value) => this.languageAction.children!.forEach(a => a.update()));\n          },\n          updater: (action) => {  // Update the status of buttons\n            action.selected = action.data === this.intlService.currentLocale;\n          }\n        })\n      )\n    });\n\n    this.resetUserSettings = new Action({\n      text: \"msg#userMenu.resetUserSettings.menu\",\n      action: () => {\n        this.modalService.confirm({\n          title: \"msg#userMenu.resetUserSettings.modalTitle\",\n          message: \"msg#userMenu.resetUserSettings.modalMessage\",\n          buttons: [\n            new ModalButton({result: ModalResult.OK, text: \"msg#userMenu.resetUserSettings.modalConfirmButton\"}),\n            new ModalButton({result: ModalResult.Cancel, primary: true})\n          ],\n          confirmType: ConfirmType.Warning\n        }).then(res => {\n          if(res === ModalResult.OK) {\n            this.userSettingsService.reset().subscribe({\n              next: () => this.notificationsService.notify(NotificationType.Success, \"msg#userMenu.resetUserSettings.successMessage\"),\n              error: () => this.notificationsService.notify(NotificationType.Error, \"msg#userMenu.resetUserSettings.errorMessage\")\n            });\n          }\n        });\n      }\n    });\n\n    this.darkModeAction = new Action({\n      text: \"msg#userMenu.darkMode\",\n      action: action => {\n        this.ui.toggleDark();\n        setTimeout(() => action.update());\n      },\n      updater: action => {\n        action.icon = this.ui.isDark()? \"fas fa-toggle-on\" : \"fas fa-toggle-off\";\n        action.title = this.ui.isDark()? \"msg#userMenu.darkModeOn\" : \"msg#userMenu.darkModeOff\";\n      }\n    });\n\n    this.creditAction = new Action({\n      href: \"https://www.sinequa.com\",\n      target: \"_blank\",\n      text: \"msg#userMenu.credit\",\n      icon: \"sq-logo\"\n    });\n\n    this.helpAction = new Action({\n      text: \"msg#userMenu.help\",\n      target: \"_blank\"\n    });\n\n    // whenever login service's events, principal service's events or internationalization's event trigger, user's menu need to be updated\n    const combine$ = merge(this.loginService.events.pipe(filter(event => event.type === \"session-changed\" || event.type === \"session-start\")), this.principalService.events, this.intlService.events);\n    this.subscriptions$ = combine$.subscribe(event => this.updateMenu());\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    this.updateMenu();\n  }\n\n  private subscriptions$: Subscription;\n  ngOnDestroy(){\n    if(this.subscriptions$){\n      this.subscriptions$.unsubscribe();\n    }\n  }\n\n  updateMenu() {\n    let title = '';\n    if(this.loginService.complete) {\n      title = \"msg#userMenu.user\";\n      if(this.principalService.principal) {\n        title = this.principalService.principal[this.display] as string || this.principalService.principal.name || title;\n      }\n    }\n    this.menu = new Action({\n        icon: this.icon,\n        title,\n        headerGroup: true,\n        children: [\n          ...this.getCustomActions(),\n          ...this.getLoginActions(), ActionSeparator,\n          ...this.getUIActions(), ActionSeparator,\n          ...this.getHelpActions(),\n          ...this.getCreditActions()\n        ]\n    });\n    if(this.showText) {\n      this.menu.text = title;\n    }\n  }\n\n  getLoginActions(): Action[] {\n    const actions: Action[] = [];\n\n    if (!this.principalService.principal && !this.authenticationService.userOverrideActive) {\n      actions.push(this.loginAction);\n    }\n    if (this.principalService.principal) {\n      actions.push(this.logoutAction);\n    }\n    if (this.authenticationService.userOverrideActive) {\n      actions.push(this.revertOverrideAction);\n    }\n    if (this.principalService.principal && this.principalService.principal.isAdministrator) {\n      actions.push(this.overrideAction);\n    }\n    if (this.principalService.principal && (this.principalService.principal.isAdministrator || this.principalService.principal.isDelegatedAdmin)) {\n      actions.push(this.adminAction);\n    }\n    if(this.loginService.complete) {\n      actions.push(this.resetUserSettings);\n    }\n    return actions;\n  }\n\n  getUIActions(): Action[] {\n    const actions: Action[] = [];\n    if (this.intlService.locales.length > 1) {\n      actions.push(this.languageAction);\n    }\n    if(this.enableDarkMode) {\n      this.darkModeAction.update();\n      actions.push(this.darkModeAction);\n    }\n    return actions;\n  }\n\n  getCreditActions(): Action[] {\n    if (this.customCreditActions?.length) {\n      return this.customCreditActions;\n    }\n    const actions = [] as Action[];\n    if(this.showCredits) {\n      actions.push(this.creditAction);\n    }\n    return actions;\n  }\n\n  getHelpActions(): Action[] {\n    if (!this.enableHelp || !this.loginService.complete) return [];\n\n    if (this.customHelpActions?.length) {\n      return [...this.customHelpActions, ActionSeparator];\n    }\n\n    // \"options\" could be undefined\n    // \"helpDefaultFolderOptions\" could be null, in this case map it to undefined\n    const options = this.appService.app?.data[\"help-folder-options\"] as HelpFolderOptions;\n    const defaults = this.helpDefaultFolderOptions ?? undefined;\n\n    //  when 'options' and 'defaults' are undefined\n    if (!options && !defaults) return [];\n\n    if (options || defaults) {\n      const { name } = this.intlService.currentLocale;\n      const helpFolderOptions = {\n        ...defaults,\n        ...options,\n      };\n      this.helpAction.href = this.appService.helpUrl(BsUserMenuComponent.getHelpIndexUrl(name, helpFolderOptions));\n      return [this.helpAction, ActionSeparator];\n    }\n\n    return [];\n  }\n\n  getCustomActions(): Action[] {\n    return !this.customActions ? [] : this.customActions.concat([ActionSeparator]);\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, Input, Inject, Optional } from '@angular/core';\nimport { LoginService } from '@sinequa/core/login';\nimport { IntlService } from '@sinequa/core/intl';\nimport { AppService } from '@sinequa/core/app-utils';\nimport { Placement } from '@sinequa/components/utils';\nimport { APP_HELP_FOLDER_OPTIONS, BsUserMenuComponent, HelpFolderOptions } from '../user-menu/user-menu.component';\n\n@Component({\n    selector: 'sq-help-button',\n    templateUrl: './help-button.component.html',\n    styleUrls: ['./help-button.component.scss'],\n    standalone: false\n})\nexport class BsHelpButtonComponent {\n\n    @Input() helpFolderOptions: HelpFolderOptions;\n    @Input() tooltip?: string = \"msg#userMenu.help\";\n    @Input() text?: string;\n    @Input() icon?: string = \"fas fa-question\";\n    @Input() styleClass?: string = \"btn-primary\";\n    @Input() tooltipPlacement?: Placement = \"bottom\";\n    @Input() fallbackPlacements?: Placement[] = [\"top\", \"bottom\"];\n\n    constructor(\n        public intlService: IntlService,\n        public loginService: LoginService,\n        public appService: AppService,\n        @Optional() @Inject(APP_HELP_FOLDER_OPTIONS) private helpDefaultFolderOptions: HelpFolderOptions | null | undefined) {}\n\n    openHelpPage() {\n        // \"options\" could be undefined\n        // \"helpDefaultFolderOptions\" could be null, in this case map it to undefined\n        const options = this.appService.app?.data[\"help-folder-options\"] as HelpFolderOptions;\n        const defaults = this.helpDefaultFolderOptions ?? undefined;\n\n        if (options || defaults || this.helpFolderOptions) {\n            const { name } = this.intlService.currentLocale;\n            const helpFolderOptions = {\n                ...defaults,\n                ...options,\n                ...this.helpFolderOptions // Allow to override the default options in case we want to open a different help page in the same app\n            };\n            const url = this.appService.helpUrl(BsUserMenuComponent.getHelpIndexUrl(name, helpFolderOptions));\n            window.open(url, \"_blank\");\n        }\n    }\n}\n","<button type=\"button\" class=\"btn {{styleClass}} action-btn\" *ngIf=\"loginService.complete\" (click)=\"openHelpPage()\" sqTooltip=\"{{tooltip | sqMessage}}\" [placement]=\"tooltipPlacement\" [fallbackPlacements]=\"fallbackPlacements\">\n    <i class=\"{{icon}} sq-icon\"></i>\n    <span *ngIf=\"!!text\" class=\"mx-2\">{{text | sqMessage}}</span>\n</button>\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 {BsModalModule} from \"@sinequa/components/modal\";\nimport {BsActionModule} from \"@sinequa/components/action\";\nimport {UtilsModule} from \"@sinequa/components/utils\";\n\nimport {BsEditUserSettings} from \"./edit-user-settings/edit-user-settings\";\nimport {BsUserSettingsEditor} from './user-settings-editor/user-settings-editor';\nimport {BsUserMenuComponent} from './user-menu/user-menu.component';\nimport { BsHelpButtonComponent } from \"./help-button/help-button.component\";\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule, ReactiveFormsModule,\n\n        IntlModule,\n        ValidationModule,\n\n        BsModalModule,\n        BsActionModule,\n        UtilsModule,\n    ],\n    declarations: [\n        BsEditUserSettings, BsUserSettingsEditor, BsUserMenuComponent, BsHelpButtonComponent\n    ],\n    exports: [\n        BsEditUserSettings, BsUserSettingsEditor, BsUserMenuComponent, BsHelpButtonComponent\n    ],\n})\nexport class BsUserSettingsModule {\n}\n","export default {\n\n    \"userMenu\": {\n        \"user\": \"User\",\n        \"login\": \"Login\",\n        \"overrideUser\": \"Override User\",\n        \"settings\": \"Settings\",\n        \"revertUserOverride\": \"Revert User Override\",\n        \"administration\": \"Administration\",\n        \"logout\": \"Logout\",\n\n        \"language\": \"Language\",\n        \"help\": \"Help\",\n        \n        \"resetUserSettings\": {\n            \"menu\": \"Reset user settings\",\n            \"modalTitle\": \"Reset user settings\",\n            \"modalMessage\": \"You are about to reset ALL your user data (recent queries, collections, alerts, preferences, etc.). Do you want to continue?\",\n            \"modalConfirmButton\": \"Confirm\",\n            \"successMessage\": \"Reset user settings succefully\",\n            \"errorMessage\": \"Reset user settings failed\"\n        },\n\n        \"darkMode\": \"Dark mode\",\n        \"darkModeOn\": \"Switch to light mode\",\n        \"darkModeOff\": \"Switch to dark mode\",\n\n        \"credit\": \"About Sinequa\"\n    },\n\n    \"editUserSettings\": {\n        \"title\": \"Settings\",\n        \"language\": \"UI Language\",\n        \"pageSize\": \"Number of results per page\",\n        \"email\": \"Email\"\n    }\n\n};\n","export default {\n\n    \"userMenu\": {\n        \"user\": \"Utilisateur\",\n        \"login\": \"S'identifier\",\n        \"overrideUser\": \"Surcharger l'utilisateur\",\n        \"settings\": \"Paramètres\",\n        \"revertUserOverride\": \"Revenir à l'utilisateur normal\",\n        \"administration\": \"Administration\",\n        \"logout\": \"Se déconnecter\",\n\n        \"language\": \"Langue\",\n        \"help\": \"Aide\",\n        \n        \"resetUserSettings\": {\n            \"menu\": \"Réinitialiser les paramètres utilisateur\",\n            \"modalTitle\": \"Réinitialiser Paramètres Utilisateur\",\n            \"modalMessage\": \"Vous êtes sur le point de réinitialiser TOUTES vos données utilisateur (requêtes récentes, collections, alertes, préférences, etc.). Voulez-vous continuer ?\",\n            \"modalConfirmButton\": \"Confirmer\",\n            \"successMessage\": \"Réinitialisation des paramètres utilisateur réussie\",\n            \"errorMessage\": \"Echec de la réinitialisation des paramètres utilisateur\"\n        },\n\n        \"darkMode\": \"Mode sombre\",\n        \"darkModeOn\": \"Passer en mode clair\",\n        \"darkModeOff\": \"Passer en mode sombre\",\n\n        \"credit\": \"A propos de Sinequa\"\n    },\n\n    \"editUserSettings\": {\n        \"title\": \"Paramètres\",\n        \"language\": \"Langue de l'interface\",\n        \"pageSize\": \"Nombre de résultats par page\",\n        \"email\": \"E-mail\"\n    }\n\n};\n","export default {\n\n    \"userMenu\": {\n        \"user\": \"Benutzer\",\n        \"login\": \"Anmeldung\",\n        \"overrideUser\": \"Benutzer wechseln\",\n        \"settings\": \"Einstellungen\",\n        \"revertUserOverride\": \"Zum Administrator zurückkehren\",\n        \"administration\": \"Administration\",\n        \"logout\": \"Abmeldung\",\n\n        \"language\": \"Sprache\",\n        \n        \"resetUserSettings\": {\n            \"menu\": \"Benutzereinstellungen zurücksetzen\",\n            \"modalTitle\": \"Benutzereinstellungen zurücksetzen\",\n            \"modalMessage\": \"Sie sind dabei, ALLE Ihre Benutzerdaten zurückzusetzen (letzte Abfragen, Ablagekörbe, Warnungen, Einstellungen usw.). Möchten Sie fortfahren?\",\n            \"modalConfirmButton\": \"Bestätigen\",\n            \"successMessage\": \"Benutzereinstellungen erfolgreich zurücksetzen\",\n            \"errorMessage\": \"Benutzereinstellungen zurücksetzen fehlgeschlagen\"\n        },\n\n        \"darkMode\": \"Dunkelmodus\",\n        \"darkModeOn\": \"Dunkelmodus deaktivieren\",\n        \"darkModeOff\": \"Dunkelmodus einschalten\",\n\n        \"credit\": \"Über Sinequa\"\n    },\n\n    \"editUserSettings\": {\n        \"title\": \"Einstellungen\",\n        \"language\": \"Sprache der Benutzeroberfläche\",\n        \"pageSize\": \"Anzahl der Ergebnisse pro Seite\",\n        \"email\": \"E-Mail\"\n    }\n\n};\n","import {Utils} from \"@sinequa/core/base\";\nimport {enModal, frModal, deModal} from \"@sinequa/components/modal\";\n\nimport _enUserSettings from \"./en\";\nimport _frUserSettings from \"./fr\";\nimport _deUserSettings from \"./de\";\n\nconst enUserSettings = Utils.merge({}, _enUserSettings, enModal);\nconst frUserSettings = Utils.merge({}, _frUserSettings, frModal);\nconst deUserSettings = Utils.merge({}, _deUserSettings, deModal);\n\nexport { enUserSettings, frUserSettings, deUserSettings };\n","import { Injectable } from '@angular/core';\nimport { UserSettingsWebService } from '@sinequa/core/web-services';\n\n/**\n * The role of this service is to bundle together the simple preferences of\n * the user and synchronise them with the user settings.\n *\n * Usage:\n * this.userPreferences.get(\"foo\")\n * this.userPreferences.set(\"foo\", \"bar\")\n * this.userPreferences.sync()\n */\n@Injectable({\n    providedIn: \"root\"\n})\nexport class UserPreferences {\n\n    constructor(\n        private userSettingsService: UserSettingsWebService\n    ) {\n    }\n\n    private get prefs(): any {\n        return this.userSettingsService.get(\"prefs\");\n    }\n\n    /**\n     * Returns the value of a property\n     * @param property the name of this property\n     */\n    public get(property: string) {\n        return this.prefs[property.toLowerCase()];\n    }\n\n    /**\n     * Sets the value of a property\n     * @param property the name of this property\n     * @param value the value\n     * @param skipSync whether we should skyp syncing (to update multiple properties for example)\n     */\n    public set(property: string, value: any, skipSync?: boolean) {\n        this.prefs[property.toLowerCase()] = value;\n        if(!skipSync){\n            this.sync();\n        }\n    }\n\n    /**\n     * Deletes a given property from the preferences\n     * @param property the name of this property\n     * @param skipSync whether we should skyp syncing (to update multiple properties for example)\n     */\n    public delete(property: string, skipSync?: boolean) {\n        if(Object.prototype.hasOwnProperty.call(this.prefs, property.toLowerCase())) {\n            this.prefs[property.toLowerCase()] = null;\n            if(!skipSync){\n                this.sync();\n            }\n        }\n    }\n\n    /**\n     * Synchronizes the user preferences with the server\n     */\n    public sync(){\n        this.userSettingsService.patch({prefs: {...this.prefs}});\n    }\n\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i6","i1","i4","i5.BsUserSettingsEditor","i8","i5"],"mappings":"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"}