{"version":3,"file":"rero-ng-core.mjs","sources":["../../../../projects/rero/ng-core/src/lib/core-config.service.ts","../../../../projects/rero/ng-core/src/lib/api/api.service.ts","../../../../projects/rero/ng-core/src/lib/component/abstract-can-deactivate.component.ts","../../../../projects/rero/ng-core/src/lib/pipe/nl2br.pipe.ts","../../../../projects/rero/ng-core/src/lib/dialog/dialog.component.ts","../../../../projects/rero/ng-core/src/lib/pipe/default.pipe.ts","../../../../projects/rero/ng-core/src/lib/error/error.component.ts","../../../../projects/rero/ng-core/src/lib/error/error.component.html","../../../../projects/rero/ng-core/src/lib/guard/component-can-deactivate.guard.ts","../../../../projects/rero/ng-core/src/lib/pipe/callback-array-filter.pipe.ts","../../../../projects/rero/ng-core/src/lib/pipe/filesize.pipe.ts","../../../../projects/rero/ng-core/src/lib/pipe/markdown.pipe.ts","../../../../projects/rero/ng-core/src/lib/pipe/sanitize.pipe.ts","../../../../projects/rero/ng-core/src/lib/utils/sort-by-keys.ts","../../../../projects/rero/ng-core/src/lib/pipe/sort-by-keys.pipe.ts","../../../../projects/rero/ng-core/src/lib/pipe/truncate-text.pipe.ts","../../../../projects/rero/ng-core/src/lib/utils/utils.ts","../../../../projects/rero/ng-core/src/lib/pipe/ucfirst.pipe.ts","../../../../projects/rero/ng-core/src/lib/prime-ng-core-module.ts","../../../../projects/rero/ng-core/src/lib/search-input/search-input.component.ts","../../../../projects/rero/ng-core/src/lib/search-input/search-input.component.html","../../../../projects/rero/ng-core/src/lib/service/page-title-strategy.ts","../../../../projects/rero/ng-core/src/lib/text-read-more/text-read-more.component.ts","../../../../projects/rero/ng-core/src/lib/text-read-more/text-read-more.component.html","../../../../projects/rero/ng-core/src/lib/translate/date-translate-pipe.ts","../../../../projects/rero/ng-core/src/lib/translate/translate-language.service.ts","../../../../projects/rero/ng-core/src/lib/translate/translate-language.pipe.ts","../../../../projects/rero/ng-core/src/lib/translate/translate-loader.ts","../../../../projects/rero/ng-core/src/lib/translate/translate-service.ts","../../../../projects/rero/ng-core/src/lib/directive/katex.directive.ts","../../../../projects/rero/ng-core/src/lib/read-more/read-more.component.ts","../../../../projects/rero/ng-core/src/lib/core.module.ts","../../../../projects/rero/ng-core/src/lib/error/error.ts","../../../../projects/rero/ng-core/src/lib/record/editor/utils.ts","../../../../projects/rero/ng-core/src/lib/record/record.handle-error.service.ts","../../../../projects/rero/ng-core/src/lib/record/record.service.ts","../../../../projects/rero/ng-core/src/lib/pipe/get-record.pipe.ts","../../../../projects/rero/ng-core/src/lib/primeng-config.ts","../../../../projects/rero/ng-core/src/lib/record/action-status.ts","../../../../projects/rero/ng-core/src/lib/record/detail/detail-button/detail-button.component.ts","../../../../projects/rero/ng-core/src/lib/record/detail/detail-button/detail-button.component.html","../../../../projects/rero/ng-core/src/lib/utils/config.ts","../../../../projects/rero/ng-core/src/lib/record/record-ui.service.ts","../../../../projects/rero/ng-core/src/lib/record/detail/detail.directive.ts","../../../../projects/rero/ng-core/src/lib/record/detail/view/json.component.ts","../../../../projects/rero/ng-core/src/lib/record/detail/detail.component.ts","../../../../projects/rero/ng-core/src/lib/record/detail/detail.component.html","../../../../projects/rero/ng-core/src/lib/route/route-collection.service.ts","../../../../projects/rero/ng-core/src/lib/service/logger.service.ts","../../../../projects/rero/ng-core/src/lib/record/editor/services/jsonschema.service.ts","../../../../projects/rero/ng-core/src/lib/record/editor/services/templates.service.ts","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/load-template-form/load-template-form.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/load-template-form/load-template-form.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/save-template-form/save-template-form.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/save-template-form/save-template-form.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/add-field-editor/add-field-editor.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/add-field-editor/add-field-editor.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/editor.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/editor.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/extensions.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/date-picker/date-picker.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/input/src/input.type.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/input/src/input.module.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/services/translate-label.service.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/multi-checkbox/multi-checkbox.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/multi-select/multi-select.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/remote-autocomplete/remote-autocomplete.service.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/remote-autocomplete/remote-autocomplete.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/remote-autocomplete/remote-autocomplete.interface.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/select/select.ts","../../../../projects/rero/ng-core/src/lib/record/editor/formly/primeng/tree-select/tree-select.ts","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/dropdown-label-editor/dropdown-label-editor.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/dropdown-label-editor/dropdown-label-editor.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/label/label.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/widgets/label/label.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/type/array-type/array-type.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/type/array-type/array-type.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/type/multischema/multischema.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/type/object-type/object-type.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/type/object-type/object-type.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/type/password-generator-type.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/type/switch/switch.component.ts","../../../../projects/rero/ng-core/src/lib/record/export-button/export-button.component.ts","../../../../projects/rero/ng-core/src/lib/record/export-button/export-button.component.html","../../../../projects/rero/ng-core/src/lib/record/record.ts","../../../../projects/rero/ng-core/src/lib/validator/email.validator.ts","../../../../projects/rero/ng-core/src/lib/record/editor/type/markdown/markdown.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/type/radio-button.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/type/textarea/textarea.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/wrappers/card-wrapper/card-wrapper.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/wrappers/form-field-wrapper/form-field-wrapper.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/wrappers/hide-wrapper/hide-wrapper.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/record-search.service.ts","../../../../projects/rero/ng-core/src/lib/record/search/result/item/json.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/result/record-search-result.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/result/record-search-result.component.html","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/service/bucket-name.service.ts","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/pipe/bucket-name.pipe.ts","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/buckets/buckets.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/buckets/buckets.component.html","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/slider/slider.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/slider/slider.component.html","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/date-range/date-range.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/date-range/date-range.component.html","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/aggregation.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/aggregation.component.html","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/list-filters/list-filters.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/aggregation/list-filters/list-filters.component.html","../../../../projects/rero/ng-core/src/lib/record/search/paginator/paginator.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/paginator/paginator.component.html","../../../../projects/rero/ng-core/src/lib/record/search/menu-sort/menu-sort.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/menu-sort/menu-sort.component.html","../../../../projects/rero/ng-core/src/lib/record/search/search-filters/search-filters.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/search-filters/search-filters.component.html","../../../../projects/rero/ng-core/src/lib/record/search/search-tabs/search-tabs.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/search-tabs/search-tabs.component.html","../../../../projects/rero/ng-core/src/lib/record/search/record-search.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/record-search.component.html","../../../../projects/rero/ng-core/src/lib/record/search/record-search-page.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/record-search-page.component.html","../../../../projects/rero/ng-core/src/lib/record/record-routing.module.ts","../../../../projects/rero/ng-core/src/lib/record/search-autocomplete/search-autocomplete.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/search-fields/search-fields.component.ts","../../../../projects/rero/ng-core/src/lib/record/search/search-fields/search-fields.component.html","../../../../projects/rero/ng-core/src/lib/record/record.module.ts","../../../../projects/rero/ng-core/src/lib/record/search/result/item/result-item.ts","../../../../projects/rero/ng-core/src/lib/service/crypto-js.service.ts","../../../../projects/rero/ng-core/src/lib/service/local-storage.service.ts","../../../../projects/rero/ng-core/src/lib/validator/time.validator.ts","../../../../projects/rero/ng-core/src/lib/validator/unique.validator.ts","../../../../projects/rero/ng-core/src/public-api.ts","../../../../projects/rero/ng-core/src/rero-ng-core.ts"],"sourcesContent":["/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Injectable } from '@angular/core';\n\n/**\n * Interface for configuration.\n */\nexport interface Config {\n  production?: boolean;\n  projectTitle?: string;\n  apiBaseUrl?: string;\n  apiEndpointPrefix?: string;\n  $refPrefix: string;\n  schemaFormEndpoint: string;\n  languages?: string[];\n  defaultLanguage?: string;\n  secretPassphrase: string;\n  translationsURLs?: any[];\n}\n\n/**\n * Service for managing configuration of the application.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class CoreConfigService implements Config {\n  production = false;\n  projectTitle;\n  apiBaseUrl = '';\n  apiEndpointPrefix = '/api';\n  schemaFormEndpoint = '/api/schemaform';\n  $refPrefix;\n  languages = ['en'];\n  defaultLanguage = 'en';\n  secretPassphrase = 'ShERWIN53SnAggIng48rELAtiVes';\n  translationsURLs = [];\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from '@angular/core';\nimport { CoreConfigService } from '../core-config.service';\n\n/**\n * Service giving information about API.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ApiService {\n\n  protected configService: CoreConfigService = inject(CoreConfigService);\n\n  // API base URL. Ex: https://localhost:5000.\n  baseUrl = '';\n\n  // API prefix. Ex: /api\n  endpointPrefix = '/';\n\n  /**\n   * Returns Invenio API Endpoint corresponding to type.\n   *\n   * @param type Type of the resource.\n   * @param absolute If absolute or relative url must be returned.\n   * @return Endpoint as string.\n   */\n  getEndpointByType(type: string, absolute = false): string {\n    let endpoint = this.configService.apiEndpointPrefix + '/' + type;\n    if (absolute === true) {\n      endpoint = this.configService.apiBaseUrl + endpoint;\n    }\n    return endpoint;\n  }\n\n  /**\n   * Returns Invenio-RERO-base API export endpoint corresponding to type.\n   *\n   * @param type Type of the resource.\n   * @param absolute If absolute or relative url must be returned.\n   * @return Endpoint as string.\n   */\n  getExportEndpointByType(type: string, absolute = false): string {\n    let endpoint = this.configService.apiEndpointPrefix + '/export/' + type;\n    if (absolute === true) {\n      endpoint = this.configService.apiBaseUrl + endpoint;\n    }\n    return endpoint;\n  }\n\n  /**\n   * Returns $ref endpoint to resource.\n   *\n   * @param type Type of resource.\n   * @param id Id of the record.\n   * @return Ref endpoint as string.\n   */\n  getRefEndpoint(type: string, id: string): string {\n    let prefix = '';\n    if (this.configService.$refPrefix) {\n      prefix += this.configService.$refPrefix;\n    }\n    return `${prefix}${this.configService.apiEndpointPrefix}/${type}/${id}`;\n  }\n\n  /**\n   * Returns invenio API FormOption Endpoint corresponding to type.\n   *\n   * @param type Type of the resource\n   * @param absolute If absolute or relative url must be returned.\n   * @return Schema form endpoint.\n   */\n  getSchemaFormEndpoint(type: string, absolute = false): string {\n    let endpoint = this.configService.schemaFormEndpoint + '/' + type;\n    if (absolute === true) {\n      endpoint = this.configService.apiBaseUrl + endpoint;\n    }\n    return endpoint;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2023 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport {Component, HostListener} from \"@angular/core\";\n\n/**\n * Doc: https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event\n *\n * The beforeunload event is fired when the window, the document and its resources\n * are about to be unloaded. The document is still visible and the event is still\n * cancelable at this point.\n */\n@Component({\n    template: '',\n    standalone: false\n})\nexport abstract class AbstractCanDeactivateComponent {\n\n  abstract canDeactivate: boolean;\n\n  @HostListener('window:beforeunload', ['$event'])\n  unloadNotification($event: any) {\n    if (!this.canDeactivate) {\n        $event.returnValue = true;\n    }\n  }\n\n  /**\n   * Can deactivate changed on editor\n   * @param activate - boolean\n   */\n  canDeactivateChanged(activate: boolean): void {\n    this.canDeactivate = activate;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * Pipe for converting carriage returns to <br> html entities.\n */\n@Pipe({\n    name: 'nl2br',\n    standalone: false\n})\nexport class Nl2brPipe implements PipeTransform {\n\n  protected sanitizer: DomSanitizer = inject(DomSanitizer);\n\n  /**\n   * Returns transformed value containing <br> entities.\n   *\n   * @param value Value to transform.\n   * @return Transformed value.\n   */\n  transform(value?: string): any {\n    if (!value) {\n      return this.sanitizer.bypassSecurityTrustHtml('');\n    }\n    return this.sanitizer.bypassSecurityTrustHtml(\n      value.replace(/\\r\\n?|\\n/g, '<br>\\n')\n    );\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, inject } from '@angular/core';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\n\n@Component({\n    selector: 'ng-core-dialog',\n    template: `\n  <div class=\"core:flex core:flex-col core:gap-2\">\n    <div class=\"core:flex\" [innerHtml]=\"config.data.body|nl2br\"></div>\n    <div class=\"core:flex core:justify-end core:gap-1\">\n      <p-button\n        [label]=\"config.data.cancelTitleButton || 'Cancel'|translate\"\n        severity=\"danger\"\n        [outlined]=\"true\"\n        (onClick)=\"cancel()\"\n      />\n      @if (config.data.confirmButton) {\n        <p-button [label]=\"config.data.confirmTitleButton || 'OK'|translate\" (onClick)=\"confirm()\" />\n      }\n    </div>\n  </div>\n  `,\n    standalone: false\n})\nexport class DialogComponent {\n\n  config: DynamicDialogConfig = inject(DynamicDialogConfig);\n  protected ref: DynamicDialogRef = inject(DynamicDialogRef);\n\n  confirm(): void {\n    this.ref.close(true);\n  }\n\n  cancel(): void {\n    this.ref.close(false);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe for returning a default value if the given value is null or undefined.\n */\n@Pipe({\n    name: 'default', pure: true,\n    standalone: false\n})\nexport class DefaultPipe implements PipeTransform {\n  /**\n   * Returns a default value.\n   *\n   * @param value Value to check.\n   * @param defaultValue Value to return if value is null.\n   * @return Value or default value.\n   */\n  transform(value: any, defaultValue: any): any {\n    return value || defaultValue;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, Input } from '@angular/core';\nimport { Error } from './error';\n\n/**\n * Component for displaying errors.\n */\n@Component({\n    selector: 'ng-core-error',\n    templateUrl: './error.component.html',\n    standalone: false\n})\nexport class ErrorComponent {\n  // Error object containing title, status and optionally a message.\n  @Input() error: Error;\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<div class=\"core:text-center core:my-8\">\n  <p class=\"core:text-4xl\">\n    <i class=\"fa fa-flash core:mr-4\"></i>\n    <span class=\"core:text-muted-color\">{{ error.status }}</span>\n    {{ error.title }}\n  </p>\n  <h5 class=\"core:mt-8\">{{ error.message | default: ('You cannot access this page.' | translate) }}</h5>\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2023-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { AbstractCanDeactivateComponent } from '../component/abstract-can-deactivate.component';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { DialogComponent } from '../dialog/dialog.component';\n\n/**\n * When this guard is configured, it intercepts the form output without\n * saving or undoing changes.\n *\n * Route definition configuration\n * { path: 'foo/bar', canDeactivate: [ ComponentCanDeactivateGuard ] },\n *\n * Custom editor component configuration\n * class FooComponent AbstractCanDeactivateComponent {\n *  canDeactivate: boolean = false;\n *  ...\n * }\n *\n * Template configuration (add output canDeactivateChange)\n * <ng-core-editor\n *   (canDeactivateChange)=\"canDeactivateChanged($event)\"\n *   ...\n * ></ng-core-editor>\n */\n\n@Injectable()\nexport class ComponentCanDeactivateGuard {\n\n  protected translateService: TranslateService = inject(TranslateService);\n  protected dialogService: DialogService = inject(DialogService);\n\n  ref: DynamicDialogRef | undefined;\n\n  /**\n   * Displays a confirmation modal if the user leaves the form without\n   * saving or canceling\n   * @param component - AbstractCanDeactivateComponent\n   * @returns Observable<boolean> or boolean\n   */\n  canDeactivate(component: AbstractCanDeactivateComponent): Observable<boolean> | boolean {\n      if (!component.canDeactivate) {\n        this.ref = this.dialogService.open(DialogComponent, {\n          header: this.translateService.instant('Quit the page'),\n          data: {\n            body: this.translateService.instant(\n              'Do you want to quit the page? The changes made so far will be lost.'\n            ),\n            confirmButton: true,\n            confirmTitleButton: this.translateService.instant('Quit'),\n            cancelTitleButton: this.translateService.instant('Stay'),\n          },\n          dismissableMask: true,\n          modal: true,\n          style: { width: '25rem' }\n        });\n\n        return this.ref.onClose;\n      }\n\n      return true;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe for applying a callback function to filter array items.\n */\n@Pipe({\n    name: 'callbackArrayFilter',\n    standalone: false\n})\nexport class CallbackArrayFilterPipe implements PipeTransform {\n  /**\n   * Filter array items with the given callback function.\n   *\n   * @param items List of items.\n   * @param callback Callback function to apply.\n   * @return List of filtered values.\n   */\n  transform(items?: any[], callback?: (item: any) => boolean): any[] {\n    if (!items && !callback) {\n      return [];\n    }\n    if (items && !callback) {\n      return items;\n    }\n\n    return items.filter(item => callback(item));\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Get human readable file size.\n */\n@Pipe({\n    name: 'filesize',\n    standalone: false\n})\nexport class FilesizePipe implements PipeTransform {\n  /**\n   * Transform size to a human readable size.\n   *\n   * @param size Size of file.\n   * @param precision Number of decimals.\n   * @return Human readable file size.\n   */\n  transform(size: number, precision = 2) {\n    let i = -1;\n    const byteUnits = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n    do {\n        size /= 1024;\n        i++;\n    } while (size > 1024);\n\n    return [Math.max(size, 0.1).toFixed(precision), byteUnits[i]].join(' ');\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2021-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { marked } from 'marked';\n\n/**\n * Pipe to transform markdown to html.\n */\n@Pipe({\n    name: 'markdown',\n    standalone: false\n})\nexport class MarkdownPipe implements PipeTransform {\n\n  protected sanitizer: DomSanitizer = inject(DomSanitizer);\n\n  /**\n   * Transform markdown to HTML.\n   *\n   * @param value Markdown initial value.\n   * @returns HTML corresponding to markdown.\n   */\n  transform(value: string): SafeHtml {\n    const markValue: string = marked.parse(value, { gfm: true, breaks: false, async: false });\n    return this.sanitizer.bypassSecurityTrustHtml(markValue);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n  name: 'sanitize',\n  standalone: false\n})\nexport class SanitizePipe implements PipeTransform\n{\n  transform(value: string, regex = '<[^>]*>', replace = '', flag = 'g'): string {\n    const re = new RegExp(regex, flag);\n    return value.replace(re, replace);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * Source code: https://dev.to/codephobia/using-typescricore:pt-to-sort-by-keys-35ob\n */\n\n/**\n * Error messages\n */\nconst ERROR_REQUIRES_AT_LEAST_ONE_KEY = 'provide at least one key to sort by';\nconst ERROR_KEY_LENGTH_INVALID = 'a key was provided as an empty string';\nconst ERROR_DESC_KEY_LENGTH_INVALID = 'a descending key was missing the key name';\nconst ERROR_OBJECT_DOESNT_CONTAIN_KEY = 'a key you are attempting to sort by is not on all objects';\n\n/**\n *  Recursive function to sort values by their keys.\n */\nconst sortByKey = <T>(a: T, b: T, ...keys: string[]): number => {\n    // Get first key in array.\n    let key = keys.shift();\n\n    // Make sure we have a valid key name.\n    if (!key.length) {\n        throw new Error(ERROR_KEY_LENGTH_INVALID);\n    }\n\n    // Default to ascending order.\n    let desc = false;\n\n    // Check for descending sort.\n    if (key.charAt(0) === '-') {\n        // Make sure key has a name as well as the minus sign.\n        if (key.length < 2) {\n            throw new Error(ERROR_DESC_KEY_LENGTH_INVALID);\n        }\n\n        // Remove minus from key name.\n        key = key.substr(1);\n\n        // Flag as descending order.\n        desc = true;\n    }\n\n    // Make sure the objects both have the key. We make sure\n    // to check this after we have removed the minus sign.\n    if (!Object.prototype.hasOwnProperty.call(a, key) || !Object.prototype.hasOwnProperty.call(b, key)) {\n        throw new Error(ERROR_OBJECT_DOESNT_CONTAIN_KEY);\n    }\n\n    // Determine checks based on asc / desc.\n    const direction = (desc) ? -1 : 1;\n\n    // Perform bubble sort based on the values.\n    const authorizedSort = [-1, 1];\n    if (authorizedSort.includes(a[key].localeCompare(b[key]))) {\n      return a[key].localeCompare(b[key]) * direction;\n    }\n\n    // The values of the current key are equal, so if we still\n    // have keys to check recursively, check the next key.\n    if (keys.length) {\n        return sortByKey(a, b, ...keys);\n    }\n\n    // All keys returned and no more sorting needed.\n    return 0;\n};\n\n/**\n * Wrapper sort function for the recursive one.\n */\nexport const sortByKeys = <T>(data: T[], ...keys: string[]): T[] => {\n    // Make sure we have at least one key to sort by.\n    if (!keys.length) {\n        throw new Error(ERROR_REQUIRES_AT_LEAST_ONE_KEY);\n    }\n\n    // Sort data.\n    data.sort((a: T, b: T): number => {\n        return sortByKey(a, b, ...keys);\n    });\n\n    // Return sorted data.\n    return data;\n};\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n * Source code: https://dev.to/codephobia/using-typescript-to-sort-by-keys-35ob\n */\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { sortByKeys } from '../utils/sort-by-keys';\n\n/**\n * Pipe for the sorting function.\n */\n@Pipe({\n    name: 'sortByKeys',\n    pure: true,\n    standalone: false\n})\nexport class SortByKeysPipe implements PipeTransform {\n  /**\n   * Order elements by sort key(s)\n   * @param value - array of values\n   * @param keys - string, sort key\n   */\n  public transform(value: any, ...keys: string[]): any[] {\n    return sortByKeys<any>(value, ...keys);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe for truncating text.\n */\n@Pipe({\n    name: 'truncateText',\n    standalone: false\n})\nexport class TruncateTextPipe implements PipeTransform {\n  /**\n   * Truncate text.\n   *\n   * @param value Text to truncate.\n   * @param limit Limit after which the text is truncated.\n   * @param trail Trailing chars\n   * @param type Word or Char type\n   * @return Truncated string\n   */\n  transform(value: string, limit = 40, trail = '…', type: 'word'|'char' = 'word'): string {\n    let result = value || '';\n\n    if (type === 'char' && value) {\n      if (value.length < limit) {\n        return value;\n      } else {\n        return value.substring(0, limit) + trail;\n      }\n    }\n\n    if (type === 'word' && value) {\n      const words = value.split(/\\s+/);\n      if (words.length > Math.abs(limit)) {\n        if (limit < 0) {\n          limit *= -1;\n          result =\n            trail + words.slice(words.length - limit).join(' ');\n        } else {\n          result = words.slice(0, limit).join(' ') + trail;\n        }\n      }\n    }\n\n    return result;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nexport function extractIdOnRef(ref: string) {\n  if (ref != null) {\n    const pidRegExp = new RegExp('.*/(.*)$');\n    return pidRegExp.exec(ref)[1];\n  }\n  return null;\n}\n\nexport function cleanDictKeys(data: any) {\n  // let data = _.cloneDeep(data);\n  for (const key in data) {\n    if (data[key] === null || data[key] === undefined || data[key].length === 0) {\n      delete data[key];\n    }\n  }\n  return data;\n}\n\nexport function capitalize(value: string) {\n  return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nexport function removeChars(value: string, chars: string[] = ['\"']): string {\n  const re = new RegExp('['+ chars.join('') +']', 'gi');\n  return value.replace(re, '');\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { capitalize } from '../utils/utils';\n\n/**\n * Uppercase the first letter of the string.\n */\n@Pipe({\n    name: 'ucfirst',\n    standalone: false\n})\nexport class UpperCaseFirstPipe implements PipeTransform {\n  /**\n   * Uppercase the first letter of the given value.\n   *\n   * @param value Value to transform.\n   * @return Transformed value.\n   */\n  transform(value: string | null | undefined): string | null | undefined {\n    if (!value) {\n      return value;\n    }\n\n    return capitalize(value);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { NgModule } from '@angular/core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { AutoFocusModule } from 'primeng/autofocus';\nimport { BadgeModule } from 'primeng/badge';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { DividerModule } from 'primeng/divider';\nimport { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog';\nimport { FieldsetModule } from 'primeng/fieldset';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MenuModule } from 'primeng/menu';\nimport { MessageModule } from 'primeng/message';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { PanelModule } from 'primeng/panel';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { RippleModule } from 'primeng/ripple';\nimport { ScrollPanelModule } from 'primeng/scrollpanel';\nimport { SelectModule } from 'primeng/select';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { TabsModule } from 'primeng/tabs';\nimport { TextareaModule } from 'primeng/textarea';\nimport { TieredMenuModule } from 'primeng/tieredmenu';\nimport { ToastModule } from 'primeng/toast';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { FluidModule } from 'primeng/fluid'\n\n@NgModule({\n  providers: [\n    ConfirmationService,\n    DialogService,\n    MessageService\n  ],\n  exports: [\n    AutoCompleteModule,\n    AutoFocusModule,\n    BadgeModule,\n    ButtonModule,\n    CardModule,\n    CheckboxModule,\n    ConfirmDialogModule,\n    DatePickerModule,\n    DividerModule,\n    DynamicDialogModule,\n    FieldsetModule,\n    FluidModule,\n    InputGroupAddonModule,\n    InputGroupModule,\n    InputNumberModule,\n    InputTextModule,\n    ListboxModule,\n    MenuModule,\n    MessageModule,\n    PaginatorModule,\n    PanelModule,\n    RadioButtonModule,\n    RippleModule,\n    ScrollPanelModule,\n    SelectModule,\n    SplitButtonModule,\n    TabsModule,\n    TextareaModule,\n    TieredMenuModule,\n    ToastModule,\n    ToggleSwitchModule,\n    TooltipModule,\n  ],\n})\nexport class PrimeNgCoreModule {}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, ElementRef, ViewChild, effect, input, output } from '@angular/core';\n\n@Component({\n    selector: 'ng-core-search-input',\n    templateUrl: './search-input.component.html',\n    standalone: false\n})\nexport class SearchInputComponent {\n  /** Input Id */\n  inputId = input<string>('search');\n\n  /** Display label */\n  displayLabel = input<boolean>(false);\n\n  /** Placeholder */\n  placeholder = input<string>('search');\n\n  /** Value to search */\n  searchText = input<string>('');\n\n  /** Remove trailing and leading spaces if true */\n  trimQueryString = input<boolean>(true);\n\n  /** Disabled attribute of search input */\n  disabled = input<boolean>(false);\n\n  /** Make the focus on field */\n  focus = input<boolean>(false);\n\n  /** Search value event */\n  search = output<string>();\n\n  /** Search input reference */\n  @ViewChild('searchInput') input: ElementRef;\n\n  constructor() {\n    effect(() => {\n      if (this.focus() && this.input?.nativeElement) {\n        this.input.nativeElement.focus();\n      }\n    });\n  }\n\n  /**\n   * Start the search by pressing enter\n   * or clicking on the lens.\n   */\n  doSearch(): void {\n    const { value } = this.input.nativeElement;\n    this.search.emit(this.trimQueryString() ? value.trim() : value);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (displayLabel()) {\n  <label [for]=\"inputId()\" class=\"core:font-bold\">{{ placeholder() }}</label>\n}\n<p-inputGroup>\n  <input\n    #searchInput\n    [pAutoFocus]=\"focus()\"\n    pInputText\n    [disabled]=\"disabled()\"\n    [id]=\"inputId()\"\n    [placeholder]=\"!displayLabel() && placeholder() ? placeholder() : ''\"\n    [value]=\"searchText()\"\n    (keydown.enter)=\"doSearch()\"\n    attr.aria-label=\"{{ placeholder() }}\"\n  />\n  <p-inputGroupAddon>\n    <p-button\n      icon=\"fa fa-search\"\n      variant=\"text\"\n      severity=\"secondary\"\n      (click)=\"doSearch()\"\n      class=\"core:h-[2.5rem]\"\n    />\n  </p-inputGroupAddon>\n</p-inputGroup>\n","/*\n * RERO angular core\n * Copyright (C) 2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\nimport { RouterStateSnapshot, TitleStrategy } from '@angular/router';\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { CoreConfigService } from \"../core-config.service\";\n\n@Injectable({\n  providedIn: 'root'\n})\n\nexport class PageTitleStrategy extends TitleStrategy {\n\n  private title = inject(Title);\n  private config = inject(CoreConfigService);\n  private translate = inject(TranslateService);\n\n  override updateTitle(routerState: RouterStateSnapshot) {\n    const title = this.buildTitle(routerState);\n    let projectTitle = '';\n\n    if (this.config.projectTitle) {\n      projectTitle = this.config.projectTitle;\n    }\n    if (projectTitle && title) {\n      this.title.setTitle(`${this.translate.instant(title)} | ${projectTitle}`);\n    } else if (projectTitle) {\n      this.title.setTitle(projectTitle);\n    } else if (title) {\n      this.title.setTitle(this.translate.instant(title));\n    } else {\n      this.title.setTitle('-');\n    }\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, Input, OnInit } from '@angular/core';\n\n/**\n * Component for displaying a \"read more\" link after a text.\n *\n * OLD VERSION: use the new component ng-core-read-more\n * @DEPRECATED\n */\n@Component({\n    selector: 'ng-core-text-read-more',\n    templateUrl: './text-read-more.component.html',\n    standalone: false\n})\nexport class TextReadMoreComponent implements OnInit {\n  /** Initial text  */\n  @Input() text: string;\n\n  /** Number of parts to display (depending of the unit)  */\n  @Input() limit = 50;\n\n  /** \"Show more\" label to display */\n  @Input() showMoreLabel = 'Show more';\n\n  /** \"Show less\" label to display  */\n  @Input() showLessLabel = 'Show less';\n\n  /** Splitting unit [ word | character] */\n  @Input() unit = 'word';\n\n  /** trailing string */\n  @Input() trailing = '…';\n\n  /** The text that will be display */\n  textToDisplay: string;\n\n  /** boolean to know if initial text is expanded  */\n  isExpanded = false;\n\n  /** boolean to know if limit is reached */\n  isLimitReached = true;\n\n  /** The truncated text  */\n  private sTruncateText: string;\n\n  ngOnInit() {\n    this.textToDisplay = this.sTruncateText = this._truncateText();\n    if (this.text === this.textToDisplay) {\n      this.isLimitReached = false;\n    }\n  }\n\n  /**\n   * Allow to toggle content of the field\n   * @param event : Click event\n   */\n  toggleText(event: Event) {\n    event.preventDefault();\n    this.textToDisplay = (this.isExpanded)\n      ? this.sTruncateText\n      : this.text;\n    this.isExpanded = !this.isExpanded;\n  }\n\n  /**\n   * Show the link label depending of isExpanded\n   */\n  get linkLabel(): string {\n    return this.isExpanded ? this.showLessLabel : this.showMoreLabel;\n  }\n\n  /**\n   * Truncate initial text using the defined limit and unit.\n   */\n  private _truncateText(): string {\n    if (this.text === undefined) {\n       return '';\n    }\n    let pattern: any = /\\s+/;\n    let joinText = ' ';\n    if (this.unit !== 'word') {\n      pattern = '';\n      joinText = '';\n    }\n    const parts = this.text.split(pattern);\n\n    if (parts.length <= this.limit) {\n      return this.text;\n    } else {\n      if (this.limit < 0) {\n        const tmpLimit = this.limit * -1;\n        return this.trailing + parts.slice(parts.length - tmpLimit, parts.length).join(joinText);\n      } else {\n        return parts.slice(0, this.limit).join(joinText) + this.trailing;\n      }\n    }\n  }\n}\n\n\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (isLimitReached && limit<0) {\n  <a class=\"core:pl-2\" href=\"#\" (click)=\"toggleText($event)\">{{ linkLabel }}</a>\n}\n<span [innerHTML]=\"textToDisplay | nl2br\"></span>\n@if (isLimitReached && limit>=0) {\n  <a class=\"core:pl-2\" href=\"#\" (click)=\"toggleText($event)\">{{ linkLabel }}</a>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { DatePipe } from '@angular/common';\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n    name: 'dateTranslate',\n    pure: false,\n    standalone: false\n})\nexport class DateTranslatePipe extends DatePipe implements PipeTransform {\n\n  protected translateService: TranslateService = inject(TranslateService);\n\n  transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string | null;\n  transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;\n  transform(value: Date | string | number | null | undefined, format?: string, timezone?: string, locale?: string): string | null\n  {\n    if (!locale) {\n      locale = this.translateService.currentLang;\n    }\n\n    if (locale === 'en') {\n      locale = `${locale}-GB`;\n    }\n\n    return super.transform(value, format, timezone, locale);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport de from './languages/de.json';\nimport en from './languages/en.json';\nimport fr from './languages/fr.json';\nimport it from './languages/it.json';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TranslateLanguageService {\n\n  protected translateService: TranslateService = inject(TranslateService);\n\n  // List of preferred languages\n  static PREFERRED_LANGUAGES = ['eng', 'fre', 'ger', 'ita'];\n\n  // Available languages (import)\n  private _availableLanguages = { de, en, fr, it };\n\n  /**\n   * @param langCode - ISO 639-2 (3 characters)\n   * @param language - ISO 639-1 (2 characters)\n   * @return human language - string\n   */\n  translate(langCode: string, language?: string) {\n    const lang = language || this.translateService.currentLang;\n    if (!(lang in this._availableLanguages)) {\n      return langCode;\n    }\n\n    if (!(langCode in this._availableLanguages[lang])) {\n      return langCode;\n    }\n\n    return this._availableLanguages[lang][langCode];\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateLanguageService } from './translate-language.service';\n\n@Pipe({\n    name: 'translateLanguage',\n    pure: false,\n    standalone: false\n})\nexport class TranslateLanguagePipe implements PipeTransform {\n\n  protected translateLanguage: TranslateLanguageService = inject(TranslateLanguageService);\n\n  /**\n   * transform language code to human language\n   * @param langCode - ISO 639-2 (3 characters)\n   * @param language - ISO 639-1 (2 characters)\n   */\n  transform(langCode: string, language?: string): string {\n    return this.translateLanguage.translate(langCode, language);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateLoader as BaseTranslateLoader } from '@ngx-translate/core';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { CoreConfigService } from '../core-config.service';\nimport de from './i18n/de.json';\nimport en from './i18n/en.json';\nimport fr from './i18n/fr.json';\nimport it from './i18n/it.json';\nimport { inject } from '@angular/core';\n\n/**\n * Loader for translations used in ngx-translate library.\n */\nexport class TranslateLoader implements BaseTranslateLoader {\n\n  protected coreConfigService: CoreConfigService = inject(CoreConfigService);\n  protected http: HttpClient = inject(HttpClient);\n\n  // translations\n  private translations = {};\n\n  // locale translations\n  // with angular<9 assets are not available for libraries\n  // See: https://angular.io/guide/creating-libraries#managing-assets-in-a-library\n  private coreTranslations = { de, en, fr, it };\n\n  /**\n   * Return observable used by ngx-translate to get translations.\n   * @param lang - string, language to retrieve translations from.\n   */\n  getTranslation(lang: string): Observable<any> {\n    // Already in cache\n    if (this.translations[lang] != null) {\n      return of(this.translations[lang]);\n    }\n    const urls = this.coreConfigService.translationsURLs;\n    // create the list of http requests\n    const observers = urls.map(\n      url => {\n        const langURL = url.replace('${lang}', lang);\n        return this.http.get(langURL).pipe(\n          catchError(() => {\n            console.log(`ERROR: Cannot load translation: ${langURL}`);\n            return of([]);\n          })\n        );\n      }\n    );\n    // Get local and backend translations\n    return forkJoin(observers).pipe(\n      map((translations) => {\n        // copy local translations\n        if (this.coreTranslations[lang] != null) {\n          this.translations[lang] = { ...this.coreTranslations[lang] };\n        }\n        // get remote translations\n        translations.map(trans =>\n          this.translations[lang] = {\n            ...this.translations[lang],\n            ...trans\n          }\n        );\n        return this.translations[lang];\n      })\n    );\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { registerLocaleData } from '@angular/common';\nimport localeDe from '@angular/common/locales/de';\nimport localeEn from '@angular/common/locales/en-GB';\nimport localeFr from '@angular/common/locales/fr';\nimport localeIt from '@angular/common/locales/it';\nimport { inject, Injectable } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { DateTime } from \"luxon\";\nimport de from 'primelocale/de.json';\nimport en from 'primelocale/en.json';\nimport fr from 'primelocale/fr.json';\nimport it from 'primelocale/it.json';\nimport { PrimeNG } from \"primeng/config\";\nimport { Observable } from \"rxjs\";\nimport { CoreConfigService } from \"../core-config.service\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgCoreTranslateService extends TranslateService {\n\n  protected primeNG: PrimeNG = inject(PrimeNG);\n  protected coreConfigService: CoreConfigService = inject(CoreConfigService);\n\n  private locales = {\n    de: { angular: localeDe, primeng: de },\n    en: { angular: localeEn, primeng: en },\n    fr: { angular: localeFr, primeng: fr },\n    it: { angular: localeIt, primeng: it }\n  };\n\n  initialize(): void {\n    for (const [key, value] of Object.entries(this.locales)) {\n      registerLocaleData(value.angular, key);\n    }\n    const languages: string[] = this.coreConfigService.languages;\n    super.addLangs(languages);\n\n    super.onLangChange.subscribe(translation => {\n      this.use(translation.lang);\n    });\n    super.setDefaultLang(this.coreConfigService.defaultLanguage);\n    if (!super.currentLang) {\n      super.use(this.coreConfigService.defaultLanguage);\n    }\n  }\n\n  use(lang: string): Observable<any> {\n    DateTime.locale = lang;\n    this.primeNG.setTranslation(this.locales[lang].primeng[lang]);\n\n    return super.use(lang);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { AfterContentChecked, Directive, ElementRef, inject, input } from '@angular/core';\nimport renderMathInElement, { RenderMathInElementOptions } from 'katex/contrib/auto-render';\n\n// Doc: https://katex.org/docs/autorender\n\n@Directive({\n  selector: '[katex]',\n  standalone: false\n})\nexport class KatexDirective implements AfterContentChecked {\n\n  private el = inject(ElementRef);\n\n  katex = input<RenderMathInElementOptions>();\n\n  ngAfterContentChecked(): void {\n    renderMathInElement(this.el.nativeElement, this.katex());\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, computed, input, linkedSignal } from '@angular/core';\nimport { _ } from '@ngx-translate/core';\n\n@Component({\n  selector: 'ng-core-read-more',\n  template: `\n    @if(katex()) {\n      <span katex [innerHTML]=\"textDisplay() | nl2br\"></span>\n    } @else {\n      <span [innerHTML]=\"textDisplay() | nl2br\"></span>\n    }\n\n    @if(showMoreActivated()) {\n      &nbsp;<a class=\"core:font-bold\" href=\"#\" (click)=\"toggleText($event)\">{{ showMoreLinkLabel() | translate }}</a>\n    }\n  `,\n  standalone: false\n})\nexport class ReadMoreComponent {\n\n  text = input.required<string>();\n  limit = input<number>(50);\n  unit = input<'char'|'word'>('word');\n  trailing = input<string>('…');\n  showMoreLabel = input<string>(_('show more'));\n  showLessLabel = input<string>(_('show less'));\n  katex = input<boolean>(false);\n\n  showMore = linkedSignal(() => this.showMoreActivated());\n\n  textDisplay = computed(() => this.processText(this.originalText(), this.showMore()));\n  showMoreLinkLabel = computed(() => this.showMore() ? this.showMoreLabel() : this.showLessLabel());\n  showMoreActivated = computed(() => this.countElement() > this.limit());\n\n  private originalText = computed(() => this.text().replace(/<.*?>/g, ''));\n\n  toggleText(event: Event): void {\n    event.preventDefault();\n    this.showMore.set(!this.showMore());\n  }\n\n  private countElement(): number {\n    return (this.unit() === 'word') ? this.splitWord().length : this.originalText().length;\n  }\n\n  private processText(data: string, more: boolean): string {\n    if (more) {\n      let result: any[] = [];\n      if (this.unit() === 'word') {\n        result = this.splitWord().slice(0, this.limit());\n      } else {\n        result.push(data.slice(0, this.limit()));\n      }\n      result.push(this.trailing());\n      return result.join(' ');\n    } else {\n      return data;\n    }\n  }\n\n  private splitWord(): string[] {\n    return this.originalText().split(/\\s+/);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, NgModule, provideAppInitializer } from '@angular/core';\nimport { RouterModule, TitleStrategy } from '@angular/router';\nimport { TranslateLoader as BaseTranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { NgxSpinnerModule } from 'ngx-spinner';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { of } from 'rxjs';\nimport { CoreConfigService } from './core-config.service';\nimport { DialogComponent } from './dialog/dialog.component';\nimport { ErrorComponent } from './error/error.component';\nimport { ComponentCanDeactivateGuard } from './guard/component-can-deactivate.guard';\nimport { CallbackArrayFilterPipe } from './pipe/callback-array-filter.pipe';\nimport { DefaultPipe } from './pipe/default.pipe';\nimport { FilesizePipe } from './pipe/filesize.pipe';\nimport { MarkdownPipe } from './pipe/markdown.pipe';\nimport { Nl2brPipe } from './pipe/nl2br.pipe';\nimport { SanitizePipe } from './pipe/sanitize.pipe';\nimport { SortByKeysPipe } from './pipe/sort-by-keys.pipe';\nimport { TruncateTextPipe } from './pipe/truncate-text.pipe';\nimport { UpperCaseFirstPipe } from './pipe/ucfirst.pipe';\nimport { PrimeNgCoreModule } from './prime-ng-core-module';\nimport { SearchInputComponent } from './search-input/search-input.component';\nimport { PageTitleStrategy } from './service/page-title-strategy';\nimport { TextReadMoreComponent } from './text-read-more/text-read-more.component';\nimport { DateTranslatePipe } from './translate/date-translate-pipe';\nimport { TranslateLanguagePipe } from './translate/translate-language.pipe';\nimport { TranslateLoader } from './translate/translate-loader';\nimport { NgCoreTranslateService } from './translate/translate-service';\nimport { KatexDirective } from './directive/katex.directive';\nimport { ReadMoreComponent } from './read-more/read-more.component';\n\n@NgModule({\n    declarations: [\n        Nl2brPipe,\n        DefaultPipe,\n        TruncateTextPipe,\n        UpperCaseFirstPipe,\n        CallbackArrayFilterPipe,\n        DateTranslatePipe,\n        DialogComponent,\n        ReadMoreComponent,\n        SearchInputComponent,\n        TranslateLanguagePipe,\n        TextReadMoreComponent,\n        SortByKeysPipe,\n        ErrorComponent,\n        FilesizePipe,\n        MarkdownPipe,\n        SanitizePipe,\n        KatexDirective\n    ],\n    imports: [\n        CommonModule,\n        RouterModule,\n        TranslateModule.forChild({\n            loader: {\n                provide: BaseTranslateLoader,\n                useClass: TranslateLoader,\n                deps: [CoreConfigService, HttpClient]\n            }\n        }),\n        NgxSpinnerModule,\n        PrimeNgCoreModule\n    ],\n    exports: [\n        PrimeNgCoreModule,\n        CommonModule,\n        TranslateModule,\n        Nl2brPipe,\n        DefaultPipe,\n        TruncateTextPipe,\n        TranslateLanguagePipe,\n        UpperCaseFirstPipe,\n        CallbackArrayFilterPipe,\n        DateTranslatePipe,\n        FilesizePipe,\n        DialogComponent,\n        ReadMoreComponent,\n        SearchInputComponent,\n        TextReadMoreComponent,\n        ErrorComponent,\n        SortByKeysPipe,\n        NgxSpinnerModule,\n        MarkdownPipe,\n        SanitizePipe,\n        KatexDirective\n    ],\n    providers: [\n      provideAppInitializer(() => {\n        const translateService = inject(NgCoreTranslateService);\n        translateService.initialize();\n        return of(true);\n      }),\n      { provide: TranslateService, useClass: NgCoreTranslateService },\n      { provide: TitleStrategy, useClass: PageTitleStrategy },\n      ComponentCanDeactivateGuard,\n      ConfirmationService,\n      MessageService,\n      SanitizePipe\n    ]\n})\nexport class CoreModule { }\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Interface representing an error.\n */\nexport interface Error {\n  status: number;\n  title: string;\n  message?: string;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { extractIdOnRef } from '../../utils/utils';\nimport { JSONSchema7 as JSONSchema7Base } from 'json-schema';\n\nexport interface JSONSchema7 extends JSONSchema7Base {\n  widget: any;\n}\n\n/**\n * Initialize the Formly widget on JSONSchema\n * @param schema - object, the JSONSchema\n */\nfunction createWidgetFormlyConfigProps(schema: any) {\n  if (!schema.widget) {\n    schema.widget = {};\n  }\n  if (!schema.widget.formlyConfig) {\n    schema.widget.formlyConfig = {};\n  }\n  if (!schema.widget.formlyConfig.props) {\n    schema.widget.formlyConfig.props = {};\n  }\n}\n\n/**\n * Resolve $ref definition and set properties on field\n * @param schema - json schema all properties\n * @param schemaProperties - json schema level\n * @returns the updated schema\n */\nexport function resolve$ref(schema: any, schemaProperties: any): any {\n  if (schemaProperties) {\n    Object.keys(schemaProperties).forEach((property: any) => {\n      const field = schemaProperties[property];\n      if (field.properties) {\n        resolve$ref(schema, field.properties);\n      }\n      // The field contains a $ref definition\n      if (field.$ref) {\n        const paths = field.$ref.replace('#/', '').split('/');\n        let def = schema;\n        paths.forEach((path: string) => {\n          def = def[path];\n        });\n        // Populate field with new definition\n        Object.keys(def).forEach((defKey: string) => {\n          if (defKey === 'widget' && def[defKey].formlyConfig?.templateOptions) {\n            def[defKey].formlyConfig.props = def[defKey].formlyConfig.templateOptions;\n            delete def[defKey].formlyConfig.templateOptions;\n          }\n          field[defKey] = def[defKey];\n        });\n        // Delete reference\n        delete field.$ref;\n      }\n    });\n  }\n\n  return schema;\n}\n\n/**\n * Process required properties on the JSONSchema.\n * @param schema - object, the JSONSchema\n * @returns object, a processed required properties JSONSchema\n */\nfunction processRequiredJsonSchema(schema: any): any {\n  schema.required.map((key: string) => {\n    const childSchema = schema.properties[key];\n      if (childSchema) {\n        createWidgetFormlyConfigProps(childSchema);\n        childSchema.widget.formlyConfig.props.initialRequired = true;\n      }\n  });\n\n  return schema;\n}\n\n/**\n * Process order properties on the JSONSchema\n * @param schema - object, the JSONSchema\n * @returns object, a processed order properties JSONSchema\n */\nfunction processPropertiesOder(schema: any): any {\n  // copy the data\n  schema._properties = { ...schema.properties };\n  // new ordered properties\n  schema.properties = {};\n  // copy in the right order\n  for (const property of schema.propertiesOrder) {\n    schema.properties[property] = schema._properties[property];\n  }\n\n  return schema;\n}\n\n\n/**\n * Process JSONSchema\n * This re-order the object properties given a local defined\n * `propertiesOrder` property.\n * The process the required properties given a local defined\n * `required` property.\n * @param schema - object, the JSONSchema\n * @returns object, a converted JSONSchema\n */\nexport function processJsonSchema(schema: any): any {\n  if (schema.properties) {\n    if (schema.propertiesOrder) {\n      schema = processPropertiesOder(schema);\n    }\n    if (schema.required) {\n      schema = processRequiredJsonSchema(schema);\n    }\n    // recursion for objects\n    for (const property of Object.keys(schema.properties)) {\n      processJsonSchema(schema.properties[property]);\n    }\n  }\n  // recursion for array\n  if (schema.items) {\n    processJsonSchema(schema.items);\n  }\n  // recursion for oneOf\n  if (schema.oneOf) {\n    for (const item of schema.oneOf) {\n      processJsonSchema(item);\n    }\n  }\n  // recursion for anyOf\n  if (schema.anyOf) {\n    for (const item of schema.anyOf) {\n      processJsonSchema(item);\n    }\n  }\n  // recursion for allOf\n  if (schema.allOf) {\n    for (const item of schema.allOf) {\n      processJsonSchema(item);\n    }\n  }\n  // recursion for definitions\n  if (schema.definitions) {\n    for (const property of Object.keys(schema.definitions)) {\n      processJsonSchema(schema.definitions[property]);\n    }\n  }\n  return schema;\n}\n\n/**\n * Replace $ref by pid\n *\n * @param schema - object, the JSONSchema\n * @param data - object, the data to be cleaned\n * @returns object, a fresh copy of the data with replacements\n */\nexport function resolveRefs(data: any) {\n  // array?\n  if (data instanceof Array) {\n    for (const d of data) {\n      // recursion\n      const value = resolveRefs(d);\n    }\n  }\n  // object\n  if (data instanceof Object) {\n    // new object with resolved refs\n    const newObject: any = {};\n    for (const key of Object.keys(data)) {\n      const value = resolveRefs(data[key]);\n      if (key === '$ref') {\n        newObject.pid = extractIdOnRef(value);\n      } else {\n        newObject[key] = value;\n      }\n    }\n    return newObject;\n  }\n  return data;\n}\n\n/**\n * Tell if a value can be considered as empty\n * @param value - any, the value to check\n * @returns boolean, true if the value is empty\n */\nexport function isEmpty(value: any) {\n  return (\n    // null or undefined\n    value == null ||\n    // has length and it's zero (array, string)\n    (Object.hasOwn(value, 'length') && value.length === 0) ||\n    // is an Object and has no keys\n    (value instanceof Object && Object.keys(value).length === 0)\n  );\n}\n\n/**\n * Recursively remove the empty values\n * @param data - object, the data to be cleaned\n * @returns object, a fresh copy of the clean data\n */\nexport function removeEmptyValues(data: any) {\n  // array?\n  if (data instanceof Array) {\n    // new array with non empty values\n    const newArray = [];\n    for (const d of data) {\n      // recursion\n      const value = removeEmptyValues(d);\n      if (!isEmpty(value)) {\n        newArray.push(value);\n      }\n    }\n    return newArray;\n  }\n  // object?\n  if (data instanceof Object) {\n    // new object with non empty values\n    const newObject = {};\n    for (const key of Object.keys(data)) {\n      const value = removeEmptyValues(data[key]);\n      if (!isEmpty(value)) {\n        newObject[key] = value;\n      }\n    }\n    return newObject;\n  }\n  return data;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, throwError } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RecordHandleErrorService {\n\n  protected translateService: TranslateService = inject(TranslateService);\n\n  /**\n   * handle http error\n   * @param error - HttpErrorResponse\n   * @returns Observable\n   */\n  handleError(error: HttpErrorResponse, resourceName?: string): Observable<never> {\n    return this.standardHandleError(error);\n  }\n\n  /**\n   * Standard handle error (base error)\n   * @param error - HttpErrorResponse\n   * @returns Observable\n   */\n  protected standardHandleError(error: HttpErrorResponse): Observable<never> {\n    // handle Marshmallow errors\n    //   Python marshmallow library can raise ValidationError. In this case, the message is simply 'Validation error'\n    //   but list of errors are passed into the `errors` fields.\n    if (error.error?.errors) {\n      const message = typeof(error.error.errors) === 'object'\n      ? error.error.errors.message\n      : error.error.errors\n          .map(err => this.translateService.instant(err.message))\n          .join('; ');\n      return throwError(() => ({ status: error.status, title: message}));\n    }\n\n    // check if we have possible custom error message to display\n    if (error.status === 400 && Object.hasOwn(error.error, 'message')) {\n      let { message } = error.error;\n      message = message.replace(/^Validation error: /, '').trim();  // Remove Invenio `ValidationError` header\n      return throwError(() => ({ status: error.status, title: this.translateService.instant(message) }));\n    }\n\n    // If not, then return default message\n    switch (error.status) {\n      case 400:\n        return throwError(() => ({ status: error.status, title: this.translateService.instant('Bad request') }));\n      case 401:\n        return throwError(() => ({ status: error.status, title: this.translateService.instant('Unauthorized') }));\n      case 403:\n        return throwError(() => ({ status: error.status, title: this.translateService.instant('Forbidden') }));\n      case 404:\n        return throwError(() => ({ status: error.status, title: this.translateService.instant('Not found') }));\n      default:\n        return throwError(() => ({ status: 500, title: this.translateService.instant('An error occurred') }));\n    }\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subject, of } from 'rxjs';\nimport { catchError, debounceTime, map, tap } from 'rxjs/operators';\nimport { ApiService } from '../api/api.service';\nimport { Error } from '../error/error';\nimport { resolveRefs } from './editor/utils';\nimport { Record } from './record';\nimport { RecordHandleErrorService } from './record.handle-error.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RecordService {\n\n  protected http: HttpClient = inject(HttpClient);\n  protected apiService: ApiService = inject(ApiService);\n  protected translateService: TranslateService = inject(TranslateService);\n  protected recordHandleErrorService: RecordHandleErrorService = inject(RecordHandleErrorService);\n\n  static readonly DEFAULT_REST_RESULTS_SIZE = 10;\n  static readonly MAX_REST_RESULTS_SIZE = 9999;\n\n  /**\n   * Event for record created\n   */\n  private onCreate = new Subject<RecordEvent>();\n\n  /**\n   * Event for record updated\n   */\n  private onUpdate = new Subject<RecordEvent>();\n\n  /**\n   * Event for record deleted\n   */\n  private onDelete = new Subject<RecordEvent>();\n\n  /**\n   * On create observable\n   * @return onCreate Subject\n   */\n  get onCreate$() {\n    return this.onCreate.asObservable();\n  }\n\n  /**\n   * On update observable\n   * @return onUpdate Subject\n   */\n  get onUpdate$() {\n    return this.onUpdate.asObservable();\n  }\n\n  /**\n   * On delete observable\n   * @return onDelete Subject\n   */\n  get onDelete$() {\n    return this.onDelete.asObservable();\n  }\n\n  /**\n   * Get records filtered by given parameters.\n   *\n   * @param type - string, type of resource\n   * @param query - string, keyword to search for\n   * @param page - number, return records corresponding to this page\n   * @param itemsPerPage - number, number of records to return\n   * @param aggregationsFilters - list, option list of filters; usually used by\n   *                              the aggregation filters.\n   * @param preFilters - object, option list of additional filters.  The value can\n   *                     a string or a list of string to filter with multiple values.\n   * @param headers - HttpHeaders optional http header for the backend call.\n   * @param sort - parameter for sorting records (eg. 'mostrecent' or '-mostrecent')\n   * @param facets - list of strings, define which aggregations/facets should be included into the response.\n   */\n  getRecords(\n    type: string,\n    query = '',\n    page = 1,\n    itemsPerPage = RecordService.DEFAULT_REST_RESULTS_SIZE,\n    aggregationsFilters: any[] = [],\n    preFilters: object = {},\n    headers: any = null,\n    sort: string = null,\n    facets: string[] = []\n  ): Observable<Record | Error> {\n    // Build query string\n    let httpParams = new HttpParams().set('q', query);\n    httpParams = httpParams.append('page', '' + page);\n    httpParams = httpParams.append('size', '' + itemsPerPage);\n\n    if (sort) {\n      httpParams = httpParams.append('sort', sort);\n    }\n\n    // aggregationsFilters\n    aggregationsFilters.map((filter) => {\n      filter.values.map((value: string) => {\n        httpParams = httpParams.append(filter.key, value);\n      });\n    });\n\n    // preFilters\n    for (const key of Object.keys(preFilters)) {\n      const value = preFilters[key];\n      if (Array.isArray(value)) {\n        value.map((val) => {\n          httpParams = httpParams.append(key, val);\n        });\n      } else {\n        httpParams = httpParams.append(key, value);\n      }\n    }\n\n    // facets management\n    //   if array `facets` is an empty array, no aggregations data will be included into response.s\n    httpParams = httpParams.append('facets', facets.join(','));\n\n    // http request with headers\n    return this.http\n      .get<Record>(this.apiService.getEndpointByType(type, true) + '/', {\n        params: httpParams,\n        headers: this._createRequestHeaders(headers),\n      })\n      .pipe(catchError((error) => this._handleError(error, type)));\n  }\n\n  /**\n   * Delete a record.\n   * @param type - string, type of record\n   * @param pid - string, PID to remove\n   */\n  delete(type: string, pid: string): Observable<void | Error> {\n    return this.http\n      .delete<void>(this.apiService.getEndpointByType(type, true) + '/' + pid)\n      .pipe(\n        catchError((error) => this._handleError(error, type)),\n        tap(() => this.onDelete.next(this._createEvent(type, { pid })))\n      );\n  }\n\n  /**\n   * Get record data\n   * @param type - string, type of resource\n   * @param pid - string, record PID\n   */\n  getRecord(\n    type: string,\n    pid: string,\n    resolve = 0,\n    headers: any = {}\n  ): Observable<any | Error> {\n    return this.http\n      .get<Record>(\n        `${this.apiService.getEndpointByType(\n          type,\n          true\n        )}/${pid}?resolve=${resolve}`,\n        {\n          headers: this._createRequestHeaders(headers),\n        }\n      )\n      .pipe(catchError((error) => this._handleError(error, type)));\n  }\n\n  /**\n   * Return the schema form to generate the form based on the resource given.\n   * @param recordType - string, type of the resource\n   */\n  getSchemaForm(recordType: string) {\n    let recType = recordType.replace(/ies$/, 'y');\n    recType = recType.replace(/s$/, '');\n    const url = this.apiService.getSchemaFormEndpoint(recordType, true);\n    return this.http.get<any>(url).pipe(\n      catchError((e) => {\n        if (e.status === 404) {\n          return of(null);\n        }\n      }),\n      map((data) => {\n        return data;\n      })\n    );\n  }\n\n  /**\n   * Create a new record\n   * @param recordType - string, type of resource\n   * @param record - object, record to create\n   */\n  create(recordType: string, record: object): Observable<any> {\n\n    return this.http\n      .post(this.apiService.getEndpointByType(recordType, true) + '/', record)\n      .pipe(\n        catchError((error) => this._handleError(error, recordType)),\n        tap(() => this.onCreate.next(this._createEvent(recordType, { record })))\n      );\n  }\n\n  /**\n   * Update a record\n   * @param recordType - string, type of resource\n   * @param pid - string, record PID\n   * @param record - object, record to update\n   */\n  update(recordType: string, pid: string, record: any) {\n    const url = `${this.apiService.getEndpointByType(recordType, true)}/${pid}`;\n\n    return this.http\n        .put(url, record)\n        .pipe(\n          catchError((error) => this._handleError(error, recordType)),\n          tap(() => this.onUpdate.next(this._createEvent(recordType, { record })))\n        );\n  }\n\n  /**\n   * Check if a record is already registered with the same value\n   * @param recordType - string, type of record\n   * @param field - string, field to check\n   * @param value - string, value to check\n   * @param excludePid - string, PID to ignore (normally the current record we are checking)\n   */\n  valueAlreadyExists(\n    recordType: string,\n    field: string,\n    value: string,\n    excludePid: string\n  ) {\n    value = value.replace(/\"/g, '\\\\\"');\n    let query = `${field}:\"${value}\"`;\n    if (excludePid) {\n      query += ` NOT pid:${excludePid}`;\n    }\n    return this.getRecords(recordType, query, 1, 1).pipe(\n      map((res: Record) => this.totalHits(res.hits.total)),\n      map((total) => (total ? { alreadyTaken: value } : null)),\n      debounceTime(1000)\n    );\n  }\n\n  /**\n   * Check if a record is already registered with the same value\n   * @param field - FormlyFieldConfig, field to check\n   * @param recordType - string, type of record\n   * @param excludePid - string, PID to ignore (normally the current record we are checking)\n   * @param term - string, the elasticsearch term to check the uniqueness, use field.key if not given\n   * @param limitToValues - string[], limit the test to a given list of values\n   * @param filter - string, additional es query filters\n   */\n  uniqueValue(\n    field: FormlyFieldConfig,\n    recordType: string,\n    excludePid: string = null,\n    term = null,\n    limitToValues: string[] = [],\n    filter: string = null\n  ) {\n    let key = field.key;\n    if (term != null) {\n      key = term;\n    }\n    let value = field.formControl.value;\n    const model = resolveRefs(field.model);\n    if (value == null) {\n      return of(true);\n    }\n    if (typeof(value) === 'string') {\n      value = value.replace(/\"/g, '\\\\\"');\n    }\n    if (limitToValues.length > 0 && !limitToValues.some((v) => v === value)) {\n      return of(true);\n    }\n    let query = `${key}:${value}`;\n    if (typeof value === 'string') {\n      query = `${key}:\"${value}\"`;\n    }\n    if (filter) {\n      const filterFn = Function('model', `return ${filter};`);\n      query = `${query} AND ` + filterFn(model);\n    }\n    if (excludePid) {\n      query += ` NOT pid:${excludePid}`;\n    }\n    return this.getRecords(recordType, query, 1, 1).pipe(\n      map((res: Record) => this.totalHits(res.hits.total)),\n      map((total) => (total ? { alreadyTaken: value } : null)),\n      debounceTime(500)\n    );\n  }\n\n  /**\n   * Transform a total value string or object representation\n   * (ES compatibility v6 and v7)\n   * @param total - string or object\n   * @param relation - boolean\n   * @return integer, text or null\n   */\n  totalHits(total: any, relation = false): any {\n    switch (typeof total) {\n      case 'object':\n        if (relation) {\n          return `${this.translateService.instant(\n            total.relation\n          )} ${total.value.toString()}`;\n        }\n        return Number(total.value);\n      case 'number':\n        return total;\n      case 'string':\n        return Number(total);\n      default:\n        return null;\n    }\n  }\n\n  /**\n   * Return the suggestions for query and field.\n   *\n   * @param resource Resource type.\n   * @param url URL of suggestions endpoint.\n   * @param field Field to search for suggestions.\n   * @param q Query.\n   * @returns Observable containing the list of suggestions.\n   */\n  suggestions(\n    resource: string,\n    url: string,\n    field: string,\n    q: string\n  ): Observable<string[]> {\n    return this.http.get<string[]>(`${this.apiService.baseUrl}${url}`, {\n      params: { resource, field, q },\n    });\n  }\n\n  /**\n   * Error handling during api call process.\n   * @param error - HttpErrorResponse\n   * @param resourceName- Name of current resource\n   * @return throwError\n   */\n  private _handleError(error: HttpErrorResponse, resourceName?: string): Observable<never> {\n    return this.recordHandleErrorService.handleError(error, resourceName);\n  }\n\n  /**\n   * Creates and returns a HttpHeader object to send to request.\n   * @param headers Object containing http headers to send to request.\n   */\n  private _createRequestHeaders(headers: any = {}) {\n    return headers\n      ? new HttpHeaders(headers)\n      : new HttpHeaders({ 'Content-Type': 'application/json' });\n  }\n\n  /**\n   * Create a message for event\n   * @param resource - string\n   * @param data - any\n   */\n  private _createEvent(resource: string, data: any) {\n    return { resource, data };\n  }\n}\n\n/** Record Event Interface */\nexport interface RecordEvent {\n  resource: string;\n  data: any;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { RecordService } from '../record/record.service';\nimport { extractIdOnRef } from '../utils/utils';\n\n/**\n * Get a record by its PID.\n */\n@Pipe({\n    name: 'getRecord',\n    standalone: false\n})\nexport class GetRecordPipe implements PipeTransform {\n\n  protected recordService: RecordService = inject(RecordService);\n\n  /**\n   * Return record data corresponding to PID.\n   *\n   * @param pid Record PID.\n   * @param type Type of the resource.\n   * @param returnType Type of data to return.\n   * @param field Field to return.\n   * @return Record or field record corresponding to PID.\n   */\n  transform(pid: any, type: string, returnType = 'object', field?: string, headers?: object): any {\n    // process $ref entrypoint\n    if (pid.startsWith('http')) {\n      pid = extractIdOnRef(pid);\n    }\n\n    if ('object' !== returnType) {\n      returnType = 'field';\n    }\n\n    return this.recordService.getRecord(type, pid, 1, headers).pipe(map(data => {\n      if (!data) {\n        return null;\n      }\n      if ('object' === returnType) {\n        return data;\n      }\n      if (field in data.metadata) {\n        return data.metadata[field];\n      }\n      return null;\n    }));\n  }\n}\n","import { definePreset } from \"@primeng/themes\";\nimport Aura from \"@primeng/themes/aura\";\n\nexport const primeNGConfig = {\n  theme: {\n    options: {\n      cssLayer: {\n        name: 'primeng'\n      },\n      darkModeSelector: false\n    },\n    preset: definePreset(Aura, {\n      primitive: {\n        borderRadius: {\n          none: \"0\",\n          xs: \"2px\",\n          sm: \"4px\",\n          md: \"6px\",\n          lg: \"8px\",\n          xl: \"12px\"\n        },\n        emerald: {\n          50: \"#ecfdf5\",\n          100: \"#d1fae5\",\n          200: \"#a7f3d0\",\n          300: \"#6ee7b7\",\n          400: \"#34d399\",\n          500: \"#10b981\",\n          600: \"#059669\",\n          700: \"#047857\",\n          800: \"#065f46\",\n          900: \"#064e3b\",\n          950: \"#022c22\"\n        },\n        green: {\n          50: \"#f0fdf4\",\n          100: \"#dcfce7\",\n          200: \"#bbf7d0\",\n          300: \"#86efac\",\n          400: \"#4ade80\",\n          500: \"#22c55e\",\n          600: \"#16a34a\",\n          700: \"#15803d\",\n          800: \"#166534\",\n          900: \"#14532d\",\n          950: \"#052e16\"\n        },\n        lime: {\n          50: \"#f7fee7\",\n          100: \"#ecfccb\",\n          200: \"#d9f99d\",\n          300: \"#bef264\",\n          400: \"#a3e635\",\n          500: \"#84cc16\",\n          600: \"#65a30d\",\n          700: \"#4d7c0f\",\n          800: \"#3f6212\",\n          900: \"#365314\",\n          950: \"#1a2e05\"\n        },\n        red: {\n          50: \"#fef2f2\",\n          100: \"#fee2e2\",\n          200: \"#fecaca\",\n          300: \"#fca5a5\",\n          400: \"#f87171\",\n          500: \"#ef4444\",\n          600: \"#dc2626\",\n          700: \"#b91c1c\",\n          800: \"#991b1b\",\n          900: \"#7f1d1d\",\n          950: \"#450a0a\"\n        },\n        orange: {\n          50: \"#fff7ed\",\n          100: \"#ffedd5\",\n          200: \"#fed7aa\",\n          300: \"#fdba74\",\n          400: \"#fb923c\",\n          500: \"#f97316\",\n          600: \"#ea580c\",\n          700: \"#c2410c\",\n          800: \"#9a3412\",\n          900: \"#7c2d12\",\n          950: \"#431407\"\n        },\n        amber: {\n          50: \"#fffbeb\",\n          100: \"#fef3c7\",\n          200: \"#fde68a\",\n          300: \"#fcd34d\",\n          400: \"#fbbf24\",\n          500: \"#f59e0b\",\n          600: \"#d97706\",\n          700: \"#b45309\",\n          800: \"#92400e\",\n          900: \"#78350f\",\n          950: \"#451a03\"\n        },\n        yellow: {\n          50: \"#fefce8\",\n          100: \"#fef9c3\",\n          200: \"#fef08a\",\n          300: \"#fde047\",\n          400: \"#facc15\",\n          500: \"#eab308\",\n          600: \"#ca8a04\",\n          700: \"#a16207\",\n          800: \"#854d0e\",\n          900: \"#713f12\",\n          950: \"#422006\"\n        },\n        teal: {\n          50: \"#f0fdfa\",\n          100: \"#ccfbf1\",\n          200: \"#99f6e4\",\n          300: \"#5eead4\",\n          400: \"#2dd4bf\",\n          500: \"#14b8a6\",\n          600: \"#0d9488\",\n          700: \"#0f766e\",\n          800: \"#115e59\",\n          900: \"#134e4a\",\n          950: \"#042f2e\"\n        },\n        cyan: {\n          50: \"#ecfeff\",\n          100: \"#cffafe\",\n          200: \"#a5f3fc\",\n          300: \"#67e8f9\",\n          400: \"#22d3ee\",\n          500: \"#06b6d4\",\n          600: \"#0891b2\",\n          700: \"#0e7490\",\n          800: \"#155e75\",\n          900: \"#164e63\",\n          950: \"#083344\"\n        },\n        sky: {\n          50: \"#f0f9ff\",\n          100: \"#e0f2fe\",\n          200: \"#bae6fd\",\n          300: \"#7dd3fc\",\n          400: \"#38bdf8\",\n          500: \"#0ea5e9\",\n          600: \"#0284c7\",\n          700: \"#0369a1\",\n          800: \"#075985\",\n          900: \"#0c4a6e\",\n          950: \"#082f49\"\n        },\n        blue: {\n          50: \"#eff6ff\",\n          100: \"#dbeafe\",\n          200: \"#bfdbfe\",\n          300: \"#93c5fd\",\n          400: \"#60a5fa\",\n          500: \"#3b82f6\",\n          600: \"#2563eb\",\n          700: \"#1d4ed8\",\n          800: \"#1e40af\",\n          900: \"#1e3a8a\",\n          950: \"#172554\"\n        },\n        indigo: {\n          50: \"#eef2ff\",\n          100: \"#e0e7ff\",\n          200: \"#c7d2fe\",\n          300: \"#a5b4fc\",\n          400: \"#818cf8\",\n          500: \"#6366f1\",\n          600: \"#4f46e5\",\n          700: \"#4338ca\",\n          800: \"#3730a3\",\n          900: \"#312e81\",\n          950: \"#1e1b4b\"\n        },\n        violet: {\n          50: \"#f5f3ff\",\n          100: \"#ede9fe\",\n          200: \"#ddd6fe\",\n          300: \"#c4b5fd\",\n          400: \"#a78bfa\",\n          500: \"#8b5cf6\",\n          600: \"#7c3aed\",\n          700: \"#6d28d9\",\n          800: \"#5b21b6\",\n          900: \"#4c1d95\",\n          950: \"#2e1065\"\n        },\n        purple: {\n          50: \"#faf5ff\",\n          100: \"#f3e8ff\",\n          200: \"#e9d5ff\",\n          300: \"#d8b4fe\",\n          400: \"#c084fc\",\n          500: \"#a855f7\",\n          600: \"#9333ea\",\n          700: \"#7e22ce\",\n          800: \"#6b21a8\",\n          900: \"#581c87\",\n          950: \"#3b0764\"\n        },\n        fuchsia: {\n          50: \"#fdf4ff\",\n          100: \"#fae8ff\",\n          200: \"#f5d0fe\",\n          300: \"#f0abfc\",\n          400: \"#e879f9\",\n          500: \"#d946ef\",\n          600: \"#c026d3\",\n          700: \"#a21caf\",\n          800: \"#86198f\",\n          900: \"#701a75\",\n          950: \"#4a044e\"\n        },\n        pink: {\n          50: \"#fdf2f8\",\n          100: \"#fce7f3\",\n          200: \"#fbcfe8\",\n          300: \"#f9a8d4\",\n          400: \"#f472b6\",\n          500: \"#ec4899\",\n          600: \"#db2777\",\n          700: \"#be185d\",\n          800: \"#9d174d\",\n          900: \"#831843\",\n          950: \"#500724\"\n        },\n        rose: {\n          50: \"#fff1f2\",\n          100: \"#ffe4e6\",\n          200: \"#fecdd3\",\n          300: \"#fda4af\",\n          400: \"#fb7185\",\n          500: \"#f43f5e\",\n          600: \"#e11d48\",\n          700: \"#be123c\",\n          800: \"#9f1239\",\n          900: \"#881337\",\n          950: \"#4c0519\"\n        },\n        slate: {\n          50: \"#f8fafc\",\n          100: \"#f1f5f9\",\n          200: \"#e2e8f0\",\n          300: \"#cbd5e1\",\n          400: \"#94a3b8\",\n          500: \"#64748b\",\n          600: \"#475569\",\n          700: \"#334155\",\n          800: \"#1e293b\",\n          900: \"#0f172a\",\n          950: \"#020617\"\n        },\n        gray: {\n          50: \"#f9fafb\",\n          100: \"#f3f4f6\",\n          200: \"#e5e7eb\",\n          300: \"#d1d5db\",\n          400: \"#9ca3af\",\n          500: \"#6b7280\",\n          600: \"#4b5563\",\n          700: \"#374151\",\n          800: \"#1f2937\",\n          900: \"#111827\",\n          950: \"#030712\"\n        },\n        zinc: {\n          50: \"#fafafa\",\n          100: \"#f4f4f5\",\n          200: \"#e4e4e7\",\n          300: \"#d4d4d8\",\n          400: \"#a1a1aa\",\n          500: \"#71717a\",\n          600: \"#52525b\",\n          700: \"#3f3f46\",\n          800: \"#27272a\",\n          900: \"#18181b\",\n          950: \"#09090b\"\n        },\n        neutral: {\n          50: \"#fafafa\",\n          100: \"#f5f5f5\",\n          200: \"#e5e5e5\",\n          300: \"#d4d4d4\",\n          400: \"#a3a3a3\",\n          500: \"#737373\",\n          600: \"#525252\",\n          700: \"#404040\",\n          800: \"#262626\",\n          900: \"#171717\",\n          950: \"#0a0a0a\"\n        },\n        stone: {\n          50: \"#fafaf9\",\n          100: \"#f5f5f4\",\n          200: \"#e7e5e4\",\n          300: \"#d6d3d1\",\n          400: \"#a8a29e\",\n          500: \"#78716c\",\n          600: \"#57534e\",\n          700: \"#44403c\",\n          800: \"#292524\",\n          900: \"#1c1917\",\n          950: \"#0c0a09\"\n        }\n      },\n      semantic: {\n        transitionDuration: \"0.2s\",\n        focusRing: {\n          width: \"1px\",\n          style: \"solid\",\n          color: \"{primary.color}\",\n          offset: \"2px\",\n          shadow: \"none\"\n        },\n        disabledOpacity: \"0.6\",\n        iconSize: \"1rem\",\n        anchorGutter: \"2px\",\n        primary: {\n          50: \"#eff6ff\",\n          100: \"#dbeafe\",\n          200: \"#bfdbfe\",\n          300: \"#93c5fd\",\n          400: \"#60a5fa\",\n          500: \"#3b82f6\",\n          600: \"#2563eb\",\n          700: \"#1d4ed8\",\n          800: \"#1e40af\",\n          900: \"#1e3a8a\",\n          950: \"#172554\"\n        },\n        formField: {\n          paddingX: \"0.75rem\",\n          paddingY: \"0.5rem\",\n          sm: {\n            fontSize: \"0.875rem\",\n            paddingX: \"0.625rem\",\n            paddingY: \"0.375rem\"\n          },\n          lg: {\n            fontSize: \"1.125rem\",\n            paddingX: \"0.875rem\",\n            paddingY: \"0.625rem\"\n          },\n          borderRadius: \"{border.radius.md}\",\n          focusRing: {\n            width: \"0\",\n            style: \"none\",\n            color: \"transparent\",\n            offset: \"0\",\n            shadow: \"none\"\n          },\n          transitionDuration: \"{transition.duration}\"\n        },\n        list: {\n          padding: \"0.25rem 0.25rem\",\n          gap: \"2px\",\n          header: {\n            padding: \"0.5rem 1rem 0.25rem 1rem\"\n          },\n          option: {\n            padding: \"0.5rem 0.75rem\",\n            borderRadius: \"{border.radius.sm}\"\n          },\n          optionGroup: {\n            padding: \"0.5rem 0.75rem\",\n            fontWeight: \"600\"\n          }\n        },\n        content: {\n          borderRadius: \"{border.radius.md}\"\n        },\n        mask: {\n          transitionDuration: \"0.15s\"\n        },\n        navigation: {\n          list: {\n            padding: \"0.25rem 0.25rem\",\n            gap: \"2px\"\n          },\n          item: {\n            padding: \"0.5rem 0.75rem\",\n            borderRadius: \"{border.radius.sm}\",\n            gap: \"0.5rem\"\n          },\n          submenuLabel: {\n            padding: \"0.5rem 0.75rem\",\n            fontWeight: \"600\"\n          },\n          submenuIcon: {\n            size: \"0.875rem\"\n          }\n        },\n        overlay: {\n          select: {\n            borderRadius: \"{border.radius.md}\",\n            shadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\"\n          },\n          popover: {\n            borderRadius: \"{border.radius.md}\",\n            padding: \"0.75rem\",\n            shadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\"\n          },\n          modal: {\n            borderRadius: \"{border.radius.xl}\",\n            padding: \"1.25rem\",\n            shadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)\"\n          },\n          navigation: {\n            shadow: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)\"\n          }\n        },\n        colorScheme: {\n          light: {\n            surface: {\n              0: \"#ffffff\",\n              50: \"#f8fafc\",\n              100: \"#f1f5f9\",\n              200: \"#e2e8f0\",\n              300: \"#cbd5e1\",\n              400: \"#94a3b8\",\n              500: \"#64748b\",\n              600: \"#475569\",\n              700: \"#334155\",\n              800: \"#1e293b\",\n              900: \"#0f172a\",\n              950: \"#020617\"\n            },\n            primary: {\n              color: \"{primary.500}\",\n              contrastColor: \"#ffffff\",\n              hoverColor: \"{primary.600}\",\n              activeColor: \"{primary.700}\"\n            },\n            highlight: {\n              background: \"{primary.50}\",\n              focusBackground: \"{primary.100}\",\n              color: \"{primary.700}\",\n              focusColor: \"{primary.800}\"\n            },\n            mask: {\n              background: \"rgba(0,0,0,0.4)\",\n              color: \"{surface.200}\"\n            },\n            formField: {\n              background: \"{surface.0}\",\n              disabledBackground: \"{surface.200}\",\n              filledBackground: \"{surface.50}\",\n              filledHoverBackground: \"{surface.50}\",\n              filledFocusBackground: \"{surface.50}\",\n              borderColor: \"{surface.300}\",\n              hoverBorderColor: \"{surface.400}\",\n              focusBorderColor: \"{primary.color}\",\n              invalidBorderColor: \"{red.400}\",\n              color: \"{surface.700}\",\n              disabledColor: \"{surface.500}\",\n              placeholderColor: \"{surface.500}\",\n              invalidPlaceholderColor: \"{red.600}\",\n              floatLabelColor: \"{surface.500}\",\n              floatLabelFocusColor: \"{primary.600}\",\n              floatLabelActiveColor: \"{surface.500}\",\n              floatLabelInvalidColor: \"{form.field.invalid.placeholder.color}\",\n              iconColor: \"{surface.400}\",\n              shadow: \"0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)\"\n            },\n            text: {\n              color: \"{surface.800}\",\n              hoverColor: \"{surface.900}\",\n              mutedColor: \"{surface.500}\",\n              hoverMutedColor: \"{surface.600}\"\n            },\n            content: {\n              background: \"{surface.0}\",\n              hoverBackground: \"{surface.100}\",\n              borderColor: \"{surface.200}\",\n              color: \"{text.color}\",\n              hoverColor: \"{text.hover.color}\"\n            },\n            overlay: {\n              select: {\n                background: \"{surface.0}\",\n                borderColor: \"{surface.200}\",\n                color: \"{text.color}\"\n              },\n              popover: {\n                background: \"{surface.0}\",\n                borderColor: \"{surface.200}\",\n                color: \"{text.color}\"\n              },\n              modal: {\n                background: \"{surface.0}\",\n                borderColor: \"{surface.200}\",\n                color: \"{text.color}\"\n              }\n            },\n            list: {\n              option: {\n                focusBackground: \"{surface.100}\",\n                selectedBackground: \"{highlight.background}\",\n                selectedFocusBackground: \"{highlight.focus.background}\",\n                color: \"{text.color}\",\n                focusColor: \"{text.hover.color}\",\n                selectedColor: \"{highlight.color}\",\n                selectedFocusColor: \"{highlight.focus.color}\",\n                icon: {\n                  color: \"{surface.400}\",\n                  focusColor: \"{surface.500}\"\n                }\n              },\n              optionGroup: {\n                background: \"transparent\",\n                color: \"{text.muted.color}\"\n              }\n            },\n            navigation: {\n              item: {\n                focusBackground: \"{surface.100}\",\n                activeBackground: \"{surface.100}\",\n                color: \"{text.color}\",\n                focusColor: \"{text.hover.color}\",\n                activeColor: \"{text.hover.color}\",\n                icon: {\n                  color: \"{surface.400}\",\n                  focusColor: \"{surface.500}\",\n                  activeColor: \"{surface.500}\"\n                }\n              },\n              submenuLabel: {\n                background: \"transparent\",\n                color: \"{text.muted.color}\"\n              },\n              submenuIcon: {\n                color: \"{surface.400}\",\n                focusColor: \"{surface.500}\",\n                activeColor: \"{surface.500}\"\n              }\n            }\n          },\n          dark: {\n            surface: {\n              0: \"#ffffff\",\n              50: \"#fafafa\",\n              100: \"#f4f4f5\",\n              200: \"#e4e4e7\",\n              300: \"#d4d4d8\",\n              400: \"#a1a1aa\",\n              500: \"#71717a\",\n              600: \"#52525b\",\n              700: \"#3f3f46\",\n              800: \"#27272a\",\n              900: \"#18181b\",\n              950: \"#09090b\"\n            },\n            primary: {\n              color: \"{primary.400}\",\n              contrastColor: \"{surface.900}\",\n              hoverColor: \"{primary.300}\",\n              activeColor: \"{primary.200}\"\n            },\n            highlight: {\n              background: \"color-mix(in srgb, {primary.400}, transparent 84%)\",\n              focusBackground: \"color-mix(in srgb, {primary.400}, transparent 76%)\",\n              color: \"rgba(255,255,255,.87)\",\n              focusColor: \"rgba(255,255,255,.87)\"\n            },\n            mask: {\n              background: \"rgba(0,0,0,0.6)\",\n              color: \"{surface.200}\"\n            },\n            formField: {\n              background: \"{surface.950}\",\n              disabledBackground: \"{surface.700}\",\n              filledBackground: \"{surface.800}\",\n              filledHoverBackground: \"{surface.800}\",\n              filledFocusBackground: \"{surface.800}\",\n              borderColor: \"{surface.600}\",\n              hoverBorderColor: \"{surface.500}\",\n              focusBorderColor: \"{primary.color}\",\n              invalidBorderColor: \"{red.300}\",\n              color: \"{surface.0}\",\n              disabledColor: \"{surface.400}\",\n              placeholderColor: \"{surface.400}\",\n              invalidPlaceholderColor: \"{red.400}\",\n              floatLabelColor: \"{surface.400}\",\n              floatLabelFocusColor: \"{primary.color}\",\n              floatLabelActiveColor: \"{surface.400}\",\n              floatLabelInvalidColor: \"{form.field.invalid.placeholder.color}\",\n              iconColor: \"{surface.400}\",\n              shadow: \"0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)\"\n            },\n            text: {\n              color: \"{surface.0}\",\n              hoverColor: \"{surface.0}\",\n              mutedColor: \"{surface.400}\",\n              hoverMutedColor: \"{surface.300}\"\n            },\n            content: {\n              background: \"{surface.900}\",\n              hoverBackground: \"{surface.800}\",\n              borderColor: \"{surface.700}\",\n              color: \"{text.color}\",\n              hoverColor: \"{text.hover.color}\"\n            },\n            overlay: {\n              select: {\n                background: \"{surface.900}\",\n                borderColor: \"{surface.700}\",\n                color: \"{text.color}\"\n              },\n              popover: {\n                background: \"{surface.900}\",\n                borderColor: \"{surface.700}\",\n                color: \"{text.color}\"\n              },\n              modal: {\n                background: \"{surface.900}\",\n                borderColor: \"{surface.700}\",\n                color: \"{text.color}\"\n              }\n            },\n            list: {\n              option: {\n                focusBackground: \"{surface.800}\",\n                selectedBackground: \"{highlight.background}\",\n                selectedFocusBackground: \"{highlight.focus.background}\",\n                color: \"{text.color}\",\n                focusColor: \"{text.hover.color}\",\n                selectedColor: \"{highlight.color}\",\n                selectedFocusColor: \"{highlight.focus.color}\",\n                icon: {\n                  color: \"{surface.500}\",\n                  focusColor: \"{surface.400}\"\n                }\n              },\n              optionGroup: {\n                background: \"transparent\",\n                color: \"{text.muted.color}\"\n              }\n            },\n            navigation: {\n              item: {\n                focusBackground: \"{surface.800}\",\n                activeBackground: \"{surface.800}\",\n                color: \"{text.color}\",\n                focusColor: \"{text.hover.color}\",\n                activeColor: \"{text.hover.color}\",\n                icon: {\n                  color: \"{surface.500}\",\n                  focusColor: \"{surface.400}\",\n                  activeColor: \"{surface.400}\"\n                }\n              },\n              submenuLabel: {\n                background: \"transparent\",\n                color: \"{text.muted.color}\"\n              },\n              submenuIcon: {\n                color: \"{surface.500}\",\n                focusColor: \"{surface.400}\",\n                activeColor: \"{surface.400}\"\n              }\n            }\n          }\n        }\n      },\n      components: {\n        accordion: {\n          header: {\n            borderRadius: \"{content.border.radius}\",\n            borderColor: \"{content.border.color}\",\n            background: \"{surface.100}\",\n            hoverBackground: \"{surface.200}\",\n            activeBackground: \"{surface.200}\",\n            activeHoverBackground: \"{surface.200}\"\n          },\n          content: {\n            padding: \"0.5rem 0.25rem\"\n          }\n        },\n        autocomplete: {\n          option: {\n            padding: \"0.2rem 0.5rem\"\n          }\n        },\n        card: {\n          root: {\n            background: \"{surface.100}\",\n          },\n          body: {\n            padding: \"0\",\n          }\n        },\n        fieldset: {\n          legend: {\n            padding: \"0 0.25rem 0.25rem 0.25rem\",\n          }\n        },\n        listbox: {\n          option: {\n            padding: \"0.2rem 0.5rem\"\n          }\n        },\n        menubar: {\n          root: {\n            borderColor: \"transparent\",\n          }\n        },\n        panel: {\n          root: {\n            background: \"{surface.100}\",\n          },\n          content: {\n            padding: \"0\"\n          }\n        },\n        tag: {\n          root: {\n            fontSize: \"0.8rem\",\n            fontWeight: \"600\",\n            padding: \"0.15rem 0.5rem\",\n            gap: \"0.25rem\",\n            borderRadius: \"{content.border.radius}\",\n            roundedBorderRadius: \"{border.radius.xl}\"\n          },\n          icon: {\n            size: \"0.5rem\"\n          },\n          colorScheme: {\n              light: {\n                  primary: {\n                      background: \"{primary.100}\",\n                      color: \"{primary.700}\"\n                  },\n                  secondary: {\n                      background: \"{surface.500}\",\n                      color: \"{surface.0}\"\n                  },\n                  success: {\n                      background: \"{green.100}\",\n                      color: \"{green.700}\"\n                  },\n                  info: {\n                      background: \"{sky.100}\",\n                      color: \"{sky.700}\"\n                  },\n                  warn: {\n                      background: \"{orange.100}\",\n                      color: \"{orange.700}\"\n                  },\n                  danger: {\n                      background: \"{red.100}\",\n                      color: \"{red.700}\"\n                  },\n                  contrast: {\n                      background: \"{surface.950}\",\n                      color: \"{surface.0}\"\n                  }\n              },\n              dark: {\n                  primary: {\n                      background: \"color-mix(in srgb, {primary.500}, transparent 84%)\",\n                      color: \"{primary.300}\"\n                  },\n                  secondary: {\n                      background: \"{surface.800}\",\n                      color: \"{surface.300}\"\n                  },\n                  success: {\n                      background: \"color-mix(in srgb, {green.500}, transparent 84%)\",\n                      color: \"{green.300}\"\n                  },\n                  info: {\n                      background: \"color-mix(in srgb, {sky.500}, transparent 84%)\",\n                      color: \"{sky.300}\"\n                  },\n                  warn: {\n                      background: \"color-mix(in srgb, {orange.500}, transparent 84%)\",\n                      color: \"{orange.300}\"\n                  },\n                  danger: {\n                      background: \"color-mix(in srgb, {red.500}, transparent 84%)\",\n                      color: \"{red.300}\"\n                  },\n                  contrast: {\n                      background: \"{surface.0}\",\n                      color: \"{surface.950}\"\n                  }\n              }\n          }\n      },\n        timeline: {\n          event: {\n            minHeight: \"2.5rem\",\n          }\n        }\n      }\n    })\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2019-2023 RERO\n * Copyright (C) 2019-2023 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Interface representing an action status for permission check.\n */\nexport interface ActionStatus {\n    can: boolean;\n    message: string;\n    url?: string;\n    routerLink?: string[];\n    type?: string | undefined | null;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Location } from '@angular/common';\nimport { Component, inject, input, output } from '@angular/core';\nimport { ActionStatus } from '../../action-status';\nimport { IRecordEvent } from './IRecordEvent.interface';\n\n@Component({\n    selector: 'ng-core-detail-button',\n    templateUrl: './detail-button.component.html',\n    standalone: false\n})\nexport class DetailButtonComponent {\n\n  // Inject\n  location: Location = inject(Location);\n\n  /** Record */\n  record = input<any>();\n\n  /** Record type */\n  type = input<string>();\n\n  /** Admin mode for CRUD operations */\n  adminMode = input<ActionStatus>({ can: false, message: '' });\n\n  /** Record can be used ? */\n  useStatus = input<ActionStatus>({ can: false, message: '', url: '' });\n\n  /** Record can be updated ? */\n  updateStatus = input<ActionStatus>({ can: false, message: '' });\n\n  /** Record can be deleted ? */\n  deleteStatus = input<ActionStatus>({ can: false, message: '' });\n\n  /** Record event */\n  recordEvent = output<IRecordEvent>();\n\n  /** Delete record message event */\n  deleteMessageEvent = output<string>();\n\n  /** Use the record */\n  useRecord(): void {\n    this.recordEvent.emit({ action: 'use', url: this.updateStatus().url })\n  }\n\n  /**\n   * Update record event\n   * @param record - the current record\n   */\n  updateRecord(record: any): void {\n    this.recordEvent.emit({ action: 'update', record });\n  }\n\n  /**\n   * Delete record event\n   * @param record - the current record\n   */\n  deleteRecord(record: any): void {\n    if (this.deleteStatus().can) {\n      this.recordEvent.emit({ action: 'delete', record });\n    } else {\n      this.deleteMessageEvent.emit(this.deleteStatus().message.replace(new RegExp('\\\\n', 'g'), '<br>'));\n    }\n  }\n\n  /** Go back to previous page */\n  goBack() {\n    this.location.back();\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<div class=\"core:flex core:justify-between core:flex-wrap core:mb-4\">\n  <p-button\n    id=\"detail-back-button\"\n    styleClass=\"core:grow\"\n    icon=\"fa fa-arrow-left\"\n    [label]=\"'Back'|translate\"\n    severity=\"secondary\"\n    [text]=\"true\"\n    (onClick)=\"goBack()\"\n  />\n  <div class=\"core:flex core:flex-wrap core:items-center core:gap-1\">\n    <ng-content select=\"[beforeButton]\"></ng-content>\n    @if (record() && adminMode().can) {\n      @if (useStatus() && useStatus().can && useStatus().url) {\n        <p-button\n          id=\"detail-use-button\"\n          icon=\"fa fa-hand-o-right\"\n          [label]=\"'Use'|translate\"\n          (onClick)=\"useRecord()\"\n          translate\n        />\n      }\n      @if (updateStatus() && updateStatus().can) {\n        <p-button\n          id=\"detail-edit-button\"\n          icon=\"fa fa-pencil\"\n          [label]=\"'Edit'|translate\"\n          [outlined]=\"useStatus()?.can\"\n          (onClick)=\"updateRecord(record())\"\n          translate\n        />\n      }\n      @if (deleteStatus()) {\n        <p-button\n          id=\"detail-delete-button\"\n          icon=\"fa fa-trash\"\n          severity=\"danger\"\n          class=\"core:pointer-events-auto\"\n          outlined\n          (onClick)=\"deleteRecord(record())\"\n          [pTooltip]=\"tooltipContent\"\n          tooltipPosition=\"bottom\"\n          [disabled]=\"!deleteStatus().can\"\n          [label]=\"'Delete'|translate\"\n          [tooltipDisabled]=\"deleteStatus().can\"\n        />\n        <ng-template #tooltipContent>\n          <span [innerHTML]=\"deleteStatus().message\"></span>\n        </ng-template>\n      }\n    }\n    <ng-content select=\"[afterButton]\"/>\n  </div>\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nexport const CONFIG = {\n  MESSAGE_LIFE: 5000,        // Message lifetime in ms\n  DEFAULT_SELECT_SCROLL_HEIGHT: '50vh'\n}\n","/*\n * RERO angular core\n * Copyright (C) 2019-2024 RERO\n * Copyright (C) 2019-2023 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\nimport { CONFIG } from '../utils/config';\nimport { ActionStatus } from './action-status';\nimport { RecordService } from './record.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RecordUiService {\n\n  protected translateService: TranslateService = inject(TranslateService);\n  protected recordService: RecordService = inject(RecordService);\n  protected router: Router = inject(Router);\n  protected confirmationService: ConfirmationService = inject(ConfirmationService);\n  protected messageService: MessageService = inject(MessageService);\n\n  /** Configuration for all resources. */\n  types = [];\n\n  /**\n   * Delete a record by its PID.\n   * @param type Type of resource\n   * @param pid - string, PID to delete\n   * @returns Observable resolving as a boolean\n   */\n  deleteRecord(type: string, pid: string): Observable<boolean> {\n    const delete$ = new BehaviorSubject(false);\n    this.confirmationService.confirm({\n      acceptLabel: this.translateService.instant('Delete'),\n      rejectLabel: this.translateService.instant('Cancel'),\n      message: this.deleteMessage(pid, type).join('<br>'),\n      header: this.translateService.instant('Confirmation'),\n      icon: 'fa fa-exclamation-triangle fa-2x core:text-red-500',\n      acceptButtonStyleClass: \"core:bg-red-500 core:border-red-500\",\n      rejectButtonStyleClass:\"p-button-text\",\n      accept: () => {\n        this.recordService.delete(type, pid).subscribe({\n          next: () => {\n            delete$.next(true);\n            this.messageService.add({\n              severity: 'info',\n              summary: this.translateService.instant('Confirmed'),\n              detail: this.translateService.instant('Record deleted.'),\n              life: CONFIG.MESSAGE_LIFE\n            });\n          },\n          error: (error: any)  => {\n            delete$.next(false);\n            this.messageService.add({\n              severity: 'error',\n              summary: this.translateService.instant('Error'),\n              detail: this.translateService.instant(error.title),\n              sticky: true,\n              closable: true\n            });\n          }\n        });\n      }\n    });\n\n    return delete$.asObservable();\n  }\n\n  /**\n   * Show dialog with the reason why record cannot be deleted.\n   * @param message Message to display\n   */\n  showDeleteMessage(message: string): void {\n    this.confirmationService.confirm({\n      acceptLabel: this.translateService.instant('OK'),\n      rejectVisible: false,\n      header: this.translateService.instant('Information'),\n      message: message,\n      acceptIcon:\"none\",\n    });\n  }\n\n  /**\n   * Get resource configuration for given type.\n   *\n   * @param type Current type to find\n   * @returns Object configuration for the current type\n   */\n  getResourceConfig(type: string): any {\n    if (this.types == null) {\n      throw new Error(`Configuration not found for type \"${type}\"`);\n    }\n    const index = this.types.findIndex(item => item.key === type);\n    if (index === -1) {\n      throw new Error(`Configuration not found for type \"${type}\"`);\n    }\n    return this.types[index];\n  }\n\n  /**\n   * Redirects after saving a resource\n   * @param pid - string, pid of the record\n   * @param record - object, record to save\n   * @param recordType - string, Type of resource\n   * @param action - string, http action: create or update\n   * @param route - ActivatedRoute: the current route used\n   */\n  redirectAfterSave(pid: string, record: any, recordType: string, action: string, route: ActivatedRoute) {\n    const config = this.getResourceConfig(recordType);\n    if (config.redirectUrl) {\n      config.redirectUrl(record, action).subscribe((result: string) => {\n        if (result !== null) {\n          this.router.navigateByUrl(result);\n          return;\n        }\n      });\n    } else {\n      // Default behavior\n      if (action === 'update') {\n        this.router.navigate(['../../detail', pid], {relativeTo: route, replaceUrl: true});\n        return;\n      }\n      this.router.navigate(['../detail', pid], {relativeTo: route, replaceUrl: true});\n    }\n  }\n\n  /**\n   * Personalized message for delete a record\n   * @param pid - record pid string\n   * @param type - Type of resource\n   * @returns  Observable array of string\n   */\n  deleteMessage(pid: string, type: string): string[] {\n    const defaultMessage = [\n      this.translateService.instant('Do you really want to delete this record?')\n    ];\n    try {\n      const config = this.getResourceConfig(type);\n      return (config.deleteMessage)\n        ? config.deleteMessage(pid)\n        : defaultMessage;\n    } catch {\n      return defaultMessage;\n    }\n  }\n\n  // ================================================================\n  //    Permissions\n  // ================================================================\n\n  /**\n   * Check if a record can be added\n   * @param type Type of resource\n   * @returns Observable resolving an object containing the result of a permission check.\n   */\n  canAddRecord$(type: string): Observable<ActionStatus> {\n    const config = this.getResourceConfig(type);\n    return (config.canAdd)\n      ? config.canAdd().pipe(first())\n      : of({ can: true, message: '' });\n  }\n\n  /**\n   * Check if a record can be updated\n   * @param record - object, record to check\n   * @param type Type of resource\n   * @returns Observable resolving an object containing the result of a permission check.\n   */\n  canUpdateRecord$(record: object, type: string): Observable<ActionStatus> {\n    const config = this.getResourceConfig(type);\n    // The canUpdate function takes precedence over permissions\n    if (config.canUpdate) {\n      return config.canUpdate(record).pipe(first());\n    }\n    if (config.permissions) {\n      const permissions = config.permissions(record);\n      return permissions.pipe(\n        map((perms: any) => {\n          if ('canUpdate' in perms) {\n            return perms.canUpdate;\n          } else {\n            return of({ can: true, message: '' });\n          }\n        })\n      );\n    }\n    return of({ can: true, message: '' });\n  }\n\n  /**\n   * Check if a record can be deleted\n   * @param record - object, record to check\n   * @param type Type of resource\n   * @returns Observable resolving an object containing the result of a permission check.\n   */\n  canDeleteRecord$(record: object, type: string): Observable<ActionStatus> {\n    const config = this.getResourceConfig(type);\n    // The canDelete function takes precedence over permissions\n    if (config.canDelete) {\n      return config.canDelete(record).pipe(first());\n    }\n    if (config.permissions) {\n      const permissions = config.permissions(record);\n      return permissions.pipe(\n        map((perms: any) => {\n          if ('canDelete' in perms) {\n            return perms.canDelete;\n          } else {\n            return of({ can: true, message: '' });\n          }\n        })\n      );\n    }\n    return of({ can: true, message: '' });\n  }\n\n  /**\n   * Check if a record can be read\n   * @param record - object, record to check\n   * @param type Type of resource\n   * @returns Observable resolving an object containing the result of a permission check.\n   */\n  canReadRecord$(record: object, type: string): Observable<ActionStatus> {\n    const config = this.getResourceConfig(type);\n    // The canRead function takes precedence over permissions\n    if (config.canRead) {\n      return config.canRead(record).pipe(first());\n    }\n    if (config.permissions) {\n      const permissions = config.permissions(record);\n      return permissions.pipe(\n        map((perms: any) => {\n          if ('canRead' in perms) {\n            return perms.canRead;\n          } else {\n            return of({ can: true, message: '' });\n          }\n        })\n      );\n    }\n    return of({ can: true, message: '' });\n  }\n\n  /**\n   * Check if a record can be used (mainly used for templates)\n   * @param record - object, record to check\n   * @param type Type of resource\n   * @returns Observable resolving an object containing the result of a permission check.\n   */\n   canUseRecord$(record: object, type: string): Observable<ActionStatus> {\n    const config = this.getResourceConfig(type);\n    // The canUse function takes precedence over permissions\n    if (config.canUse) {\n      return config.canUse(record).pipe(first());\n    }\n    if (config.permissions) {\n      const permissions = config.permissions(record);\n      if ('canUse' in permissions) {\n        return permissions.canUse;\n      }\n    }\n    return of({ can: false, message: '' });\n   }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Directive, inject, Input, ViewContainerRef } from '@angular/core';\n\n/**\n * Directive for displaying a record detail.\n */\n@Directive({\n    selector: '[ngCoreRecordDetail]',\n    standalone: false\n})\nexport class RecordDetailDirective {\n\n  viewContainerRef: ViewContainerRef = inject(ViewContainerRef);\n\n  /**\n   * Record to display\n   */\n  @Input() record: object = {};\n\n  /**\n   * Type of resource\n   */\n  @Input() type: string;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { DetailRecord } from './detail-record';\n\n/**\n * Component to display a record by dumping its data to JSON.\n */\n@Component({\n    template: `\n    @if (record) {\n      <h1>Record of type \"{{ type }}\" #{{ record.id }}</h1>\n      <pre>\n        <div style=\"white-space: pre-wrap;\">{{ record|json }}</div>\n      </pre>\n    }\n  `,\n    standalone: false\n})\nexport class JsonComponent implements DetailRecord, OnInit {\n  // Observable resolving record data\n  record$: Observable<any>;\n\n  // Resource type\n  type: string;\n\n  // Record data\n  record: any;\n\n  /**\n   * Component initialization.\n   *\n   * Subscribes to observable for getting the record.\n   */\n  ngOnInit(): void {\n    this.record$.subscribe((record) => {\n      this.record = record;\n    });\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2023 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Location } from '@angular/common';\nimport { Component, inject, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { MessageService } from 'primeng/api';\nimport { catchError, isObservable, Observable, of, Subscription, tap } from 'rxjs';\nimport { Error } from '../../error/error';\nimport { ActionStatus } from '../action-status';\nimport { RecordUiService } from '../record-ui.service';\nimport { RecordService } from '../record.service';\nimport { IRecordEvent } from './detail-button/IRecordEvent.interface';\nimport { RecordDetailDirective } from './detail.directive';\nimport { JsonComponent } from './view/json.component';\n\n@Component({\n    selector: 'ng-core-record-detail',\n    templateUrl: './detail.component.html',\n    standalone: false\n})\nexport class DetailComponent implements OnInit, OnDestroy {\n\n  protected route: ActivatedRoute = inject(ActivatedRoute);\n  protected router: Router = inject(Router);\n  protected location: Location = inject(Location);\n  protected recordService: RecordService = inject(RecordService);\n  protected recordUiService: RecordUiService = inject(RecordUiService);\n  protected translate: TranslateService = inject(TranslateService);\n  protected spinner: NgxSpinnerService = inject(NgxSpinnerService);\n  protected messageService: MessageService = inject(MessageService);\n\n  protected viewContainerRef: ViewContainerRef = inject(ViewContainerRef);\n\n\n  /** View component for displaying record */\n  @Input() viewComponent: any = null;\n\n  /** Record can be used ? */\n  useStatus: ActionStatus = { can: false, message: '', url: '' };\n\n  /** Record can be updated ? */\n  updateStatus: ActionStatus = { can: false, message: '' };\n\n  /** Record can be deleted ? */\n  deleteStatus: ActionStatus = { can: false, message: '' };\n\n  /** Observable resolving record data */\n  record$: Observable<any> = null;\n\n  /** Record data */\n  record: any = null;\n\n  /** Error message */\n  error: Error;\n\n  /** Admin mode for CRUD operations */\n  adminMode: ActionStatus = { can: true, message: '' };\n\n  /** Type of record */\n  type: string;\n\n  /**Subscription to route parameters observables */\n  private routeParametersSubscription: Subscription;\n\n  /** Object type route config */\n  private config: any = null;\n\n  // Subscription to detail component view observable.\n  private detailComponentSubscription: Subscription;\n\n  /** Directive for displaying record */\n  @ViewChild(RecordDetailDirective, { static: true })\n  recordDetail: RecordDetailDirective;\n\n  /** On init hook */\n  ngOnInit() {\n    this.routeParametersSubscription = this.route.paramMap.subscribe(() => {\n      this.spinner.show();\n\n      this.loadViewComponentRef();\n\n      const pid = this.route.snapshot.paramMap.get('pid');\n      this.type = this.route.snapshot.paramMap.get('type');\n\n      this.recordUiService.types = this.route.snapshot.data.types;\n      this.config = this.recordUiService.getResourceConfig(this.type);\n\n      const type = this.config.index || this.config.key;\n      this.record$ = this.recordService.getRecord(type, pid, 1, this.config.itemHeaders || null).pipe(\n        catchError((error) => {\n          this.error = error;\n          this.spinner.hide();\n          return of(null);\n        }),\n        tap(record => {\n          this.record = record;\n          this.recordUiService.canReadRecord$(this.record, this.type).subscribe(result => {\n            if (result.can === false) {\n              this.messageService.add({\n                severity: 'error',\n                summary: this.translate.instant(this.type),\n                detail: this.translate.instant('You cannot read this record'),\n                sticky: true,\n                closable: true\n              })\n              this.location.back();\n            }\n          });\n          this.recordUiService.canDeleteRecord$(this.record, this.type).subscribe(result => {\n            this.deleteStatus = result;\n          });\n\n          this.recordUiService.canUpdateRecord$(this.record, this.type).subscribe(result => {\n            this.updateStatus = result;\n          });\n\n          this.recordUiService.canUseRecord$(this.record, this.type).subscribe(result => {\n            this.useStatus = result;\n          });\n\n          if (this.route.snapshot.data.adminMode) {\n            this.route.snapshot.data.adminMode().subscribe((am: ActionStatus) => this.adminMode = am);\n          }\n\n          this.spinner.hide();\n        })\n      );\n      this.loadRecordView();\n    });\n  }\n\n  /**\n   * Component destruction.\n   *\n   * Unsubscribes from the observables of the route parameters.\n   * Unsubscribes from the observable for detail view.\n   */\n  ngOnDestroy(): void {\n    this.routeParametersSubscription.unsubscribe();\n\n    if (this.detailComponentSubscription) {\n      this.detailComponentSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Record event\n   * @param event - Record event message\n   */\n  recordEvent(event: IRecordEvent): void {\n    switch(event.action) {\n      case 'use':\n        this.router.navigateByUrl(event.url);\n      break;\n      case 'update':\n        this.router.navigate(\n          ['../../edit', event.record.id],\n          { relativeTo: this.route, replaceUrl: true }\n        );\n      break;\n      case 'delete':\n        this.deleteRecord(event.record);\n      break;\n      default:\n        throw new Error('Missing record event action.');\n    }\n  }\n\n  /**\n   * Getter giving the information if file management is enabled.\n   * @returns True if file management is enabled.\n   */\n  get filesEnabled(): boolean {\n    return this.config.files && this.config.files.enabled ? this.config.files.enabled : false;\n  }\n\n  /**\n   * Delete the record and go back to previous page.\n   * @param event - DOM event\n   * @param element - string (PID to remove) or object\n   */\n  deleteRecord(element: any) {\n    const pid = typeof element === 'object' ? element.id : element;\n    return this.recordUiService.deleteRecord(this.type, pid).subscribe((result: any) => {\n      if (result === true) {\n        let redirectUrl = '../..';\n        const navigateOptions = { relativeTo: this.route };\n        if (typeof element === 'object' && this.config.redirectUrl) {\n          this.config.redirectUrl(element, 'delete').subscribe((redirect: string) => {\n            if (redirect !== null) {\n              redirectUrl = redirect;\n            }\n            this.router.navigate([redirectUrl], navigateOptions);\n          });\n        }\n        this.router.navigate([redirectUrl], navigateOptions);\n      }\n    });\n  }\n\n  /**\n   * Show a modal containing message given in parameter.\n   * @param message - message to display into modal\n   */\n  showDeleteMessage(message: string): void {\n    this.recordUiService.showDeleteMessage(message);\n  }\n\n  /** Dynamically load component depending on selected resource type. */\n  private loadRecordView(): void {\n    this.viewContainerRef.clear();\n    const componentRef = this.viewContainerRef.createComponent(this.viewComponent || JsonComponent);\n    (componentRef.instance as JsonComponent).record$ = this.record$;\n    (componentRef.instance as JsonComponent).type = this.route.snapshot.paramMap.get('type');\n  }\n\n  /** Load component view corresponding to type */\n  private loadViewComponentRef() {\n    if (!this.route.snapshot.data.types || this.route.snapshot.data.types.length === 0) {\n      throw new Error('Configuration types not passed to component');\n    }\n\n    const type = this.route.snapshot.paramMap.get('type');\n    const { types } = this.route.snapshot.data;\n    const index = types.findIndex((item: any) => item.key === type);\n\n    if (index === -1) {\n      throw new Error(`Configuration not found for type \"${type}\"`);\n    }\n\n    if (types[index].detailComponent) {\n      let detailComponent$ = types[index].detailComponent;\n\n      if (isObservable(detailComponent$) === false) {\n        detailComponent$ = of(detailComponent$);\n      }\n\n      this.detailComponentSubscription = detailComponent$.subscribe(\n        (component: any) => {\n          this.viewComponent = component;\n        }\n      );\n    }\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<div>\n  @if (record) {\n    <ng-core-detail-button\n      [record]=\"record\"\n      [type]=\"type\"\n      [adminMode]=\"adminMode\"\n      [useStatus]=\"useStatus\"\n      [updateStatus]=\"updateStatus\"\n      [deleteStatus]=\"deleteStatus\"\n      (recordEvent)=\"recordEvent($event)\"\n      (deleteMessageEvent)=\"showDeleteMessage($event)\"\n    />\n  }\n  @if (error) {\n    <ng-core-error [error]=\"error\"/>\n  }\n  <ng-template ngCoreRecordDetail/>\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Injectable } from '@angular/core';\nimport { RouteInterface } from './route-interface';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RouteCollectionService {\n\n  /**\n   * Collection of routes\n   */\n  private collection = new Map();\n\n  /**\n   * Add route on collection\n   * @param route - RouteInterface\n   * @return this - RouteCollectionService\n   */\n  addRoute(route: RouteInterface): RouteCollectionService {\n    const routeName = route.name;\n    if (!this.hasRoute(routeName)) {\n      this.collection.set(routeName, route);\n    }\n    return this;\n  }\n\n  /**\n   * Delete route on collection\n   * @param name - string\n   * @return boolean\n   */\n  deleteRoute(name: string): boolean {\n    if (this.hasRoute(name)) {\n      this.collection.delete(name);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Check if route is present to the collection\n   * @param name - string\n   * @return boolean\n   */\n  hasRoute(name: string): boolean {\n    return this.collection.has(name);\n  }\n\n  /**\n   * Get route by name\n   * @param name - string\n   * @return mixed - RouteInterface | null\n   */\n  getRoute(name: string): RouteInterface | null {\n    if (this.hasRoute(name)) {\n      return this.collection.get(name);\n    }\n    return null;\n  }\n\n  /**\n   * Get All routes\n   * @return routes separated by comma\n   */\n  getRoutes() {\n    const routes = [];\n    for (const value of this.collection.values()) {\n      routes.push(value.getConfiguration());\n    }\n    return routes;\n  }\n\n  /**\n   * Return a array of route name\n   * @return array\n   */\n  availableRoutesName() {\n    const routesName = [];\n    for (const route of this.collection.keys()) {\n      routesName.push(route);\n    }\n    return routesName;\n  }\n\n  /**\n   * Count available routes\n   * @return number;\n   */\n  size() {\n    return this.collection.size;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2022 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Injectable } from '@angular/core';\nimport { ILogger } from '../ILogger';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LoggerService implements ILogger {\n\n  info(data: any, message?: any): void {\n    console.log(message, data);\n  }\n  warning(data: any, message?: any): void {\n    console.warn(message, data);\n  }\n  error(data: any, message?: any): void {\n    console.error(message, data);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Injectable, inject } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { map } from 'rxjs';\nimport { ApiService } from '../../../api/api.service';\nimport { Record } from '../../record';\nimport { RecordService } from '../../record.service';\nimport { JSONSchema7 } from '../utils';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class JSONSchemaService {\n\n  protected translateService: TranslateService = inject(TranslateService);\n  protected recordService: RecordService = inject(RecordService);\n  protected apiService: ApiService = inject(ApiService);\n\n  processField(field: FormlyFieldConfig, jsonSchema: JSONSchema7) {\n    // initial population of arrays with a minItems constraints\n    if (field.type === 'array' && jsonSchema.minItems && !Object.hasOwn(jsonSchema, 'default')) {\n      field.defaultValue = new Array(jsonSchema.minItems);\n    }\n    // If 'format' is defined into the jsonSchema, use it as props to try a validation on this field.\n    // See: `email.validator.ts` file\n    if (jsonSchema.format) {\n      field.props.type = jsonSchema.format;\n    }\n\n    if (jsonSchema?.widget?.formlyConfig) {\n      const { props } = jsonSchema.widget.formlyConfig;\n\n      if (props) {\n        this.setSimpleOptions(field, props);\n        this.setValidation(field, props);\n        this.setRemoteSelectOptions(field, props);\n      }\n    }\n\n    return field;\n  }\n\n   /**\n   * Populate a select options with a remote API call.\n   * @param field formly field config\n   * @param formOptions JSONSchema object\n   */\n  protected setRemoteSelectOptions(\n    field: FormlyFieldConfig,\n    formOptions: any\n  ): void {\n    if (formOptions.remoteOptions && formOptions.remoteOptions.type) {\n      field.type = 'select';\n      field.hooks = {\n        ...field.hooks,\n        afterContentInit: (f: FormlyFieldConfig) => {\n          const recordType = formOptions.remoteOptions.type;\n          const query = formOptions.remoteOptions.query || '';\n          f.props.options = this.recordService\n            .getRecords(recordType, query, 1, RecordService.MAX_REST_RESULTS_SIZE)\n            .pipe(\n              map((data: Record) =>\n                data.hits.hits.map((record: any) => {\n                  return {\n                    label: formOptions.remoteOptions.labelField && formOptions.remoteOptions.labelField in record.metadata\n                      ? record.metadata[formOptions.remoteOptions.labelField]\n                      : record.metadata.name,\n                    value: this.apiService.getRefEndpoint(\n                      recordType,\n                      record.id\n                    )\n                  };\n                })\n              )\n            );\n        }\n      };\n    }\n  }\n\n  /**\n   *\n   * @param field formly field config\n   * @param formOptions JSONSchema object\n   */\n  protected setValidation(field: FormlyFieldConfig, formOptions: any): void {\n    if (formOptions.validation) {\n      // custom validation messages\n      // TODO: use widget instead\n      const { messages } = formOptions.validation;\n      if (messages) {\n        if (!field.validation) {\n          field.validation = {};\n        }\n        if (!field.validation.messages) {\n          field.validation.messages = {};\n        }\n        for (const key of Object.keys(messages)) {\n          const msg = messages[key];\n          // add support of key with or without Message suffix (required == requiredMessage),\n          // this is useful for backend translation extraction\n          field.validation.messages[key.replace(/Message$/, '')] = (error, f: FormlyFieldConfig) =>\n            // translate the validation messages coming from the JSONSchema\n            // TODO: need to remove `as any` once it is fixed in ngx-formly v.5.7.2\n            this.translateService.stream(msg) as any;\n        }\n      }\n\n      if (formOptions.validation.validators) {\n        // validators: add validator with expressions\n        // TODO: use widget\n        const validatorsKey = Object.keys(formOptions.validation.validators);\n        validatorsKey.map(validatorKey => {\n          const validator = formOptions.validation.validators[validatorKey];\n          if ('expression' in validator && 'message' in validator) {\n            const { expression } = validator;\n            const expressionFn = Function('formControl', `return ${expression};`);\n            const validatorExpression = {\n              expression: (fc: UntypedFormControl) => expressionFn(fc),\n              // translate the validation message coming form the JSONSchema\n              message: this.translateService.stream(validator.message)\n            };\n            field.validators = field.validators !== undefined ? field.validators : {};\n            field.validators[validatorKey] = validatorExpression;\n          }\n        });\n      }\n    }\n  }\n\n  /**\n   * Convert JSONSchema form options to formly field options.\n   * @param field formly field config\n   * @param formOptions JSONSchema object\n   */\n  protected setSimpleOptions(field: FormlyFieldConfig, formOptions: any): void {\n    // some fields should not submit the form when enter key is pressed\n    if (field.props.doNotSubmitOnEnter != null) {\n      field.props.keydown = (f: FormlyFieldConfig, event?: any) => {\n        if (event.key === 'Enter') {\n          event.preventDefault();\n        }\n      };\n    }\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Record } from '../../record';\nimport { RecordService } from '../../record.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TemplatesService {\n\n  protected recordService: RecordService = inject(RecordService);\n\n  /**\n   * Get all templates corresponding to a resource type\n   * @param templateResourceType - string: the resource name where to find templates\n   * @param resourceType - string: the resource type\n   * @return an observable of template record\n   */\n  getTemplates(templateResourceType: string, resourceType?: string): Observable<any> {\n    const query = (resourceType !== undefined)\n      ? `template_type:${resourceType}`\n      : '';\n    return this.recordService.getRecords(templateResourceType, query, 1, RecordService.MAX_REST_RESULTS_SIZE).pipe(\n        map((data: Record) => data.hits),\n        map(hits => hits.total === 0 ? [] : hits.hits),\n        map(hits => hits.map( hit => hit.metadata))\n    );\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n * Copyright (C) 2020-2023 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, inject, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { RecordService } from '../../../record.service';\nimport { TemplatesService } from '../../services/templates.service';\nimport { CONFIG } from '../../../../utils/config';\n\n@Component({\n    selector: 'ng-core-load-template-form',\n    templateUrl: './load-template-form.component.html',\n    standalone: false\n})\nexport class LoadTemplateFormComponent implements OnInit {\n\n  protected dynamicDialogRef: DynamicDialogRef = inject(DynamicDialogRef);\n  protected dynamicDialogConfig: DynamicDialogConfig = inject(DynamicDialogConfig);\n  protected recordService: RecordService = inject(RecordService);\n  protected templateService: TemplatesService = inject(TemplatesService);\n  protected translateService: TranslateService = inject(TranslateService);\n  protected router: Router = inject(Router);\n  protected messageService: MessageService = inject(MessageService);\n\n  /** form group */\n  form: UntypedFormGroup = new UntypedFormGroup({});\n\n  /** fields config of the form */\n  formFields: FormlyFieldConfig[] = [];\n\n  /** model of the form */\n  model: FormModel;\n\n  isDataFormLoaded = false;\n\n  isVisible = true;\n\n  ngOnInit() {\n    const { data } = this.dynamicDialogConfig;\n\n    this.formFields.push({\n      key: 'template',\n      type: 'select',\n      props: {\n        appendTo: 'body',\n        required: true,\n        group: true,\n        filter: true,\n        scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n        options: [],\n        attributes: {\n          size: 10\n        }\n      }\n    });\n\n    this.templateService.getTemplates(data.templateResourceType, data.resourceType)\n      .subscribe((templates) => {\n        const items: {label:string, untranslatedLabel: string, items: {label:string, value:string}[]}[] = [];\n        // private first\n        const privateItems = templates.filter(template => template.visibility === 'private');\n        if(privateItems?.length>0) {\n          items.push({\n              label: this.translateService.instant('My private templates'),\n              untranslatedLabel: 'My private templates',\n              items: privateItems.map(item => ({\n                label: item.name,\n                value: item.pid\n              }))\n          });\n        }\n        // public last\n        const publicItems = templates.filter(template => template.visibility === 'public');\n\n        if(publicItems?.length>0) {\n          items.push({\n              label: this.translateService.instant('Public templates'),\n              untranslatedLabel: 'Public templates',\n              items: publicItems.map(item => ({\n                label: item.name,\n                value: item.pid\n              }))\n          });\n        }\n        this.formFields[0].props.options = items;\n        this.isDataFormLoaded = true;\n      });\n  }\n\n  /**\n   * Submit form hook.\n   * Redirect to the same editor form url with query params related to the selected template.\n   */\n  onSubmitForm() {\n    const formValues = this.form.value;\n    this.recordService.getRecord('templates', formValues.template).subscribe({\n        next: (template) => {\n          this.router.navigate([], {\n            queryParams: {\n              source: 'templates',\n              pid: template.id\n            },\n            queryParamsHandling: 'merge',\n            skipLocationChange: true\n          });\n          this.closeDialog();\n        },\n        error: (error) => {\n          this.messageService.add({\n            severity: 'error',\n            summary: this.translateService.instant('Error'),\n            detail: error.message,\n            sticky: true,\n            closable: true\n          });\n        }\n    });\n  }\n\n  closeDialog(): void {\n    this.dynamicDialogRef.close();\n  }\n}\n\n/**\n * Interface to define fields on form\n */\ninterface FormModel {\n  template?: string;\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n  Copyright (C) 2020 UCLouvain\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (isDataFormLoaded) {\n  <form [formGroup]=\"form\" (ngSubmit)=\"onSubmitForm()\">\n    <p-message severity=\"warn\">\n        <div class=\"core:w-full\">\n          <h4 class=\"text-error\" translate>Warning!</h4>\n          <p class=\"core:mt-1\" translate>\n            Loading a template will reload the current form. All values previously encoded will be lost.\n          </p>\n        </div>\n    </p-message>\n\n    <div class=\"core:my-1 core:font-bold\" translate>Select a template</div>\n    <formly-form [form]=\"form\" [fields]=\"formFields\" [model]=\"model\" />\n    <div class=\"core:flex core:justify-end core:gap-2 core:mt-2\">\n      <p-button [label]=\"'Cancel'|translate\" [outlined]=\"true\" severity=\"danger\" (onClick)=\"closeDialog()\" />\n      <p-button type=\"submit\" [label]=\"'Load'|translate\"  [disabled]=\"this.form.status !== 'VALID'\" />\n    </div>\n  </form>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n * Copyright (C) 2020-2023 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, inject, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\n\n@Component({\n    selector: 'ng-core-save-template-form',\n    templateUrl: './save-template-form.component.html',\n    standalone: false\n})\nexport class SaveTemplateFormComponent implements OnInit {\n\n  protected dynamicDialogRef: DynamicDialogRef = inject(DynamicDialogRef);\n  protected translateService: TranslateService = inject(TranslateService);\n\n  /** form group */\n  form: UntypedFormGroup = new UntypedFormGroup({});\n\n  /** fields config of the form */\n  formFields: FormlyFieldConfig[] = [];\n\n  /** model of the form */\n  model: FormModel;\n\n  ngOnInit() {\n    this.formFields.push({\n      key: 'name',\n      type: 'string',\n      props: {\n        required: true,\n        placeholder: this.translateService.instant('Choose a name for your template'),\n        minLength: 3,\n      }\n    });\n  }\n\n  /**\n   * Submit the form\n   */\n  onSubmitForm() {\n    this.closeDialog(this.form.value);\n  }\n\n  /**\n   * Close the modal dialog box\n   */\n  closeDialog(data?: FormModel) {\n    this.dynamicDialogRef.close(data);\n  }\n}\n\n/**\n * Interface to define fields on form\n */\ninterface FormModel {\n  name: string;\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n  Copyright (C) 2020 UCLouvain\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n\n<form class=\"core:w-full\" [formGroup]=\"form\" (ngSubmit)=\"onSubmitForm()\">\n    <formly-form class=\"core:w-full\" [form]=\"form\" [fields]=\"formFields\" [model]=\"model\"/>\n    <div class=\"core:flex core:justify-end core:gap-1 core:mt-2\">\n      <p-button [label]=\"'Cancel'|translate\" [outlined]=\"true\" severity=\"danger\" (onClick)=\"closeDialog()\" />\n      <p-button type=\"submit\" [label]=\"'Save'|translate\" [disabled]=\"this.form.status !== 'VALID'\" />\n    </div>\n</form>\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, computed, inject, Input, OnDestroy, OnInit, signal, ViewChild, WritableSignal } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AutoComplete, AutoCompleteCompleteEvent, AutoCompleteSelectEvent } from 'primeng/autocomplete';\nimport { SelectChangeEvent } from 'primeng/select';\nimport { Subscription } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\n/**\n * For big editor add the possibility to display\n */\n@Component({\n    selector: 'ng-core-editor-add-field-editor',\n    templateUrl: './add-field-editor.component.html',\n    standalone: false\n})\nexport class AddFieldEditorComponent implements OnInit, OnDestroy {\n\n  protected translateService: TranslateService = inject(TranslateService);\n\n  /** EditorComponent function */\n  @Input() editorComponent: any;\n\n  searchValue: string | undefined;\n\n  items: WritableSignal<any[]> = signal([]);\n\n  suggestions: any[] | undefined;\n\n  /** Instance of EditorComponent */\n  private editorComponentInstance: any;\n\n  // Subscriptions to observables.\n  private subscriptions: Subscription = new Subscription();\n\n  essentialsOptions = computed(() => this.items()\n          .filter(f => this.isFieldEssential(f)));\n\n  @ViewChild(\"addField\") autocomplete: AutoComplete;\n\n  onAddField(event: SelectChangeEvent): void {\n    this.editorComponentInstance.setHide(event.value, false, true);\n  }\n\n  /** onInit hook */\n  ngOnInit() {\n    this.editorComponentInstance = (this.editorComponent)();\n\n    this.subscriptions.add(this.editorComponentInstance.hiddenFields$.pipe(\n      tap((fields: any) => this.fieldsTranslate(fields))\n    ).subscribe());\n\n    this.subscriptions.add(this.translateService.onLangChange.pipe(\n      tap(() => this.fieldsTranslate(this.items()))\n    ).subscribe());\n  }\n\n  /** onDestroy hook */\n  ngOnDestroy(): void {\n      this.subscriptions.unsubscribe();\n  }\n\n  search(event: AutoCompleteCompleteEvent): void {\n    this.suggestions = this.items().filter((item: any) => {\n      return item.props.label.toLowerCase().indexOf(event.query.toLowerCase()) > -1\n    }\n    );\n  }\n\n  onSelect(event: AutoCompleteSelectEvent): void {\n    this.editorComponentInstance.setHide(event.value, false);\n    this.autocomplete.clear();\n  }\n\n  /**\n   * Filter fields to display only essential ones\n   * @param field - field to check\n   */\n  isFieldEssential(field: FormlyFieldConfig) {\n    return field.props?.navigation && field.props.navigation.essential === true;\n  }\n\n  fieldsTranslate(fields: any) {\n    this.items.set(\n      fields\n        .map((field: any) =>  {\n          field.props.label = this.translateService.instant(field.props.untranslatedLabel);\n          return field;\n        })\n        .sort((field1, field2) => field1.props.label.localeCompare(field2.props.label)))\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n  <div>\n    <p-autoComplete\n      [dropdown]=\"true\"\n      #addField\n      optionLabel=\"props.label\"\n      [placeholder]=\"'Add field' | translate\"\n      styleClass=\"core:mb-2 core:w-full\"\n      [suggestions]=\"suggestions\"\n      (completeMethod)=\"search($event)\"\n      (onSelect)=\"onSelect($event)\"\n      [disabled]=\"items().length < 1\"\n      scrollHeight=\"400px\"\n      appendTo=\"body\"\n    />\n  </div>\n\n@if(essentialsOptions()?.length > 0) {\n  <p-listbox\n    [options]=\"essentialsOptions()\"\n    scrollHeight=\"\"\n    styleClass=\"core:mt-2\"\n    (onChange)=\"onAddField($event)\"\n  >\n    <ng-template #item let-item>\n      {{ item.props.label }}\n    </ng-template>\n  </p-listbox>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Location } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core';\nimport { FormlyJsonschema } from '@ngx-formly/core/json-schema';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { MessageService } from 'primeng/api';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { BehaviorSubject, combineLatest, Observable, of, Subscription, throwError } from 'rxjs';\nimport { catchError, debounceTime, finalize, map, switchMap } from 'rxjs/operators';\nimport { ApiService } from '../../api/api.service';\nimport { AbstractCanDeactivateComponent } from '../../component/abstract-can-deactivate.component';\nimport { Error } from '../../error/error';\nimport { RouteCollectionService } from '../../route/route-collection.service';\nimport { LoggerService } from '../../service/logger.service';\nimport { CONFIG } from '../../utils/config';\nimport { RecordUiService } from '../record-ui.service';\nimport { RecordService } from '../record.service';\nimport { JSONSchemaService } from './services/jsonschema.service';\nimport { JSONSchema7, processJsonSchema, removeEmptyValues, resolve$ref } from './utils';\nimport { LoadTemplateFormComponent } from './widgets/load-template-form/load-template-form.component';\nimport { SaveTemplateFormComponent } from './widgets/save-template-form/save-template-form.component';\n\n@Component({\n    selector: 'ng-core-editor',\n    templateUrl: './editor.component.html',\n    standalone: false\n})\nexport class EditorComponent extends AbstractCanDeactivateComponent implements OnInit, OnChanges, OnDestroy {\n\n  protected formlyJsonschema: FormlyJsonschema = inject(FormlyJsonschema);\n  protected recordService: RecordService = inject(RecordService);\n  protected apiService: ApiService = inject(ApiService);\n  protected route: ActivatedRoute = inject(ActivatedRoute);\n  protected recordUiService: RecordUiService = inject(RecordUiService);\n  protected translateService: TranslateService = inject(TranslateService);\n  protected location: Location = inject(Location);\n  protected routeCollectionService: RouteCollectionService = inject(RouteCollectionService);\n  protected loggerService: LoggerService = inject(LoggerService);\n  protected jsonschemaService: JSONSchemaService = inject(JSONSchemaService);\n  protected dialogService: DialogService = inject(DialogService);\n  protected messageService: MessageService = inject(MessageService);\n\n  // form initial values\n  @Input() model: any = null;\n\n  // initial values changes notification\n  @Output() modelChange = new EventEmitter<any>();\n\n  // editor loading state notifications\n  @Output() loadingChange = new EventEmitter<boolean>();\n\n  // editor can deactivate change notification\n  @Output() canDeactivateChange = new EventEmitter<boolean>();\n\n  // Resource title\n  title?: string;\n\n  // Resource description\n  description?: string;\n\n  // Can Deactivate\n  canDeactivate = false;\n\n  // angular formGroup root\n  form: UntypedFormGroup;\n\n  // additional form options\n  options: FormlyFormOptions;\n\n  // form configuration\n  fields: FormlyFieldConfig[];\n\n  // root element of the editor\n  rootField: FormlyFieldConfig;\n\n  // list of fields to display in the TOC\n  tocFields$: Observable<any>;\n\n  // JSONSchema\n  @Input() schema: any;\n\n  // editor settings\n  @Input()\n  editorSettings = {\n    longMode: false,  // editor long mode\n    getHeaders: null,      // optional headers to use when loading a model\n    template: {\n      recordType: '',    // the resource considerate as template\n      loadFromTemplate: false,  // enable load from template button\n      saveAsTemplate: false,     // allow to save the record as a template\n    }\n  };\n\n  // store pid on edit mode\n  @Input() pid = null;\n\n  // save alternatives\n  saveAlternatives: { label: string, command: any }[] = [];\n\n  // current record type from the url\n  recordType = '';\n\n  // If an error occurred, it is stored, to display in interface.\n  error: Error;\n\n  /** Disables the save button during the action */\n  isSaveButtonDisabled = false;\n\n  // subscribers\n  private _subscribers: Subscription = new Subscription();\n\n  // Config for resource\n  private _resourceConfig: any;\n\n  // list of fields to be hidden\n  private _hiddenFields: FormlyFieldConfig[] = [];\n\n  // Observable of hidden fields\n  private _hiddenFieldsSubject = new BehaviorSubject<FormlyFieldConfig[]>([]);\n\n  // Dialog Ref\n  ref: DynamicDialogRef | undefined;\n\n  // current list of hidden fields\n  public get hiddenFields$(): Observable<any[]> {\n    return this._hiddenFieldsSubject.asObservable();\n  }\n\n  // Editor long mode\n  public get longMode(): boolean {\n    return this.editorSettings.longMode;\n  }\n\n  // Editor function\n  public get editorComponent(): () => EditorComponent {\n    return () => this;\n  }\n\n  /** Constructor */\n  constructor() {\n    super();\n    this.form = new UntypedFormGroup({});\n  }\n\n  /**\n   * Component has changed\n   * Called before ngOnInit() and whenever one of the input properties change.\n   * @param changes: the changed properties\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.model && !changes.model.isFirstChange()) { // Model has changed\n      this._setModel(changes.model.currentValue);\n      // needed to select the right value for existing data in the multi select\n      // components such as oneOf\n      if (this.schema) {\n        this.setSchema(this.schema);\n      }\n    }\n    if (changes.schema && changes.schema.isFirstChange()) { // Schema has changed\n      this.setSchema(changes.schema.currentValue);\n    }\n    if (changes.pid) { // Assign pid on schema. Reload schema\n      this.pid = changes.pid.currentValue;\n      if (this.schema) {\n        this.setSchema(this.schema);\n      }\n    }\n  }\n\n  /** onInit hook */\n  ngOnInit(): void {\n    this.tocFields$ = this.hiddenFields$.pipe(\n      debounceTime(300),\n      switchMap(() => {\n        if (this.fields && this.fields.length > 0) {\n          return of(\n            this.fields[0].fieldGroup.filter(f => {\n              // hidden properties should not be in the navigation\n              if (f.hide === true) {\n                return false;\n              }\n              // properties with hide wrapper should not be in the navigation\n              if (f.props.alwaysHidden) {\n                return false;\n              }\n              return true;\n            }));\n        }\n        return of([]);\n      })\n    );\n    combineLatest([this.route.params, this.route.queryParams]).subscribe(\n      ([params, queryParams]) => {\n        // uncomment for debug\n        // this.form.valueChanges.subscribe(v =>\n        //   console.log('model', this.model, 'v', v, 'form', this.form, 'field', this.fields)\n        // );\n        this.loadingChange.emit(true);\n        if (!params.type) {\n          this.model = {};\n          this.schema = {};\n          return;\n        }\n        this.recordType = params.type;\n        this.recordUiService.types = this.route.snapshot.data.types;\n\n        this._resourceConfig = this.recordUiService.getResourceConfig(\n          this.recordType\n        );\n        if (this._resourceConfig.editorSettings) {\n          this.editorSettings = { ...cloneDeep(this.editorSettings), ...this._resourceConfig.editorSettings };\n        }\n\n        // load template resource configuration if needed\n        //   If editor allowed to use a resource as a template, we need to load the configuration\n        //   of this resource and save it into `recordUIService.types` to use it when loading and saving\n        if (this.editorSettings.template.recordType !== '') {\n          const tmplResource = this.routeCollectionService.getRoute(this.editorSettings.template.recordType);\n          const tmplConfiguration = tmplResource.getConfiguration();\n          if (Object.hasOwn(tmplConfiguration, 'data')\n            && Object.hasOwn(tmplConfiguration.data, 'types')) {\n            this.recordUiService.types = this.recordUiService.types.concat(tmplConfiguration.data.types);\n          }\n        }\n\n        // saveAlternatives construction\n        //   Depending of editor configuration, it's possible to provide some alternatives save\n        //   methods. Each method must defined a label and a callback function used when user choose\n        //   this save method.\n        this.saveAlternatives = [];\n        if (this.editorSettings.template.saveAsTemplate) {\n          this.saveAlternatives.push({\n            label: this.translateService.instant('Save as template') + '…',\n            command: () => this.saveAsTemplate()\n          });\n        }\n\n        this.pid = params.pid;\n        const schema$: Observable<any> = this.recordService.getSchemaForm(this.recordType);\n        let record$: Observable<any> = of({ record: {}, result: null });\n        // load from template\n        //   If the url contains query arguments 'source' and 'pid' and 'source'=='templates'\n        //   then we need to use the data from this template as data source to fill the form.\n        if (queryParams.source === 'templates' && queryParams.pid != null) {\n          record$ = this.recordService.getRecord('templates', queryParams.pid).pipe(\n            map((record: any) => {\n              this.messageService.add({\n                severity: 'success',\n                summary: this.translateService.instant('Template'),\n                detail: this.translateService.instant('Template loaded'),\n                life: CONFIG.MESSAGE_LIFE\n              });\n              return {\n                result: true,\n                record: record.metadata.data\n              };\n            })\n          );\n          // load data from existing document\n          //   If the parsed url contains a 'pid' value, then user try to edit a record. Then\n          //   we need to load this record and use it as data source to fill the form.\n        } else if (this.pid) {\n          record$ = this.recordService\n            .getRecord(this.recordType, this.pid, 0, this.editorSettings.getHeaders || null)\n            .pipe(\n              switchMap((record: any) => {\n                return this.recordUiService.canUpdateRecord$(record, this.recordType).pipe(\n                  map((result) => {\n                    return {\n                      result,\n                      record: record.metadata\n                    };\n                  })\n                );\n              })\n            );\n        }\n\n        combineLatest([schema$, record$]).subscribe({\n          next: ([schemaform, data]) => {\n            // Set schema\n            this.setSchema(\n              this._resourceConfig.recordResource\n                ? schemaform.schema.properties.metadata\n                : schemaform.schema\n            );\n\n            // Check permissions and set record\n            if (data.result && data.result.can === false) {\n              this.messageService.add({\n                severity: 'error',\n                summary: this.translateService.instant(this.recordType),\n                detail: this.translateService.instant('You cannot update this record'),\n                sticky: true,\n                closable: true\n              });\n              this.location.back();\n            } else {\n              this._setModel(data.record);\n            }\n            this.loadingChange.emit(false);\n          },\n          error: (error) => {\n            this.error = error;\n            this.loadingChange.emit(false);\n          }\n          }\n        );\n      }\n    );\n  }\n\n  /** onDestroy hook */\n  ngOnDestroy(): void {\n    this._subscribers.unsubscribe();\n  }\n\n  /**\n   * Set the model\n   * @param model: The data to use as new model\n   */\n  private _setModel(model: any): void {\n    if (this._resourceConfig != null) {\n      // the parent don't know that we are editing a record\n\n      // /!\\ This will probably not work anymore with resources managed by\n      // invenio-records-resources, a fix will be necessary to make it work\n      // with both systems.\n      if (\n        !this._resourceConfig.recordResource &&\n        this.pid != null &&\n        (this.model == null || this.model.pid == null)\n      ) {\n        model.pid = this.pid;\n      }\n      // preprocess the model before sending to formly\n      this.model = this.preprocessRecord(model);\n      this.modelChanged(this.model);\n    }\n  }\n\n  /**\n   * Emit value when model is changed.\n   * @param modelValue Model.\n   */\n  modelChanged(modelValue: any): void {\n    this.modelChange.emit(removeEmptyValues(modelValue));\n  }\n\n  /**\n   * Preprocess the record before passing it to the editor\n   * @param record - Record object to preprocess\n   */\n  private preprocessRecord(record: any): any {\n    const config = this.recordUiService.getResourceConfig(this.recordType);\n\n    if (config.preprocessRecordEditor) {\n      return config.preprocessRecordEditor(record);\n    }\n    return record;\n  }\n\n  /**\n   * Postprocess the record before save\n   * @param record - Record object to postprocess\n   */\n  private postprocessRecord(record: any): any {\n    const config = this.recordUiService.getResourceConfig(this.recordType);\n\n    if (config.postprocessRecordEditor) {\n      return config.postprocessRecordEditor(record);\n    }\n    return record;\n  }\n\n  /**\n   * Pre Create Record\n   * @param record - Record object\n   */\n  private preCreateRecord(record: any): any {\n    const config = this.recordUiService.getResourceConfig(this.recordType);\n\n    if (config.preCreateRecord) {\n      return config.preCreateRecord(record);\n    }\n    return record;\n  }\n\n  /**\n   * Pre Update Record\n   * @param record - Record object\n   */\n  private preUpdateRecord(record: any): any {\n    const config = this.recordUiService.getResourceConfig(this.recordType);\n\n    if (config.preUpdateRecord) {\n      return config.preUpdateRecord(record);\n    }\n    return record;\n  }\n\n  /**\n   * Preprocess the record before passing it to the editor\n   * @param schema - object, JSONSchema\n   */\n  setSchema(schema: any): void {\n    // reorder all object properties\n    this.schema = processJsonSchema(resolve$ref(schema, schema.properties));\n    this.options = {};\n\n    // remove hidden field list in case of a previous setSchema call\n    this.clearHiddenFields();\n\n    // form configuration\n    const editorConfig = {\n      pid: this.pid,\n      longMode: this.longMode,\n      recordType: this.recordType\n    }\n    const fields = [\n      this.formlyJsonschema.toFieldConfig(this.schema, {\n        // post process JSONSChema7 to FormlyFieldConfig conversion\n        map: (field: FormlyFieldConfig, jsonSchema: JSONSchema7) => {\n          /**** additional JSONSchema configurations *******/\n          field = this.jsonschemaService.processField(field, jsonSchema);\n          field.props.editorConfig = editorConfig;\n          field.props.getRoot = (() => this.rootField);\n          field.props.setHide = ((field: FormlyFieldConfig, value: boolean) => this.setHide(field, value));\n          if (this._resourceConfig != null && this._resourceConfig.formFieldMap) {\n            return this._resourceConfig.formFieldMap(field, jsonSchema);\n          }\n          return field;\n        }\n      })\n    ];\n    // mark the root field\n    fields[0].props.isRoot = true;\n\n    this.fields = fields;\n\n    // set root element\n    if (this.fields) {\n      this.title = this.fields[0].props?.label;\n      this.description = this.fields[0].props?.description;\n      this.rootField = this.fields[0];\n    }\n  }\n\n  /**\n   * Save the data on the server.\n   */\n  submit(): void {\n    this.isSaveButtonDisabled = true;\n    this.form.markAllAsTouched();\n\n    if (this.form.valid === false) {\n      const fields = [];\n      Object.keys(this.form.controls).forEach((key: string) => {\n        if (this.form.controls[key].status !== 'VALID') {\n          fields.push(this.translateService.instant(key));\n        }\n      });\n      let errorMessage = '';\n      if (fields.length > 0) {\n        errorMessage += \"\\n\" + this.translateService.instant('Field(s) in error: ');\n        errorMessage += fields.join(', ');\n      }\n      this.messageService.add({\n        severity: 'error',\n        summary: this.translateService.instant(this.recordType),\n        detail: this.translateService.instant('The form contains errors.') + errorMessage,\n        sticky: true,\n        closable: true\n      });\n      this.isSaveButtonDisabled = false;\n      return;\n    }\n\n    this._canDeactivate();\n    this.loadingChange.emit(true);\n\n    let data = removeEmptyValues(this.model);\n    data = this.postprocessRecord(data);\n\n    // For compatibility with resources managed with invenio-records-resources\n    if (this._resourceConfig.recordResource) {\n      data = { metadata: data };\n    }\n\n    // The record has validation, the action `save` is set.\n    if (data.metadata?.validation) {\n      data.metadata.validation.action = 'save';\n    }\n\n    let recordAction$: Observable<any>;\n    if (this.pid != null) {\n      recordAction$ = this.recordService.update(this.recordType, this.pid, this.preUpdateRecord(data)).pipe(\n        catchError((error) => this._handleError(error)),\n        map(record => {\n          return { record, action: 'update', message: this.translateService.instant('Record updated.') };\n        }),\n        finalize(() => this.isSaveButtonDisabled = false)\n      );\n    } else {\n      recordAction$ = this.recordService.create(this.recordType, this.preCreateRecord(data)).pipe(\n        catchError((error) => this._handleError(error)),\n        map(record => {\n          return { record, action: 'create', message: this.translateService.instant('Record created.') };\n        }),\n        finalize(() => this.isSaveButtonDisabled = false)\n      );\n    }\n\n    recordAction$.subscribe(result => {\n      this.messageService.add({\n        severity: 'success',\n        summary: this.translateService.instant(this.recordType),\n        detail: this.translateService.instant(result.message),\n        life: CONFIG.MESSAGE_LIFE\n      });\n      this.recordUiService.redirectAfterSave(\n        result.record.id,\n        result.record,\n        this.recordType,\n        result.action,\n        this.route\n      );\n      this.loadingChange.emit(true);\n    });\n  }\n\n  /** Save the current editor content as a template */\n  saveAsTemplate(): void {\n    this.ref = this.dialogService.open(SaveTemplateFormComponent, {\n      header: this.translateService.instant('Save as template'),\n      width: '40vw',\n    });\n    this.ref.onClose.subscribe(data => {\n      if (data) {\n        let modelData = removeEmptyValues(this.model);\n        modelData = this.postprocessRecord(modelData);\n        let record = {\n          name: data.name,\n          data: modelData,\n          template_type: this.recordType\n        };\n        const tmplConfig = this.recordUiService.getResourceConfig(this.editorSettings.template.recordType);\n        if (tmplConfig.preCreateRecord) {\n          record = tmplConfig.preCreateRecord(record);\n        }\n        this.loadingChange.emit(true);\n        this.recordService.create(this.editorSettings.template.recordType, record).subscribe({\n          next: (createdRecord) => {\n            this.messageService.add({\n              severity: 'success',\n              summary: this.translateService.instant(this.editorSettings.template.recordType),\n              detail: this.translateService.instant('Record created.'),\n              life: CONFIG.MESSAGE_LIFE\n            });\n            this.recordUiService.redirectAfterSave(\n              createdRecord.id,\n              createdRecord,\n              this.editorSettings.template.recordType,\n              'create',\n              this.route\n            );\n          },\n          error: (error) => {\n            this.loadingChange.emit(false);\n            this.messageService.add({\n              severity: 'error',\n              summary: this.translateService.instant(this.editorSettings.template.recordType),\n              detail: error.title,\n              sticky: true,\n              closable: true\n            });\n          }\n        })\n      }\n    });\n  }\n\n\n  /**\n   * Scroll the window in to the DOM element corresponding to a given config field.\n   * @param event - click DOM event\n   * @param field - FormlyFieldConfig, the form config corresponding to the DOM element to jump to.\n   */\n  setFocus(event: any, field: FormlyFieldConfig): void {\n    event.preventDefault();\n    this.setFieldFocus(field, true);\n  }\n\n  /**\n   * Cancel editing and back to previous page\n   */\n  cancel(): void {\n    this._canDeactivate();\n    this.location.back();\n  }\n\n  /**\n   * Open a modal dialog box to load a template.\n   */\n  showLoadTemplateDialog(): void {\n    this.dialogService.open(LoadTemplateFormComponent, {\n      header: this.translateService.instant('Load from template'),\n      focusOnShow: false,\n      width: '50vw',\n      position: 'top',\n      modal: true,\n      dismissableMask: false,\n      data: {\n        templateResourceType: this.editorSettings.template.recordType,\n        resourceType: this.recordType\n      }\n    });\n  }\n\n  /**\n   * Can the `load template` should be visible.\n   * The 'load template' button will be visible only if the corresponding setting is set and the user\n   * isn't in 'edit mode' (load template is only available for new resources)\n   * @return True if the button could be visible ; False otherwise\n   */\n  canLoadTemplate(): boolean {\n    return this.editorSettings.template.loadFromTemplate && !this.pid;\n  }\n\n  /********** Form field manipulation **********/\n\n  /**\n   * Scroll to a field or fieldGroup and set focus in the first field candidate.\n   * @param field: the field or fieldGroup where to search about field candidate.\n   * @param scroll: is the screen should scroll to the field.\n   */\n  setFieldFocus(field: FormlyFieldConfig, scroll = false): boolean {\n    if (scroll === true && field.id)  {\n      const el = document.getElementById(`field-${field.id}`);\n      if (el != null) {\n        // we need to scroll after the focus setTimeout push the action in the\n        // next event loop.\n        setTimeout(() => el.scrollIntoView({ behavior: 'smooth' }));\n        scroll = false;\n      }\n    }\n    if (field.fieldGroup && field.fieldGroup.length > 0) {\n      const visibleFields = field.fieldGroup.filter(f => !f.hide);\n      if (visibleFields.length > 0) {\n        return this.setFieldFocus(visibleFields[0], scroll);\n      }\n    }\n    field.focus = true;\n    return true;\n  }\n\n  /**\n   * Add a field to the hidden list\n   * @param field - FormlyFieldConfig, form config to be added\n   */\n  addHiddenField(field: FormlyFieldConfig): void {\n    if (this.isRoot(field.parent)) {\n      // formly can change the reference of a field. Especially when the model\n      // change such as external import.\n      this._hiddenFields = this._hiddenFields.filter(f => f.id !== field.id);\n      this._hiddenFields.push(field);\n      this._hiddenFieldsSubject.next(this._hiddenFields);\n    }\n  }\n\n  /**\n   * Clear the list of the hidden fields\n   */\n  clearHiddenFields(): void {\n    this._hiddenFields = [];\n    this._hiddenFieldsSubject.next(this._hiddenFields);\n  }\n\n  /**\n   * Remove a field to the hidden list\n   * @param field - FormlyFieldConfig, form config to be removed\n   */\n  removeHiddenField(field: FormlyFieldConfig): void {\n    if (this._hiddenFields.some(f => f.id === field.id) && this.isRoot(field.parent)) {\n      // Form is touched if a field is added.\n      // Required for hide field in edit mode.\n      this.rootField.formControl.markAsTouched();\n      this._hiddenFields = this._hiddenFields.filter(f => f.id !== field.id);\n      this._hiddenFieldsSubject.next(this._hiddenFields);\n    }\n  }\n\n  /**\n   * Am I at the root of the form?\n   * @param field - FormlyFieldConfig, the field to hide\n   * @returns boolean, true if I'm the root\n   */\n  isRoot(field: FormlyFieldConfig): boolean {\n    if (field == null) {\n      return false;\n    }\n    return field.props?.isRoot || false;\n  }\n\n  /**\n   * Can the field be hidden?\n   * @param field - FormlyFieldConfig, the field to hide\n   * @returns boolean, true if the field can be hidden\n   */\n  canHide(field: FormlyFieldConfig): boolean {\n    if (!this.longMode) {\n      return false;\n    }\n    return (\n      !field.props.required &&\n      !field.hide &&\n      !(field?.expressions?.hide)\n    );\n  }\n\n  /**\n   * Hide the given formly field.\n   * @param field - FormlyFieldConfig, the field to hide\n   */\n  setHide(field: FormlyFieldConfig, value: boolean, scroll = false): void {\n    if (value) {\n      if (field.parent.props.isRoot) {\n        this.addHiddenField(field);\n      }\n    } else {\n      this.removeHiddenField(field);\n      this.setFieldFocus(field, scroll);\n    }\n    field.hide = value;\n  }\n\n  /********************* Private  ***************************************/\n\n\n\n  /**\n   * Handle form error\n   * @param error: object with status and title parameters\n   * @return Observable<Error>\n   */\n  private _handleError(error: { status: number, title: string }): Observable<Error> {\n    this.messageService.add({\n      severity: 'error',\n      summary: this.translateService.instant(error.title),\n      detail: this.translateService.instant('Server error.'),\n      sticky: true,\n      closable: true\n    });\n    return throwError(() => ({ status: error.status, title: error.title }));\n  }\n\n  private _canDeactivate(activate = true) {\n    this.canDeactivate = activate;\n    this.canDeactivateChange.next(activate);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n  <div class=\"core:flex core:flex-col core:gap-1\">\n    <div class=\"core:z-10 core:flex core:flex-col core:gap-2 core:bg-white core:sticky core:top-0 core:py-1\">\n      <div class=\"core:flex core:justify-between core:items-center\">\n        @if (rootField) {\n          <legend>\n              <span class=\"core:text-2xl\" [pTooltip]=\"description | translate\" tooltipPosition=\"top\">\n                {{ title || recordType | ucfirst | translate }}\n              </span>\n          </legend>\n        }\n        <div class=\"core:flex core:items-center core:justify-end core:gap-1\">\n          <!-- load from template button -->\n          @if (canLoadTemplate()) {\n            <p-button\n              id=\"editor-load-template-button\"\n              [label]=\"'Load template…' | translate\"\n              [outlined]=\"true\"\n              icon=\"fa fa-upload\"\n              (onClick)=\"showLoadTemplateDialog()\"\n            />\n          }\n          <!-- cancel button -->\n          <p-button\n            id=\"editor-cancel-button\"\n            [label]=\"'Cancel' | translate\"\n            icon=\"fa fa-times\"\n            [outlined]=\"true\"\n            severity=\"danger\"\n            (onClick)=\"cancel()\"\n          />\n        <!-- save button -->\n         <!--\n          TODO: Fix this when the split-button component allows you to change the button type.\n          We hide the submit button when the split button is displayed so that the submit function\n          can still be accessed using the enter key.\n         -->\n         <p-button\n            type=\"submit\"\n            id=\"editor-save-button\"\n            [label]=\"'Save' | translate\"\n            [disabled]=\"isSaveButtonDisabled\"\n            [hidden]=\"saveAlternatives.length > 0\"\n          />\n          <!-- END TODO -->\n          @if (saveAlternatives.length > 0) {\n          <p-splitButton\n            id=\"editor-save-button-split\"\n            [label]=\"'Save' | translate\"\n            (onClick)=\"submit()\"\n            [model]=\"saveAlternatives\"\n          />\n          }\n        </div>\n      </div>\n      <p-divider class=\"core:!mt-0\" />\n    </div>\n\n    <div class=\"core:flex core:gap-2 core:**:min-w-0\">\n      <!-- add fields section -->\n      @if (editorSettings.longMode) {\n        <div class=\"core:flex core:top-18 core:sticky core:flex-[0_0_250px] core:h-[calc(100dvh-(--spacing(18)))] core:overflow-y-auto core:py-1\">\n          <ng-core-editor-add-field-editor [editorComponent]=\"editorComponent\" />\n        </div>\n      }\n\n      <!-- editor itself -->\n      <div class=\"core:grow core:flex core:gap-2\">\n        <!-- ngx-formly -->\n          <formly-form\n            class=\"core:grow\"\n            [model]=\"model\"\n            [fields]=\"fields\"\n            [options]=\"options\"\n            [form]=\"form\"\n            (modelChange)=\"modelChanged($event)\"\n          />\n        @if (editorSettings.longMode) {\n          <!-- TOC navigation -->\n          <div class=\"core:text-sm core:hidden core:lg:block core:flex core:top-18 core:sticky core:flex-[0_0_250px] core:h-[calc(100dvh-(--spacing(18)))] core:overflow-y-auto core:flex-col core:gap-2\">\n              <ng-content select=\"[beforeTableOfContent]\"></ng-content>\n              <span class=\"core:font-bold\" for=\"addField\" translate>Jump to</span>\n              <ul class=\"core:ml-2 core:pl-0 core:list-none\">\n                @for (f of tocFields$ | async; track f.key) {\n                  <li class=\"core:mb-1\">\n                    <span class=\"text-link-secondary\" (click)=\"setFocus($event, f)\">{{ f.props.label | translate }}</span>\n                  </li>\n                }\n              </ul>\n        </div>\n        }\n      </div>\n      </div>\n  </div>\n</form>\n\n@if (error) {\n  <ng-core-error [error]=\"error\" />\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { FormlyExtension, FormlyFieldConfig, FormlyFieldProps } from '@ngx-formly/core';\nimport { _, TranslateService } from \"@ngx-translate/core\";\nimport { DateTime } from \"luxon\";\nimport { isObservable, of } from 'rxjs';\nimport { RecordService } from '../record.service';\nimport { isEmpty, removeEmptyValues } from './utils';\n\nexport class NgCoreFormlyExtension {\n\n  protected recordService: RecordService = inject(RecordService);\n\n  // Types to apply field wrapper on\n  private _fieldWrapperTypes = [\n    'boolean',\n    'datepicker',\n    'markdown',\n    'passwordGenerator',\n    'radioButton',\n    'remoteAutoComplete',\n    'textarea'\n  ];\n\n  /**\n   * prePopulate Formly hook\n   * @param field - FormlyFieldConfig\n   */\n  prePopulate(field: FormlyFieldConfig): void {\n    if (field.key) {\n      field.id = this._getKey(field);\n    }\n    this._setCustomValidators(field);\n    // Set default value from expression.\n    if (field.props?.defaultValueExpression) {\n      const expression = field.props.defaultValueExpression;\n      const expressionFn = Function('expression', `return ${expression};`);\n      field.defaultValue = expressionFn();\n    }\n  }\n\n  /**\n   * onPopulate Formly hook\n   * @param field - FormlyFieldConfig\n   */\n  onPopulate(field: FormlyFieldConfig): void {\n    // Path of Array\n    // Bug issue: https://github.com/ngx-formly/ngx-formly/issues/3914\n    if (field?.parent?.type === 'array' && field.type !== 'object' && field.props.required) {\n      field.props.required = false;\n    }\n    this._setWrappers(field);\n    this._hideEmptyField(field);\n    if (field.props.alwaysHidden) {\n      field.props.itemCssClass = 'core:hidden';\n    }\n    const expressions = field?.expressions;\n    if (expressions && expressions['props.required'] !== undefined) {\n      field.options.fieldChanges.subscribe((changes) => {\n        if (\n          changes.type === 'expressionChanges' &&\n          changes.property === 'props.required' &&\n          changes.value === true &&\n          changes.field.hide === true\n        ) {\n          changes.field.hide = false;\n        }\n      });\n    }\n  }\n\n  /**\n   * Add formly wrappers\n   * @param field - FormlyFieldConfig\n   */\n  private _setWrappers(field: FormlyFieldConfig): void {\n    // get wrappers from the props (JSONSchema)\n    if (field.props) {\n      field.wrappers = [...(field.props.wrappers || []), ...(field.wrappers || [])];\n    }\n\n    if (field?.props?.editorConfig?.longMode) {\n      // add automatically a card wrapper for the first level fields\n      const { parent } = field;\n      if (parent && parent.props && parent.props.isRoot === true && !field.wrappers.includes('card') && !field.wrappers.includes('hide')) {\n        field.wrappers.unshift('card');\n      }\n    }\n\n    // adds form-fields for non standard field types\n    if (this._fieldWrapperTypes.some((elem) => elem === field.type) && !field.wrappers.includes('card')) {\n      field.wrappers = [...(field.wrappers || []), 'form-field'];\n    }\n\n    // TODO: this can be fixed in a future formly release\n    // due to multiple calls (sometimes) we need to make the value unique\n    field.wrappers = [...new Set(field.wrappers)];\n  }\n\n  /**\n   * Create an id html attribute by joining field and parents keys\n   * @param field formly field config\n   * @returns array - keys to create the id html attribute\n   */\n  private _getKey(field: any): string {\n    let parentKey = null;\n    const keyParams = [];\n\n    if (field.parent != null) {\n      parentKey = this._getKey(field.parent);\n      keyParams.push(parentKey);\n    }\n\n    if (parentKey != null) {\n      if (field.key != null) {\n        keyParams.push(field.key);\n      } else {\n        keyParams.push(field.id.replace(/.*__(\\d+)$/, '$1'));\n      }\n\n      return keyParams.join('-');\n    }\n    return field.key;\n  }\n\n  /**\n   * Check if the given field or one of his parents has a hide wrapper\n   * @param field - FormlyFieldConfig\n   * @return boolean - true if has a hide wrapper\n   */\n  private _hasHideWrapper(field: FormlyFieldConfig): boolean {\n    if (field.wrappers.includes('hide')) {\n      return true;\n    }\n    if (field?.parent) {\n      return this._hasHideWrapper(field.parent);\n    }\n    return false;\n  }\n\n  /**\n   * Check if the given field has at least on parent marked as hidden.\n   * The model should be empty.\n   *\n   * @param field - FormlyFieldConfig\n   * @return boolean - true has a parent marked as hidden.\n   */\n  private _hasHiddenParent(field: FormlyFieldConfig): boolean {\n    if (field?.hide === true) {\n      return this._modelIsEmpty(field);\n    }\n    if (field?.parent) {\n      return this._hasHiddenParent(field.parent);\n    }\n    return false;\n  }\n\n  /**\n   * Check if a field has an empty model.\n   *\n   * @param field formly field config\n   * @returns true if the given field has an empty model.\n   */\n  private _modelIsEmpty(field): boolean {\n    let model = field?.model;\n    // for simple object the model is the parent dict\n    if (field.model != null && !Object.hasOwn(field, 'fieldGroup')) {\n      // New from ngx-formly v5.9.0\n      model = field.model[Array.isArray(field.key) ? field.key[0] : field.key];\n    }\n    model = removeEmptyValues(model);\n    return isEmpty(model);\n  }\n\n  /**\n   * Hide or show field depending of the data content and the hide property\n   * @param field - FormlyFieldConfig\n   */\n  private _hideEmptyField(field: FormlyFieldConfig): void {\n    if (!field.props?.editorConfig) {\n      return;\n    }\n    const longMode = field?.props?.editorConfig?.longMode;\n    const pid = field?.props?.editorConfig?.pid;\n    if (\n      // only in longMode else it will not be possible to unhide a field\n      !longMode ||\n      // system field has not key\n      !field?.key ||\n      // ignore array item which as key of the form \"0\"\n      // TODO: find a better way to identify this case\n      !isNaN(Number(field.key)) ||\n      // ignore field that has hide expression\n      field?.expressions?.hide ||\n      // do not hide a field containing a 'hide' wrapper\n      this._hasHideWrapper(field) ||\n      // do not hide a field that has a parent marked as hidden and a model is empty\n      (this._hasHiddenParent(field?.parent) && field.props.hide !== true)\n    ) {\n      return;\n    }\n\n    // is the model empty\n    const modelEmpty = this._modelIsEmpty(field);\n    if (\n      // do not hide field which has value in the model\n      modelEmpty &&\n      // do not hide required fields\n      !field.props.initialRequired\n    ) {\n      if (\n        // hide field marked as hide\n        (field.props.hide === true &&\n          // do not hide field has been already manipulated\n          field.hide === undefined) ||\n        // in edition empty fields should be hidden\n        (pid != null &&\n          // only during the editor initialization\n          !field?.props?.getRoot()?.formControl?.touched)\n      ) {\n        if (field.props.setHide) {\n          field.props.setHide(field, true);\n        } else {\n          field.hide = true;\n        }\n      }\n    }\n  }\n\n  /**\n   * Set custom validators from the props configuration.\n   * @param field - FormlyFieldConfig\n   */\n  private _setCustomValidators(field: FormlyFieldConfig): void {\n    if (field.props == null || field.props.validation == null) {\n      return;\n    }\n    const customValidators = field.props.validation.validators || {};\n    // asyncValidators: valueAlreadyExists\n    if (customValidators.valueAlreadyExists) {\n      const { filter, limitToValues, term } = customValidators.valueAlreadyExists;\n      field.asyncValidators = {\n        validation: [\n          (control: UntypedFormControl) => {\n            return this.recordService.uniqueValue(\n              field,\n              field.props.editorConfig.recordType,\n              field.props.editorConfig.pid,\n              term ? term : null,\n              limitToValues ? limitToValues : [],\n              filter ? filter : null\n            );\n          },\n        ],\n      };\n      delete customValidators.valueAlreadyExists;\n    }\n    // asyncValidators: valueKeysInObject\n    //  This validator is similar to uniqueValidator but only check on some specific fields of array items.\n    if (customValidators.uniqueValueKeysInObject) {\n      field.validators = {\n        uniqueValueKeysInObject: {\n          expression: (control: UntypedFormControl): boolean => {\n            // if value isn't an array or array contains less than 2 elements, no need to check\n            if (!(control.value instanceof Array) || control.value.length < 2) {\n              return true;\n            }\n            const keysToKeep = customValidators.uniqueValueKeysInObject.keys;\n            const uniqueItems = Array.from(\n              new Set(\n                control.value.map((v: any) => {\n                  const keys = keysToKeep.reduce((acc, elt) => {\n                    acc[elt] = v[elt];\n                    return acc;\n                  }, {});\n                  return JSON.stringify(keys);\n                })\n              )\n            );\n            return uniqueItems.length === control.value.length;\n          },\n        },\n      };\n    }\n    // asyncValidators: numberOfSpecificValuesInObject\n    if (customValidators.numberOfSpecificValuesInObject) {\n      field.validators = {\n        numberOfSpecificValuesInObject: {\n          expression: (control: UntypedFormControl): boolean => {\n            function objIntersection(a, b) {\n              const k1 = Object.keys(a);\n              return k1.filter((k) => a[k] === b[k]);\n            }\n            const min = customValidators.numberOfSpecificValuesInObject.min || 0;\n            const max = customValidators.numberOfSpecificValuesInObject.max || Infinity;\n            const keys = customValidators.numberOfSpecificValuesInObject.keys;\n\n            // if value isn't an array and no minimum value is specified, no need to check.\n            if (!(control.value instanceof Array) && min === 0) {\n              return true;\n            }\n            const counter = control.value.filter((element) => objIntersection(keys, element).length > 0).length;\n            return min <= counter && counter <= max;\n          },\n        },\n      };\n    }\n    // The start date must be less than the end date.\n    if (customValidators.datesGreaterThan) {\n      const firstDate: string = customValidators.datesGreaterThan.dateFirst;\n      const lastDate: string = customValidators.datesGreaterThan.dateLast;\n      const strict: boolean = customValidators.datesGreaterThan.strict || false;\n      field.validators = {\n        datesGreaterThan: {\n          expression: (control: UntypedFormControl): boolean =>\n          {\n            const dateFormat = 'yyyy-MM-dd';\n            const parentCtrl = control?.parent;\n            if (!parentCtrl) {\n              return true;\n            }\n            const dateFirstCtrl = parentCtrl.get(firstDate);\n            const dateLastCtrl = parentCtrl.get(lastDate);\n            if (dateFirstCtrl?.value?.length > 0 && dateLastCtrl?.value?.length > 0) {\n              const dateTimeFirst = DateTime.fromFormat(dateFirstCtrl?.value, dateFormat);\n              const dateTimeLast = DateTime.fromFormat(dateLastCtrl?.value, dateFormat);\n              const valid = strict ? dateTimeFirst < dateTimeLast : dateTimeFirst <= dateTimeLast;\n              if (valid) {\n                dateFirstCtrl?.setErrors(null);\n                dateLastCtrl?.setErrors(null);\n              }\n              return valid;\n            }\n            return true;\n          },\n          message: () => field?.props?.validation?.messages?.datesGreaterThan\n        },\n      };\n    }\n  }\n}\n\nexport class TranslateExtension implements FormlyExtension {\n\n  protected translate: TranslateService = inject(TranslateService);\n\n  prePopulate(field: FormlyFieldConfig<FormlyFieldProps & Record<string, any>>): void {\n    const props: any = field.props || {};\n\n    // translate only once\n    if (props.translated) {\n      return;\n    }\n    props.translated = true;\n\n    // label / title\n    if (props.label) {\n      // store the untranslated label as the hidden fields are not translated\n      props.untranslatedLabel = props.label;\n      field.expressions = {\n        ...(field.expressions || {}),\n        'props.label': this.translate.stream(props.label),\n      };\n    }\n    // description\n    if (props.description) {\n      field.expressions = {\n        ...(field.expressions || {}),\n        'props.description': this.translate.stream(props.description),\n      };\n    }\n    // placeholder\n    if (props.placeholder) {\n      field.expressions = {\n        ...(field.expressions || {}),\n        'props.placeholder': this.translate.stream(props.placeholder),\n      };\n    }\n\n    // Save untranslated string\n    if (props.addonLeft) {\n      props.addonLeftUntranslated = props.addonLeft;\n    }\n    if (props.addonRight) {\n      props.addonRightUntranslated = props.addonRight;\n    }\n\n    this.processAllAddon(props);\n    this.translate.onLangChange.subscribe(() => {\n      this.processAllAddon(props);\n    });\n  }\n\n  private processAllAddon(props: any): void {\n    if (props.addonLeft) {\n      props.addonLeft = this.processAddon(props.addonLeftUntranslated);\n    }\n    if (props.addonRight) {\n      props.addonRight = this.processAddon(props.addonRightUntranslated);\n    }\n  }\n\n  private processAddon(addon: string[]): any {\n    return addon.map((label: string) => (label.startsWith('<') ? label : this.translate.instant(label)));\n  }\n}\n\nexport class FormOptionsProcessExtension implements FormlyExtension {\n  prePopulate(field: FormlyFieldConfig<FormlyFieldProps & Record<string, any>>): void {\n    // Process options\n    if (field.props?.options && !isObservable(field.props.options)) {\n      field.props.options = of(this.processOptions(field.props));\n    }\n    // Process filter options\n    if (field.props?.filters?.options && !isObservable(field.props.filters.options)) {\n      field.props.filters.options = of(this.processOptions(field.props.filters));\n    }\n  }\n\n  private processOptions(props: any): any[] {\n    this.processUntranslatedLabel(props.options);\n    const preferredOptions = props.options.filter((option: any) => option.preferred);\n    if (preferredOptions.length > 0) {\n      const options = [];\n      props.group = true;\n      const otherOptions = props.options.filter((option: any) => !option.preferred);\n      options.push({\n        label: 'group-preferred',\n        untranslatedLabel: 'group-preferred',\n        items: props.sort ? this.sortOptions(preferredOptions) : preferredOptions\n      });\n      options.push({\n        label: 'group-other',\n        untranslatedLabel: 'group-other',\n        items: props.sort ? this.sortOptions(otherOptions) : otherOptions\n      });\n      return options;\n    } else {\n\n      return props.sort ? this.sortOptions(props.options) : props.options\n    }\n  }\n\n  private processUntranslatedLabel(options: any[]): void {\n    options.map((option: any) => {\n      option.untranslatedLabel = option.label;\n      if (option.items) {\n        this.processUntranslatedLabel(option.items);\n      }\n      if (option.children) {\n        this.processUntranslatedLabel(option.children);\n      }\n    });\n  }\n\n  private sortOptions(options: any) {\n    options = options.sort((a: any, b: any) => a.label.localeCompare(b.label));\n    if (options.filter((option: any) => option.items).length > 0) {\n      options.forEach((option: any) => {\n        if (option.items) {\n          return this.sortOptions(option.items);\n        }\n      });\n    }\n    return options;\n  }\n}\n\n/**\n * To register an ngx-formly translations extension.\n *\n * @param translate ngx-translate service\n * @param recordService - ng core record service\n * @returns FormlyConfig object configuration\n */\nexport function registerNgCoreFormlyExtension(translate: TranslateService, recordService: RecordService) {\n  return {\n    // translate the default validators messages\n    // widely inspired from ngx-formly example\n    validationMessages: [\n      {\n        name: 'required',\n        // use a marker to force translation extraction due to a bad detection of ngx-translate-extract\n        message: () => translate.stream(_('This field is required')),\n      },\n      {\n        name: 'null',\n        message: () => translate.stream(_('should be null')),\n      },\n      {\n        name: 'uniqueItems',\n        message: () => translate.stream(_('should NOT have duplicate items')),\n      },\n      {\n        name: 'uniqueValueKeysInObject',\n        message: () => translate.stream(_('should NOT have duplicate items')),\n      },\n      {\n        name: 'numberOfSpecificValuesInObject',\n        message: (_err, field: FormlyFieldConfig) => {\n          const validatorConfig = field.props.customValidators.numberOfSpecificValuesInObject;\n          const min = validatorConfig.min || 0;\n          const max = validatorConfig.max || Infinity;\n          const { keys } = validatorConfig;\n\n          // Build a string based on validators specified keys\n          // the object `{a: 'testA', b= 'testB'}` will be transform to a string `a=testA and b=testB`\n          const keysString = Object.keys(keys).map((key) => key + '=' + translate.instant(keys[key]));\n          const joinKeysString = keysString.join(' ' + translate.instant('and') + ' ');\n\n          // Build a string based on min/max values specified into configuration\n          // depending of min/max configuration, the message must be different\n          let counterMessage = '';\n          if (min > 0 && max < Infinity) {\n            counterMessage =\n              min === max\n                ? translate.instant(_('strictly {{counter}}'), { counter: min })\n                : translate.instant(_('between {{min}} and {{max}}'), { min, max });\n          } else if (min > 0) {\n            counterMessage = translate.instant(_('minimum {{min}}'), { min });\n          } else if (max < Infinity) {\n            counterMessage = translate.instant(_('maximum {{max}}'), { max });\n          }\n\n          // Combine string to return a full sentence\n          return translate.instant(_('should have {{counter}} {{keys}}'), {\n            counter: counterMessage,\n            keys: joinKeysString,\n          });\n        },\n      },\n      {\n        name: 'alreadyTaken',\n        message: () => translate.stream(_('the value is already taken')),\n      },\n      {\n        name: 'minLength',\n        message: (_err, field: FormlyFieldConfig) =>\n          translate.stream(_('should NOT be shorter than {{minLength}} characters'), {\n            minLength: field.props.minLength,\n          }),\n      },\n      {\n        name: 'maxLength',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should NOT be longer than {{maxLength}} characters'), {\n            maxLength: field.props.maxLength,\n          }),\n      },\n      {\n        name: 'minItems',\n        message: (_err, field: FormlyFieldConfig) =>\n          translate.stream(_('should NOT have fewer than {{minItems}} items'), {\n            minItems: field.props.minItems,\n          }),\n      },\n      {\n        name: 'maxItems',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should NOT have more than {{maxItems}} items'), {\n            maxItems: field.props.maxItems,\n          }),\n      },\n      {\n        name: 'min',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should be >=  {{min}}'), { min: field.props.min }),\n      },\n      {\n        name: 'max',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should be <=  {{max}}'), { max: field.props.max }),\n      },\n      {\n        name: 'exclusiveMinimum',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should be >  {{step}}'), { step: field.props.step }),\n      },\n      {\n        name: 'exclusiveMaximum',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should be <  {{step}}'), { step: field.props.step }),\n      },\n      {\n        name: 'multipleOf',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should be multiple of ${{step}}'), { step: field.props.step }),\n      },\n      {\n        name: 'const',\n        message: (_err: any, field: FormlyFieldConfig) =>\n          translate.stream(_('should be equal to constant \"{{const}}\"'), { const: field.props.const }),\n      },\n    ],\n    extensions: [\n      {\n        name: 'form-options',\n        extension: new FormOptionsProcessExtension(),\n        priority: 12\n      },\n      {\n        name: 'translate',\n        extension: new TranslateExtension(),\n        // Execute Translate extension after ng-core extension\n        priority: 11,\n      },\n      {\n        name: 'ng-core',\n        extension: new NgCoreFormlyExtension(),\n        // Execute Core Formly extension after formly processing (priority low)\n        // https://main.formly.dev/docs/guide/custom-formly-extension#extension-priority\n        priority: 10,\n      },\n    ],\n  };\n}\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, LOCALE_ID, model, NgModule, OnDestroy, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyFieldConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { _, TranslateModule } from '@ngx-translate/core';\nimport { DateTime } from \"luxon\";\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { Subscription } from 'rxjs';\n\n// Calendar options: https://primeng.org/calendar\nexport interface IDateTimePickerProps extends FormlyFieldProps {\n  appendTo?: string;\n  clearButtonStyleClass?: string;\n  dateFormat?: string;\n  defaultDate?: Date;\n  disabledDates?: Date[];\n  disabledDays?: number[];\n  firstDayOfWeek?: number;\n  fluid?: boolean;\n  hourFormat?: string;\n  inline?: boolean;\n  inputStyleClass?: string;\n  maxDate?: Date;\n  minDate?: Date;\n  numberOfMonths?: number;\n  panelStyleClass?: string;\n  placeholder?: string;\n  readonlyInput?: boolean;\n  showButtonBar?: boolean;\n  showIcon?: boolean;\n  showOnFocus?: boolean;\n  stepHour?: number;\n  stepMinute?: number;\n  stepSecond?: number;\n  styleClass?: string;\n  todayButtonStyleClass?: string;\n  view?: 'date' | 'month' | 'year';\n}\n\n@Component({\n    selector: 'ng-core-date-picker',\n    template: `\n    <p-datepicker\n      [(ngModel)]=\"value\"\n      [formlyAttributes]=\"field\"\n      [appendTo]=\"props.appendTo\"\n      [clearButtonStyleClass]=\"props.clearButtonStyleClass\"\n      [dateFormat]=\"props.dateFormat\"\n      [defaultDate]=\"props.defaultDate\"\n      [disabledDates]=\"disabledDates\"\n      [disabledDays]=\"props.disabledDays\"\n      [firstDayOfWeek]=\"props.firstDayOfWeek\"\n      [fluid]=\"props.fluid\"\n      [hourFormat]=\"props.hourFormat\"\n      [inline]=\"props.inline\"\n      [inputStyleClass]=\"props.inputStyleClass\"\n      [maxDate]=\"maxDate\"\n      [minDate]=\"minDate\"\n      [numberOfMonths]=\"props.numberOfMonths\"\n      [panelStyleClass]=\"props.panelStyleClass\"\n      [placeholder]=\"props.placeholder | translate\"\n      [readonlyInput]=\"props.readonlyInput\"\n      [required]=\"props.required\"\n      selectionMode=\"single\"\n      [showButtonBar]=\"props.showButtonBar\"\n      [showClear]=\"!props.required\"\n      [showIcon]=\"props.showIcon\"\n      [showOnFocus]=\"props.showOnFocus\"\n      [stepHour]=\"props.stepHour\"\n      [stepMinute]=\"props.stepMinute\"\n      [stepSecond]=\"props.stepSecond\"\n      [styleClass]=\"props.styleClass\"\n      [todayButtonStyleClass]=\"props.todayButtonStyleClass\"\n      [view]=\"props.view\"\n      [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n    />\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class DatePickerComponent extends FieldType<FormlyFieldConfig<IDateTimePickerProps>> implements OnInit, OnDestroy {\n\n  protected locale = inject(LOCALE_ID);\n\n  value = model<Date | null>();\n\n  private subscription: Subscription = new Subscription();\n\n  defaultOptions: Partial<FormlyFieldConfig<IDateTimePickerProps>> = {\n    props: {\n      appendTo: 'body',\n      clearButtonStyleClass: 'p-button-text',\n      dateFormat: 'yy-mm-dd',\n      disabled: false,\n      firstDayOfWeek: 0,\n      fluid: true,\n      inline: false,\n      numberOfMonths: 1,\n      panelStyleClass: 'core:!min-w-0',\n      placeholder: _('Select…'),\n      required: false,\n      showButtonBar: false,\n      showIcon: true,\n      showOnFocus: true,\n      stepHour: 1,\n      stepMinute: 1,\n      stepSecond: 1,\n      todayButtonStyleClass: 'p-button-text',\n      view: 'date'\n    },\n  };\n\n  defaultDate?: Date | null = null;\n  disabledDates?: Date[] = undefined;\n  maxDate?: Date = undefined;\n  minDate?: Date = undefined;\n\n  ngOnInit(): void {\n    this.subscription.add(this.formControl.valueChanges.subscribe((value) => {\n      const date = value? new Date(value): null;\n      if (this.value() !== date) {\n        this.value.set(date)\n      }\n    }));\n\n    const { value } = this.formControl;\n    if (value) {\n      this.value.set(new Date(value));\n    }\n\n    if (!this.formControl.value && this.props.defaultDate) {\n      this.defaultDate = this.processDate(this.props.defaultDate);\n    }\n    if (this.props.disabledDates) {\n      this.disabledDates = this.props.disabledDates.map((date: any) =>this.processDate(date));\n    }\n    if (this.props.minDate) {\n      this.minDate = this.processDate(this.props.minDate);\n    }\n    if (this.props.maxDate) {\n      this.maxDate = this.processDate(this.props.maxDate);\n    }\n\n    this.subscription.add(this.value.subscribe((value: any) => {\n      if (value) {\n        const convertedDate = this.outputDate(value);\n        if (convertedDate !== this.formControl.value) {\n          this.formControl.patchValue(convertedDate);\n          this.formControl.markAsTouched();\n        }\n      } else {\n        this.clearFormValue();\n      }\n    }));\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  clearFormValue(): void {\n    this.formControl.reset(null);\n    const { errors } = this.formControl;\n    this.formControl.setErrors(errors?.required? {required: true}: null);\n  }\n\n  private processDate(date: string | Date ): Date {\n    return date instanceof Date ? date : new Date(date);\n  }\n\n  private outputDate(value: string|Date): string {\n    return DateTime\n      .fromJSDate(this.processDate(value))\n      .toFormat('yyyy-MM-dd');\n  }\n}\n\n\n@NgModule({\n  declarations: [DatePickerComponent],\n  imports: [\n    CommonModule,\n    DatePickerModule,\n    FormsModule,\n    ReactiveFormsModule,\n    TranslateModule.forChild(),\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'datePicker',\n          component: DatePickerComponent,\n          wrappers: ['form-field'],\n        },\n        {\n          name: 'dateTimePicker', // For compatibility\n          extends: 'datePicker'\n        }\n      ],\n    }),\n  ],\n  exports: [DatePickerComponent]\n})\nexport class NgCoreFormlyDatePickerModule { }\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { ChangeDetectionStrategy, Component, Type } from '@angular/core';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\nexport interface NgCoreFormlyInputFieldConfig extends FormlyFieldConfig {\n  type: 'input' | Type<NgCoreFormlyFieldInput>;\n  addonRight?: string[];\n  addonLeft?: string[];\n  class?: string;\n  inputStep?: string|number;\n}\n\n@Component({\n    selector: 'ng-core-formly-field-primeng-input',\n    template: `\n    @if (props.addonLeft || props.addonRight) {\n      <p-inputgroup>\n          @if (props.addonLeft) {\n            @for (prop of props.addonLeft; track prop) {\n              <p-inputgroup-addon [innerHTML]=\"prop\"></p-inputgroup-addon>\n            }\n          }\n          <ng-container\n            [ngTemplateOutlet]=\"input\"\n            [ngTemplateOutletContext]=\"{ formControl, props, field, showError }\"\n          />\n          @if (props.addonRight) {\n            @for (prop of props.addonRight; track prop) {\n              <p-inputgroup-addon [innerHTML]=\"prop\"></p-inputgroup-addon>\n            }\n          }\n      </p-inputgroup>\n    } @else {\n      <ng-container\n        [ngTemplateOutlet]=\"input\"\n        [ngTemplateOutletContext]=\"{ formControl, props, field, showError }\"\n      />\n    }\n    <ng-template #input let-formControl=\"formControl\" let-props=\"props\" let-field=\"field\" let-showError=\"showError\">\n      @if (props.type === 'number') {\n        <input\n          pInputText\n          [class]=\"props.class\"\n          type=\"number\"\n          [attr.step]=\"props.inputStep\"\n          [formControl]=\"formControl\"\n          [formlyAttributes]=\"field\"\n          [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n        />\n      } @else {\n        <input\n          pInputText\n          [class]=\"props.class\"\n          [type]=\"props.type || 'text'\"\n          [formControl]=\"formControl\"\n          [formlyAttributes]=\"field\"\n          [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n        />\n      }\n    </ng-template>\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class NgCoreFormlyFieldInput extends FieldType<NgCoreFormlyInputFieldConfig> {\n\n  defaultOptions?: any = {\n    props: {\n      class: 'core:w-full',\n      inputStep: 'any'\n    }\n  };\n\n}\n","/*\n * RERO angular core\n * Copyright (C) 2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { FormlyFormFieldModule } from '@ngx-formly/primeng/form-field';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { NgCoreFormlyFieldInput } from './input.type';\n\n\n@NgModule({\n  declarations: [NgCoreFormlyFieldInput],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    InputTextModule,\n    InputNumberModule,\n    InputGroupModule,\n    InputGroupAddonModule,\n    FormlyFormFieldModule,\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'input',\n          component: NgCoreFormlyFieldInput,\n          wrappers: ['form-field'],\n        },\n        { name: 'string', extends: 'input' },\n        {\n          name: 'number',\n          extends: 'input',\n          defaultOptions: {\n            props: {\n              type: 'number',\n            },\n          },\n        },\n        {\n          name: 'integer',\n          extends: 'input',\n          defaultOptions: {\n            props: {\n              type: 'number',\n            },\n          },\n        },\n      ],\n    }),\n  ],\n  exports: [NgCoreFormlyFieldInput]\n})\nexport class NgCoreFormlyInputModule {}\n","/*\n * RERO angular core\n * Copyright (C) 2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TranslateLabelService {\n\n  private translateService: TranslateService = inject(TranslateService);\n\n  translateLabel(options: any): any[] {\n    options.map((option: any) => {\n      if (!option.untranslatedLabel) {\n        option.untranslatedLabel = option.label;\n      }\n      option.label = this.translateService.instant(option.untranslatedLabel);\n      if (option.items) {\n        this.translateLabel(option.items);\n      }\n      if (option.children) {\n        this.translateLabel(option.children);\n      }\n    });\n\n    return options;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, inject, NgModule, OnDestroy, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FieldType, FormlyFieldConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { FormlySelectModule } from '@ngx-formly/core/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { CheckboxChangeEvent, CheckboxModule } from 'primeng/checkbox';\nimport { map, merge, Observable, Subscription, switchMap } from 'rxjs';\nimport { TranslateLabelService } from '../services/translate-label.service';\n\nexport interface IMultiCheckBoxProps extends FormlyFieldProps {\n  labelStyleClass?: string;\n  style: 'stacked' | 'inline';\n  styleClass?: string;\n  options?: Observable<any[]>;\n}\n\n@Component({\n    selector: 'ng-core-multi-checkbox',\n    template: `\n    <div class=\"core:flex\" [ngClass]=\"{ 'core:gap-3': props.style === 'inline', 'core:flex-col core:gap-1': props.style === 'stacked', 'p-inputtext ng-invalid ng-dirty': showError }\">\n    @for (option of optionValues$|async|keyvalue; track option.key) {\n      @let fieldKey = field.key + '_' + option.key;\n      <div class=\"core:flex core:items-center core:gap-2\">\n        <p-checkbox\n          [disabled]=\"option.value.disabled\"\n          [formlyAttributes]=\"field\"\n          [inputId]=\"fieldKey\"\n          [name]=\"field.key\"\n          [ngModel]=\"field.formControl.value\"\n          [readonly]=\"props.readonly\"\n          [styleClass]=\"props.styleClass\"\n          [value]=\"option.value.value\"\n          (onChange)=\"onChange($event)\"\n        />\n        <label [for]=\"fieldKey\" [class]=\"props.labelStyleClass\">{{ option.value.label }}</label>\n      </div>\n    }\n    </div>\n  `,\n    standalone: false\n})\nexport class MultiCheckboxComponent extends FieldType<FormlyFieldConfig<IMultiCheckBoxProps>> implements OnInit, OnDestroy {\n\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n  private ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  private subscription: Subscription = new Subscription();\n\n  /** Default options */\n  defaultOptions?: Partial<FormlyFieldConfig<IMultiCheckBoxProps>> = {\n    props: {\n      style: 'stacked'\n    }\n  };\n\n  optionValues$: Observable<any[]>;\n\n  multiCheckBoxValue: string[] = [];\n\n  ngOnInit(): void {\n    const optionsObs = this.props.options;\n    const changeObs = this.translateService.onLangChange.pipe(switchMap(() => this.optionValues$));\n    this.optionValues$ = merge(...[optionsObs, changeObs])\n    .pipe(\n      map(options => {\n        this.ref.markForCheck();\n        return this.translateLabelService.translateLabel(options);\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  onChange(event: CheckboxChangeEvent): void {\n    this.formControl?.patchValue(event.checked);\n    this.formControl?.markAsTouched();\n  }\n}\n\n@NgModule({\n  declarations: [MultiCheckboxComponent],\n  imports: [\n    CommonModule,\n    CheckboxModule,\n    FormsModule,\n    TranslateModule.forChild(),\n    FormlySelectModule,\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'multi-checkbox',\n          component: MultiCheckboxComponent,\n          wrappers: ['form-field'],\n        }\n      ],\n    }),\n  ],\n  exports: [MultiCheckboxComponent]\n})\nexport class NgCoreFormlyMultiCheckboxModule { }\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, inject, NgModule, OnDestroy, OnInit, Type } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyFieldConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { FormlyFieldSelectProps, FormlySelectModule } from '@ngx-formly/core/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { MultiSelectModule as PrimeNgMultiSelectModule } from 'primeng/multiselect';\nimport { map, merge, Observable, Subscription, switchMap, tap } from 'rxjs';\nimport { TranslateLabelService } from '../services/translate-label.service';\nimport { CONFIG } from '../../../../../utils/config';\n\nexport interface IMultiSelectProps extends FormlyFieldProps, FormlyFieldSelectProps {\n  appendTo?: any;\n  class?: string;\n  display: string;\n  dropdownIcon?: string;\n  editable: boolean;\n  emptyFilterMessage?: string;\n  emptyMessage?: string;\n  filterMatchMode: 'endsWith' | 'startsWith' | 'contains' | 'equals' | 'notEquals' | 'in' | 'lt' | 'lte' | 'gt' | 'gte';\n  fluid: boolean;\n  group: boolean;\n  loadingIcon?: string;\n  panelStyleClass?: string;\n  placeholder?: string;\n  required: boolean;\n  scrollHeight: string;\n  sort: boolean;\n  styleClass?: string;\n  tooltip?: string;\n  tooltipPosition: 'left' | 'top' | 'bottom' | 'right';\n  tooltipPositionStyle: string;\n  tooltipStyleClass?: string;\n  variant: 'outlined' | 'filled';\n  options?: Observable<any[]>;\n}\n\nexport interface FormlyMultiSelectFieldConfig extends FormlyFieldConfig<IMultiSelectProps> {\n  type: 'multi-select' | Type<MultiSelectComponent>;\n}\n\n@Component({\n    selector: 'ng-core-multi-select',\n    template: `\n    <p-multiSelect\n      [appendTo]=\"props.appendTo\"\n      [class]=\"props.class\"\n      [display]=\"props.display\"\n      [dropdownIcon]=\"props.dropdownIcon\"\n      [emptyFilterMessage]=\"props.emptyFilterMessage\"\n      [emptyMessage]=\"props.emptyMessage\"\n      [filter]=\"filter\"\n      filterBy=\"label\"\n      [fluid]=\"props.fluid\"\n      [formControl]=\"formControl\"\n      [formlyAttributes]=\"field\"\n      [group]=\"props.group\"\n      [loadingIcon]=\"props.loadingIcon\"\n      [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n      [options]=\"optionValues$|async\"\n      optionLabel=\"label\"\n      optionValue=\"value\"\n      [panelStyleClass]=\"props.panelStyleClass\"\n      [placeholder]=\"props.placeholder | translate\"\n      [required]=\"props.required\"\n      [showClear]=\"!props.required\"\n      [styleClass]=\"props.styleClass\"\n      [tooltip]=\"props.tooltip\"\n      [tooltipPosition]=\"props.tooltipPosition\"\n      [tooltipPositionStyle]=\"props.tooltipPositionStyle\"\n      [tooltipStyleClass]=\"props.tooltipStyleClass\"\n      (onChange)=\"props.change && props.change(field, $event)\"\n      (onClear)=\"clearValidators()\"\n    >\n      <ng-template #selectedItems let-items>\n        @for(option of items; track option.value; let last = $last) {\n          <div class=\"core:inline-flex core:items-center core:gap-2 core:px-1\">\n            <div>\n              {{ option.label }}@if(!last) {, }\n            </div>\n          </div>\n        }\n        @if (!items || items.length === 0) {\n          <div>{{ props.placeholder | translate }}</div>\n        }\n      </ng-template>\n      <ng-template let-item #item>\n        <span class=\"core:whitespace-normal\">\n          {{item.label}}\n        </span>\n      </ng-template>\n      <ng-template let-group #group>\n        @if (group.untranslatedLabel !== 'group-preferred' && group.untranslatedLabel !== 'group-other') {\n          <div class=\"core:py-2 core:font-bold\">{{ group.label }}</div>\n        } @else if (group.label === 'group-other') {\n          <div class=\"core:py-2\"><hr></div>\n        }\n      </ng-template>\n    </p-multiSelect>\n  `,\n    standalone: false\n})\nexport class MultiSelectComponent extends FieldType<FormlyFieldConfig<IMultiSelectProps>> implements OnInit, OnDestroy {\n\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n  private ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  private subscription: Subscription = new Subscription();\n  filter = false;\n\n  /** Default properties */\n  defaultOptions: Partial<FormlyFieldConfig<IMultiSelectProps>> = {\n    props: {\n      display: 'comma',\n      editable: false,\n      filterMatchMode: 'contains',\n      fluid: true,\n      group: false,\n      placeholder: 'Select…',\n      required: false,\n      scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n      sort: false,\n      tooltipPosition: 'top',\n      tooltipPositionStyle: 'absolute',\n      variant: 'outlined',\n    },\n  };\n\n  optionValues$: Observable<any[]>;\n\n  ngOnInit(): void {\n    const optionsObs = this.props.options;\n    const changeObs = this.translateService.onLangChange.pipe(switchMap(() => this.optionValues$));\n    this.optionValues$ = merge(...[optionsObs, changeObs])\n    .pipe(\n      tap((options) => {\n        this.filter = this.enableFilter(options, 0).enabled;\n      }),\n      map(options => {\n        this.ref.markForCheck();\n        return this.translateLabelService.translateLabel(options);\n      })\n    );\n  }\n\n  /**\n   * Check if the filter feature of the select should be enabled.\n   *\n   * This function is interrupted if the threshold is reached.\n   *\n   * @param options the list of options\n   * @param numberOfOptions the numberOfOptions used by the recursion\n   * @returns enabled: true if the filter should be enabled, the current total of detected options (used by the recursion)\n   */\n  enableFilter(options, numberOfOptions=0): {enabled: boolean, total:number} {\n    if(!options?.length) {\n      return {total: numberOfOptions, enabled: false};\n    }\n    // number of entries to enable the filter\n    const limit = 5;\n    let total = numberOfOptions + options.length;\n    if(total > limit) {\n      return {enabled: true, total};\n    }\n    for(const option of options) {\n      const child =  this.enableFilter(option?.items, total)\n      total = child.total;\n      if(total > limit) {\n        return {enabled: total > limit, total};\n      }\n    }\n    return {enabled: total > limit, total};\n  }\n\n  // Clear all validators except required.\n  clearValidators() {\n    const {errors} = this.formControl;\n    this.formControl.setErrors(errors?.required ? { required: true } : null);\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n}\n\n@NgModule({\n  declarations: [MultiSelectComponent],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    TranslateModule.forChild(),\n    FormlySelectModule,\n    PrimeNgMultiSelectModule,\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'multi-select',\n          component: MultiSelectComponent,\n          wrappers: ['form-field'],\n        },\n      ],\n    }),\n  ],\n  exports: [MultiSelectComponent],\n})\nexport class NgCoreFormlyMultiSelectModule {}\n","/*\n * RERO angular core\n * Copyright (C) 2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Injectable } from \"@angular/core\";\nimport { Observable, of } from \"rxjs\";\nimport { IQueryOptions, IRemoteAutocomplete, ISuggestionItem } from \"./remote-autocomplete.interface\";\n\n// Override this service in your application to implement your logic\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RemoteAutocompleteService implements IRemoteAutocomplete {\n\n  public getSuggestions(query: string, queryOptions: IQueryOptions, currentPid: string): Observable<ISuggestionItem[]> {\n    return of([{label: \"test\"}]);\n  }\n\n  getValueAsHTML(queryOptions: IQueryOptions, item: ISuggestionItem): Observable<string> {\n    return of(item.label);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, inject, NgModule, OnInit } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { FieldType, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { AutoCompleteCompleteEvent, AutoCompleteModule, AutoCompleteSelectEvent } from 'primeng/autocomplete';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectChangeEvent, SelectModule } from 'primeng/select';\nimport { map, merge, Observable, Subject, switchMap } from 'rxjs';\nimport { CONFIG } from '../../../../../utils/config';\nimport { removeChars } from '../../../../../utils/utils';\nimport { IQuery, IQueryOptions, IRemoteAutoCompleteFilter, IValueSelect } from './remote-autocomplete.interface';\nimport { RemoteAutocompleteService } from './remote-autocomplete.service';\n\nexport interface IRemoteAutoCompleteProps extends FormlyFieldProps {\n  delay: number;\n  filters?: IRemoteAutoCompleteFilter;\n  group: boolean;\n  minLength: number;\n  maxLength?: number;\n  queryOptions?: IQueryOptions;\n  placeholder?: string;\n  scrollHeight: string;\n  summaryClass?: string\n}\n\n@Component({\n  selector: 'ng-core-remote-autocomplete',\n  standalone: false,\n  template: `\n  <div style=\"padding-inline: 0; padding-block: 0\" class=\"core:flex core:gap-1\" [ngClass]=\"{ 'p-inputtext ng-invalid ng-dirty': showError }\">\n    @if (!field.formControl.value) {\n      @if (props.filters?.options) {\n        <p-select\n          [options]=\"optionValues$|async\"\n          [ngModel]=\"props.filters.selected\"\n          (onChange)=\"changeFilter($event)\"\n        >\n          <ng-template let-selected #selectedItem>\n            {{ selected.untranslatedLabel | translate }}\n          </ng-template>\n        </p-select>\n      }\n        <p-autoComplete\n          class=\"core:grow\"\n          styleClass=\"core:w-full\"\n          inputStyleClass=\"core:w-full\"\n          [scrollHeight]=\"props.scrollHeight\"\n          [minLength]=\"props.minLength\"\n          [maxlength]=\"props.maxLength\"\n          [(ngModel)]=\"value\"\n          [placeholder]=\"props.placeholder\"\n          [group]=\"props.group\"\n          [suggestions]=\"suggestions()\"\n          (completeMethod)=\"search($event)\"\n          (onSelect)=\"onSelect($event)\"\n        >\n          <ng-template #item let-data>\n            <div class=\"core:w-full\">\n              <div class=\"core:flex core:gap-2\">\n                <span class=\"core:grow\" [innerHTML]=\"data.label\"></span>\n                @if (data.link) {\n                  <a class=\"core:flex-none core:text-color-secondary\" [href]=\"data.link\" target=\"_blank\">\n                    <i class=\"fa fa-external-link\"></i>\n                  </a>\n                }\n              </div>\n              @if (data.summary) {\n                <div class=\"core:w-full\" [innerHTML]=\"data.summary\" [ngClass]=\"props.summaryClass\"></div>\n              }\n            </div>\n          </ng-template>\n        </p-autoComplete>\n    } @else {\n      <div class=\"core:flex core:gap-1 core:items-center\">\n        <div [innerHtml]=\"valueSelected()\"></div>\n        <p-button icon=\"fa fa-trash\" severity=\"secondary\" [text]=\"true\" (onClick)=\"clear()\" />\n      </div>\n    }\n  </div>\n  `,\n})\nexport class RemoteAutocomplete extends FieldType<FormlyFieldConfig<IRemoteAutoCompleteProps>> implements OnInit,AfterViewInit {\n\n  protected translateService: TranslateService = inject(TranslateService);\n  protected remoteAutocompleteService = inject(RemoteAutocompleteService);\n  protected route = inject(ActivatedRoute);\n  protected ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  protected query = new Subject<any>();\n\n  protected onValueSelect = new Subject<IValueSelect>();\n\n  suggestions = toSignal(this.query.pipe(\n    switchMap((data: IQuery) => this.remoteAutocompleteService.getSuggestions(\n      removeChars(data.query),\n      data.queryOptions,\n      data.recordPid\n    ))\n  ), { initialValue: []});\n\n  valueSelected = toSignal(this.onValueSelect.pipe(\n    switchMap((data: IValueSelect) => this.remoteAutocompleteService.getValueAsHTML(\n      data.queryOptions,\n      data.item\n    ))\n  ));\n\n  /** Default properties */\n  defaultOptions: Partial<FormlyFieldConfig<IRemoteAutoCompleteProps>> = {\n    props: {\n      delay: 300,\n      group: false,\n      minLength: 3,\n      scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n      queryOptions: {\n        allowAdd: false,\n        maxOfResult: 100\n      }\n    }\n  };\n\n  value = '';\n\n  optionValues$: Observable<any[]>;\n\n  ngOnInit(): void {\n    if (this.props.filters) {\n      const optionsObs = this.props.filters.options;\n      const changeObs = this.translateService.onLangChange.pipe(switchMap(() => this.optionValues$));\n      this.optionValues$ = merge(...[optionsObs, changeObs])\n      .pipe(\n        map(options => {\n          this.ref.markForCheck();\n          return this.translateLabel(options);\n        })\n      );\n    }\n  }\n\n  ngAfterViewInit(): void {\n    if (this.field.props.filters) {\n      this.field.props.queryOptions.filter = this.field.props.filters.selected;\n    }\n    if (this.formControl?.value?.length > 0) {\n      this.onValueSelect.next({\n        item: { label: this.formControl.value, value: this.formControl.value },\n        queryOptions: { ...this.field.props.queryOptions },\n      });\n    }\n  }\n\n  changeFilter(filter: SelectChangeEvent): void {\n    this.field.props.queryOptions.filter = filter.value;\n    this.value = '';\n  }\n\n  search(event: AutoCompleteCompleteEvent): void {\n    this.query.next({\n      query: event.query,\n      queryOptions: { ...this.field.props.queryOptions },\n      recordPid: this.route.snapshot.params.pid || null\n    });\n  }\n\n  onSelect(event: AutoCompleteSelectEvent): void {\n    this.onValueSelect.next({\n      item: event.value,\n      queryOptions: { ...this.field.props.queryOptions },\n    });\n    this.formControl.patchValue(event.value.value);\n    this.formControl.markAsTouched();\n  }\n\n  clear(): void {\n    this.value = '';\n    this.formControl.reset(null);\n    this.field.focus = true;\n  }\n\n  translateLabel(options: any): any[] {\n    options.map((option: any) => {\n      if (!option.untranslatedLabel) {\n        option.untranslatedLabel = option.label;\n      }\n      option.label = this.translateService.instant(option.untranslatedLabel);\n    });\n\n    return options;\n  }\n}\n\n@NgModule({\n  declarations: [RemoteAutocomplete],\n  imports: [\n    AutoCompleteModule,\n    ButtonModule,\n    CommonModule,\n    SelectModule,\n    FormsModule,\n    TranslateModule.forChild(),\n    FormlyModule.forChild({\n      types: [\n        { name: 'remoteAutoComplete', component: RemoteAutocomplete }\n      ]\n    }),\n  ],\n  exports: [RemoteAutocomplete]\n})\nexport class NgCoreFormlyRemoteAutocompleteModule { }\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Observable } from \"rxjs\";\n\nexport interface IRemoteAutocomplete {\n  getSuggestions(query: string, queryOptions: IQueryOptions, currentPid: string): Observable<ISuggestionItem[]>;\n  getValueAsHTML(queryOptions: IQueryOptions, item: ISuggestionItem): Observable<string>;\n}\n\nexport interface IQueryOptions {\n  allowAdd?: boolean;\n  field?: string;\n  filter?: string;\n  isNotRef?: boolean;\n  label?: string;\n  maxLengthSuggestion?: number;\n  maxOfResult?: number;\n  suggest?: string;\n  type?: string;\n};\n\nexport interface ISuggestionItem {\n  label: string;\n  value?: string,\n  summary?: string;\n  link?: string;\n}\n\nexport interface IRemoteAutoCompleteFilter {\n  selected: string;\n  options: any;\n}\n\nexport interface IQuery {\n  query: string;\n  queryOptions: IQueryOptions;\n  recordPid: string | null;\n}\n\nexport interface IValueSelect {\n  item: ISuggestionItem;\n  queryOptions: IQueryOptions;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, inject, NgModule, OnDestroy, OnInit, Type } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { FormlySelectModule as FormlyCoreSelectModule, FormlyFieldSelectProps } from '@ngx-formly/core/select';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { SelectModule } from 'primeng/select';\nimport { map, merge, Observable, Subscription, switchMap, tap } from 'rxjs';\nimport { TranslateLabelService } from '../services/translate-label.service';\nimport { CONFIG } from '../../../../../utils/config';\nimport { _ } from '@ngx-translate/core';\n\nexport interface ISelectProps extends FormlyFieldProps, FormlyFieldSelectProps {\n  appendTo?: any;\n  class?: string;\n  dropdownIcon?: string;\n  editable: boolean;\n  emptyFilterMessage?: string;\n  emptyMessage?: string;\n  filters?: any[];\n  filterMatchMode: 'endsWith' | 'startsWith' | 'contains' | 'equals' | 'notEquals' | 'in' | 'lt' | 'lte' | 'gt' | 'gte';\n  fluid: boolean,\n  group: boolean;\n  loadingIcon?: string;\n  panelStyleClass?: string;\n  placeholder?: string;\n  required: boolean;\n  scrollHeight: string;\n  sort: boolean;\n  styleClass?: string;\n  tooltip?: string;\n  tooltipPosition: 'left' | 'top' | 'bottom' | 'right';\n  tooltipPositionStyle: string;\n  tooltipStyleClass?: string;\n  options?: Observable<any[]>;\n}\n\nexport interface IFormlySelectFieldConfig extends FormlyFieldConfig<ISelectProps> {\n  type: 'select' | Type<SelectComponent>;\n}\n\n@Component({\n    selector: 'ng-core-primeng-select',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n  @if(props.options) {\n    <p-select\n      [appendTo]=\"props.appendTo\"\n      [class]=\"props.class\"\n      [dropdownIcon]=\"props.dropdownIcon\"\n      [editable]=\"props.editable\"\n      [emptyFilterMessage]=\"props.emptyFilterMessage\"\n      [emptyMessage]=\"props.emptyMessage\"\n      [filter]=\"filter\"\n      filterBy=\"label\"\n      [filterMatchMode]=\"props.filterMatchMode\"\n      [fluid]=\"props.fluid\"\n      [formControl]=\"formControl\"\n      [formlyAttributes]=\"field\"\n      [group]=\"props.group\"\n      [loadingIcon]=\"props.loadingIcon\"\n      [scrollHeight]=\"props.scrollHeight\"\n      [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n      [options]=\"optionValues$|async\"\n      [optionLabel]=\"props.group ? undefined : 'label'\"\n      [optionValue]=\"props.group ? undefined : 'value'\"\n      [panelStyleClass]=\"props.panelStyleClass\"\n      [placeholder]=\"props.placeholder | translate\"\n      [required]=\"props.required\"\n      [showClear]=\"!props.required\"\n      [styleClass]=\"props.styleClass\"\n      [tooltip]=\"props.tooltip\"\n      [tooltipPosition]=\"props.tooltipPosition\"\n      [tooltipPositionStyle]=\"props.tooltipPositionStyle\"\n      [tooltipStyleClass]=\"props.tooltipStyleClass\"\n      (onChange)=\"props.change && props.change(field, $event)\"\n      (onClear)=\"clearValidators()\"\n    >\n      <ng-template let-selected #selectedItem>\n        {{ selected.untranslatedLabel | translate }}\n      </ng-template>\n      <ng-template let-item #item>\n        <span class=\"core:whitespace-normal\">\n          {{item.label}}\n        </span>\n      </ng-template>\n      <ng-template let-group #group>\n        @if (group.untranslatedLabel !== 'group-preferred' && group.untranslatedLabel !== 'group-other') {\n          <div class=\"core:py-2 core:font-bold\">{{ group.label }}</div>\n        } @else if (group.label === 'group-other') {\n          <div class=\"core:py-2\"><hr></div>\n        }\n      </ng-template>\n    </p-select>\n  }\n  `,\n    standalone: false\n})\nexport class SelectComponent extends FieldType<FormlyFieldConfig<ISelectProps>> implements OnInit, OnDestroy {\n\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n  private ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  private subscription: Subscription = new Subscription();\n  filter = false;\n\n  /** Default properties */\n  defaultOptions: Partial<FormlyFieldConfig<ISelectProps>> = {\n    props: {\n      disabled: false,\n      editable: false,\n      filterMatchMode: 'contains',\n      fluid: true,\n      group: false,\n      placeholder: _('Select…'),\n      required: false,\n      scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n      sort: false,\n      tooltipPosition: 'top',\n      tooltipPositionStyle: 'absolute',\n    }\n  };\n\n  optionValues$: Observable<any[]>;\n\n  ngOnInit(): void {\n    const optionsObs = this.props.options;\n    const changeObs = this.translateService.onLangChange.pipe(switchMap(() => this.optionValues$));\n    if (this.field.props?.disabled) {\n      this.formControl.disable();\n    }\n    this.optionValues$ = merge(...[optionsObs, changeObs])\n    .pipe(\n      tap((options) => {\n        this.filter = this.enableFilter(options, 0).enabled;\n      }),\n      map(options => {\n        this.ref.markForCheck();\n        return this.translateLabelService.translateLabel(options);\n      })\n    );\n  }\n\n  /**\n   * Check if the filter feature of the select should be enabled.\n   *\n   * This function is interrupted if the threshold is reached.\n   *\n   * @param options the list of options\n   * @param numberOfOptions the numberOfOptions used by the recursion\n   * @returns enabled: true if the filter should be enabled, the current total of detected options (used by the recursion)\n   */\n  enableFilter(options, numberOfOptions=0): {enabled: boolean, total:number} {\n    if(!options?.length) {\n      return {total: numberOfOptions, enabled: false};\n    }\n    // number of entries to enable the filter\n    const limit = 5;\n    let total = numberOfOptions + options.length;\n    if(total > limit) {\n      return {enabled: true, total};\n    }\n    for(const option of options) {\n      const child =  this.enableFilter(option?.items, total)\n      total = child.total;\n      if(total > limit) {\n        return {enabled: total > limit, total};\n      }\n    }\n    return {enabled: total > limit, total};\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  clearValidators() {\n    const { errors } = this.formControl;\n    this.formControl.setErrors(errors?.required? {required: true}: null);\n  }\n}\n\n@NgModule({\n  declarations: [SelectComponent],\n  imports: [\n    CommonModule,\n    SelectModule,\n    ReactiveFormsModule,\n    TranslateModule.forChild(),\n    FormlyCoreSelectModule,\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'select',\n          component: SelectComponent,\n          wrappers: ['form-field'],\n        },\n        { name: 'enum', extends: 'select' },\n      ],\n    }),\n  ],\n  exports: [SelectComponent]\n})\nexport class NgCoreFormlySelectModule { }\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, inject, NgModule, OnDestroy, OnInit, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FieldType, FormlyFieldConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { FormlySelectModule } from '@ngx-formly/primeng/select';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { TreeNode } from 'primeng/api';\nimport { TreeNodeSelectEvent } from 'primeng/tree';\nimport { TreeSelectModule } from 'primeng/treeselect';\nimport { map, merge, Observable, Subscription, switchMap, tap } from 'rxjs';\nimport { TranslateLabelService } from '../services/translate-label.service';\nimport { CONFIG } from '../../../../../utils/config';\n\n// Doc https://primeng.org/treeselect\n\nexport interface ITreeSelectProps extends FormlyFieldProps {\n  class?: string;\n  containerStyleClass?: string;\n  disabled?: boolean;\n  filterBy: string;\n  filterInputAutoFocus: boolean;\n  filterPlaceholder?: string;\n  fluid: boolean;\n  panelClass?: string;\n  panelStyleClass?: string;\n  placeholder?: string;\n  scrollHeight: string;\n  variant: string;\n}\n\nexport interface FormlyTreeSelectFieldConfig extends FormlyFieldConfig<ITreeSelectProps> {\n  type: 'tree-select' | Type<TreeSelectComponent>;\n}\n\n@Component({\n    selector: 'ng-core-tree-select',\n    template: `\n    <p-treeSelect\n      [class]=\"props.class\"\n      [containerStyleClass]=\"props.containerStyleClass\"\n      [disabled]=\"props.disabled\"\n      [filter]=\"filter\"\n      [filterBy]=\"props.filterBy\"\n      [filterInputAutoFocus]=\"props.filterInputAutoFocus\"\n      [filterPlaceholder]=\"props.filterPlaceholder\"\n      [fluid]=\"props.fluid\"\n      [formlyAttributes]=\"field\"\n      [ngModel]=\"nodeSelected\"\n      [options]=\"optionValues\"\n      [panelClass]=\"props.panelClass\"\n      [panelStyleClass]=\"props.panelStyleClass\"\n      [placeholder]=\"props.placeholder | translate\"\n      [showClear]=\"!props.required\"\n      [variant]=\"props.variant\"\n      [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n      (onNodeSelect)=\"setFormValue($event)\"\n      (onNodeUnselect)=\"clearFormValue()\"\n      (onClear)=\"clearFormValue()\"\n    >\n      <ng-template let-item #item>\n        <span class=\"core:whitespace-normal\">\n          {{item.label}}\n        </span>\n      </ng-template>\n    </p-treeSelect>\n  `,\n    standalone: false\n})\nexport class TreeSelectComponent extends FieldType<FormlyFieldConfig<ITreeSelectProps>> implements OnInit, OnDestroy {\n\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n  private ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  private subscription: Subscription = new Subscription();\n  filter = false;\n\n  /** Default properties */\n  defaultOptions: Partial<FormlyFieldConfig<ITreeSelectProps>> = {\n    props: {\n      filterBy: 'label',\n      filterInputAutoFocus: true,\n      fluid: true,\n      placeholder: 'Select…',\n      scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n      variant: 'outlined'\n    }\n  };\n\n  nodeSelected: any = undefined;\n\n  optionValues$: Observable<any[]>;\n\n  optionValues: TreeNode[] = [];\n\n  ngOnInit(): void {\n    const optionsObs = this.props.options;\n    const changeObs = this.translateService.onLangChange.pipe(switchMap(() => this.optionValues$));\n    this.optionValues$ = merge(...[optionsObs, changeObs])\n    .pipe(\n      tap((options) => {\n        this.filter = this.enableFilter(options, 0).enabled;\n      }),\n      map(options => {\n        this.ref.markForCheck();\n        return this.translateLabelService.translateLabel(options);\n      }),\n    );\n    this.subscription.add(this.optionValues$.subscribe((options: TreeNode[]) => {\n      this.optionValues = options;\n      if (this.formControl?.value) {\n        this.nodeSelected = this.findNodeByValue(options, this.formControl?.value);\n      } else {\n        this.nodeSelected = null;\n      }\n    }));\n    this.subscription.add(this.formControl?.valueChanges.subscribe((value) => {\n      if (value) {\n        this.nodeSelected = this.findNodeByValue(this.optionValues, value);\n      } else {\n        this.nodeSelected = null;\n      }\n    }));\n  }\n\n  /**\n   * Check if the filter feature of the select should be enabled.\n   *\n   * This function is interrupted if the threshold is reached.\n   *\n   * @param options the list of options\n   * @param numberOfOptions the numberOfOptions used by the recursion\n   * @returns enabled: true if the filter should be enabled, the current total of detected options (used by the recursion)\n   */\n  enableFilter(options, numberOfOptions=0): {enabled: boolean, total:number} {\n    if(!options?.length) {\n      return {total: numberOfOptions, enabled: false};\n    }\n    // number of entries to enable the filter\n    const limit = 5;\n    let total = numberOfOptions + options.length;\n    if(total > limit) {\n      return {enabled: true, total};\n    }\n    for(const option of options) {\n      const child =  this.enableFilter(option?.children, total)\n      total = child.total;\n      if(total > limit) {\n        return {enabled: total > limit, total};\n      }\n    }\n    return {enabled: total > limit, total};\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  setFormValue(event: TreeNodeSelectEvent): void {\n    this.formControl.setValue(event.node.data);\n  }\n\n  clearFormValue(): void {\n    this.formControl.reset(null);\n    const { errors } = this.formControl;\n    this.formControl.setErrors(errors?.required? {required: true}: null);\n  }\n\n  private findNodeByValue(node: TreeNode[], value: string, data?: TreeNode): any {\n    if (!data) {\n      node.map((treeNode: TreeNode) => {\n        if (treeNode.data === value) {\n          data = treeNode;\n        }\n        else if (treeNode.children) {\n          data = this.findNodeByValue(treeNode.children, value, data);\n        }\n      });\n    }\n\n    return data;\n  }\n}\n\n@NgModule({\n  declarations: [ TreeSelectComponent ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    FormlySelectModule,\n    TranslateModule.forChild(),\n    TreeSelectModule,\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'tree-select',\n          component: TreeSelectComponent,\n          wrappers: ['form-field'],\n        }\n      ],\n    }),\n  ],\n})\nexport class NgCoreFormlyTreeSelectModule { }\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, Input } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * Component for displaying a label with dropdown in editor.\n */\n@Component({\n    selector: 'ng-core-editor-dropdown-label-editor',\n    templateUrl: './dropdown-label-editor.component.html',\n    standalone: false\n})\nexport class DropdownLabelEditorComponent {\n  // current form field configuration\n  @Input() field: FormlyFieldConfig;\n\n  // can we add a new element to the related array\n  @Input() canAdd: boolean;\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (field.props.label) {\n  <div class=\"core:flex core:gap-1 core:items-center\">\n    <span [pTooltip]=\"field.props.description\" tooltipPosition=\"top\">\n      {{ field.props.label }}\n      @if (field.props.required) {\n        &nbsp;*\n      }\n    </span>\n    <ng-content select=\"[menu]\"/>\n    <ng-content id=\"{field.id}-clone-button\" select=\"[buttons]\"/>\n  </div>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItem } from 'primeng/api';\nimport { merge, Subscription } from 'rxjs';\n\n@Component({\n    selector: 'ng-core-label-editor',\n    templateUrl: './label.component.html',\n    standalone: false\n})\nexport class LabelComponent implements OnInit, OnDestroy {\n  protected translateService: TranslateService = inject(TranslateService);\n\n  // Current field\n  @Input() field: FormlyFieldConfig;\n\n  // Subscriptions to observables.\n  private subscriptions: Subscription = new Subscription();\n\n  items: MenuItem[] = [];\n\n  ngOnInit(): void {\n    this.updateItems();\n    // update items when the hidden state of the children change\n    const fields = this.getFieldGroup(this.field);\n    if (fields?.length > 0) {\n      this.subscriptions.add(\n        merge(...fields.map((child: any) => child.options.fieldChanges))\n          .subscribe(\n            (changes: any) => {\n            if (changes.type === 'hidden') {\n              this.updateItems();\n            }\n        })\n      );\n      // update translations\n      this.subscriptions.add(this.translateService.onLangChange.subscribe(() => this.updateItems()));\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  updateItems() {\n    if (this.hasMenu(this.field)) {\n      this.items = [];\n      this.hiddenFieldGroup(this.getFieldGroup(this.field)).map((field: any) => {\n        if(!field.props.untranslatedLabel) {\n          field.props.untranslatedLabel = field.props.label;\n        }\n        this.items.push({\n          label: this.translateService.instant(field.props.untranslatedLabel),\n          command: () => this.show(field),\n        });\n      });\n    }\n  }\n\n  /**\n   * Is the dropdown menu displayed?\n   * @param field - FormlyFieldConfig, the corresponding form field config\n   * @returns boolean, true if the menu should be displayed\n   */\n  hasMenu(field: FormlyFieldConfig): boolean {\n    if (field.fieldGroup && field.fieldGroup.length > 0 && field.fieldGroup[0].type === 'multischema') {\n      return false;\n    }\n    if (this.field.fieldGroup == null) {\n      return false;\n    }\n    return (\n      (this.hiddenFieldGroup(this.getFieldGroup(this.field)).length > 0 || this.field.props.helpURL) &&\n      field.props?.editorConfig?.longMode\n    );\n  }\n\n  /** Get the current field index position in the parent array.\n   *\n   * @returns number - the index position in the parent array, null if the parent\n   *                   is not an array.\n   */\n  getIndex() {\n    if (this.field.parent.type === 'array') {\n      return Number(this.field.key);\n    }\n    return null;\n  }\n\n  /** Get the list of children fields of a given field.\n   *\n   * This is more complicated for multischema, the formlyField should be extracted\n   * from the children of children.\n   *\n   * @param field FormlyFieldConfig - the field to get the fieldGroup.\n   * @returns Array of FormlyFieldConfig - the list of the children fields.\n   */\n  getFieldGroup(field: FormlyFieldConfig) {\n    let fieldGroup = [];\n    // multischema has a nested structure object['enum', 'object'], enum is the oneOf select\n    // and object['object'] are all the possible oneOf entries\n    if (field.fieldGroup?.length > 0 && field.fieldGroup[0].type === 'multischema') {\n      const multischemaFieldGroup = field.fieldGroup[0];\n      // [0] is the enum i.e. (select) for the oneOf\n      const multischemaEntries = multischemaFieldGroup.fieldGroup[1];\n      let activeGroups = multischemaEntries.fieldGroup;\n      // only the active\n      activeGroups = activeGroups.filter((f) => f.hide === false);\n      activeGroups.map((group) => (fieldGroup = [...group.fieldGroup, group]));\n    } else {\n      fieldGroup = field.fieldGroup;\n    }\n    return fieldGroup;\n  }\n\n  /**\n   * Filter the fieldGroup to return the list of hidden field.\n   * @param fieldGroup - FormlyFieldConfig[], the fieldGroup to filter\n   * @returns FormlyFieldConfig[], the filtered list\n   */\n  hiddenFieldGroup(fieldGroup: FormlyFieldConfig[]): FormlyFieldConfig[] {\n    return fieldGroup.filter((f) => f.hide && !(f?.expressions?.hide));\n  }\n\n  /**\n   * Am I at the root of the form?\n   * @returns boolean, true if I'm the root\n   */\n  isRoot(): boolean {\n    return this.field.props?.isRoot || false;\n  }\n\n  /**\n   * Hide the field\n   * @param field - FormlyFieldConfig, the field to hide\n   */\n  remove(): void {\n    if (this.field.parent.type === 'object') {\n      if (this.field.props.setHide) {\n        this.field.props.setHide(this.field, true);\n      } else {\n        this.field.hide = true;\n      }\n    }\n    if (this.field.parent.type === 'array') {\n      this.field.parent.props.remove(this.getIndex());\n    }\n  }\n\n  /**\n   * Show the field\n   * @param field - FormlyFieldConfig, the field to show\n   */\n  show(field: FormlyFieldConfig) {\n    if (field.props.setHide) {\n      field.props.setHide(field, false);\n    } else {\n      (field.hide = false);\n    }\n  }\n\n  /**\n   * Is the field can be hidden?\n   * @returns boolean, true if the field can be hidden\n   */\n  canRemove(): boolean {\n    switch (this.field.parent.type) {\n      case 'object':\n        if (!this.field.props?.editorConfig?.longMode) {\n          return false;\n        }\n        return !this.field.props.required && !this.field.hide;\n      case 'array':\n        return this.field.parent.props.canRemove();\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Is a new item can be added in an array?\n   * Note that this is true only if the array does not contains items, else the\n   * clone button should be used.\n   * @returns boolean, true if a new item can be added\n   */\n  canAddItem(): boolean {\n    if (this.field.type === 'array' && this.field.props.canAdd) {\n      return this.field.props.canAdd() && this.field.fieldGroup.length === 0;\n    }\n    return false;\n  }\n\n  /**\n   * Add a new item element\n   * @param field - FormlyFieldConfig, the field to hide\n   */\n  addItem() {\n    if (this.field.type === 'array') {\n      return this.field.props.add(0);\n    }\n  }\n\n  /**\n   * Is a array item can be cloned?\n   * @returns boolean, true if the field can be hidden\n   */\n  canAdd() {\n    if (this.field.parent.type === 'array') {\n      return this.field.parent.props.canAdd();\n    }\n    return false;\n  }\n\n  /**\n   * Add a array item after the current field.\n   * @param field - FormlyFieldConfig, the field to hide\n   */\n  add() {\n    if (this.field.parent.type === 'array') {\n      const index = this.getIndex() + 1;\n      return this.field.parent.props.add(index);\n    }\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (field) {\n<!-- header and menu -->\n@if (!isRoot()) {\n  <ng-container *ngTemplateOutlet=\"hasMenu(field) ? menu : title; context: { f: field }\" />\n}\n\n<!-- TEMPLATES -->\n<!-- dropdown menu -->\n<ng-template #menu let-f=\"f\">\n  <ng-core-editor-dropdown-label-editor [field]=\"f\" [canAdd]=\"false\">\n    <ng-container menu>\n      <div class=\"core:flex\">\n        <p-button icon=\"fa fa-caret-down\" severity=\"secondary\" [text]=\"true\" (onClick)=\"menu.toggle($event)\" />\n        <p-tieredMenu #menu [model]=\"items\" [popup]=\"true\" appendTo=\"body\" />\n      </div>\n    </ng-container>\n    <ng-container buttons>\n      @if (canAddItem()) {\n      <p-button icon=\"fa fa-plus\" severity=\"secondary\" [text]=\"true\" (onClick)=\"addItem()\" />\n      } @if (canAdd()) {\n      <p-button\n        id=\"{{ f.id }}-clone-button\"\n        icon=\"fa fa-clone\"\n        severity=\"secondary\"\n        [text]=\"true\"\n        styleClass=\"core:mr-1\"\n        (onClick)=\"add()\"\n      />\n      }\n      <!-- hide button -->\n      @if (canRemove()) {\n      <p-button\n        id=\"{{ f.id }}-remove-button\"\n        icon=\"fa fa-trash\"\n        severity=\"secondary\"\n        [text]=\"true\"\n        (onClick)=\"remove()\"\n      />\n      }\n    </ng-container>\n  </ng-core-editor-dropdown-label-editor>\n</ng-template>\n\n<!-- section title -->\n<ng-template #title let-f=\"f\">\n  <div class=\"core:flex core:gap-1 core:items-center\">\n    @if (f.props.label) {\n    <label class=\"p-fieldset-legend-label\" [attr.for]=\"f.id\" [pTooltip]=\"f.props.description\" tooltipPosition=\"top\">\n      {{ f.props.label }}\n    </label>\n    @if (f.props.required && f.props.hideRequiredMarker !== true) { * } @if (canAddItem()) {\n    <p-button icon=\"fa fa-plus\" severity=\"secondary\" [text]=\"true\" (onClick)=\"addItem()\" />\n    } @if (canAdd()) {\n    <p-button id=\"{{ f.id }}-clone-button\" icon=\"fa fa-clone\" [text]=\"true\" severity=\"secondary\" (onClick)=\"add()\" />\n    }\n    <!-- hide button -->\n    @if (canRemove()) {\n    <p-button\n      id=\"{{ f.id }}-remove-button\"\n      icon=\"fa fa-trash\"\n      [text]=\"true\"\n      severity=\"secondary\"\n      (onClick)=\"remove()\"\n    />\n    } }\n  </div>\n</ng-template>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, OnInit } from '@angular/core';\nimport { FieldArrayType, FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * Component for displaying array fields in editor.\n */\n@Component({\n    selector: 'ng-core-editor-formly-array-type',\n    templateUrl: 'array-type.component.html',\n    standalone: false\n})\nexport class ArrayTypeComponent extends FieldArrayType implements OnInit {\n\n  /**\n   * Component initialization\n   */\n  ngOnInit() {\n    this.props.remove = this.remove.bind(this);\n    this.props.add = this.add.bind(this);\n    this.props.canAdd = this.canAdd.bind(this);\n    this.props.canRemove = this.canRemove.bind(this);\n  }\n\n  /**\n   * Can a new element be added?\n   * @returns boolean, true if a new element can be inserted in the array\n   */\n  canAdd(): boolean {\n    const { maxItems } = this.field.props;\n    if (maxItems === undefined) {\n      return true;\n    }\n    return this.field.fieldGroup.length < maxItems;\n  }\n\n  /**\n   * Can an element be removed?\n   * @returns boolean, true if an element ca be removed\n   */\n  canRemove() {\n    const { minItems } = this.field.props;\n    if (minItems === undefined) {\n      return true;\n    }\n    return this.field.fieldGroup.length > minItems;\n  }\n\n  /**\n   * Remove an element from the array and hide buttons\n   * @param i - number, the position to remove the element\n   */\n  remove(i: number) {\n    super.remove(i);\n  }\n\n  /**\n   * Add a new element in the array\n   * @param i - number, the position to add the element\n   */\n  add(i: number, initialModel?: any) {\n    super.add(i, initialModel);\n    this.setFocusInChildren(this.field.fieldGroup[i]);\n  }\n\n  /**\n   * Set the focus to the first non object, array in children\n   * Recursive.\n   * @param field - FormlyFieldConfig, configuration form\n   */\n  setFocusInChildren(field: FormlyFieldConfig) {\n    if (field.fieldGroup && field.fieldGroup.length > 0) {\n      for (const f of field.fieldGroup) {\n        if (this.setFocusInChildren(f)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    if (!field.hide) {\n      field.focus = true;\n      return true;\n    }\n    return false;\n  }\n\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<!-- array title only if the array is empty -->\n\n@if (props.label && field.props.hideLabel !== true) {\n  <ng-core-label-editor [field]=\"field\" />\n}\n\n<div>\n  @if (showError) {\n    <div class=\"text-error core:my-2\">\n      <formly-validation-message [field]=\"field\"/>\n    </div>\n  }\n  <!-- for each item -->\n  <div [class]=\"props.containerCssClass\">\n    @for (f of field.fieldGroup; track f.id) { @if (!f.hide) {\n    <div class=\"{{ f.props.itemCssClass }} core:mb-1\" [id]=\"'field-' + f.id\">\n      <formly-field [field]=\"f\" />\n    </div>\n    } }\n  </div>\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\n@Component({\n    selector: 'ng-core-editor-formly-multi-schema-type',\n    template: `\n    <div [class]=\"field.parent.props.cssClass\">\n      @if (props.label) {\n        <legend [pTooltip]=\"props.description\" tooltipPosition=\"top\">{{ props.label }}</legend>\n      }\n      @if (showError && formControl.errors) {\n        <div class=\"text-error core:my-2\">\n          <formly-validation-message [field]=\"field\" />\n        </div>\n      }\n      @for (f of field.fieldGroup; track f.id) {\n        <formly-field [field]=\"f\"></formly-field>\n      }\n    </div>\n  `,\n    standalone: false\n})\nexport class MultiSchemaTypeComponent extends FieldType<FormlyFieldConfig> {}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * Component for displaying an object in editor.\n */\n@Component({\n    selector: 'ng-core-editor-formly-object-type',\n    templateUrl: './object-type.component.html',\n    standalone: false\n})\nexport class ObjectTypeComponent extends FieldType<FormlyFieldConfig> {\n  defaultOptions: Partial<FormlyFieldConfig<any>> = {\n    props: {\n      containerCssClass: 'core:flex core:flex-col core:gap-2'\n    }\n  };\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (showError) {\n  <div class=\"text-error core:my-2\">\n    <formly-validation-message [field]=\"field\"/>\n  </div>\n}\n<div [class]=\"props.containerCssClass\">\n  @for (f of field.fieldGroup; track f.id) {\n    <!-- the core:scroll-mt-18 class is added for sticky -->\n    <div\n      [hidden]=\"f.hide\"\n      [class]=\"f.props.itemCssClass\"\n      [ngClass]=\"{'core:scroll-mt-18': (props.isRoot && props.editorConfig?.longMode)}\"\n      [id]=\"'field-' + f.id\"\n    >\n      <formly-field [field]=\"f\" />\n    </div>\n  }\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2022-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { HttpClient } from '@angular/common/http';\nimport { ChangeDetectorRef, Component, ElementRef, inject, OnInit, Signal, viewChild } from '@angular/core';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { GeneratePassword } from \"generate-password-lite\";\nimport { Subject } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\n/**\n * Available options for generateOptions (GeneratePassword):\n * - length: Integer, length of password.\n *   default: 10\n * - lowercase: Boolean, put lowercase letters in password.\n *   default: true\n * - uppercase: Boolean, put uppercase letters in password.\n *   default: true\n * - numbers: Boolean, put numbers in password.\n *   default: true\n * - symbols: Boolean, put symbols in password.\n *   default: false\n * - exclude: String, characters to be excluded from password.\n *   default: ''\n * - minLengthLowercase: only if lowercase is set to true, minLengthLowercase will create\n *   a password that will have minimum number of lower case characters in the password.\n *   default: 1\n * - minLengthUppercase: only if uppercase is set to true, minLengthUppercase will create\n *   a password that will have minimum number of upper case characters in the password.\n *   default: 1\n * - minLengthNumbers: only if numbers is set to true, minLengthNumbers will create\n *   a password that will have minimum number of numbers in the password.\n *   default: 1\n * - minLengthSymbols: only if symbols is set to true, minLengthSymbols will create\n *   a password that will have minimum number of symbols in the password.\n *   default: 1\n */\n\ninterface PasswordGeneratorProps extends FormlyFieldProps {\n  enabledEditMode: boolean;\n  class?: string;\n  minLength: number;\n  maxLength: number;\n  specialChar: boolean;\n  readonly: boolean;\n  generateOptions: {\n    length?: number;\n    symbols?: boolean;\n  };\n  api?: string;\n  length?: number;\n  lowercase?: boolean;\n  uppercase?: boolean;\n  numbers?: boolean;\n  symbols?: boolean;\n  exclude?: string;\n  minLengthLowercase?: number;\n  minLengthUppercase?: number;\n  minLengthNumbers?: number;\n  minLengthSymbols?: number;\n};\n\n@Component({\n    selector: 'ng-core-editor-field-password-generator',\n    styles: `\n      p-inputGroupAddon { padding: 0 !important }\n    `,\n    template: `\n  <p-inputGroup>\n    <input\n      pInputText\n      #password\n      id=\"password\"\n      [type]=\"type\"\n      autocomplete=\"off\"\n      [formControl]=\"formControl\"\n      (change)=\"onChange($event.target.value)\"\n      [readonly]=\"props.readonly\"\n      [class]=\"props.class ? props.class : props.readonly ? 'core:!bg-surface-200' : ''\"\n      [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n    />\n    <p-inputGroupAddon class=\"core:flex\">\n      <div class=\"core:flex core:justify-center core:items-center core:min-h-full core:grow core:cursor-pointer core:hover:bg-emphasis\" (click)=\"onClick()\">\n        <i class=\"fa fa-repeat\" [title]=\"'Generate a new password' | translate\"></i>\n      </div>\n    </p-inputGroupAddon>\n    <p-inputGroupAddon>\n      <div class=\"core:flex core:justify-center core:items-center core:min-h-full core:grow core:cursor-pointer core:hover:bg-emphasis\" (click)=\"showHidePassword()\">\n        <i class=\"fa\" [ngClass]=\"{'fa-eye': type === 'password', 'fa-eye-slash': type === 'text'}\" [title]=\"'Show or hide password' | translate\"></i>\n      </div>\n    </p-inputGroupAddon>\n    @if (props.enabledEditMode) {\n    <p-inputGroupAddon>\n      <div class=\"core:flex core:justify-center core:items-center core:min-h-full core:grow core:cursor-pointer core:hover:bg-emphasis\" (click)=\"onEdit()\">\n        <i class=\"fa\" [ngClass]=\"{'fa-lock': props.readonly, 'fa-unlock-alt': !props.readonly}\" [title]=\"'Edit mode' | translate\"></i>\n      </div>\n    </p-inputGroupAddon>\n    }\n  </p-inputGroup>\n  @if (!showError && hasBeenGenerated) {\n    <div class=\"core:text-muted-color core:my-4\" translate>\n      The password has been copied to the clipboard.\n    </div>\n    }\n  `,\n    standalone: false\n})\nexport class PasswordGeneratorTypeComponent extends FieldType<FormlyFieldConfig<PasswordGeneratorProps>> implements OnInit {\n\n  protected httpClient: HttpClient = inject(HttpClient);\n  protected clipboard: Clipboard = inject(Clipboard);\n  protected cd: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  passwordField: Signal<ElementRef> = viewChild('password');\n\n  /** Default options */\n  defaultOptions: Partial<FormlyFieldConfig<PasswordGeneratorProps>> = {\n    props: {\n      // Allows you to edit the password\n      enabledEditMode: false,\n      // Minimum password size\n      minLength: 8,\n      // Maximum password size\n      maxLength: 255,\n      // Password generation with special characters (ex: $%&)\n      specialChar: false,\n      // The field is readonly\n      readonly: true,\n      // If you use the function in javascript, it is possible\n      // to pass options. See the information above.\n      generateOptions: {}\n    }\n  };\n\n  hasBeenGenerated = false;\n\n  /** Field password type (show or hide password) */\n  type: 'text' | 'password' = 'password';\n\n  /** Password Observable */\n  private _password$ = new Subject<string>();\n\n  /** OnInit hook */\n  ngOnInit(): void {\n    this._password$.pipe(\n      tap((password: string) => this.formControl.setValue(password)),\n      tap((password: string) => this.clipboard.copy(this.formControl.errors ? ' ' : password)),\n    ).subscribe(() => {\n      this.hasBeenGenerated = true;\n      this.cd.markForCheck();\n    });\n  }\n\n  /** Generation of the password when the button is clicked. */\n  onClick(): void {\n    if (!this.props.api) {\n      this._jsGeneration();\n    } else {\n      this._callApi();\n    }\n  }\n\n  /**\n   * Change the password when entering.\n   * @param password - string\n   */\n  onChange(password: string): void {\n    this._password$.next(password);\n  }\n\n  /** Hide or show password data */\n  showHidePassword(): void {\n    this.type = this.type === 'password' ? 'text' : 'password';\n  }\n\n  onEdit(): void {\n    this.props.readonly = !this.props.readonly;\n    if (!this.props.readonly) {\n      this.passwordField().nativeElement.focus();\n    }\n  }\n\n  /** Generate the password by javascript */\n  private _jsGeneration(): void {\n    if (!this.props.generateOptions.length) {\n      this.props.generateOptions.length = this.props.minLength;\n    }\n    if (!this.props.generateOptions.symbols) {\n      this.props.generateOptions.symbols = this.props.specialChar;\n    }\n    this._password$.next(GeneratePassword(this.props.generateOptions));\n  }\n\n  /** Call backend api entrypoint */\n  private _callApi(): void {\n    this.httpClient.get(this.props.api, {\n      responseType: 'text',\n      params: {\n        length: this.props.minLength,\n        special_char: this.props.specialChar\n      }\n    }).subscribe((password: string) => this._password$.next(password));\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\n\ninterface SwitchProps extends FormlyFieldProps {\n  hideLabel: boolean;\n}\n\n/**\n * Component for displaying a switcher in editor.\n */\n@Component({\n    selector: 'ng-core-editor-formly-field-switch',\n    template: `\n    <div class=\"core:flex core:gap-2 core:my-2\">\n      <p-toggleswitch\n        [ngClass]=\"{'ng-invalid ng-dirty': showError }\"\n        [formControl]=\"formControl\"\n        [formlyAttributes]=\"field\"\n      />\n      <label [for]=\"id\" [pTooltip]=\"props.description\" tooltipPosition=\"top\">{{ props.label }}</label>\n    </div>\n  `,\n    standalone: false\n})\nexport class SwitchComponent extends FieldType<FormlyFieldConfig<SwitchProps>> {\n  /** Default properties */\n  defaultOptions: Partial<FormlyFieldConfig<SwitchProps>> = {\n    props: {\n      hideLabel: true,\n    },\n  };\n}\n","/*\n * RERO angular core\n * Copyright (C) 2022-2024 RERO\n * Copyright (C) 2022 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, input } from '@angular/core';\n\nexport interface IExportOption {\n  label: string,\n  url: string,\n  disabled?: boolean,\n  disabled_message?: string\n};\n\n@Component({\n    selector: 'ng-core-export-button',\n    templateUrl: './export-button.component.html',\n    standalone: false\n})\nexport class ExportButtonComponent {\n\n  /** Export formats configuration */\n  exportOptions = input<IExportOption[]>([]);\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2022-2025 RERO\n  Copyright (C) 2022 UCLouvain\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (exportOptions() && exportOptions().length > 0) {\n  <!-- check single export format -->\n   @if (exportOptions().length === 1) {\n    @if (!exportOptions()[0]?.disabled) {\n      <a\n        pButton\n        outlined\n        severity=\"secondary\"\n        [href]=\"exportOptions()[0].url\"\n        rel=\"noopener noreferrer\"\n      >\n        <i class=\"fa fa-cloud-download core:mr-1\"></i>\n        {{ 'Export as' | translate }} {{ exportOptions()[0].label }}\n      </a>\n    } @else {\n      <p-button\n        severity=\"secondary\"\n        outlined\n        label=\"{{ 'Export as' | translate }} {{ exportOptions()[0].label }}\"\n        icon=\"fa fa-cloud-download\"\n        [href]=\"exportOptions()[0].url\"\n        [disabled]=\"exportOptions()[0]?.disabled\"\n        [pTooltip]=\"exportOptions()[0]?.disabled_message\"\n        [tooltipDisabled]=\"!exportOptions()[0]?.disabled\"\n        tooltipPosition=\"top\"\n      />\n    }\n   } @else {\n      <!-- display multiple export formats as dropdown list -->\n      <p-menu #menu [model]=\"exportOptions()\" [popup]=\"true\" />\n      <p-button\n        severity=\"secondary\"\n        outlined\n        [disabled]=\"exportOptions()[0]?.disabled\"\n        [pTooltip]=\"exportOptions()[0]?.disabled_message\"\n        [tooltipDisabled]=\"!exportOptions()[0]?.disabled\"\n        tooltipPosition=\"top\"\n        (onClick)=\"menu.toggle($event)\"\n      >\n        <div class=\"core:flex core:gap-4 core:items-center\">\n          <i class=\"fa fa-download\"></i>\n          {{ 'Export as' | translate }}&nbsp;…\n          <i class=\"fa fa-caret-down\"></i>\n        </div>\n      </p-button>\n   }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2023 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Class representing a record set returned by API.\n */\nexport class Record {\n  aggregations: any;\n  id?: string;\n  hits: any;\n  links: any;\n}\n\nexport class SearchResult {\n  type: string;\n  records: Record;\n}\n\nexport interface File {\n  updated: string;\n  size: string;\n  url?: string;\n  mimetype: string;\n  version_id: string;\n  is_head: boolean;\n  created: string;\n  tags: any;\n  delete_marker: boolean;\n  links: {\n    self: string,\n    version?: string,\n    uploads?: string,\n    commit?: string,\n    content?: string\n  };\n  checksum: string;\n  key: string;\n  showInfo: boolean;\n  showChildren: boolean;\n  metadata: any;\n}\n\n/**\n * Interface representing a search property, on which we can do a specific search\n * with query string like: `q=title:query`.\n */\nexport interface SearchField {\n  label: string;\n  path: string;\n  selected?: boolean;\n}\n\n/** Interface representing a search filter */\nexport interface SearchFilter {\n  filter: string;\n  label: string;\n  value: string;\n  /* Display filter only if there is a query.\n  This is overridden by the allowEmptySearch parameter\n  in the resource configuration. */\n  showIfQuery?: boolean;\n  /* If you set this value, the url parameter will still be present,\n  but with different values */\n  disabledValue?: string;\n  persistent?: boolean;\n  url?: {\n    external?: boolean;\n    link?: string;\n    routerLink?: string[];\n    target?: string;\n    title?: string;\n  };\n}\n\n/**\n * Interface representing a collection of SearchFilters with label.\n * The label adds a title to the interface.\n *\n * Example on the interface:\n *\n * Show only (label):\n * Filter 1\n * Filter 2\n * etc…\n */\nexport interface SearchFilterSection {\n  label: string;\n  filters: SearchFilter[];\n}\n\n/** Interfaces for an aggregation */\nexport interface Aggregation {\n  key: string;\n  bucketSize: any;\n  value: { buckets: any[] };\n  expanded: boolean;\n  loaded?: boolean;\n  doc_count?: number;\n  type?: string;\n  config?: AggregationConfig;\n  name?: string;\n}\n\n/**\n * Interface to describe an aggregation configuration\n *\n * Additionally to aggregation buckets, an aggregation configuration object could be\n * provided to control the aggregation display behavior. The configuration keys depends\n * on the aggregation type.\n *\n * attributes are :\n *   @attribute type - string: the type of aggregation (ex date-range, sum, date-histogram, ...)\n *   @attribute min - number: the minimum value into the aggregation buckets.\n *   @attribute max - number: the maximum value into the aggregation buckets.\n *   @attribute step - number: the step uses between to value.\n *   @attributes any additional/not known attributes.\n */\nexport interface AggregationConfig {\n  type?: string,\n  min?: number,\n  max?: number,\n  step?: number\n  [x: string | number | symbol]: unknown  // allow additional properties\n}\n","/*\n * RERO angular core\n * Copyright (C) 2022-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { AbstractControl } from '@angular/forms';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\nexport function emailValidator(field: FormlyFieldConfig) {\n  // Regex pattern to check email\n  const emailPattern = /^([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,})$/;\n  if ( field.props?.type !== 'email' || field.validators?.email) {\n    return;\n  }\n\n  field.validators = field.validators || {};\n  field.validators.email = {\n    expression: (control: AbstractControl) => control.value ? (new RegExp(emailPattern)).test(control.value) : true,\n    message: `This value is not a valid email.`,\n  };\n}\n","/*\n * RERO angular core\n * Copyright (C) 2021-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { AfterViewInit, Component, ElementRef, Type, ViewChild } from '@angular/core';\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { FormlyFieldTextArea } from '@ngx-formly/primeng/textarea';\nimport EasyMDE from 'easymde';\n\ninterface TextAreaProps extends FormlyFieldProps {\n  maxHeight?: string;\n  minHeight: string;\n  placeholder?: string;\n  promptURLs: boolean;\n  spellChecker: boolean;\n  status: boolean;\n  toolbar: any[];\n}\n\nexport interface FormlyTextAreaFieldConfig extends FormlyFieldConfig<TextAreaProps> {\n  type: 'textarea' | Type<FormlyFieldTextArea>;\n}\n\n/**\n * Component to display textarea as a markdown editor.\n */\n@Component({\n    selector: 'ng-core-editor-formly-field-markdown',\n    template: `\n    <div style=\"padding-inline: 0; padding-block: 0\" [ngClass]=\"{ 'p-inputtext ng-invalid ng-dirty': showError }\">\n      <textarea pTextarea #textarea></textarea>\n    </div>\n  `,\n    standalone: false\n})\nexport class MarkdownFieldComponent extends FieldType<FieldTypeConfig<TextAreaProps>> implements AfterViewInit {\n  // Reference to textarea element.\n  @ViewChild('textarea') textarea: ElementRef;\n\n  /** Default options */\n  defaultOptions?: Partial<FieldTypeConfig<TextAreaProps>> = {\n    props: {\n      minHeight: '500px',\n      promptURLs: true,\n      spellChecker: false,\n      status: false,\n      toolbar: [\n        'bold',\n        'italic',\n        'heading',\n        '|',\n        'unordered-list',\n        'ordered-list',\n        '|',\n        'link',\n        'image',\n        '|',\n        'preview',\n        'fullscreen',\n        '|',\n        'guide',\n      ]\n    }\n  };\n\n  /**\n   * Markdown editor initialization and listen for changes to update the model\n   * value.\n   */\n  ngAfterViewInit(): void {\n    const mde = new EasyMDE({\n      spellChecker: this.props.spellChecker,\n      promptURLs: this.props.promptURLs,\n      initialValue: this.formControl.value,\n      maxHeight: this.props.maxHeight,\n      minHeight: this.props.minHeight,\n      toolbar: this.props.toolbar,\n      element: this.textarea.nativeElement,\n      status: this.props.status,\n    });\n\n    mde.codemirror.on('change', () => {\n      this.formControl.patchValue(mde.value());\n      this.formControl.markAsTouched();\n    });\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2022-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\n\ninterface RadioButtonProps {\n  options: Option[];\n  style: 'stacked' | 'inline';\n};\n\ninterface Option {\n  label: string;\n  value: string;\n  disabled: boolean;\n};\n\n@Component({\n    selector: 'ng-core-editor-field-radio-button',\n    template: `\n  <ng-template #radioButton let-option=\"option\" let-class=\"class\">\n    <div class=\"core:flex\">\n      <p-radiobutton\n        [inputId]=\"option.value\"\n        [formControl]=\"option.disabled ? disabledControl : formControl\"\n        [value]=\"option.value\"\n      />\n      <label [for]=\"option.value\" class=\"core:ml-1\">{{ option.untranslatedLabel | translate }}</label>\n    </div>\n  </ng-template>\n  @if (props.style === 'stacked') {\n    @for (option of props.options | async; track option.value) {\n      <ng-container [ngTemplateOutlet]=\"radioButton\" [ngTemplateOutletContext]=\"{option}\"/>\n    }\n  } @else {\n    <div class=\"core:flex core:gap-2\">\n    @for (option of props.options | async; track option.value) {\n      <ng-container [ngTemplateOutlet]=\"radioButton\" [ngTemplateOutletContext]=\"{option}\"/>\n    }\n    </div>\n  }\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class RadioButtonComponent extends FieldType<FormlyFieldConfig<RadioButtonProps>> {\n\n  defaultOptions?: Partial<FormlyFieldConfig<RadioButtonProps>> = {\n    props: {\n      options: [],\n      style: 'stacked'\n    }\n  };\n\n  get disabledControl() {\n    return new FormControl({ value: this.formControl.value, disabled: true });\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\n\ninterface ExtraTextAreaProps extends FormlyFieldProps {\n  displayChars: boolean;\n  displayWords: boolean;\n  limitWords?: number;\n  limitChars?: number;\n}\n\n@Component({\n    selector: 'ng-core-editor-formly-field-textarea',\n    template: `\n    <textarea\n      pTextarea\n      [formControl]=\"formControl\"\n      [cols]=\"props.cols\"\n      [rows]=\"props.rows\"\n      class=\"core:w-full\"\n      [class.is-invalid]=\"showError\"\n      [formlyAttributes]=\"field\"\n      [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n    ></textarea>\n    @if (field.props.limitWords || field.props.displayWords) {\n      <ng-container\n        [ngTemplateOutlet]=\"counter\"\n        [ngTemplateOutletContext]=\"{\n          limit: field.props.limitWords,\n          count: countWords,\n          label: 'Number of words' | translate\n        }\"></ng-container>\n    }\n    @if (field.props.limitChars || field.props.displayChars) {\n      <ng-container\n        [ngTemplateOutlet]=\"counter\"\n        [ngTemplateOutletContext]=\"{\n          limit: field.props.limitChars,\n          count: countChars,\n          label: 'Number of chars' | translate\n        }\"></ng-container>\n    }\n    <ng-template #counter let-limit=\"limit\" let-count=\"count\" let-label=\"label\">\n      <span class=\"core:text-sm core:text-muted-color core:inline-block core:mr-4\">\n        {{ label }}: {{ count }}\n        @if (limit) {\n          / {{ limit }}\n        }\n      </span>\n    </ng-template>\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class TextareaFieldComponent extends FieldType<FormlyFieldConfig<ExtraTextAreaProps>> implements OnInit {\n  /** Default properties */\n  defaultOptions?: Partial<FormlyFieldConfig<ExtraTextAreaProps>> = {\n    props: {\n      displayChars: false,\n      displayWords: false,\n    }\n  };\n\n  /**\n   * Get the number of chars.\n   *\n   * @returns The number of chars.\n   */\n  get countChars(): number {\n    return this.formControl.value ? this.formControl.value.length : 0;\n  }\n\n  /**\n   * Get the number of words.\n   *\n   * @returns The number of words.\n   */\n  get countWords(): number {\n    return this.formControl.value ? this.formControl.value.split(/\\s+/).length : 0;\n  }\n\n  /**\n   * Component init.\n   *\n   * Adds validator for chars and words.\n   * Check if the current value does not exceed the limit value for chars or words.\n   */\n  ngOnInit(): void {\n    if (this.props.limitWords || this.props.limitChars) {\n      this.formControl.setValidators([this.limitValidator(), this.formControl.validator]);\n      this.formControl.updateValueAndValidity();\n    }\n  }\n\n  /**\n   * Form validator to check if the value is not greater than the limit.\n   *\n   * @returns A validator function returning the eventual error.\n   */\n  limitValidator(): ValidatorFn {\n    return (control: AbstractControl): Record<string, any> | null => {\n      if (this.props.limitWords && this.countWords > this.props.limitWords) {\n        return { limitWords: { value: control.value } };\n      }\n\n      if (this.props.limitChars && this.countChars > this.props.limitChars) {\n        return { limitChars: { value: control.value } };\n      }\n\n      return null;\n    };\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Component, OnInit } from '@angular/core';\nimport { FieldWrapper } from '@ngx-formly/core';\n\n@Component({\n    selector: 'ng-core-card-wrapper',\n    template: `\n  @if (!props?.isRoot) {\n    <p-fieldset>\n      <ng-template #header>\n          <ng-core-label-editor [field]=\"field\" />\n      </ng-template>\n      <ng-template #fieldComponent></ng-template>\n    </p-fieldset>\n    } @else {\n      <ng-template #fieldComponent></ng-template>\n    }\n  `,\n    standalone: false\n})\nexport class CardWrapperComponent extends FieldWrapper implements OnInit {\n  /** OnInit hook */\n  ngOnInit() {\n    // remove the field label as it is displayed by this wrapper\n    this.field.props.hideLabel = true;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldWrapper } from '@ngx-formly/core';\n\n@Component({\n    selector: 'ng-core-form-field-wrapper',\n    template: `\n    <div class=\"core:flex core:flex-col core:gap-2\" [class]=\"props.cssClass\" [class.has-error]=\"showError\">\n      <!-- label -->\n      @if (props.label && props.hideLabel !== true) {\n        <div>\n          <label [attr.for]=\"id\" [pTooltip]=\"props.description\" tooltipPosition=\"top\">\n            {{ props.label }}\n            @if (props.required && props.hideRequiredMarker !== true) {\n              &nbsp;*\n            }\n          </label>\n        </div>\n      }\n      <div class=\"core:flex core:content-center core:grow core:gap-1\">\n        <div class=\"core:grow\">\n          <!-- field -->\n          <ng-template #fieldComponent></ng-template>\n        </div>\n          @if (canAdd() || canRemove()) {\n          <div class=\"core:flex core:gap-1 core:items-center\">\n            <!-- clone button -->\n            @if (canAdd()) {\n              <p-button icon=\"fa fa-clone\" severity=\"secondary\" [text]=\"true\" (onClick)=\"add()\" />\n            }\n            <!-- trash button -->\n            @if (canRemove()) {\n              <p-button icon=\"fa fa-trash\" severity=\"secondary\" [text]=\"true\" (onClick)=\"remove()\" />\n            }\n          </div>\n          }\n        </div>\n      @if (showError) {\n        <div class=\"text-error core:my-2\">\n          <formly-validation-message [field]=\"field\"/>\n        </div>\n      }\n   </div>\n  `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false\n})\nexport class FormFieldWrapperComponent extends FieldWrapper {\n\n  /** Hide the field */\n  remove(): void {\n    switch (this.field.parent.type) {\n      case 'object':\n        if (this.field.props.setHide) {\n          this.field.props.setHide(this.field, true);\n        } else {\n          this.field.hide = true;\n        }\n        break;\n      case 'array':\n        this.field.parent.props.remove(Number(this.field.key));\n        break;\n    }\n  }\n\n  /**\n   * Is the field can be hidden?\n   * @returns boolean, true if the field can be hidden\n   */\n  canRemove(): boolean {\n    switch (this.field.parent.type) {\n      case 'object':\n        if (!this.field.props?.editorConfig?.longMode) {\n          return false;\n        }\n        return (!this.field.props.required && !this.field.hide);\n      case 'array':\n        return this.field.parent.props.canRemove();\n      default:\n        return false;\n      }\n  }\n\n  /**\n   * Is the field can be hidden?\n   * @returns boolean, true if the field can be hidden\n   */\n  canAdd(): boolean {\n    if (this.field.parent.type === 'array') {\n      return this.field.parent.props.canAdd();\n    }\n    return false;\n  }\n\n  /** Add a new element */\n  add(): void {\n    if (this.field.parent.type === 'array') {\n      const index = Number(this.field.key) + 1;\n      this.field.parent.props.add(index);\n    }\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component } from '@angular/core';\nimport { FieldWrapper } from '@ngx-formly/core';\n\n@Component({\n    selector: 'ng-core-hide-wrapper',\n    // do not include the children\n    template: '',\n    standalone: false\n})\nexport class HideWrapperComponent extends FieldWrapper {\n\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Injectable } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Interface representing aggregations filters\n */\nexport interface AggregationsFilter {\n  key: string;\n  values: any[];\n}\n\n/**\n * Service for managing records search.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class RecordSearchService {\n  /** Aggregations filters array */\n  private _aggregationsFilters: AggregationsFilter[] = null;\n\n  /** Aggregations filters subject */\n  private _aggregationsFiltersSubject: BehaviorSubject<AggregationsFilter[]>;\n\n  /**\n   * Constructor, initialize aggregations filters subject.\n   */\n  constructor() {\n    this._aggregationsFiltersSubject = new BehaviorSubject(this._aggregationsFilters);\n  }\n\n  /**\n   * Returns an observable which emits aggregations filters.\n   */\n  get aggregationsFilters(): Observable<AggregationsFilter[]> {\n    return this._aggregationsFiltersSubject.asObservable();\n  }\n\n  /**\n   * Removes the given value from selected filters and removes all children\n   * selected values, too.\n   * @param key Aggregation key\n   * @param bucket Bucket containing the value to remove\n   */\n  removeAggregationFilter(key: string, bucket: any) {\n    this.removeFilter(key, bucket.key.toString());\n    this.removeChildrenFilters(bucket);\n    this.removeParentFilters(bucket);\n    // Update selected aggregations filters\n    this._aggregationsFiltersSubject.next(cloneDeep(this._aggregationsFilters));\n  }\n\n  /**\n   * Set all aggregations filters and emit the list.\n   * @param aggregationsFilters List of aggregations filters\n   * @param forceRefresh Force the refresh of aggregations filters\n   */\n  setAggregationsFilters(aggregationsFilters: AggregationsFilter[], forceRefresh = false) {\n    // TODO: If the filter is in a child bucket, checks if all parents are\n    // selected, too. If not, adds all parents filters.\n    if (!forceRefresh && JSON.stringify(this._aggregationsFilters) !== JSON.stringify(aggregationsFilters)) {\n      forceRefresh = true;\n    }\n\n    if (forceRefresh) {\n      this._aggregationsFilters = cloneDeep(aggregationsFilters);\n      this._aggregationsFiltersSubject.next(cloneDeep(this._aggregationsFilters));\n    }\n  }\n\n  /**\n   * Stores selected values for an aggregation or removes it if values are empty.\n   * @param term Term (aggregation key)\n   * @param values Selected values\n   * @param bucket The complete ElasticSearch affected bucket configuration\n   */\n  updateAggregationFilter(term: string, values: string[], bucket: any = null) {\n     if (this._aggregationsFilters === null) {\n      this._aggregationsFilters = [];\n    }\n\n    if (bucket) {\n      this.removeParentFilters(bucket);\n      this.removeChildrenFilters(bucket);\n    }\n\n    if (values.length === 0) {\n      // no more items selected, remove filter\n      this._aggregationsFilters = this._aggregationsFilters.filter(item => item.key !== term);\n    } else {\n      const filter = this._aggregationsFilters.find(item => item.key === term);\n      // In both cases values are affected with destructuring assignment, to\n      // avoid values to be modified outside the service, as array are assigned\n      // by reference.\n      if (filter) {\n        // update existing filter\n        filter.values = [...values];\n      } else {\n        // add new filter\n        this._aggregationsFilters.push({ key: term, values: [...values] });\n      }\n    }\n    this._aggregationsFiltersSubject.next(cloneDeep(this._aggregationsFilters));\n  }\n\n  /**\n   * Remove a filter from the current aggregations filters.\n   * @param key - the filter name\n   * @param value - the filter value\n   * @param emit - is the `_aggregationsFiltersSubject` should be emitted\n   */\n  removeFilter(key: string, value: string, emit = false): void {\n    const filter = this._aggregationsFilters.find(item => item.key === key);\n    if (filter) {\n      filter.values = filter.values.filter(item => item !== value);\n      // No more selected values, remove key from aggregations filters.\n      if (filter.values.length === 0) {\n        this._aggregationsFilters = this._aggregationsFilters.filter(item => item.key !== filter.key);\n      }\n    }\n    if (emit) {\n      this._aggregationsFiltersSubject.next(cloneDeep(this._aggregationsFilters));\n    }\n  }\n\n  /**\n   * Check if a given filter exist in the current aggregations filters.\n   * @param key - the filter name\n   * @param value - the filter value\n   * @returns `true` if exists\n   */\n   hasFilter(key: string, value: string): boolean {\n    const filter = this._aggregationsFilters.find((a) => a.key === key);\n    return !!(filter && filter.values.some(v => v === value));\n  }\n\n  /**\n   * Remove the parent filters of a given bucket.\n   * @param bucket - The ElasticSearch bucket\n   */\n  removeParentFilters(bucket) {\n    if (bucket.parent) {\n      this.removeParentFilters(bucket.parent);\n    }\n    this.removeFilter(bucket.aggregationKey, bucket.key);\n  }\n\n  /**\n   * Removes children filters of a given bucket.\n   * @param bucket - The ElasticSearch bucket\n   */\n  removeChildrenFilters(bucket) {\n    for (const k of Object.keys(bucket).filter(key => bucket[key].buckets)) {\n      const aggregationsKey = k;\n      for (const childBucket of bucket[k].buckets) {\n        this.removeFilter(aggregationsKey, childBucket.key);\n        this.removeChildrenFilters(childBucket);\n      }\n    }\n  }\n\n  /**\n   * Check if a children filter of a given bucket exists\n   * @param bucket - The ElasticSearch bucket\n   * @returns `true` if the bucket has children with a corresponding filter\n   */\n  hasChildrenFilter(bucket) {\n    for (const k of Object.keys(bucket).filter(key => typeof bucket[key] === 'object' && bucket[key].buckets)) {\n      const aggregationsKey = k;\n      for (const childBucket of bucket[k].buckets) {\n        const filter = this._aggregationsFilters.find((v) => v.key === aggregationsKey);\n        if ((filter && filter.values.includes(childBucket.key)) || this.hasChildrenFilter(childBucket)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-20224 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, Input } from '@angular/core';\nimport { ResultItem } from './result-item';\n\n/**\n * Component for displaying record as JSON in brief views.\n */\n@Component({\n    template: `\n    {{ record|json }}\n    @if (detailUrl) {\n      <div class=\"core:my-4\">\n        @if (detailUrl.external === false) {\n          <p-button outlined icon=\"pi pi-eye\" [label]=\"'Show' | translate\" [routerLink]=\"detailUrl.link\" />\n        } @else {\n          <p-button outlined icon=\"pi pi-eye\" [label]=\"'Show' | translate\" [href]=\"detailUrl.link\" />\n        }\n      </div>\n    }\n  `,\n    standalone: false\n})\nexport class JsonComponent implements ResultItem {\n  // Record data.\n  @Input() record: any;\n\n  // Type of resource.\n  @Input() type: string;\n\n  // Info for detail URL link.\n  @Input() detailUrl: { link: string, external: boolean };\n}\n","/*\n * RERO angular core\n * Copyright (C) 2019-2024 RERO\n * Copyright (C) 2019-2023 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewContainerRef, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { ActionStatus } from '../../action-status';\nimport { JsonComponent } from './item/json.component';\nimport { ResultItem } from './item/result-item';\n\nexport interface IDeleteRecordEvent {\n  pid: string;\n  type?: string | undefined | null\n}\n\n@Component({\n    selector: 'ng-core-record-search-result',\n    templateUrl: './record-search-result.component.html',\n    standalone: false\n})\nexport class RecordSearchResultComponent implements OnInit, AfterViewInit {\n\n  protected changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n  protected router: Router = inject(Router);\n\n  // Store current URL to come back to the same page\n  currentUrl: string = null;\n\n  // Store if record can be deleted or not\n  deleteStatus: ActionStatus;\n\n  // Store if record can be updated or not\n  updateStatus: ActionStatus;\n\n  // Store if record can be use or not\n  useStatus: ActionStatus;\n\n  // Detail URL value, resolved by observable property detailUrl$.\n  detailUrl: { link: string, external: boolean };\n\n  // Record to display\n  @Input() record: { id: string, metadata: { pid: string } };\n\n  // Type of record\n  @Input() type: string;\n\n  // Component for displaying item view\n  @Input() itemViewComponent: any;\n\n  // Admin mode (edit, remove, add, ...)\n  @Input() adminMode: ActionStatus = { can: false, message: '' };\n\n  // Record can be updated\n  @Input() canUpdate$: Observable<ActionStatus>;\n\n  // Record can be removed\n  @Input() canDelete$: Observable<ActionStatus>;\n\n  // Record can be used (mainly for templates)\n  @Input() canUse$: Observable<ActionStatus>;\n\n  // Aggregations\n  @Input() aggregations: object[];\n\n  // Observable emitting current value of record URL.\n  @Input() detailUrl$: Observable<{ link: string, external: boolean }> = null;\n\n  // Event emitted when a record is deleted\n  @Output() deletedRecord = new EventEmitter<IDeleteRecordEvent>();\n\n  @Output() deleteMessageEvent = new EventEmitter<string>();\n\n  // Location for component item creation\n  @ViewChild('item', { read: ViewContainerRef }) container!: ViewContainerRef;\n\n  // Return a message containing the reasons why the item cannot be deleted\n  get deleteInfoMessage(): string {\n    return this.deleteStatus.message;\n  }\n\n  // OnInit hook\n  ngOnInit() {\n    this.currentUrl = window.location.href;\n    if (this.canDelete$) {\n      this.canDelete$.subscribe((result: ActionStatus) => {\n        this.deleteStatus = result;\n      });\n    }\n\n    if (this.canUpdate$) {\n      this.canUpdate$.subscribe((result: ActionStatus) => {\n        this.updateStatus = result;\n      });\n    }\n\n    if (this.canUse$) {\n      this.canUse$.subscribe((result: ActionStatus) => {\n        this.useStatus = result;\n      });\n    }\n\n    if (this.detailUrl$) {\n      this.detailUrl$.subscribe((url: { link: string, external: boolean }) => {\n        this.detailUrl = url;\n      });\n    }\n  }\n\n  // AfterViewInit hook\n  ngAfterViewInit(): void {\n    this.container.clear();\n    const component = this.container.createComponent(this.itemViewComponent || JsonComponent);\n    (component.instance as ResultItem).record = this.record;\n    (component.instance as ResultItem).type = this.type;\n    (component.instance as ResultItem).detailUrl = this.detailUrl;\n    this.changeDetectorRef.detectChanges();\n  }\n\n  /**\n   * Delete a record\n   * @param pid - string, pid to delete\n   * @param type - string, resource type\n   */\n  deleteRecord(pid: string, type?: string): void {\n    if (this.deleteStatus.can) {\n      this.deletedRecord.emit({ pid, type });\n    } else {\n      this.deleteMessageEvent.emit(this.deleteStatus.message.replace(new RegExp('\\\\n', 'g'), '<br>'));\n    }\n  }\n\n  /**\n   * Use a record\n   */\n  useRecord() {\n    this.router.navigateByUrl(this.useStatus.url);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2019-2024 RERO\n  Copyright (C) 2019-2023 UCLouvain\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<div class=\"core:flex core:items-start\">\n  <div class=\"core:grow\">\n    <ng-container #item></ng-container>\n  </div>\n  <div class=\"core:flex core:flex-none core:gap-1 core:justify-end core:ml-2\">\n    @if (adminMode.can) {\n        <!-- use button -->\n        @if (useStatus?.can && useStatus?.url) {\n          <p-button\n            [outlined]=\"true\"\n            [ariaLabel]=\"'Use' | translate\"\n            (onClick)=\"useRecord()\"\n            [title]=\"'Use' | translate\"\n            icon=\"fa fa-hand-o-right\"\n          />\n        }\n\n        <!-- edit button -->\n        @if (updateStatus?.can) {\n          <p-button\n            [outlined]=\"true\"\n            [ariaLabel]=\"'Edit' | translate\"\n            [routerLink]=\"updateStatus.routerLink || ['edit', record.id]\"\n            icon=\"fa fa-pencil\"\n          />\n        }\n\n        <!-- delete button -->\n        @if (deleteStatus?.can || deleteStatus?.message) {\n          <p-button\n          icon=\"fa fa-trash\"\n          severity=\"danger\"\n          class=\"core:pointer-events-auto\"\n          outlined\n          [title]=\"'Delete'|translate\"\n          (onClick)=\"deleteRecord(record.id, deleteStatus?.type)\"\n          [pTooltip]=\"tooltipContent\"\n          tooltipPosition=\"top\"\n          [disabled]=\"!deleteStatus.can\"\n          [tooltipDisabled]=\"deleteStatus.can\"\n        />\n        <ng-template #tooltipContent>\n          <span [innerHTML]=\"deleteStatus.message\"></span>\n        </ng-template>\n        }\n    }\n  </div>\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2019-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, of } from 'rxjs';\n\n/**\n * To implement your translation, please do it in your application\n * by overloading this service.\n * Example:\n *\n * import { BucketNameService as CoreBucketNameService } from '@rero/ng-core';\n * import { BucketNameService } from './service/bucket-name.service';\n *\n * @NgModule({\n *     providers: [\n *         { provide: CoreBucketNameService, useClass: BucketNameService }\n *     ]\n * });\n *\n */\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BucketNameService {\n\n  protected translateService: TranslateService = inject(TranslateService);\n\n  /**\n   * Transform aggregation name\n   * @param aggregationKey - type of aggregation\n   * @param value - value of current aggregation\n   * @returns Observable of string\n   */\n  transform(aggregationKey: string, value: string): Observable<string> {\n    let data = value;\n    // Legacy: for compatibility\n    switch (aggregationKey) {\n      case 'language': data = `lang_${value}`; break;\n    }\n    // End Legacy\n    return of(this.translateService.instant(data));\n  }\n}\n\nexport interface IBucketNameService {\n  transform(aggregationKey: string, value: string): Observable<string>;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2019-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BucketNameService } from '../service/bucket-name.service';\n\n@Pipe({\n    name: 'bucketName',\n    standalone: false\n})\nexport class BucketNamePipe implements PipeTransform {\n\n  protected bucketNameService: BucketNameService = inject(BucketNameService);\n\n  /**\n   * Transform value if the type of aggregation is language\n   * @param value - aggregation value\n   * @param aggregationKey - aggregation type\n   * @returns Observable<string>\n   */\n  transform(value: string, aggregationKey: string): Observable<string> {\n    return this.bucketNameService.transform(aggregationKey, value);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, OnChanges, OnDestroy, OnInit, SimpleChanges, inject, input } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { AggregationsFilter, RecordSearchService } from '../../record-search.service';\n\n@Component({\n    selector: 'ng-core-record-search-aggregation-buckets',\n    templateUrl: './buckets.component.html',\n    standalone: false\n})\nexport class BucketsComponent implements OnInit, OnDestroy, OnChanges {\n\n  protected recordSearchService: RecordSearchService = inject(RecordSearchService);\n\n  // COMPONENT ATTRIBUTES ============================================================\n  /** Buckets list for aggregation */\n  buckets = input.required<any[]>();\n  /** Aggregation key */\n  aggregationKey = input.required<string>();\n  /** Bucket size, if not null, reduce displayed items to this size. */\n  size = input<number|null>();\n\n  /** More and less on aggregation content (facet) */\n  moreMode = true;\n  /** Current selected values for the aggregations */\n  aggregationsFilters: AggregationsFilter[] = [];\n  /** Children of current bucket */\n  bucketChildren: any = {};\n\n  /** Subscription to aggregationsFilters observable */\n  private aggregationsFiltersSubscription: Subscription;\n\n\n  // GETTERS & SETTERS =================================================================\n  /** Returns selected filters for the aggregation key. */\n  get aggregationFilters(): string[] {\n    const aggregationFilters = this.aggregationsFilters.find((item: AggregationsFilter) => item.key === this.aggregationKey());\n    return aggregationFilters === undefined\n        ? []\n        : aggregationFilters.values;\n  }\n\n  /** Get bucket size. */\n  get bucketSize(): number {\n    const size = this.buckets().length;\n    return this.size() === null || this.moreMode === false\n        ? size\n        : this.size();\n  }\n\n  /** Get the number of bucket items with non-zero doc_count. */\n  get bucketsLength(): number {\n    return this.buckets().reduce((acc, bucket) => (bucket.doc_count) ? acc+1 : acc, 0);\n  }\n\n  /** Should display more or less link for a bucket ? */\n  get displayMoreAndLessLink(): boolean {\n    return (this.size() === null)\n        ? false\n        : this.bucketsLength > this.size();\n  }\n\n  /**\n   * OnInit hook\n   *   Subscribe to aggregations filters observable for getting the aggregations filters each time\n   *   they will change.\n   */\n  ngOnInit() {\n    this.aggregationsFiltersSubscription = this.recordSearchService\n        .aggregationsFilters\n        .subscribe((aggregationsFilters: AggregationsFilter[]) => {\n          if (aggregationsFilters !== null) {\n            this.aggregationsFilters = aggregationsFilters;\n          }\n        });\n  }\n\n  /**\n   * OnChanges hook\n   *   Called each time an input property is modified.\n   *   If buckets are changed, refresh children buckets.\n   * @param changes - bucket changes\n   */\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.buckets) {\n      for (const bucket of this.buckets()) {\n        this.bucketChildren[bucket.key] = this.getBucketChildren(bucket);\n      }\n    }\n  }\n\n  /**\n   * OnDestroy hook\n   *   Unsubscribes from the observable of aggregations filters.\n   */\n  ngOnDestroy() {\n    this.aggregationsFiltersSubscription.unsubscribe();\n  }\n\n  // COMPONENT F£UNCTIONS =====================================================\n  /**\n   * Check if a value is present in selected filters.\n   * @param value: filter value (could be string, number, ...)\n   * @return `true` if value is present in the aggregation filters, `null` otherwise.\n   */\n  isSelected(value: any): boolean|null {\n    return this.aggregationFilters.includes(value.toString()) ? true : null;\n  }\n\n  /**\n   * Do we need to display the children?\n   * @return `true` if we want to display the children, `false` otherwise.\n   */\n  displayChildren(bucket): boolean {\n    return (\n      this.isSelected(bucket.key) ||\n      // not necessary but faster than hasChildrenFilter\n      bucket.indeterminate ||\n      // hasChildrenFilter is required to avoid blinks when a child is selected\n      this.recordSearchService.hasChildrenFilter(bucket)\n    );\n  }\n\n  /**\n   * Update selected filters by adding or removing the given value and push\n   * values to service.\n   * @param bucket - string: the selected bucket value (checked OR unchecked)\n   */\n  updateFilter(bucket: any) {\n    const index = this.aggregationsFilters.findIndex((item: AggregationsFilter) => item.key === this.aggregationKey());\n    if (index === -1) {\n      // No filters exist for the aggregation.\n      this.recordSearchService.updateAggregationFilter(this.aggregationKey(), [bucket.key], bucket);\n    } else {\n      const aggFilter = this.aggregationsFilters[index];\n      if (!aggFilter.values.includes(bucket.key.toString())) {\n        // Bucket value is not yet selected, we add value to selected values.\n        this.aggregationsFilters[index].values.push(bucket.key.toString());\n        this.recordSearchService.updateAggregationFilter(\n          this.aggregationKey(),\n          this.aggregationsFilters[index].values,\n          bucket\n        );\n      } else {\n        // Removes value from selected values and all children selected values.\n        this.recordSearchService.removeAggregationFilter(this.aggregationKey(), bucket);\n      }\n    }\n  }\n\n  /**\n   * Get children buckets\n   * @param bucket: parent bucket\n   * @return Bucket children list of given bucket\n   */\n  getBucketChildren(bucket: any): any[] {\n    const children = [];\n    for (const k of Object.keys(bucket).filter(key => typeof bucket[key] === 'object' && bucket[key].buckets)) {\n      children.push({\n        aggregationKey: k,\n        bucketSize: this.bucketSize,\n        key: k,\n        buckets: bucket[k].buckets,\n      });\n    }\n    return children;\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (buckets()) {\n  <ul class=\"core:list-none core:text-sm\">\n  @for (bucket of buckets()|slice:0:bucketSize; track bucket.key; let index = $index) {\n    <li>\n        @if (bucket.doc_count) {\n          <div class=\"core:flex core:gap-1 core:items-start core:text-link-secondary core:mb-1\">\n            <p-checkbox\n              inputId=\"{{ bucket.aggregationKey }}-{{ index }}\"\n              binary\n              [indeterminate]=\"bucket.indeterminate\"\n              variant=\"filled\"\n              [ngModel]=\"isSelected(bucket.key)\"\n              (onChange)=\"updateFilter(bucket)\"\n            />\n            <label class=\"core:grow core:overflow-hidden\" for=\"{{ bucket.aggregationKey }}-{{ index }}\">\n              @if (bucket.name) {\n                {{ bucket.name }}\n              } @else {\n                {{ bucket.key | bucketName: aggregationKey() | async }}\n              }\n            </label>\n              <div class=\"core:pl-2\">\n                {{ bucket.doc_count }}\n              </div>\n          </div>\n        }\n      <div class=\"core:ml-6\">\n        @if (displayChildren(bucket)) {\n          @for (aggregation of bucketChildren[bucket.key]; track aggregation.key) {\n            <ng-core-record-search-aggregation-buckets\n              [buckets]=\"aggregation.buckets\"\n              [size]=\"aggregation.bucketSize\"\n              [aggregationKey]=\"aggregation.key\"\n            ></ng-core-record-search-aggregation-buckets>\n          }\n        }\n      </div>\n    </li>\n  }\n  </ul>\n}\n@if (displayMoreAndLessLink) {\n  <div class=\"core:flex core:justify-end\">\n    <span class=\"text-link\" (click)=\"moreMode = !moreMode\">{{ (moreMode ? 'more…' : 'less…') | translate }}</span>\n  </div>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, OnDestroy, OnInit, inject, input } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { RecordSearchService } from '../../record-search.service';\n\n@Component({\n    selector: 'ng-core-aggregation-slider',\n    templateUrl: './slider.component.html',\n    standalone: false\n})\nexport class AggregationSliderComponent implements OnDestroy, OnInit {\n\n  protected recordSearchService: RecordSearchService = inject(RecordSearchService);\n\n  // COMPONENT ATTRIBUTES =====================================================\n  /** The aggregation key. */\n  key = input<string>();\n  /** Buckets list */\n  buckets = input<any[]>();\n  /** The minimum value */\n  min = input<number>(1);\n  /** The maximum value */\n  max = input<number>(1000);\n  /** gap between each value. */\n  step = input<number>(1);\n\n  /** Range to search */\n  range: number[] = null;\n  /** True if route have aggregation query param. */\n  hasQueryParam = false;\n\n  /** Subscription to search service. */\n  private searchServiceSubscription: Subscription;\n\n  /**\n   * OnInit hook\n   * Subscribe to route changes for getting aggregation query parameter.\n   */\n  ngOnInit() {\n    this.range = [this.min(), this.max()];\n    this.searchServiceSubscription = this.recordSearchService\n        .aggregationsFilters\n        .subscribe((filters: any) => {\n          if (!filters) {\n            return;\n          }\n          let filter = filters.find((element: any) => element.key === this.key());\n          if (filter) {\n            filter = filter.values[0].split('--').map((item: string) => +item);\n            this.hasQueryParam = true;\n            this.range = filter;\n          } else {\n            this.range = [this.min(), this.max()];\n          }\n        });\n  }\n\n  /**\n   * OnDestroy hook\n   * Unsubscribes from search service.\n   */\n  ngOnDestroy() {\n    this.searchServiceSubscription.unsubscribe();\n  }\n\n  // COMPONENT FUNCTIONS ======================================================\n  /** Update aggregation filter. */\n  updateFilter() {\n    if (!this.range[0] || this.range[0] < this.min()) { this.range[0] = this.min(); }\n    if (!this.range[1] || this.range[1] > this.max()) { this.range[1] = this.max(); }\n    this.recordSearchService.updateAggregationFilter(this.key(), [\n      `${this.range[0]}--${this.range[1]}`,\n    ]);\n  }\n\n  /** Clear aggregation filter. */\n  clearFilter() {\n    this.hasQueryParam = false;\n    this.recordSearchService.updateAggregationFilter(this.key(), []);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<p-inputGroup>\n    <p-inputNumber\n      class=\"core:mr-1\"\n      inputId=\"integeronly\"\n      [useGrouping]=\"false\"\n      [(ngModel)]=\"range[0]\"\n      [min]=\"range[0]\"\n      [max]=\"range[1]\" />\n    <p-inputNumber\n      class=\"core:ml-1\"\n      inputId=\"integeronly\"\n      [useGrouping]=\"false\"\n      [(ngModel)]=\"range[1]\"\n      [min]=\"range[0]\"\n      [max]=\"range[1]\" />\n</p-inputGroup>\n<div class=\"core:flex core:justify-end core:mt-2 core:gap-2\">\n    @if (hasQueryParam) {\n      <p-button size=\"small\" [label]=\"'Clear' | translate\" [outlined]=\"true\" (onClick)=\"$event.preventDefault(); clearFilter()\" />\n    }\n    <p-button size=\"small\" [label]=\"'Apply' | translate\" [outlined]=\"true\" (onClick)=\"$event.preventDefault(); updateFilter()\" />\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2021-2025 RERO\n * Copyright (C) 2021 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, OnDestroy, OnInit, inject, input } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { RecordSearchService } from '../../record-search.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface DateRangeConfig {\n  max: number;\n  min: number;\n  step: number;\n}\n\nexport interface Filter {\n  key: string;\n  values: string[];\n}\n\n@Component({\n    selector: 'ng-core-aggregation-date-range',\n    templateUrl: './date-range.component.html',\n    standalone: false\n})\nexport class AggregationDateRangeComponent implements OnInit, OnDestroy {\n\n  protected recordSearchService: RecordSearchService = inject(RecordSearchService);\n  protected translateService: TranslateService = inject(TranslateService);\n\n  // COMPONENTS ATTRIBUTES ====================================================\n  // Aggregation key\n  key = input.required<string>();\n  // Components configuration\n  config = input.required<Partial<DateRangeConfig>>();\n\n  // Model used for Datepicker field.\n  dateRangeModel: Date[] | undefined;\n  // Date minimum\n  minDate: Date = null;\n  // Date maximum\n  maxDate: Date = null;\n\n  /** True if route have aggregation query param. */\n  hasQueryParam = false;\n  buttonConfig = [];\n\n  /** Subscription to search service. */\n  private searchServiceSubscription: Subscription;\n\n  /** OnInit hook */\n  ngOnInit(): void {\n    // Define min/max values if not exists\n    if (this.config().min) {\n      this.minDate = new Date(this.config().min);\n    } else{\n      this.minDate = new Date(1900, 0, 1);\n    }\n    if (this.config().max) {\n      this.maxDate = new Date(this.config().max);\n    } else {\n      this.maxDate = new Date();\n    }\n    this.maxDate = new Date(this.maxDate.setHours(23,59,59))\n    this.dateRangeModel = [this.minDate, this.maxDate];\n\n    this.searchServiceSubscription = this.recordSearchService.aggregationsFilters.subscribe((filters: Filter[]) => {\n      if (!filters) {\n        return;\n      }\n      const filter = filters.find((element: Filter) => element.key === this.key());\n      this.hasQueryParam = filter !== undefined;\n      this.dateRangeModel = (filter)\n        ? filter.values[0].split('--').map((item: string) => new Date(+item))  // split filter data and transform each part into Date\n        :  [this.minDate, this.maxDate];\n    });\n    const today = new Date();\n    this.buttonConfig = [\n    {\n      value: [new Date(new Date().setDate(today.getDate() - 31)), today],\n      label: this.translateService.instant('Last month')\n    }, {\n      value: [new Date(new Date().setDate(today.getDate() - 366)), today],\n      label: this.translateService.instant('Last year')\n    }, {\n      value: [new Date(today.getFullYear(), today.getMonth(), 1), new Date(today.getFullYear(), today.getMonth() + 1, 0)],\n      label: this.translateService.instant('This month')\n    },\n    {\n      value: [new Date(today.getFullYear(), 0, 1), new Date(today.getFullYear() + 1, 0, 1)],\n      label: this.translateService.instant('This year')\n    }\n  ];\n  }\n  setRange(value: Date[]) {\n    this.dateRangeModel = value;\n    this.updateFilter();\n  }\n\n  /** OnDestroy hook */\n  ngOnDestroy(): void {\n    this.searchServiceSubscription.unsubscribe();\n  }\n\n  // COMPONENTS FUNCTIONS =====================================================\n  /** Update aggregation filter. */\n  updateFilter() {\n    if (this.dateRangeModel && this.dateRangeModel[0] && this.dateRangeModel[1]) {\n      const maxDate = new Date(this.dateRangeModel[1]).setHours(23,59,59);\n      this.recordSearchService.updateAggregationFilter(this.key(), [\n          `${this.dateRangeModel[0].getTime()}--${maxDate}`\n      ]);\n    }\n  }\n\n  /** Clear aggregation filter. */\n  clearFilter(): void {\n    this.recordSearchService.updateAggregationFilter(this.key(), []);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2021-2025 RERO\n  Copyright (C) 2021 UCLouvain\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<p-datepicker\n  styleClass=\"core:w-full\"\n  inputStyleClass=\"core:text-center\"\n  [(ngModel)]=\"dateRangeModel\"\n  selectionMode=\"range\"\n  showIcon\n>\n  <ng-template #footer>\n    <p-divider/>\n    <div class=\"core:grid core:grid-cols-12 core:gap-4\">\n      @for (cfg of buttonConfig; track cfg.value) {\n        <div class=\"core:col-span-6 core:flex core:justify-center\">\n          <p-button (onClick)=\"setRange(cfg.value)\" styleClass=\"core:w-full\" class=\"core:grow core:p-1\" outlined size=\"small\" [label]=\"cfg.label\" />\n        </div>\n      }\n    </div>\n  </ng-template>\n</p-datepicker>\n<div class=\"core:flex core:justify-end core:mt-2 core:gap-2\">\n  @if (hasQueryParam) {\n    <p-button size=\"small\" [label]=\"'Clear' | translate\" [outlined]=\"true\" (onClick)=\"clearFilter()\" />\n  }\n  <p-button size=\"small\" [label]=\"'Apply' | translate\" [outlined]=\"true\" (onClick)=\"updateFilter()\" />\n</div>\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, input, output } from '@angular/core';\nimport { Aggregation } from '../../record';\n\n@Component({\n    selector: 'ng-core-record-search-aggregation',\n    templateUrl: './aggregation.component.html',\n    standalone: false\n})\nexport class RecordSearchAggregationComponent {\n  // COMPONENT ATTRIBUTES =====================================================\n  /** Aggregation data */\n  aggregation = input<Aggregation>();\n  /** Current selected values */\n  aggregationsFilters = input.required<any[]>();\n  /** Output event when aggregation is clicked. */\n  aggregationClicked = output<{ key: string, expanded: boolean }>();\n\n  // GETTER & SETTER ==========================================================\n  /**\n   * Returns aggregations filters corresponding to the aggregation key.\n   * @return List of aggregation filters\n   */\n  get aggregationFilters(): string[] {\n    const aggregationFilters = this.aggregationsFilters().find((item: any) => item.key === this.aggregation().key);\n    return aggregationFilters === undefined ? [] : aggregationFilters.values;\n  }\n\n  /** Is the aggregation content should be displayed. */\n  get isAggregationDisplayed(): boolean {\n    return this.aggregation().expanded || this.aggregationFilters.length > 0;\n  }\n\n  // PUBLIC COMPONENTS ========================================================\n\n  /**\n   * Method called when the title of an aggregation is clicked.\n   */\n  toggleVisibility(): void {\n    // if filters are selected, we do nothing.\n    if (this.aggregationFilters.length > 0) {\n      return;\n    }\n    // Toggle aggregation expanded attribute\n    this.aggregation().expanded = !this.aggregation().expanded;\n    // Emit the value to parent.\n    this.aggregationClicked.emit({\n      key: this.aggregation().key,\n      expanded: this.aggregation().expanded,\n    });\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<!-- Aggregation with no bucket, containing only the count. -->\n@if (aggregation().doc_count) {\n  <div class=\"core:mb-4\">\n    <ng-core-record-search-aggregation-buckets\n      [buckets]=\"[{key: '1', doc_count: aggregation().doc_count, name: aggregation().key | translate }]\"\n      [aggregationKey]=\"aggregation().key\"\n      [size]=\"aggregation().bucketSize\" />\n  </div>\n} @else {\n  <p-fieldset\n    [legend]=\"(aggregation().name || aggregation().key) | translate | ucfirst\"\n    [toggleable]=\"true\"\n    [collapsed]=\"!isAggregationDisplayed\"\n    (collapsedChange)=\"toggleVisibility()\"\n  >\n  <div class=\"core:p-2\">\n  @switch (aggregation().type) {\n    @case ('range') {\n      <ng-core-aggregation-slider\n        [key]=\"aggregation().key\"\n        [min]=\"aggregation().config.min || 1\"\n        [max]=\"aggregation().config.max || 100\"\n        [step]=\"aggregation().config.step || 1\"\n        [buckets]=\"aggregation().value.buckets\" />\n    }\n    @case ('date-range') {\n      <ng-core-aggregation-date-range\n        [key]=\"aggregation().key\"\n        [config]=\"aggregation().config\" />\n    }\n    @default {\n      @if (aggregation().value.buckets.length > 0) {\n        <ng-core-record-search-aggregation-buckets\n          [buckets]=\"aggregation().value.buckets\"\n          [aggregationKey]=\"aggregation().key\"\n          [size]=\"aggregation().bucketSize\" />\n      } @else {\n        @if (aggregation().loaded) {\n          <span class=\"core:text-sm\" translate>No result</span>\n        }\n      }\n    }\n  }\n</div>\n</p-fieldset>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2022-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, computed, inject, input, OnChanges, output, SimpleChanges } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface IFilter {\n  key: string;\n  aggregationKey: string;\n  name?: string;\n}\n\n@Component({\n    selector: 'ng-core-list-filters',\n    templateUrl: './list-filters.component.html',\n    standalone: false\n})\nexport class ListFiltersComponent {\n\n  protected translateService: TranslateService = inject(TranslateService);\n\n  /**\n   * All aggregations\n   */\n  aggregations = input<any[]>([]);\n\n  // Selected aggregations filters\n  aggregationsFilters = input<any>([]);\n\n  // Search filters\n  searchFilters = input<any[]>([]);\n\n  /** Remove filter event */\n  remove = output<IFilter>();\n\n  // Filters to hide\n  filtersToHide = ['simple'];\n\n  // Filters selected\n  filters = computed(() => this.getActiveFilters());\n\n  /**\n   * Returns promised filters\n   * @returns the array of IFilter\n   */\n  private getActiveFilters(): IFilter[] {\n    const filterSet = [];\n    this.searchFilters().forEach((filter: any) => {\n      if (!filter.filters) {\n        filterSet.push(filter.filter);\n      } else {\n        filter.filters.forEach((fSection: any) => {\n          filterSet.push(fSection.filter);\n        });\n      }\n    });\n    this.filtersToHide = [...new Set<string>([...this.filtersToHide, ...filterSet])];\n\n    const filters = [];\n    this.aggregationsFilters().map((filter: any) => {\n      if (!this.filtersToHide.includes(filter.key)) {\n        filter.values.map((value: string) => {\n          if (value.includes('--')) {\n            const regex = /\\d{13,}--\\d{13,}/;\n            if (regex.test(value)) {\n              const [min, max] = value.split('--');\n              const dateMin = new Intl.DateTimeFormat(this.translateService.currentLang).format(+min);\n              const dateMax = new Intl.DateTimeFormat(this.translateService.currentLang).format(+max);\n              filters.push({ key: value, aggregationKey: filter.key, name: `${dateMin} - ${dateMax}` });\n            } else {\n              filters.push({ key: value, aggregationKey: filter.key, name: value.replace('--', ' - ') });\n            }\n          } else {\n            filters.push({ key: value, aggregationKey: filter.key });\n          }\n        });\n      }\n    });\n    if(this.aggregations()) {\n      this.aggregations().map((item: any) => {\n        this.getFilterNames(item.value.buckets, filters);\n      });\n    }\n    return filters;\n  }\n\n  /**\n   * Get displayed name of bucket\n   * and fill in filters list.\n   *\n   * @param buckets - Bucket to get the name from.\n   */\n  getFilterNames(buckets: any, filters) {\n    if (!buckets || buckets.length === 0) {\n      return;\n    }\n    buckets.map((bucket: any) => {\n      for (const k in bucket) {\n        if (bucket[k].buckets) {\n          this.getFilterNames(bucket[k].buckets, filters);\n        }\n      }\n      if (bucket.name) {\n        const index = filters.findIndex((filter: any) => filter.key === bucket.key && filter.aggregationKey === bucket.aggregationKey);\n        if (index > -1) {\n          filters[index].name = bucket.name;\n          filters[index] = {...filters[index]};\n        }\n      }\n    });\n  }\n\n  /**\n   * Remove filter.\n   * @param filter - the filter to remove\n   */\n  removeFilter(filter: IFilter): void {\n    this.remove.emit(filter);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2022-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (filters()?.length > 0) {\n  <div class=\"core:flex core:flex-wrap core:mb-2\">\n    @for (filter of filters(); track filter.key) {\n    <p-button\n      class=\"core:mr-2 core:mb-2\"\n      [label]=\"filter.name ? filter.name : (filter.key | bucketName : filter.aggregationKey | async)\"\n      icon=\"fa fa-times\"\n      [outlined]=\"true\"\n      severity=\"secondary\"\n      (onClick)=\"removeFilter(filter)\"\n    />\n    }\n  </div>\n  }\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, Signal, computed, input, output } from '@angular/core';\n\n// Documentation: https://primeng.org/paginator\n\nexport interface PageEvent {\n  first: number;\n  rows: number;\n  page: number;\n  pageCount: number;\n}\n\nexport interface ChangeEvent {\n  page: number;\n  rows: number;\n}\n\n@Component({\n    selector: 'ng-core-paginator',\n    templateUrl: './paginator.component.html',\n    standalone: false\n})\nexport class PaginatorComponent {\n\n  /** Input */\n  alwaysShow = input<boolean>(true);\n  currentPage = input<number>(1);\n  pageLinkSize = input<number>(5);\n  rows = input<number>(10);\n  rowsPerPageOptions = input<number[]>();\n  showCurrentPageReport = input<boolean>(false);\n  showFirstLastIcon = input<boolean>(false);\n  totalRecords = input<number>(0);\n  /** Output */\n  rowPageChange = output<ChangeEvent>();\n\n  /** Position for the current page */\n  first: Signal<number> = computed(() => {\n    this.eventData.page = (this.currentPage() -1);\n    this.eventData.rows = this.rows();\n    return this.eventData.page * this.eventData.rows\n  });\n\n  /** Paginator Event */\n  private eventData: ChangeEvent = {\n    page: 0,\n    rows: 10\n  };\n\n  /** Event on change page */\n  onPageChange(event: PageEvent) {\n    this.eventData.rows = event.rows;\n    this.eventData.page = event.page;\n    this.rowPageChange.emit(this.eventData);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<p-paginator\n    (onPageChange)=\"onPageChange($event)\"\n    [alwaysShow]=\"alwaysShow()\"\n    [first]=\"first()\"\n    [pageLinkSize]=\"pageLinkSize()\"\n    [rows]=\"rows()\"\n    [showCurrentPageReport]=\"showCurrentPageReport()\"\n    [showFirstLastIcon]=\"showFirstLastIcon()\"\n    [totalRecords]=\"totalRecords()\"\n    [rowsPerPageOptions]=\"rowsPerPageOptions()\" />\n","/*\n * RERO angular core\n * Copyright (C) 2022-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, computed, inject, input, output } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItem, MenuItemCommandEvent } from 'primeng/api';\n\n@Component({\n    selector: 'ng-core-menu-sort',\n    templateUrl: './menu-sort.component.html',\n    standalone: false\n})\nexport class MenuSortComponent {\n\n  protected translateService: TranslateService = inject(TranslateService);\n  protected activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n\n  /** Input */\n  config = input.required<MenuItem[]>();\n  selectedValue = input<string>();\n\n  language = toSignal(this.translateService.onLangChange);\n\n  selectedOption = computed(() => this.config().find((conf: MenuItem) => conf.value === this.selectedValue()));\n  options = computed(() => { this.language(); return this.sortOptions()});\n\n  /** Change event */\n  onChange = output<string>();\n\n  /** Return the sort options from config. */\n  sortOptions(): MenuItem[] {\n    const translations = [];\n    this.config().map((option: MenuItem) => {\n      const newOption = { ...option };\n      newOption.label = this.translateService.instant(option.label);\n      newOption.command = (event: MenuItemCommandEvent) => this.onChange.emit(event.item.value);\n      translations.push(newOption);\n    });\n\n    return translations.sort((a: MenuItem, b: MenuItem) => a.label.localeCompare(b.label));\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2019-2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (options().length > 0) {\n<p-menu #menu [model]=\"options()\" [popup]=\"true\" />\n<p-button severity=\"secondary\" outlined (onClick)=\"menu.toggle($event)\">\n  <div class=\"core:flex core:gap-4 core:items-center\">\n    @if (selectedOption()?.icon) {\n      <i [ngClass]=\"selectedOption().icon\"></i>\n    } @else if (selectedOption()) {\n      {{'Sort by' | translate }}&nbsp;:\n    }\n    @if (selectedOption()?.label) {\n      {{ selectedOption()?.label | translate }}\n    } @else {\n      {{'Sort by' | translate }}&nbsp;…\n    }\n  <i class=\"fa fa-caret-down\"></i>\n</div>\n</p-button>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, inject, input, output } from '@angular/core';\nimport { SearchFilter, SearchFilterSection } from '../../record';\nimport { ToggleSwitchChangeEvent } from 'primeng/toggleswitch';\nimport { ActivatedRoute } from '@angular/router';\n\nexport interface IChecked {\n  filterKey: string;\n  checked: boolean;\n}\n\n@Component({\n    selector: 'ng-core-search-filters',\n    templateUrl: './search-filters.component.html',\n    standalone: false\n})\nexport class SearchFiltersComponent {\n\n  protected activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n\n  // Array of filters\n  searchFilters = input<SearchFilter[]|SearchFilterSection[]>([]);\n\n  // Resources configuration\n  config = input.required<any>();\n\n  // query string\n  query = input.required<string>();\n\n  // Class for section\n  styleClassSection = input<string>();\n\n  // Filter event\n  onChange = output<IChecked>();\n\n  /**\n   * Check if a filter section\n   * @param searchFilterSection - SearchFilterSection\n   * @returns True if the filter is the section\n   */\n  showFilterSection(searchFilterSection: SearchFilterSection): boolean {\n    return searchFilterSection.filters.some((filter: SearchFilter) => this.config().allowEmptySearch\n        ? true\n        : (this.query() && filter.showIfQuery === true) || !filter?.showIfQuery\n    );\n  }\n\n  /**\n   * Check if a simple filter\n   * @param searchFilter - SearchFilter\n   * @returns True if the filter is simple.\n   */\n  showFilter(searchFilter: SearchFilter): boolean {\n    if (this.config().allowEmptySearch) {\n      return true;\n    }\n    if (!this.query()) {\n      return !(searchFilter.showIfQuery === true);\n    } else {\n      return (searchFilter.showIfQuery === true || !searchFilter?.showIfQuery);\n    }\n  }\n\n  /**\n   * Activates the filter according to the route parameters.\n   * @param filter - SearchFilter\n   * @returns True, if the parameter is present nd contains a value.\n   */\n  isChecked(filter: SearchFilter): boolean {\n    if (this.activatedRoute.snapshot.queryParamMap.has(filter.filter)) {\n      const value = this.activatedRoute.snapshot.queryParamMap.get(filter.filter);\n      if (!value) {\n        return false;\n      }\n      if (filter.filter === 'simple') {\n        return !JSON.parse(value);\n      } else {\n        return Boolean(JSON.parse(value));\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Event on switch\n   * @param event - ToggleSwitchChangeEvent primeng\n   * @param filter the search filter\n   */\n  change(event: ToggleSwitchChangeEvent, filter: SearchFilter): void {\n    this.onChange.emit({ filterKey: filter.filter, checked: event.checked })\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2024-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (searchFilters().length > 0) {\n  <div class=\"core:mb-2\">\n    @for (searchFilter of searchFilters(); track searchFilter.filter) {\n      @if (searchFilter.filters) {\n        @if (showFilterSection(searchFilter)) {\n          <div [ngClass]=\"styleClassSection()\">{{ searchFilter.label | translate }}</div>\n          @for(searchFilterSection of searchFilter.filters; track searchFilterSection.filter) {\n            @if (showFilter(searchFilterSection)) {\n              <ng-container [ngTemplateOutlet]=\"searchFilterTemplate\" [ngTemplateOutletContext]=\"{filter: searchFilterSection}\"/>\n            }\n          }\n        }\n      } @else {\n        @if (showFilter(searchFilter)) {\n          <ng-container [ngTemplateOutlet]=\"searchFilterTemplate\" [ngTemplateOutletContext]=\"{filter: searchFilter}\"/>\n        }\n      }\n    }\n  </div>\n}\n\n<ng-template #searchFilterTemplate let-filter=\"filter\">\n    <div class=\"core:flex\">\n      <div class=\"core:flex core:items-center core:mr-2\">\n        <p-toggleswitch\n          [ngModel]=\"isChecked(filter)\"\n          inputId=\"customSwitch-{{ filter.filter }}\"\n          [ariaLabel]=\"filter.label | translate\"\n          (onChange)=\"change($event, filter)\"\n        />\n      </div>\n      <div class=\"core:flex core:items-center\">\n        <label for=\"customSwitch-{{ filter.filter }}\">{{ filter.label | translate }}</label>\n        @if (filter.url) {\n          @if (filter.url.external) {\n            <a class=\"core:ml-1\" [title]=\"filter.url.title\" [href]=\"filter.url.link\" [target]=\"filter.url.target\">\n              <i class=\"fa fa-info-circle \" aria-hidden=\"true\"></i>\n            </a>\n          } @else {\n            <a class=\"core:ml-1\" [title]=\"filter.url.title\" [routerLink]=\"filter.url.routerLink\">\n              <i class=\"fa fa-info-circle \" aria-hidden=\"true\"></i>\n            </a>\n          }\n        }\n      </div>\n    </div>\n</ng-template>\n","/*\n * RERO angular core\n * Copyright (C) 2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, OnInit, inject, input, output, model, OnDestroy, OutputRefSubscription } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n// Documentation: https://primeng.org/tabview\n\nexport interface ITabViewChangeEvent {\n  originalEvent: any;\n  index: number;\n};\n\n@Component({\n    selector: 'ng-core-search-tabs',\n    templateUrl: './search-tabs.component.html',\n    standalone: false\n})\nexport class SearchTabsComponent implements OnInit, OnDestroy {\n\n  protected activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n\n  // Resources configuration\n  types = input.required<any>();\n\n  // Tab change event\n  onChangeType = output<string>();\n\n  /** Tabs displayed */\n  typesInTabs: any[];\n\n  /** Tab index */\n  currentType = model<string | undefined>(undefined);\n  currentTypeSubscription: OutputRefSubscription;\n\n  /** OnInit hook */\n  ngOnInit(): void {\n    this.typesInTabs = this.types().filter((item: any) => item.hideInTabs !== true);\n    this.currentType.set(this.activatedRoute.snapshot.params.type);\n    this.currentTypeSubscription = this.currentType.subscribe(typeName => this.onChangeType.emit(typeName));\n  }\n\n  ngOnDestroy(): void {\n    this.currentTypeSubscription.unsubscribe();\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2024-2025 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (typesInTabs.length > 1) {\n  <p-tabs [(value)]=\"currentType\">\n    <p-tablist>\n    @for (tab of typesInTabs; track tab.key) {\n      <p-tab [value]=\"tab.key\">{{ tab.label | translate }}</p-tab>\n    }\n    </p-tablist>\n  </p-tabs>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2022-2025 RERO\n * Copyright (C) 2022 UCLouvain\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { MenuItem } from 'primeng/api';\nimport { ToggleSwitchChangeEvent } from 'primeng/toggleswitch';\nimport { BehaviorSubject, isObservable, Observable, of, Subscription } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators';\nimport { ApiService } from '../../api/api.service';\nimport { Error } from '../../error/error';\nimport { ActionStatus } from '../action-status';\nimport { JSONSchema7 } from '../editor/utils';\nimport { Aggregation, Record, SearchField, SearchFilter, SearchFilterSection, SearchResult } from '../record';\nimport { RecordUiService } from '../record-ui.service';\nimport { RecordService } from '../record.service';\nimport { ChangeEvent } from './paginator/paginator.component';\nimport { AggregationsFilter, RecordSearchService } from './record-search.service';\nimport { IChecked } from './search-filters/search-filters.component';\n\nexport interface SearchParams {\n  currentType: string;\n  index: string;\n  q: string;\n  page: number;\n  size: number;\n  aggregationsFilters: AggregationsFilter[];\n  sort: string;\n  searchFields: SearchField[];\n  searchFilters: (SearchFilter | SearchFilterSection)[];\n}\n\nexport interface SortOption {\n  value: string;\n  label: string;\n  defaultQuery?: boolean;\n  defaultNoQuery?: boolean;\n  icon?: string;\n}\n\n@Component({\n    selector: 'ng-core-record-search',\n    templateUrl: './record-search.component.html',\n    standalone: false\n})\nexport class RecordSearchComponent implements OnInit, OnChanges, OnDestroy {\n  protected recordService: RecordService = inject(RecordService);\n  protected recordUiService: RecordUiService = inject(RecordUiService);\n  protected recordSearchService: RecordSearchService = inject(RecordSearchService);\n  protected translateService: TranslateService = inject(TranslateService);\n  protected spinner: NgxSpinnerService = inject(NgxSpinnerService);\n  protected apiService: ApiService = inject(ApiService);\n  protected activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n\n  /** Page anchor to scroll on the top */\n  @ViewChild('topScrollAnchor') topScroll: ElementRef;\n\n  // COMPONENT ATTRIBUTES =====================================================\n  /** Current selected resource type */\n  @Input() currentType: string = null;\n  /** Search query */\n  @Input() q = '';\n  /** Define the current record's page */\n  @Input() page = 1;\n  /** Define the number of records per page */\n  @Input() size = 10;\n  /** Defined the sort order */\n  @Input() sort: string = null;\n  /** If admin mode is disabled, no action can be performed on a record (as add, update or remove) */\n  @Input() adminMode: ActionStatus = { can: true, message: '' };\n  /** Custom URL to notice detail */\n  @Input() detailUrl: string = null;\n  /** Resources types available */\n  @Input() types: {\n    key: string;\n    label: string;\n    index?: string;\n    component?: Component;\n    total?: number;\n    canAdd?: any;\n    canUpdate?: any;\n    canDelete?: any;\n    canRead?: any;\n    permissions?: any;\n    aggregations?: any;\n    preFilters?: any;\n    defaultSearchInputFilters?: AggregationsFilter[];\n    listHeaders?: any;\n    itemHeaders?: any;\n    aggregationsName?: any;\n    aggregationsOrder?: string[];\n    aggregationsExpand?: string[] | (() => string[]);\n    aggregationsHide?: string[] | (() => string[]);\n    aggregationsBucketSize?: number;\n    showSearchInput?: boolean;\n    pagination?: {\n      boundaryLinks?: boolean;\n      maxSize?: number;\n      pageReport?: boolean;\n      rowsPerPageOptions?: number[];\n    };\n    formFieldMap?: (field: FormlyFieldConfig, jsonSchema: JSONSchema7) => FormlyFieldConfig;\n    hideInTabs?: boolean;\n  }[] = [{ key: 'documents', label: 'Documents' }];\n\n  /** Output current state when parameters change. */\n  @Output() parametersChanged = new EventEmitter<any>();\n  /** Output current result of records by type. */\n  @Output() recordsSearched = new EventEmitter<SearchResult>();\n\n  /** Current aggregations filters applied */\n  aggregationsFilters: AggregationsFilter[] = [];\n  /** Contain result row data */\n  hits: any = [];\n  /** Facets retrieved from requested result */\n  aggregations: Aggregation[];\n  /** Aggregation keys to always hide (defined into the config) */\n  aggregationsToHide: string[] = [];\n  /** Error message when something wrong happens during a search */\n  error: Error;\n  /** Check if record can be added */\n  addStatus: ActionStatus = { can: true, message: '' };\n  /** List of fields on which we can do a specific search. */\n  searchFields: SearchField[] = [];\n  /** List of fields on which we can filter. */\n  searchFilters: (SearchFilter | SearchFilterSection)[] = [];\n  /** If we need to show the empty search message info. */\n  showEmptySearchMessage = false;\n  /** Export formats configuration. */\n  exportOptions: {\n    label: string;\n    url: string;\n    disabled?: boolean;\n    disabled_message?: string;\n  }[];\n\n  /** JSON dumping of last search parameters (used for checking if we have to do a search or not).*/\n  protected _searchParameters = new BehaviorSubject<SearchParams>(null);\n  /** Define if search input have to be displayed or not. */\n  protected _showSearchInput = true;\n  /** Define if title have to be displayed or not. */\n  protected _showLabel = true;\n  /** Subscriptions to observables. */\n  protected _subscriptions: Subscription = new Subscription();\n  /** Store configuration for type. */\n  protected config: any = null;\n\n  availableTypes = [];\n\n  loaded = false;\n\n  // GETTER & SETTER ==========================================================\n  /** Check if pagination have to be displayed or not. */\n  get showPagination(): boolean {\n    return this.total > this.size;\n  }\n\n  /** Does it require to activate the first and last button on pagination. */\n  get paginationBoundaryLinks(): boolean {\n    const paginationConfig = this._getResourceConfig('pagination', {});\n    return 'boundaryLinks' in paginationConfig ? paginationConfig.boundaryLinks : false;\n  }\n\n  /** Get the number of pages showed on pagination. */\n  get paginationMaxSize(): number {\n    const paginationConfig = this._getResourceConfig('pagination', {});\n    return 'maxSize' in paginationConfig ? paginationConfig.maxSize : 5;\n  }\n\n  /** Request result record hits. */\n  get records(): any[] {\n    return this.hits && this.hits.hits ? this.hits.hits : [];\n  }\n\n  /** Total records number corresponding to the request. */\n  get total(): number {\n    return this.hits && this.hits.total ? this.recordService.totalHits(this.hits.total) : 0;\n  }\n\n  /** Get the text for displaying results text. */\n  get resultsText$(): Observable<string> {\n    if (this.config.resultsText) {\n      return this.config.resultsText(this.hits);\n    }\n    return this.total <= 1\n      ? this.translateService.stream('{{ total }} result', { total: this.total }) // O or 1 result\n      : this.translateService.stream('{{ total }} results', { total: this.total });\n  }\n\n  /** Get showSearchInput value, given either by config or by local value. */\n  get showSearchInput(): boolean {\n    if (this.config.showSearchInput != null) {\n      return this.config.showSearchInput;\n    }\n    return this._showSearchInput;\n  }\n\n  /** Setter for `showSearchInput`. */\n  @Input() set showSearchInput(showSearchInput: boolean) {\n    this._showSearchInput = showSearchInput;\n  }\n\n  /** Get showLabel value, given either by config or by local value. */\n  get showLabel(): boolean {\n    if (this.config.showLabel != null) {\n      return this.config.showLabel;\n    }\n    return this._showLabel;\n  }\n\n  /** Setter for `showLabel`. */\n  @Input() set showLabel(showLabel: boolean) {\n    this._showLabel = showLabel;\n  }\n\n  /** Return the current page (used in pagination, has we cannot use `page` property directly) */\n  get currentPage() {\n    return this.page;\n  }\n\n  /**\n   * Used only for binding with pagination.\n   * Avoid side effect if \"page\" property is bound to pagination\n   * (infinite calls to get records).\n   * @param page - number, new page\n   */\n  set currentPage(page: number) {\n    this.page = +page;\n    this._searchParamsHasChanged(false);\n  }\n\n  /**\n   * Return the list of search fields that are selected.\n   * @return List of selected search fields.\n   */\n  get selectedSearchFields(): SearchField[] {\n    return this.searchFields.filter((field: SearchField) => field.selected);\n  }\n\n  /**\n   * Get the message if there's no record for the type.\n   * The message can be customized with the `noRecordMessage` property in route configuration.\n   * @returns A message indicating there's no record.\n   */\n  get emptyRecordMessage(): string {\n    return this.config.noRecordMessage || this.translateService.instant('There are no records in this section');\n  }\n\n  /**\n   * Check if the current type has no record.\n   * @returns True if no record is found and no search query is done.\n   */\n  get hasNoRecord(): boolean {\n    return this.config.showFacetsIfNoResults\n      ? false\n      : !this.q && this.records.length === 0 && !this.showEmptySearchMessage;\n  }\n\n  /** Return a message containing the reasons why record list cannot be exported. */\n  get exportInfoMessage(): string {\n    return this.total === 0\n      ? this.translateService.instant('Result list is empty.')\n      : this.translateService.instant('Too many items. Should be less than {{max}}.', {\n          max: RecordService.MAX_REST_RESULTS_SIZE,\n        });\n  }\n\n  get selectedSortValue(): MenuItem {\n    const sortParam = this.activatedRoute.snapshot?.queryParamMap?.get('sort');\n    return (sortParam && this.config.sortOptions)\n      ? this.config.sortOptions.find((item: MenuItem) => item.value === sortParam)?.value\n      : null;\n  }\n\n  // HOOKS ======================================================\n\n  /**\n   * OnInit hook.\n   *   Subscribes to the observable emitting the aggregations filters.\n   *   Loads total count of records for each resource.\n   */\n  ngOnInit() {\n    this._subscriptions.add(\n      this.translateService.onLangChange.subscribe((lang: any) => {\n        this._loadSearchFields();\n      })\n    );\n    this.availableTypes = this.types.filter((item) => item.hideInTabs !== true);\n    // Subscribe on aggregation filters changes and do search.\n    let first = true;\n\n    // Load the possible aggregation asked to search engine and that always need to be hide.\n    // DEV NOTE : These aggregation should be used by other components (using content injection)\n    //            otherwise it doesn't matter to ask them.\n    if (this.config.aggregationsHide) {\n      this.aggregationsToHide =\n        typeof this.config.aggregationsHide === 'function'\n          ? this.config.aggregationsHide()\n          : this.config.aggregationsHide;\n    }\n\n    this._subscriptions.add(\n      this.recordSearchService.aggregationsFilters.subscribe((aggregationsFilters: AggregationsFilter[]) => {\n        // No aggregations filters are set at this time, we do nothing.\n        if (aggregationsFilters === null) {\n          return;\n        }\n        aggregationsFilters.forEach((item, key) => (aggregationsFilters[key].values = item.values.sort()));\n        this.aggregationsFilters = aggregationsFilters;\n        // if it's the first value emitted, the current page is kept.\n        this._searchParamsHasChanged(first === false);\n        // not first anymore\n        first = false;\n      })\n    );\n    this._subscriptions.add(\n      this._searchParameters\n        .asObservable()\n        .pipe(\n          // only if the patterns changed\n          distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n          // cancel previous pending requests\n          switchMap(() => {\n            if (this.aggregations != null) {\n              return of(null);\n            }\n            return this.config.aggregationsOrder.pipe(\n              tap((aggregations: string[]) => {\n                let aggregationsExpandCfg = this.config.aggregationsExpand;\n                if (typeof aggregationsExpandCfg === 'function') {\n                  aggregationsExpandCfg = aggregationsExpandCfg();\n                }\n                this.aggregations = aggregations.map((key: any) => {\n                  return {\n                    key: key.key || key,\n                    bucketSize: this.config.aggregationsBucketSize || null,\n                    value: { buckets: [] },\n                    expanded: (aggregationsExpandCfg || []).includes(key),\n                    included: ([...aggregationsExpandCfg, ...this.aggregationsToHide]).includes(key),\n                    name: key.name || this._aggregationName(key) || null,\n                  };\n                });\n              })\n            );\n          }),\n          tap(() => (this.hits = [])),\n          switchMap(() => this._getRecords())\n        )\n        .subscribe({\n\n          next: (records: Record) => {\n            this.loaded = true;\n            this.hits = records.hits;\n            this.spinner.hide();\n            // Apply filters\n            this.aggregations$(records.aggregations).subscribe((aggregations: any) => {\n              for (const agg of this.aggregations) {\n                // reset aggregations\n                agg.loaded = false;\n                agg.value.buckets = [];\n                if (agg.key in aggregations) {\n                  this._mapAggregation(agg, aggregations[agg.key]);\n                }\n              }\n            });\n            // Required to fire onChange event\n            this.aggregations = [...this.aggregations];\n            this._emitNewParameters();\n            this.recordsSearched.emit({ type: this.currentType, records });\n            // reload export options\n            this.exportOptions = this._exportFormats();\n          },\n          error: (error) => {\n            this.error = error;\n            this.spinner.hide();\n          }\n        }\n        )\n    );\n  }\n\n  /**\n   * Methods called each time an input property is modified.\n   *\n   * If current type is changed, the configuration for the new type is loaded.\n   *\n   * The first time current type is changed, the types property is set in the\n   * RecordUiServices. A better way to do that is to detect route change in the\n   * service, but at this time it is done like that.\n   *\n   * This method does a search at the end but only if the search parameters have\n   * changed. We want to avoid a double search when the following process is\n   * done:\n   *\n   * 1. A parameter is changed in the search interface.\n   * 2. Local property is updated.\n   * 3. A search is done.\n   * 4. The component outputs the search parameters.\n   * 5. The parent component (RecordSearchPage) updates the URL\n   * 6. The parent component detects route parameters changes.\n   * 7. The parent component update the input value of the component.\n   * 8. This method is triggered.\n   *\n   * @param changes Object containing all the changed properties.\n   */\n  ngOnChanges(changes: SimpleChanges) {\n    // Current type has changed\n    if (changes.currentType) {\n      if (changes.currentType.firstChange) {\n        // Load all configuration types, only during the first change\n        this.recordUiService.types = this.types;\n      }\n\n      // if the \"type\" property is changed in input, but the change is not\n      // triggered by clicking on a tab (which already load configuration),\n      // we reload configuration.\n      // If no configuration is loaded, we load it, too.\n      if (\n        this.config === null ||\n        (changes.currentType.currentValue != null && changes.currentType.currentValue !== this.config.key)\n      ) {\n        this._loadConfigurationForType(this.currentType);\n      }\n    }\n\n    // If it's the first change, we don't do a search, it's delegated to the\n    // aggregations filters subscription.\n    if (changes[Object.keys(changes)[0]].firstChange === false) {\n      // Get records and reset page only if page has not changed\n      this._searchParamsHasChanged(!('page' in changes));\n    }\n  }\n\n  /**\n   * OnDestroy hook\n   *  Unsubscribes from the observable of the aggregations filters.\n   */\n  ngOnDestroy() {\n    this._subscriptions.unsubscribe();\n  }\n\n  // COMPONENT FUNCTIONS ======================================================\n  /**\n   * Internal notification that notify the search parameters has changed.\n   * @param resetPage reset the pager to the first page\n   */\n  protected _searchParamsHasChanged(resetPage = true) {\n    if (resetPage) {\n      this.page = 1;\n    }\n    // Deep copy is sent, to avoid the reference (source object) to be\n    // accidentally changed.\n    this._searchParameters.next(cloneDeep(this._serializeSearchParameters()));\n  }\n\n  /** Move to the top of the page if you change page */\n  pageChanged() {\n    this.topScroll.nativeElement.scrollIntoView({ behavior: 'smooth' });\n  }\n\n  /**\n   * Change number of items per page value.\n   * @param event - Event, dom event triggered\n   * @param size - number, new page size\n   */\n  changeSize(event: Event, size: number) {\n    event.preventDefault();\n    this.size = size;\n    this._searchParamsHasChanged();\n  }\n\n  /**\n   * Change sorting.\n   * @param sort sort name.\n   */\n  changeSorting(sort: string) {\n    this.sort = sort;\n    this._searchParamsHasChanged();\n  }\n\n\n  /**\n   * Change query text.\n   * @param event - string, new query text\n   */\n  searchByQuery(event: string) {\n    // If empty search is not allowed and query is empty, the search is not processed.\n    if (this.config.allowEmptySearch === false && !event) {\n      this.showEmptySearchMessage = true;\n      return;\n    }\n\n    this.q = event;\n    this._setDefaultSort();\n    this._searchParamsHasChanged();\n\n    // Build aggregations to used.\n    //   This is a combination of `defaultSearchInputFilters` and persistent aggregation filters.\n    const aggregations = new Set(this._extractPersistentAggregationsFilters());\n    this.aggregationsFilters.forEach((aggregation) => aggregations.add(aggregation));\n    this.recordSearchService.setAggregationsFilters(Array.from(aggregations), true);\n  }\n\n  /**\n   * Change type of records.\n   * @param type - resource type name.\n   */\n  changeType(type: string) {\n    this.currentType = type;\n    this._loadConfigurationForType(this.currentType);\n    this.aggregationsFilters = [];\n    this._searchParamsHasChanged();\n    this.recordSearchService.setAggregationsFilters([]);\n  }\n\n  /**\n   * Delete a record by its PID.\n   * @param event - object\n   */\n  deleteRecord(event: { pid: string; type?: string }) {\n    const type = event.type ?? this.currentType;\n    this.recordUiService\n      .deleteRecord(type, event.pid)\n      .pipe(\n        switchMap((result) => {\n          if (result === true) {\n            this.page = 1;\n            return this._getRecords();\n          }\n          return of(null);\n        })\n      )\n      .subscribe((records: Record) => {\n        if (records != null) {\n          this.hits = records.hits;\n          this.spinner.hide();\n        }\n      });\n    // update main counter\n    this.config.total--;\n  }\n\n  /**\n   * Show a modal containing message given in parameter.\n   * @param message - message to display into modal\n   */\n  showDeleteMessage(message: string): void {\n    this.recordUiService.showDeleteMessage(message);\n  }\n\n  /**\n   * Get component view for the current resource type.\n   * @return A component for displaying result item.\n   */\n  getResultItemComponentView() {\n    return this.config.component ? this.config.component : null;\n  }\n\n  /**\n   * Get Export formats for the current resource given by configuration.\n   * @return Array of export format to generate an `export as` button or an empty array.\n   */\n  protected _exportFormats(): any[] {\n    if (!this.config || !this.config.exportFormats) {\n      return [];\n    }\n    return this.config.exportFormats.map((format) => {\n      return {\n        label: format.label,\n        url: this.getExportFormatUrl(format),\n        disabled: !this.canExport(format),\n        disabled_message: this.exportInfoMessage,\n      };\n    });\n  }\n\n  /**\n   * Get export format url.\n   * @param format - export format object\n   * @return formatted url for an export format.\n   */\n  getExportFormatUrl(format: any) {\n    const queryParams = Object.keys(this.activatedRoute.snapshot.queryParams);\n    // TODO: maybe we can use URLSerializer to build query string\n    const baseUrl = format.endpoint ? format.endpoint : this.apiService.getEndpointByType(this._currentIndex());\n    let url = `${baseUrl}?q=${encodeURIComponent(this.q)}&format=${format.format}`;\n\n    // check if max rest result size is disabled\n    if (!format.disableMaxRestResultsSize) {\n      url += `&size=${RecordService.MAX_REST_RESULTS_SIZE}`;\n    }\n    // preFilters\n    if (this.config && this.config.preFilters) {\n      for (const [key, value] of Object.entries(this.config.preFilters)) {\n        // force value to an array\n        const values = !Array.isArray(value) ? [value] : value;\n        values.map((v) => {\n          // We check whether the parameter exists in the current url.\n          // If it does, we don't add the preFilter parameter.\n          if (!queryParams.includes(key)) {\n            url += `&${key}=${v}`;\n          }\n        });\n      }\n    }\n    // aggregations\n    if (this.aggregationsFilters) {\n      this.aggregationsFilters.map((filter) => {\n        filter.values.map((v) => {\n          url += `&${filter.key}=${v}`;\n        });\n      });\n    }\n    return url;\n  }\n\n  /**\n   * Check if a record list can be exported\n   * @param format - export format object\n   * @return Boolean\n   */\n  canExport(format: any): boolean {\n    return Object.hasOwn(format, 'disableMaxRestResultsSize') && format.disableMaxRestResultsSize\n      ? this.total > 0\n      : 0 < this.total && this.total < RecordService.MAX_REST_RESULTS_SIZE;\n  }\n\n  /**\n   * Check if a record can be updated\n   * @param record - object, record to check\n   * @return Observable\n   */\n  canUpdateRecord$(record: object): Observable<ActionStatus> {\n    return this.recordUiService.canUpdateRecord$(record, this.currentType);\n  }\n\n  /**\n   * Check if a record can be deleted\n   * @param record - object, record to check\n   * @return Observable\n   */\n  canDeleteRecord$(record: object): Observable<ActionStatus> {\n    return this.recordUiService.canDeleteRecord$(record, this.currentType);\n  }\n\n  /**\n   * Check if a record can be used\n   * @param record - object, record to check\n   * @return Observable\n   */\n  canUseRecord$(record: object): Observable<ActionStatus> {\n    return this.recordUiService.canUseRecord$(record, this.currentType);\n  }\n\n  /**\n   * Filter the aggregations with given configuration function.\n   * If no configuration is given, return the original aggregations.\n   * @param records - Result records\n   * @return Observable containing aggregations corresponding to actual records.\n   */\n  aggregations$(aggregations: object): Observable<any> {\n    if (this.config.aggregations) {\n      return this.config.aggregations(aggregations);\n    } else {\n      return of(aggregations);\n    }\n  }\n\n  /**\n   * Returns an observable which emits the URL value for given record.\n   * In case record cannot be read, returns null.\n   * @param record - Generate detail URL for this record.\n   * @return Observable emitting detail URL object\n   */\n  resolveDetailUrl$(record: any): Observable<any> {\n    const url = { link: `detail/${record.id}`, external: false };\n\n    if (this.detailUrl) {\n      url.link = this.detailUrl.replace(':type', this._currentIndex()).replace(':pid', record.id);\n      url.external = true;\n    }\n\n    if (!this.config.canRead) {\n      return of(url);\n    }\n\n    return this.recordUiService.canReadRecord$(record, this.currentType).pipe(\n      map((status: ActionStatus) => {\n        if (status.can === false) {\n          return null;\n        }\n\n        return url;\n      })\n    );\n  }\n\n  searchInField(event: ToggleSwitchChangeEvent, path: string): void {\n    this.searchFields = this.searchFields.map((item: SearchField) => {\n      if (item.path ===path) {\n        item.selected = event.checked;\n      }\n      return item;\n    });\n\n    // If query string is specified, search is processed.\n    if (this.q) {\n      this.searchByQuery(this.q);\n    }\n  }\n\n  onChangeSearchFilter(event: IChecked): void {\n    const values = [];\n    if (event.filterKey === 'simple') {\n      values.push(event.checked ? '0' : '1');\n    } else if (event.checked) {\n      values.push(String(event.checked));\n    }\n    this.recordSearchService.updateAggregationFilter(event.filterKey, values);\n  }\n\n  /**\n   * Check if a filter is selected.\n   *\n   * @param filter SearchFilter\n   * @returns true if the given filter is selected.\n   */\n  isFilterActive(filter: SearchFilter): boolean {\n    return this.aggregationsFilters\n      ? this.aggregationsFilters.some(\n          (item: any) => item.key === filter.filter && item.values.includes(String(filter.value))\n        )\n      : false;\n  }\n\n  /**\n   * Load buckets for the given aggregation.\n   * @param event - Object outputted when an aggregation is clicked.\n   */\n  loadAggregationBuckets(event: { key: string; expanded: boolean }): void {\n    // the aggregation is collapsed, buckets are not loaded.\n    if (event.expanded === false) {\n      return;\n    }\n    const aggregation = this.aggregations.find((item: any) => item.key === event.key);\n    // No aggregation found or buckets are already loaded.\n    if (!aggregation || aggregation.loaded) {\n      return;\n    }\n\n    // Get buckets for the aggregation\n    this._getRecords(1).subscribe((records: any) => {\n      this.aggregations$(records.aggregations).subscribe((aggregations: any) => {\n        if (aggregations[event.key]) {\n          this._mapAggregation(aggregation, aggregations[event.key]);\n        }\n        // Required to fire onChange event\n        this.aggregations = [...this.aggregations];\n        this.spinner.hide();\n      });\n    });\n  }\n\n  /**\n   * Search for records.\n   * @param size - number : force the number of records to return. If `null` the default component `size` attribute will be used.\n   */\n  protected _getRecords(size: number = null): Observable<any> {\n    // Build query string\n    const q = this._buildQueryString();\n\n    // Empty search is not allowed and query is empty, search in backend is not\n    // processed.\n    if (this.config.allowEmptySearch === false && !q) {\n      this.showEmptySearchMessage = true;\n      return of({ hits: { hits: [], total: 0 }, aggregations: {} });\n    } else {\n      this.showEmptySearchMessage = false;\n    }\n\n    this.spinner.show();\n    // Check remove filter from preFilters if it is already present in\n    // the aggs filters.\n    const preFilters = {};\n    const aggsKeys = [];\n    this.aggregationsFilters.map((agg) => aggsKeys.push(agg.key));\n    for (const [key, value] of Object.entries(this.config.preFilters || {})) {\n      if (!aggsKeys.includes(key)) {\n        preFilters[key] = value;\n      }\n    }\n    return this.recordService.getRecords(\n      this._currentIndex(),\n      q,\n      this.page,\n      size || this.size,\n      this.aggregationsFilters || [],\n      preFilters,\n      this.config.listHeaders || null,\n      this.sort,\n      this._getFacetsParameter()\n    );\n  }\n\n  /**\n   * Emit new parameters when a search is done.\n   */\n  protected _emitNewParameters() {\n    this.parametersChanged.emit({\n      q: this.q,\n      page: this.page,\n      size: this.size,\n      currentType: this.config.key,\n      aggregationsFilters: this.aggregationsFilters,\n      sort: this.sort,\n    });\n  }\n\n  /**\n   * Get configuration for the current resource type.\n   * @param type Type of resource\n   */\n  protected _loadConfigurationForType(type: string) {\n    const q = this._buildQueryString();\n    this.config = this.recordUiService.getResourceConfig(type);\n    this.recordUiService.canAddRecord$(type).subscribe((result: ActionStatus) => {\n      this.addStatus = result;\n    });\n\n    this._loadSearchFields();\n\n    // Build aggregations.\n    if (this.config.aggregationsOrder) {\n      if (!isObservable(this.config.aggregationsOrder)) {\n        this.config.aggregationsOrder = of(this.config.aggregationsOrder);\n      }\n    } else {\n      this.config.aggregationsOrder = of([]);\n    }\n\n    // reset aggregations\n    this.aggregations = null;\n\n    // Sort options\n    this._setDefaultSort();\n\n    // load search filters\n    this.searchFilters = this.config.searchFilters || [];\n\n    // load export options\n    this.exportOptions = this._exportFormats();\n\n    // Update filters with default search filters only if the q parameter is empty\n    if ((q === null || q.trim().length === 0) && this.config.defaultSearchInputFilters) {\n      this.config.defaultSearchInputFilters.forEach((filter: { key: string; values: any[] }) => {\n        this.recordSearchService.updateAggregationFilter(filter.key, filter.values);\n      });\n    }\n  }\n\n  /**\n   * Get Resource config\n   * @param paramName - Name of parameter\n   * @param defaultValue - Default value is returned if the parameter is not defined\n   * @return A config value or the given default value instead\n   */\n  protected _getResourceConfig(paramName: string, defaultValue: any) {\n    return (paramName in this.config) ? this.config[paramName] : defaultValue;\n  }\n\n  /**\n   * Serialize all the search parameters with JSON.stringify method.\n   * @return The serialized string.\n   */\n  protected _serializeSearchParameters(): SearchParams {\n    return {\n      currentType: this.config.key,\n      index: this._currentIndex(),\n      q: this.q,\n      page: this.page,\n      size: this.size,\n      sort: this.sort,\n      aggregationsFilters: this.aggregationsFilters,\n      searchFields: this.searchFields,\n      searchFilters: this.searchFilters,\n    };\n  }\n\n  /**\n   * Load search fields stored in configuration and assign to them the\n   * `selected` property.\n   *\n   * @returns void\n   */\n  protected _loadSearchFields(): void {\n    // No search fields, reset previous stored and return.\n    if (!this.config.searchFields) {\n      this.searchFields = [];\n      return;\n    }\n\n    // Store search fields.\n    this.searchFields = this.config.searchFields.map((field: SearchField) => {\n      field.label = this.translateService.instant(field.label);\n      if (!field.selected) {\n        field.selected = false;\n      }\n      return field;\n    });\n  }\n\n  /**\n   * Build query string with possibly search fields.\n   *\n   * @return Final query string.\n   */\n  protected _buildQueryString(): string {\n    // If query is empty or no selected fields found, the initial query string\n    // is returned.\n    if (!this.q || this.selectedSearchFields.length === 0) {\n      return this.q;\n    }\n\n    // Loop over select fields and add them to final query string.\n    const queries = [];\n    this.selectedSearchFields.forEach((field: SearchField) => {\n      queries.push(`${field.path}:(${this.q})`);\n    });\n\n    return queries.join(' ');\n  }\n\n  /**\n   * Return the name of the index defined either by the index key or key.\n   *\n   * @return string, current index defined by keys index or key\n   */\n  protected _currentIndex() {\n    if (this.config == null) {\n      return null;\n    }\n    return this.config.index || this.config.key;\n  }\n\n  /**\n   * Get personalized name for current aggregation\n   * @param key - string, aggregation key\n   * @return string or null\n   */\n  protected _aggregationName(key: string): string | null {\n    return this.config.aggregationsName && key in this.config.aggregationsName\n      ? this.config.aggregationsName[key]\n      : null;\n  }\n\n  /**\n   * Extract persistent search filters on current url\n   * @return Array of aggregations filter\n   */\n  protected _extractPersistentAggregationsFilters(): AggregationsFilter[] {\n    const persistent = [];\n    this._flatSearchFilters()\n      .filter((filter) => filter.persistent === true)\n      .forEach((filter: SearchFilter) => {\n        if (Object.hasOwn(this.activatedRoute.snapshot.queryParams, filter.filter)) {\n          const data = this.activatedRoute.snapshot.queryParams[filter.filter];\n          persistent.push({\n            key: filter.filter,\n            values: Array.isArray(data) ? data : [data],\n          });\n        }\n      });\n    return persistent;\n  }\n\n  /**\n   * Make all search filters on same array level\n   * @returns - A filters array\n   */\n  protected _flatSearchFilters(): SearchFilter[] {\n    const flatFilters = [];\n    this.searchFilters.forEach((searchFilter: any) => {\n      if (searchFilter.filters) {\n        searchFilter.filters.forEach((filter: any) => flatFilters.push(filter));\n      } else {\n        flatFilters.push(searchFilter);\n      }\n    });\n    return flatFilters;\n  }\n\n  /**\n   * Map aggregation records data to corresponding aggregation.\n   *\n   * @param aggregation Aggregation object.\n   * @param recordsAggregation Aggregation retrieved from record.\n   */\n  protected _mapAggregation(aggregation: Aggregation, recordsAggregation: any): void {\n    aggregation.doc_count = recordsAggregation.doc_count || null;\n    aggregation.type = recordsAggregation.type || 'terms';\n    aggregation.config = recordsAggregation.config || null;\n    if (!aggregation.name && recordsAggregation.name) {\n      aggregation.name = recordsAggregation.name;\n    }\n    if (recordsAggregation.buckets) {\n      aggregation.value.buckets = recordsAggregation.buckets;\n      if (recordsAggregation.doc_count != null) {\n        aggregation.doc_count = recordsAggregation.doc_count;\n      }\n      aggregation.value.buckets.map((bucket) => this.processBuckets(bucket, aggregation.key));\n    }\n    aggregation.loaded = true;\n  }\n\n  /**\n   * Enrich the bucket with several properties: indeterminate, parent, aggregationKey.\n   *\n   * @param bucket elastic bucket to process\n   * @param aggregationKey bucket parent key\n   * @returns the indeterminate state of the bucket\n   */\n  processBuckets(bucket, aggregationKey): boolean {\n    // checkbox indeterminate state\n    bucket.indeterminate = false;\n    bucket.aggregationKey = aggregationKey;\n    for (const k of Object.keys(bucket).filter((key) => bucket[key].buckets)) {\n      for (const childBucket of bucket[k].buckets) {\n        // store the parent: useful to remove parent filters\n        childBucket.parent = bucket;\n        // store the aggregation key as we re-organize the bucket structure\n        bucket.indeterminate ||= this.recordSearchService.hasFilter(k, childBucket.key);\n        // do not change the order of the boolean expression to force processBucket over all\n        // recursion steps\n        bucket.indeterminate = this.processBuckets(childBucket, k) || bucket.indeterminate;\n      }\n    }\n    return bucket.indeterminate;\n  }\n\n  /**\n   * Compile facets keys to get only 'included' facets or having a filter selected.\n   * @returns List of facets.\n   */\n  protected _getFacetsParameter(): string[] {\n    const facets = [];\n    this.aggregations.forEach((agg: any) => {\n      if (\n        agg.included === true ||\n        agg.expanded ||\n        this.aggregationsFilters.some((filter: any) => filter.key === agg.key)\n      ) {\n        facets.push(agg.key);\n      }\n    });\n    return facets;\n  }\n\n  /** Set the default sort. */\n  protected _setDefaultSort(): void {\n    if (this.sort != null) {\n      return;\n    }\n    if (this.config.sortOptions) {\n      const defaultSortValue = this.q ? 'defaultQuery' : 'defaultNoQuery';\n      this.config.sortOptions.forEach((option: SortOption) => {\n        if (option[defaultSortValue] === true) {\n          this.sort = option.value;\n        }\n      });\n    }\n  }\n\n  /**\n   * Show the filter's section\n   * @param searchFilterSection - Collection of filter\n   * @returns true if the filter's section is show\n   */\n  showFilterSection(searchFilterSection: SearchFilterSection): boolean {\n    return searchFilterSection.filters.some((filter: SearchFilter) => {\n      return this.config.allowEmptySearch ? true : (this.q && filter.showIfQuery === true) || !filter?.showIfQuery;\n    });\n  }\n\n  /**\n   * Show the filter\n   * @param searchFilter - search Filter\n   * @returns true if the filter is show\n   */\n  showFilter(searchFilter: SearchFilter) {\n    if (this.config.allowEmptySearch) {\n      return true;\n    }\n    if (!this.q) {\n      return !(searchFilter.showIfQuery === true);\n    } else {\n      return searchFilter.showIfQuery === true || !searchFilter?.showIfQuery;\n    }\n  }\n\n  paginatorChange(event: ChangeEvent): void {\n    this.page = ++event.page;\n    this.size = event.rows;\n    this._searchParamsHasChanged(false);\n  }\n\n  /**\n   * Remove filter.\n   *\n   * @param filter - the filter to remove\n   */\n  removeFilter(filter: any): void {\n    this.recordSearchService.removeFilter(filter.aggregationKey, filter.key, true);\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2019-2024 RERO\n  Copyright (C) 2019-2023 UCLouvain\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n@if (error) {\n<ng-core-error [error]=\"error\"></ng-core-error>\n} @else {\n<span #topScrollAnchor></span>\n<ng-core-search-tabs [types]=\"availableTypes\" (onChangeType)=\"changeType($event)\"/>\n<div class=\"core:flex core:flex-col core:gap-2\">\n  @if (availableTypes.length === 1 && showLabel) {\n  <h5>{{ availableTypes[0].label | translate }}</h5>\n  }\n  <ng-content select=\"[header]\"></ng-content>\n  <div class=\"core:flex core:gap-2\">\n    @if (showSearchInput) {\n    <ng-core-search-input\n      class=\"core:grow\"\n      [placeholder]=\"'search' | translate | ucfirst\"\n      [searchText]=\"q\"\n      [displayLabel]=\"false\"\n      (search)=\"searchByQuery($event)\"\n      [focus]=\"true\"\n    />\n    }\n    <ng-content select=\"[afterInputSearch]\"/>\n  </div>\n  @if (loaded && hasNoRecord) {\n    <p-message severity=\"info\">\n      {{ emptyRecordMessage }}\n    </p-message>\n    @if (adminMode.can && addStatus.can) {\n    <p-button\n      id=\"search-add-button\"\n      [label]=\"'Add' | translate\"\n      icon=\"fa fa-plus\"\n      [routerLink]=\"addStatus.routerLink || ['new']\"\n    />\n    }\n  } @else {\n  <div class=\"core:flex core:items-stretch core:w-full\">\n    @if (resultsText$ | async; as resultsText) {\n    <div class=\"core:flex core:items-center core:w-full\">\n      <strong>{{ resultsText }}</strong>\n    </div>\n    }\n    <div class=\"core:flex core:items-center core:justify-end core:w-full\">\n      @if (adminMode.can && addStatus.can) {\n      <p-button\n        id=\"search-add-button\"\n        [label]=\"'Add' | translate\"\n        icon=\"fa fa-plus\"\n        [routerLink]=\"addStatus.routerLink || ['new']\"\n      />\n      }\n      <!-- Sorting -->\n      @if (config?.sortOptions?.length > 0) {\n      <ng-core-menu-sort class=\"core:ml-1\" [selectedValue]=\"selectedSortValue\" [config]=\"config.sortOptions\" (onChange)=\"changeSorting($event)\" />\n      }\n      <!-- EXPORT BUTTON -->\n      <ng-core-export-button class=\"core:ml-1\"[exportOptions]=\"exportOptions\"/>\n      <!-- END EXPORT BUTTON -->\n    </div>\n  </div>\n  <ng-content select=\"[beforeResult]\"></ng-content>\n  <div class=\"core:grid core:grid-cols-12 core:gap-4\">\n    <ng-core-list-filters\n      [aggregations]=\"aggregations\"\n      class=\"core:col-span-12\"\n      [aggregationsFilters]=\"aggregationsFilters\"\n      [searchFilters]=\"searchFilters\"\n      (remove)=\"removeFilter($event)\"\n    />\n    <ng-content select=\"[top-search-result]\"></ng-content>\n    @if ((aggregations && aggregations.length) || searchFields.length > 0 || searchFilters.length > 0) {\n    <div class=\"core:md:col-span-5 core:lg:col-span-3 core:col-span-12\">\n      @if (searchFields.length > 0 && q) {\n        <div class=\"core:mb-4\">\n          @for (searchField of searchFields; track $index) {\n            <div class=\"core:flex core:gap-2 core:items-center\">\n              <p-toggleswitch (onChange)=\"searchInField($event, searchField.path)\" />\n              <span>{{ searchField.label | translate }}</span>\n            </div>\n          }\n        </div>\n      }\n\n      <ng-core-search-filters\n        [searchFilters]=\"searchFilters\"\n        [config]=\"config\"\n        [query]=\"q\"\n        styleClassSection=\"core:my-2\"\n        (onChange)=\"onChangeSearchFilter($event)\"\n      />\n\n      @if (!showEmptySearchMessage || q) {\n      <ng-content select=\"[top-facets]\"/>\n      @for (item of aggregations; track item.key) {\n      <div>\n        @if (!aggregationsToHide.includes(item.key)) {\n        <ng-core-record-search-aggregation\n          [aggregation]=\"item\"\n          [aggregationsFilters]=\"aggregationsFilters\"\n          (aggregationClicked)=\"loadAggregationBuckets($event)\"\n        />\n        }\n      </div>\n      } }\n    </div>\n    }\n    <div id=\"recordlist\" class=\"core:md:col-span-7 core:lg:col-span-9 core:col-span-12\">\n      @if (showEmptySearchMessage) {\n      <p-message severity=\"info\">\n        {{ 'Enter a query to get results.' | translate }}\n      </p-message>\n      }\n      <ng-content select=\"[top-result]\"/>\n      <p-dataView [value]=\"records\" [emptyMessage]=\"' '\">\n        <ng-template #list let-records>\n          <ul class=\"core:list-none\">\n            @for (record of records; track record.metadata.pid; let first = $first) {\n            <li class=\"core:py-2 core:md:py-6\" [ngClass]=\"{ 'core:border-t-1 core:border-surface': !first }\">\n              <ng-core-record-search-result\n                [adminMode]=\"adminMode\"\n                [record]=\"record\"\n                [type]=\"currentType\"\n                [itemViewComponent]=\"getResultItemComponentView()\"\n                [canUpdate$]=\"canUpdateRecord$(record)\"\n                [canDelete$]=\"canDeleteRecord$(record)\"\n                [canUse$]=\"canUseRecord$(record)\"\n                [detailUrl$]=\"resolveDetailUrl$(record)\"\n                (deletedRecord)=\"deleteRecord($event)\"\n                (deleteMessageEvent)=\"showDeleteMessage($event)\"\n              />\n            </li>\n            }\n          </ul>\n        </ng-template>\n      </p-dataView>\n\n      <ng-core-paginator\n        [alwaysShow]=\"showPagination\"\n        [currentPage]=\"currentPage\"\n        [pageLinkSize]=\"paginationMaxSize\"\n        [totalRecords]=\"total\"\n        [rows]=\"size\"\n        [rowsPerPageOptions]=\"config?.pagination?.rowsPerPageOptions || [10, 20, 50]\"\n        [showCurrentPageReport]=\"config?.pagination?.pageReport || false\"\n        [showFirstLastIcon]=\"paginationBoundaryLinks\"\n        (rowPageChange)=\"paginatorChange($event)\"\n      />\n      <ng-content select=\"[footer-result]\"/>\n      <ng-content/>\n    </div>\n  </div>\n  <ng-content select=\"[footer-search-result]\"/>\n  }\n</div>\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { MenuItem } from 'primeng/api';\nimport { combineLatest, Subscription } from 'rxjs';\nimport { ActionStatus } from '../action-status';\nimport { RecordUiService } from '../record-ui.service';\nimport { RecordSearchService } from './record-search.service';\nimport { JSONSchema7 } from '../editor/utils';\n\n@Component({\n    selector: 'ng-core-record-search-page',\n    templateUrl: './record-search-page.component.html',\n    standalone: false\n})\nexport class RecordSearchPageComponent implements OnInit, OnDestroy {\n\n  protected route: ActivatedRoute = inject(ActivatedRoute);\n  protected router: Router = inject(Router);\n  protected recordSearchService: RecordSearchService = inject(RecordSearchService);\n  protected recordUiService: RecordUiService = inject(RecordUiService)\n\n  /**\n   * Current selected resource type\n   */\n  currentType = 'documents';\n\n  /**\n   * URL to notice detail\n   */\n  detailUrl: string = null;\n\n  /**\n   * Display search input\n   */\n  showSearchInput = true;\n\n  /**\n   * Admin mode (edit, remove, add, ...)\n   */\n  adminMode: ActionStatus = {\n    can: true,\n    message: ''\n  };\n\n  /**\n   * Define the current record's page\n   */\n  page = 1;\n\n  /**\n   * Define the number of records per page\n   */\n  size = 10;\n\n  /**\n   * Search query\n   */\n  q = '';\n\n  /**\n   * Define the sort order of resulting records. It takes a string value\n   * representing the property which is used to sort the records.\n   * If a minus is put before the value, the sort is reversed.\n   */\n  sort: string = null;\n\n  /**\n   * Types of resources available\n   */\n  types: {\n    key: string,\n    label: string,\n    index?: string,\n    component?: Component,\n    total?: number,\n    canAdd?: any,\n    canUpdate?: any,\n    canDelete?: any,\n    canRead?: any,\n    permissions?: any,\n    aggregations?: any,\n    preFilters?: any,\n    listHeaders?: any,\n    itemHeaders?: any,\n    aggregationsName?: any,\n    aggregationsOrder?: string[],\n    aggregationsExpand?: string[] | (() => string[]),\n    aggregationsBucketSize?: number,\n    pagination?: {\n      boundaryLinks?: boolean,\n      maxSize?: number,\n      pageReport?: boolean,\n      rowsPerPageOptions?: number[],\n    },\n    formFieldMap?: (field: FormlyFieldConfig, jsonSchema: JSONSchema7) => FormlyFieldConfig\n  }[] = [{ key: 'documents', label: 'Documents' }];\n\n  /**\n   * Subscription to route parameters observables\n   */\n  private routeParametersSubscription: Subscription;\n\n  /**\n   * Component initialization.\n   *\n   * Subscribes to changes of route parameters and query parameters for\n   * updating the search parameters and sending them to child component\n   * (RecordSearchComponent).\n   */\n  ngOnInit() {\n    this.routeParametersSubscription = combineLatest([this.route.paramMap, this.route.queryParamMap]).subscribe(\n      ([paramMap, queryParams]) => {\n        // store current type of resource\n        this.currentType = paramMap.get('type');\n        this.recordUiService.types = this.route.snapshot.data.types;\n\n        const config = this.recordUiService.getResourceConfig(this.currentType);\n\n        // Stores query parameters\n        this.q = queryParams.get('q') || '';\n        this.size = queryParams.get('size') ? +queryParams.get('size') : 10;\n        this.page = queryParams.get('page') ? +queryParams.get('page') : 1;\n        this._setDefaultSort(config, queryParams.get('sort'));\n\n        // loops over all aggregations filters and stores them.\n        const aggregationsFilters = [];\n        queryParams.keys.forEach((key: string) => {\n          if (['q', 'page', 'size', 'sort'].includes(key) === false) {\n            const values = queryParams.getAll(key);\n            aggregationsFilters.push({ key, values });\n          }\n        });\n\n        // Add filter parameter value\n        if (config.searchFilters) {\n          config.searchFilters.forEach((filter: any) => {\n            if (queryParams.get(filter.filter) === null && filter.disabledValue) {\n              aggregationsFilters.push({ key: filter.filter, values: [filter.disabledValue] });\n            }\n          });\n        }\n        // update the facet filters given the URL params\n        this.recordSearchService.setAggregationsFilters(aggregationsFilters);\n      }\n    );\n\n    // Store configuration data\n    const { data } = this.route.snapshot;\n    if (data.types) {\n      this.types = data.types;\n    }\n\n    if (data.showSearchInput != null) {\n      this.showSearchInput = data.showSearchInput;\n    }\n\n    if (data.adminMode) {\n      data.adminMode().subscribe((as: ActionStatus) => this.adminMode = as);\n    }\n\n    if (data.detailUrl) {\n      this.detailUrl = data.detailUrl;\n    }\n  }\n\n  /**\n   * Component destruction.\n   *\n   * Unsubscribes from the observables of the route parameters.\n   */\n  ngOnDestroy() {\n    this.routeParametersSubscription.unsubscribe();\n  }\n\n  /**\n   * Update URL accordingly to parameters given.\n   * @param parameters Parameters to put in url or query string\n   */\n  updateUrl(parameters: any) {\n    const queryParams: any = {\n      q: parameters.q,\n      page: parameters.page,\n      size: parameters.size,\n      sort: parameters.sort\n    };\n    for (const filter of parameters.aggregationsFilters) {\n      // We need to loop over each value and insert it on beginning of the array\n      // instead of assign values directly. Otherwise, angular router doesn't\n      // detect the changes. It's certainly a bug in angular.\n      queryParams[filter.key] = [];\n      for (const value of filter.values) {\n        queryParams[filter.key].unshift(value);\n      }\n    }\n    this.router.navigate([this.getCurrentUrl(parameters.currentType)], { queryParams, relativeTo: this.route });\n  }\n\n  /**\n   * Return current URL after removing query parameters and updating resource type.\n   *\n   * @returns Updated url without query string\n   */\n  protected getCurrentUrl(type: string): string {\n    const segments = this.router.parseUrl(this.router.url).root.children.primary.segments.map(it => it.path);\n    segments[segments.length - 1] = type;\n\n    return '/' + segments.join('/');\n  }\n\n  /**\n   * Sets the default sort for resource type.\n   *\n   * @param config Configuration object.\n   */\n  private _setDefaultSort(config: any, sortParam: string) {\n    if (sortParam) {\n      this.sort = sortParam;\n      return;\n    }\n\n    this.sort = null;\n\n    if (!config.sortOptions) {\n      return;\n    }\n\n    const defaultSortValue = this.q ? 'defaultQuery' : 'defaultNoQuery';\n    config.sortOptions.forEach((option: MenuItem) => {\n      if (option[defaultSortValue] === true) {\n        this.sort = option.value;\n      }\n    });\n  }\n}\n","<!--\n  RERO angular core\n  Copyright (C) 2020 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<ng-core-record-search class=\"core:my-1\" [adminMode]=\"adminMode\" [currentType]=\"currentType\" [types]=\"types\" [detailUrl]=\"detailUrl\"\n  [showSearchInput]=\"showSearchInput\" [q]=\"q\" [page]=\"page\" [size]=\"size\" [sort]=\"sort\"\n  (parametersChanged)=\"updateUrl($event)\"/>\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { NgModule } from '@angular/core';\nimport { ResolveFn, RouterModule, Routes } from '@angular/router';\nimport { DetailComponent } from './detail/detail.component';\nimport { EditorComponent } from './editor/editor.component';\nimport { RecordSearchPageComponent } from './search/record-search-page.component';\n\nexport const typeResolver: ResolveFn<string> = (route) => {\n  return route.params[\"type\"];\n};\n\nconst routes: Routes = [\n  {\n    path: ':type',\n    title: typeResolver,\n    component: RecordSearchPageComponent\n  },\n  {\n    path: ':type/detail/:pid',\n    title: typeResolver,\n    component: DetailComponent\n  },\n  {\n    path: ':type/edit/:pid',\n    component: EditorComponent\n  },\n  {\n    path: ':type/new',\n    title: typeResolver,\n    component: EditorComponent\n  }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class RecordRoutingModule {}\n","/*\n * RERO angular core\n * Copyright (C) 2024-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { AfterViewInit, Component, HostListener, inject, input, output, ViewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { OverlayOptions } from 'primeng/api';\nimport { AutoComplete, AutoCompleteCompleteEvent, AutoCompleteDropdownClickEvent, AutoCompleteSelectEvent } from 'primeng/autocomplete';\nimport { DomHandler } from 'primeng/dom';\nimport { combineLatest, map, Observable, Subject, switchMap } from 'rxjs';\nimport { SanitizePipe } from '../../pipe/sanitize.pipe';\nimport { CONFIG } from '../../utils/config';\nimport { removeChars } from '../../utils/utils';\nimport { RecordService } from '../record.service';\n\nexport interface IRecordType {\n  field: string;\n  groupLabel?: string;\n  index: string;\n  maxSuggestions?: number;\n  processSuggestions: Function;\n  preFilters?: any;\n  queryParams?: object;\n  sort?: string;\n};\n\nexport interface IAutoComplete {\n  iconClass?: string;\n  index: string;\n  label: string;\n  originalLabel?: string;\n  value?: string;\n  [key: string]: string;\n}\n\n@Component({\n    selector: 'ng-core-search-autocomplete',\n    template: `\n    <p-autoComplete\n      #autoComplete\n      [overlayOptions]=\"overlayOptions\"\n      dropdownIcon=\"fa fa-search\"\n      [dropdown]=\"true\"\n      dropdownMode=\"none\"\n      [styleClass]=\"styleClass()\"\n      [inputStyleClass]=\"inputStyleClass()\"\n      [delay]=\"delay()\"\n      [group]=\"group\"\n      [minLength]=\"minLength()\"\n      [placeholder]=\"placeholder()\"\n      [ngModel]=\"value()\"\n      (ngModelChange)=\"currentValue = sanitize($event)\"\n      [scrollHeight]=\"scrollHeight()\"\n      [suggestions]=\"suggestions()\"\n      (completeMethod)=\"setSuggestionQuery($event)\"\n      (onSelect)=\"onSelectValue($event)\"\n      (onKeyUp)=\"search($event)\"\n      (onDropdownClick)=\"buttonClick($event)\"\n      [pAutoFocus]=\"true\"\n    >\n    <ng-template let-item #group>\n      <div class=\"core:flex core:items-center\" [ngClass]=\"groupClass()\" [innerHTML]=\"item.label\"></div>\n    </ng-template>\n    <ng-template let-item #item>\n        @if(item.iconClass) {\n          <i [ngClass]=\"item.iconClass\"></i>&nbsp;\n        }\n        <span [innerHTML]=\"item.label\" [title]=\"item.originalLabel ? item.originalLabel : ''\"></span>\n    </ng-template>\n    </p-autoComplete>\n  `,\n    standalone: false\n})\nexport class SearchAutocompleteComponent implements AfterViewInit{\n\n  protected recordService: RecordService = inject(RecordService);\n  protected sanitizePipe: SanitizePipe = inject(SanitizePipe);\n\n  // Input\n  delay = input<number>(300);\n  groupClass = input<string>('core:text-gray-400');\n  inputStyleClass = input<string>('core:w-full');\n  minLength = input<number>(3);\n  placeholder = input(null);\n  recordTypes = input.required<IRecordType[]>();\n  scrollHeight = input<string>(CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT);\n  styleClass = input<string>('core:w-full');\n  value = input<string>();\n\n  // Output\n  onSearch = output<string>();\n\n  // Current value\n  currentValue = '';\n\n  // Whether to display options as grouped when nested options are provided.\n  group = false;\n  overlayOptions: OverlayOptions = {};\n\n  @ViewChild('autoComplete') autoComplete: AutoComplete;\n\n  // User Query\n  private query = new Subject<string>();\n\n  buttonClick(event: AutoCompleteDropdownClickEvent) {\n    this.onSearch.emit(this.currentValue);\n  }\n\n  suggestions = toSignal(this.query.pipe(\n    switchMap((query: string) => this.getSuggestions(query))\n  ), { initialValue: []});\n\n  setSuggestionQuery(event: AutoCompleteCompleteEvent): void {\n    this.query.next(event.query);\n  }\n\n  onSelectValue(event: AutoCompleteSelectEvent) {\n    this.onSearch.emit(event.value);\n  }\n\n  search(event: KeyboardEvent) {\n    if(event?.key === 'Enter') {\n      this.onSearch.emit(this.currentValue);\n    }\n  }\n\n  calculateWidth() {\n    let width = 200;\n    if (this.autoComplete) {\n      width = DomHandler.getOuterWidth(this.autoComplete.el.nativeElement);\n    }\n    this.overlayOptions = {\n      contentStyle: { width: width * 1 + 'px' }\n    };\n  }\n\n  @HostListener('window:resize')\n  onResize() {\n    this.calculateWidth();\n  }\n\n  ngAfterViewInit() {\n    this.calculateWidth();\n  }\n\n  sanitize(value: string): string {\n    return this.sanitizePipe.transform(value);\n  }\n\n  private getSuggestions(query: string): any {\n    return combineLatest(this.prepareQuery(query)).pipe(\n      map((data: IAutoComplete[]) => {\n        if (data.length > 1) {\n          this.group = true;\n          const suggestions = [];\n          data.forEach((hits: any) => {\n            if (hits.length > 0) {\n              const selectedRecordType = this.recordTypes().find((type: IRecordType) => type.index === hits[0].index);\n              if (!('groupLabel' in selectedRecordType)) {\n                throw new Error('Missing groupLabel definition');\n              }\n              suggestions.push({\n                label: selectedRecordType.groupLabel,\n                items: hits\n              });\n            }\n          });\n          return suggestions;\n        } else {\n          return data[0];\n        }\n      })\n    );\n  }\n\n  private prepareQuery(query: string): Observable<any>[] {\n    query = removeChars(query);\n    const suggestions: Observable<any>[] = [];\n    this.recordTypes().forEach((recordType: IRecordType) => {\n      const queryParams = [];\n      if ('queryParams' in recordType) {\n        Object.keys(recordType.queryParams).forEach(key => {\n          queryParams.push(`${key}:${recordType.queryParams[key].replace(':', '\\\\:')}`);\n        });\n      }\n      let queryRecord = `${recordType.field}:${query}`;\n      if (queryParams.length > 0) {\n        queryRecord += ` AND ${queryParams.join(' AND ')}`;\n      }\n      suggestions.push(this.recordService.getRecords(\n        recordType.index,\n        queryRecord,\n        1,\n        recordType.maxSuggestions || 10,\n        [],\n        recordType.preFilters || {},\n        null,\n        recordType.sort || null,\n      ).pipe(\n        map((data: any) => recordType.processSuggestions(data, query))\n      ));\n    });\n\n    return suggestions;\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { Component, OnInit, inject, input, output, signal } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { SearchField } from '../../record';\nimport { MenuItem } from 'primeng/api';\n\nexport interface searchFieldEvent {\n  action: 'select' | 'reset';\n  field?: SearchField;\n};\n\n@Component({\n    selector: 'ng-core-search-fields',\n    templateUrl: './search-fields.component.html',\n    standalone: false\n})\nexport class SearchFieldsComponent implements OnInit {\n\n  protected translate: TranslateService = inject(TranslateService);\n\n  // Input\n  searchLabel = input<string>('Search in');\n  resetLabel = input<string>('Reset');\n  searchFields = input.required<SearchField[]>();\n  withResetAction = input<boolean>(true);\n\n  // Output\n  onChange = output<searchFieldEvent>();\n\n  // Field label\n  label = signal(this.processLabel());\n\n  // Field items\n  items: MenuItem[] = [];\n\n  /** onInit hook */\n  ngOnInit(): void {\n    this.searchFields().map((field: any) => {\n      this.items.push({\n        label: field.label,\n        command: () => this.select(field),\n      });\n    });\n    if (this.withResetAction()) {\n      this.items.push({ separator: true });\n      this.items.push({\n        label: this.translate.instant(this.resetLabel()),\n        command: () => this.reset(),\n      });\n    }\n    this.label.set(this.processLabel());\n  }\n\n  /**\n   * Select a field from the menu\n   * @param field - SearchField\n   */\n  select(field: SearchField): void {\n    this.label.set(this.processLabel(field.label));\n    this.onChange.emit({ action: 'select', field: field });\n  }\n\n  /** Reset search field */\n  reset(): void {\n    this.label.set(this.processLabel());\n    this.onChange.emit({ action: 'reset' });\n  }\n\n  /**\n   * Label formatting\n   * @param label - The name of the field\n   * @returns string, The formatted label\n   */\n  private processLabel(label = '…'): string {\n    return this.translate.instant(this.searchLabel()) + ' ' + label;\n  }\n}\n","\n<!--\n  RERO angular core\n  Copyright (C) 2024 RERO\n\n  This program is free software: you can redistribute it and/or modify\n  it under the terms of the GNU Affero General Public License as published by\n  the Free Software Foundation, version 3 of the License.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n  GNU Affero General Public License for more details.\n\n  You should have received a copy of the GNU Affero General Public License\n  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n-->\n<p-splitButton [label]=\"label()\" [model]=\"items\" outlined />\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FORMLY_CONFIG, FormlyModule } from '@ngx-formly/core';\nimport { FormlySelectModule } from '@ngx-formly/core/select';\nimport { FormlyPrimeNGModule } from '@ngx-formly/primeng';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { DataViewModule } from 'primeng/dataview';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { CoreModule } from '../core.module';\nimport { GetRecordPipe } from '../pipe/get-record.pipe';\nimport { emailValidator } from '../validator/email.validator';\nimport { DetailButtonComponent } from './detail/detail-button/detail-button.component';\nimport { DetailComponent } from './detail/detail.component';\nimport { RecordDetailDirective } from './detail/detail.directive';\nimport { JsonComponent as DetailJsonComponent } from './detail/view/json.component';\nimport { EditorComponent } from './editor/editor.component';\nimport { registerNgCoreFormlyExtension } from './editor/extensions';\nimport { NgCoreFormlyDatePickerModule } from './editor/formly/primeng/date-picker/date-picker';\nimport { NgCoreFormlyInputModule } from './editor/formly/primeng/input/src/input.module';\nimport { NgCoreFormlyFieldInput } from './editor/formly/primeng/input/src/input.type';\nimport { NgCoreFormlyMultiCheckboxModule } from './editor/formly/primeng/multi-checkbox/multi-checkbox';\nimport { NgCoreFormlyMultiSelectModule } from './editor/formly/primeng/multi-select/multi-select';\nimport { NgCoreFormlyRemoteAutocompleteModule } from './editor/formly/primeng/remote-autocomplete/remote-autocomplete';\nimport { NgCoreFormlySelectModule } from './editor/formly/primeng/select/select';\nimport { NgCoreFormlyTreeSelectModule } from './editor/formly/primeng/tree-select/tree-select';\nimport { ArrayTypeComponent } from './editor/type/array-type/array-type.component';\nimport { MarkdownFieldComponent } from './editor/type/markdown/markdown.component';\nimport { MultiSchemaTypeComponent } from './editor/type/multischema/multischema.component';\nimport { ObjectTypeComponent } from './editor/type/object-type/object-type.component';\nimport { PasswordGeneratorTypeComponent } from './editor/type/password-generator-type.component';\nimport { RadioButtonComponent } from './editor/type/radio-button.component';\nimport { SwitchComponent } from './editor/type/switch/switch.component';\nimport { TextareaFieldComponent } from './editor/type/textarea/textarea.component';\nimport { AddFieldEditorComponent } from './editor/widgets/add-field-editor/add-field-editor.component';\nimport { DropdownLabelEditorComponent } from './editor/widgets/dropdown-label-editor/dropdown-label-editor.component';\nimport { LabelComponent } from './editor/widgets/label/label.component';\nimport { LoadTemplateFormComponent } from './editor/widgets/load-template-form/load-template-form.component';\nimport { SaveTemplateFormComponent } from './editor/widgets/save-template-form/save-template-form.component';\nimport { CardWrapperComponent } from './editor/wrappers/card-wrapper/card-wrapper.component';\nimport { FormFieldWrapperComponent } from './editor/wrappers/form-field-wrapper/form-field-wrapper.component';\nimport { HideWrapperComponent } from './editor/wrappers/hide-wrapper/hide-wrapper.component';\nimport { ExportButtonComponent } from './export-button/export-button.component';\nimport { RecordRoutingModule } from './record-routing.module';\nimport { RecordService } from './record.service';\nimport { SearchAutocompleteComponent } from './search-autocomplete/search-autocomplete.component';\nimport { RecordSearchAggregationComponent } from './search/aggregation/aggregation.component';\nimport { BucketsComponent } from './search/aggregation/buckets/buckets.component';\nimport { AggregationDateRangeComponent } from './search/aggregation/date-range/date-range.component';\nimport { ListFiltersComponent } from './search/aggregation/list-filters/list-filters.component';\nimport { BucketNamePipe } from './search/aggregation/pipe/bucket-name.pipe';\nimport { AggregationSliderComponent } from './search/aggregation/slider/slider.component';\nimport { MenuSortComponent } from './search/menu-sort/menu-sort.component';\nimport { PaginatorComponent } from './search/paginator/paginator.component';\nimport { RecordSearchPageComponent } from './search/record-search-page.component';\nimport { RecordSearchComponent } from './search/record-search.component';\nimport { JsonComponent } from './search/result/item/json.component';\nimport { RecordSearchResultComponent } from './search/result/record-search-result.component';\nimport { SearchFieldsComponent } from './search/search-fields/search-fields.component';\nimport { SearchFiltersComponent } from './search/search-filters/search-filters.component';\nimport { SearchTabsComponent } from './search/search-tabs/search-tabs.component';\n\n@NgModule({\n    declarations: [\n        RecordSearchPageComponent,\n        RecordSearchComponent,\n        RecordSearchResultComponent,\n        RecordSearchAggregationComponent,\n        JsonComponent,\n        DetailComponent,\n        RecordDetailDirective,\n        DetailJsonComponent,\n        GetRecordPipe,\n        EditorComponent,\n        AddFieldEditorComponent,\n        DropdownLabelEditorComponent,\n        ArrayTypeComponent,\n        ObjectTypeComponent,\n        SwitchComponent,\n        MultiSchemaTypeComponent,\n        BucketsComponent,\n        FormFieldWrapperComponent,\n        HideWrapperComponent,\n        AggregationSliderComponent,\n        LoadTemplateFormComponent,\n        SaveTemplateFormComponent,\n        CardWrapperComponent,\n        LabelComponent,\n        TextareaFieldComponent,\n        MarkdownFieldComponent,\n        AggregationDateRangeComponent,\n        ExportButtonComponent,\n        ListFiltersComponent,\n        BucketNamePipe,\n        PasswordGeneratorTypeComponent,\n        DetailButtonComponent,\n        RadioButtonComponent,\n        PaginatorComponent,\n        MenuSortComponent,\n        SearchFiltersComponent,\n        SearchFieldsComponent,\n        SearchTabsComponent,\n        SearchAutocompleteComponent\n    ],\n    imports: [\n        // NOTE : BrowserAnimationModule **should** be include in application core module.\n        // BrowserAnimationsModule,\n        CoreModule,\n        FormsModule,\n        ReactiveFormsModule,\n        RecordRoutingModule,\n        DatePickerModule,\n        DataViewModule,\n        ClipboardModule,\n        RadioButtonModule,\n        AutoCompleteModule,\n        FormlySelectModule,\n        FormlyModule.forRoot({\n            extensions: [\n                { name: 'email', extension: { prePopulate: emailValidator } }\n            ],\n            extras: {\n                checkExpressionOn: 'changeDetectionCheck',\n                resetFieldOnHide: true\n            },\n            types: [\n                { name: 'input', component: NgCoreFormlyFieldInput },\n                { name: 'boolean', component: SwitchComponent },\n                { name: 'enum', extends: 'select' },\n                { name: 'array', component: ArrayTypeComponent, wrappers: ['card'] },\n                { name: 'object', component: ObjectTypeComponent, wrappers: ['card'] },\n                { name: 'multischema', component: MultiSchemaTypeComponent},\n                { name: 'textarea', component: TextareaFieldComponent },\n                { name: 'markdown', component: MarkdownFieldComponent },\n                { name: 'passwordGenerator', component: PasswordGeneratorTypeComponent },\n                { name: 'radioButton', component: RadioButtonComponent },\n            ],\n            wrappers: [\n                { name: 'form-field', component: FormFieldWrapperComponent },\n                { name: 'hide', component: HideWrapperComponent },\n                { name: 'card', component: CardWrapperComponent }\n            ]\n        }),\n        FormlyPrimeNGModule,\n        NgCoreFormlyDatePickerModule,\n        NgCoreFormlyInputModule,\n        NgCoreFormlyMultiCheckboxModule,\n        NgCoreFormlyMultiSelectModule,\n        NgCoreFormlyRemoteAutocompleteModule,\n        NgCoreFormlySelectModule,\n        NgCoreFormlyTreeSelectModule,\n    ],\n    exports: [\n        RecordSearchComponent,\n        GetRecordPipe,\n        CoreModule,\n        EditorComponent,\n        FormlyModule,\n        FormlyPrimeNGModule,\n        FormlySelectModule,\n        ExportButtonComponent,\n        DetailButtonComponent,\n        RecordDetailDirective,\n        ListFiltersComponent,\n        RecordSearchAggregationComponent,\n        SearchFiltersComponent,\n        SearchFieldsComponent,\n        SearchAutocompleteComponent,\n        NgCoreFormlyDatePickerModule,\n        NgCoreFormlyInputModule,\n        NgCoreFormlyMultiCheckboxModule,\n        NgCoreFormlyRemoteAutocompleteModule,\n        NgCoreFormlySelectModule,\n        MenuSortComponent,\n        NgCoreFormlyTreeSelectModule,\n        SearchTabsComponent,\n        PaginatorComponent\n    ],\n    providers: [\n        {\n            provide: FORMLY_CONFIG,\n            multi: true,\n            useFactory: registerNgCoreFormlyExtension,\n            deps: [TranslateService, RecordService]\n        }\n    ]\n})\nexport class RecordModule { }\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\n\n/**\n * Interface representing a result item in search.\n */\nexport interface ResultItem {\n  // Record data.\n  record: any;\n\n  // Type of resource.\n  type: string;\n\n  // Object containing info about the link to detail.\n  detailUrl: { link: string, external: boolean };\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\nimport { CoreConfigService } from '../core-config.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CryptoJsService {\n\n  protected coreConfigService: CoreConfigService = inject(CoreConfigService);\n\n  encrypt(value: string) {\n    const _key = this.secretPassphrase();\n    return CryptoJS.AES.encrypt(value, _key, { iv: _key });\n  }\n\n  decrypt(value: string) {\n    const _key = this.secretPassphrase();\n    return CryptoJS.AES.decrypt(value, _key, { iv: _key }).toString(CryptoJS.enc.Utf8);\n  }\n\n  private secretPassphrase() {\n    return CryptoJS.enc.Utf8.parse(this.coreConfigService.secretPassphrase);\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CryptoJsService } from './crypto-js.service';\n\n/**\n * Service for managing data saved into local storage.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LocalStorageService {\n\n  protected cryptoService: CryptoJsService = inject(CryptoJsService);\n\n  /**\n   * Event for set data on local storage\n   */\n  private onSet = new Subject<LocalStorageEvent>();\n\n  /**\n   * Event for remove data on local storage\n   */\n  private onRemove = new Subject<any>();\n\n  /**\n   * Event for clear on local storage\n   */\n  private onClear = new Subject<any>();\n\n  /**\n   * On set observable\n   * @return onSet subject observable\n   */\n  get onSet$() {\n    return this.onSet.asObservable();\n  }\n\n  /**\n   * On remove observable\n   * @return onRemove subject observable\n   */\n  get onRemove$() {\n    return this.onRemove.asObservable();\n  }\n\n  /**\n   * On clear observable\n   * @return onClear subject observable\n   */\n  get onClear$() {\n    return this.onClear.asObservable();\n  }\n\n  /**\n   * Set a new key on LocalStorage\n   * @param key - string\n   * @param value - string\n   * @return LocalStorageService\n   */\n  set(key: string, value: any) {\n    const data = { date: new Date(), data: value };\n    localStorage.setItem(key, this.cryptoService.encrypt(\n      JSON.stringify(data)\n    ));\n    this.onSet.next({ key, data });\n\n    return this;\n  }\n\n  /**\n   * Update date of current object qualified by the key\n   * @param key - string\n   * @return LocalStorageService;\n   */\n  updateDate(key: string) {\n    const local = this.getItem(key);\n    local.date = new Date();\n    localStorage.setItem(key, this.cryptoService.encrypt(\n      JSON.stringify(local)\n    ));\n\n    return this;\n  }\n\n  /**\n   * Return the status of current object qualified by the key\n   * @param key - string\n   * @param seconds - number of seconds session expired\n   * @return boolean\n   */\n  isExpired(key: string, seconds: number) {\n    const local = this.getItem(key);\n    const today = new Date();\n    const localDate = new Date(local.date);\n    localDate.setSeconds(localDate.getSeconds() + seconds);\n\n    return today > localDate;\n  }\n\n  /**\n   * Return JSON content of the LocaleStorage\n   * @param key - string\n   * @param field - string (default: data)\n   * @return JSON\n   */\n  get(key: string, field = 'data') {\n    const local = this.getItem(key);\n    return local ? local[field] : null;\n  }\n\n  /**\n   * Remove a key of LocaleStorage\n   * @param key - string\n   * @return LocalStorageService\n   */\n  remove(key: string) {\n    localStorage.removeItem(key);\n    this.onRemove.next(null);\n\n    return this;\n  }\n\n  /**\n   * Clear LocaleStorage\n   * @return LocalStorageService\n   */\n  clear() {\n    localStorage.clear();\n    this.onClear.next(null);\n\n    return this;\n  }\n\n  /**\n   * has key in LocaleStorage\n   * @param key - string\n   * @return Boolean\n   */\n  has(key: string) {\n    return this.keys().indexOf(key) > -1;\n  }\n\n  /**\n   * Get local storage with the key\n   * @param key - string\n   */\n  private getItem(key: string) {\n    return JSON.parse(this.cryptoService.decrypt(\n      localStorage.getItem(key)\n    ));\n  }\n\n  /**\n   * Return keys of LocaleStorage\n   * @return array\n   */\n  private keys() {\n    return Object.keys(localStorage);\n  }\n}\n\n/**\n * LocalStorageEvent interface\n */\nexport interface LocalStorageEvent {\n  key: string;\n  data: any;\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2024 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport {AbstractControl, UntypedFormArray, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport { DateTime } from \"luxon\";\n\n// @dynamic\nexport class TimeValidator {\n\n  static readonly FORMAT = 'hh:mm';\n\n  /**\n   * Allow to control if time interval limits are well formed : the end limit should be 'older' the start limit\n   * @param start: the field name where to find the start limit value\n   * @param end: the field name where to find the end limit value\n   */\n  static greaterThanValidator(start: string, end: string): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors|null => {\n      if (control) {\n        let isLessThan = false;\n        const startTime = control.get(start);\n        const endTime = control.get(end);\n        const startDate = DateTime.fromFormat(startTime.value, TimeValidator.FORMAT);\n        const endDate = DateTime.fromFormat(endTime.value, TimeValidator.FORMAT);\n        if (startDate.toFormat(TimeValidator.FORMAT) !== '00:00' || endDate.toFormat(TimeValidator.FORMAT) !== '00:00') {\n          isLessThan = startDate.diff(endDate) >= 0;\n        }\n        return (isLessThan)\n            ? ({ lessThan: { value: isLessThan }})\n            : null;\n      }\n    };\n  }\n\n  static RangePeriodValidator(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors|null => {\n      if (control.value) {\n        let isRangeLessThan = false;\n        const times = control.get('times') as UntypedFormArray;\n        if (control.get('is_open').value && times.value.length > 1) {\n          const firstStartDate = DateTime.fromFormat(times.at(0).get('start_time').value, TimeValidator.FORMAT);\n          const firstEndDate = DateTime.fromFormat(times.at(0).get('end_time').value, TimeValidator.FORMAT);\n          const lastStartDate = DateTime.fromFormat(times.at(1).get('start_time').value, TimeValidator.FORMAT);\n          const lastEndDate = DateTime.fromFormat(times.at(1).get('end_time').value, TimeValidator.FORMAT);\n          if (firstStartDate > lastStartDate) {\n            isRangeLessThan = firstStartDate.diff(lastStartDate) <= 0\n              || firstStartDate.diff(lastEndDate) <= 0;\n          } else {\n            isRangeLessThan = lastStartDate.diff(firstEndDate) <= 0\n              || lastStartDate.diff(firstEndDate) <= 0;\n          }\n        }\n        return (isRangeLessThan)\n            ? ({ rangeLessThan: { value: isRangeLessThan }})\n            : null;\n      }\n    };\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nimport { AbstractControl } from '@angular/forms';\nimport { RecordService } from '../record/record.service';\n\n// @dynamic\nexport class UniqueValidator {\n  static createValidator(\n    recordService: RecordService,\n    recordType: string,\n    fieldName: string,\n    excludePid: string = null\n  ) {\n    return (control: AbstractControl) => {\n      return recordService.valueAlreadyExists (\n        recordType,\n        fieldName,\n        control.value,\n        excludePid\n      );\n    };\n  }\n}\n","/*\n * RERO angular core\n * Copyright (C) 2020-2025 RERO\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, version 3 of the License.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n */\nexport * from './lib/api/api.service';\nexport * from './lib/component/abstract-can-deactivate.component';\nexport * from './lib/core-config.service';\nexport * from './lib/core.module';\nexport * from './lib/dialog/dialog.component';\nexport * from './lib/directive/katex.directive';\nexport * from './lib/error/error';\nexport * from './lib/error/error.component';\nexport * from './lib/guard/component-can-deactivate.guard';\nexport * from './lib/ILogger';\nexport * from './lib/pipe/callback-array-filter.pipe';\nexport * from './lib/pipe/default.pipe';\nexport * from './lib/pipe/filesize.pipe';\nexport * from './lib/pipe/get-record.pipe';\nexport * from './lib/pipe/markdown.pipe';\nexport * from './lib/pipe/nl2br.pipe';\nexport * from './lib/pipe/sanitize.pipe';\nexport * from './lib/pipe/sort-by-keys.pipe';\nexport * from './lib/pipe/truncate-text.pipe';\nexport * from './lib/pipe/ucfirst.pipe';\nexport * from './lib/prime-ng-core-module';\nexport * from './lib/primeng-config';\nexport * from './lib/read-more/read-more.component';\nexport * from './lib/record/action-status';\nexport * from './lib/record/detail/detail-button/detail-button.component';\nexport * from './lib/record/detail/detail-button/IRecordEvent.interface';\nexport * from './lib/record/detail/detail.component';\nexport * from './lib/record/detail/detail.directive';\nexport * from './lib/record/detail/view/detail-record';\nexport * from './lib/record/editor/editor.component';\nexport * from './lib/record/editor/extensions';\nexport * from './lib/record/editor/formly/primeng/date-picker/date-picker';\nexport * from './lib/record/editor/formly/primeng/input/src/input.module';\nexport * from './lib/record/editor/formly/primeng/input/src/input.type';\nexport * from './lib/record/editor/formly/primeng/multi-checkbox/multi-checkbox';\nexport * from './lib/record/editor/formly/primeng/multi-select/multi-select';\nexport * from './lib/record/editor/formly/primeng/remote-autocomplete/remote-autocomplete';\nexport * from './lib/record/editor/formly/primeng/remote-autocomplete/remote-autocomplete.interface';\nexport * from './lib/record/editor/formly/primeng/remote-autocomplete/remote-autocomplete.service';\nexport * from './lib/record/editor/formly/primeng/select/select';\nexport * from './lib/record/editor/formly/primeng/services/translate-label.service';\nexport * from './lib/record/editor/formly/primeng/tree-select/tree-select';\nexport * from './lib/record/editor/services/jsonschema.service';\nexport * from './lib/record/editor/type/array-type/array-type.component';\nexport * from './lib/record/editor/type/multischema/multischema.component';\nexport * from './lib/record/editor/type/object-type/object-type.component';\nexport * from './lib/record/editor/type/password-generator-type.component';\nexport * from './lib/record/editor/type/switch/switch.component';\nexport * from './lib/record/editor/utils';\nexport * from './lib/record/editor/widgets/add-field-editor/add-field-editor.component';\nexport * from './lib/record/editor/widgets/dropdown-label-editor/dropdown-label-editor.component';\nexport * from './lib/record/export-button/export-button.component';\nexport * from './lib/record/record';\nexport * from './lib/record/record-ui.service';\nexport * from './lib/record/record.handle-error.service';\nexport * from './lib/record/record.module';\nexport * from './lib/record/record.service';\nexport * from './lib/record/search-autocomplete/search-autocomplete.component';\nexport * from './lib/record/search/aggregation/aggregation.component';\nexport * from './lib/record/search/aggregation/list-filters/list-filters.component';\nexport * from './lib/record/search/aggregation/service/bucket-name.service';\nexport * from './lib/record/search/menu-sort/menu-sort.component';\nexport * from './lib/record/search/paginator/paginator.component';\nexport * from './lib/record/search/record-search-page.component';\nexport * from './lib/record/search/record-search.component';\nexport * from './lib/record/search/record-search.service';\nexport * from './lib/record/search/result/item/result-item';\nexport * from './lib/record/search/search-fields/search-fields.component';\nexport * from './lib/record/search/search-filters/search-filters.component';\nexport * from './lib/record/search/search-tabs/search-tabs.component';\nexport * from './lib/route/route-collection.service';\nexport * from './lib/route/route-interface';\nexport * from './lib/search-input/search-input.component';\nexport * from './lib/service/crypto-js.service';\nexport * from './lib/service/local-storage.service';\nexport * from './lib/service/logger.service';\nexport * from './lib/text-read-more/text-read-more.component';\nexport * from './lib/translate/date-translate-pipe';\nexport * from './lib/translate/translate-language.pipe';\nexport * from './lib/translate/translate-language.service';\nexport * from './lib/translate/translate-loader';\nexport * from './lib/translate/translate-service';\nexport * from './lib/utils/config';\nexport * from './lib/utils/sort-by-keys';\nexport * from './lib/utils/utils';\nexport * from './lib/validator/time.validator';\nexport * from './lib/validator/unique.validator';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3.Nl2brPipe","i1","i2.DefaultPipe","i5","i1.Nl2brPipe","de","en","fr","it","map","i1.KatexDirective","BaseTranslateLoader","i3","JsonComponent","catchError","tap","i1.ErrorComponent","i2.RecordDetailDirective","i3.DetailButtonComponent","i4","i6.ErrorComponent","i7","i8","i9.AddFieldEditorComponent","i10","i11.UpperCaseFirstPipe","i6","switchMap","PrimeNgMultiSelectModule","FormlyCoreSelectModule","FormlySelectModule","i5.DropdownLabelEditorComponent","i2.LabelComponent","i5.BucketNamePipe","i3.BucketsComponent","i4.AggregationSliderComponent","i5.AggregationDateRangeComponent","i6.UpperCaseFirstPipe","i3.BucketNamePipe","i5.SearchInputComponent","i9.RecordSearchResultComponent","i10.RecordSearchAggregationComponent","i11.ExportButtonComponent","i12.ListFiltersComponent","i13.PaginatorComponent","i14.MenuSortComponent","i15.SearchFiltersComponent","i16.SearchTabsComponent","i17","i18.UpperCaseFirstPipe","i1.RecordSearchComponent","DetailJsonComponent"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}