{"version":3,"file":"rero-ng-core.mjs","sources":["../../../../projects/rero/ng-core/src/lib/core/pipe/nl2br/nl2br.pipe.ts","../../../../projects/rero/ng-core/src/lib/core/pipe/filesize/filesize.pipe.ts","../../../../projects/rero/ng-core/src/lib/core/pipe/truncate-text/truncate-text.pipe.ts","../../../../projects/rero/ng-core/src/lib/core/utils/utils.ts","../../../../projects/rero/ng-core/src/lib/core/pipe/ucfirst/ucfirst.pipe.ts","../../../../projects/rero/ng-core/src/lib/core/pipe/markdown/markdown.pipe.ts","../../../../projects/rero/ng-core/src/lib/core/pipe/callback-array-filter/callback-array-filter.pipe.ts","../../../../projects/rero/ng-core/src/lib/core/validator/time.validator.ts","../../../../projects/rero/ng-core/src/lib/core/validator/unique.validator.ts","../../../../projects/rero/ng-core/src/lib/core/config/primeng-config.ts","../../../../projects/rero/ng-core/src/lib/core/config/config.ts","../../../../projects/rero/ng-core/src/lib/core/component/read-more/read-more.component.ts","../../../../projects/rero/ng-core/src/lib/core/component/dialog/dialog.component.ts","../../../../projects/rero/ng-core/src/lib/core/component/error/error.component.ts","../../../../projects/rero/ng-core/src/lib/core/component/error/error.interface.ts","../../../../projects/rero/ng-core/src/lib/core/component/search-input/search-input.component.ts","../../../../projects/rero/ng-core/src/lib/core/component/search-input/search-input.component.html","../../../../projects/rero/ng-core/src/lib/core/component/abstract-can-deactivate/abstract-can-deactivate.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/utils/utils.ts","../../../../projects/rero/ng-core/src/lib/record/service/api/api.service.ts","../../../../projects/rero/ng-core/src/lib/record/service/record-handle-error/record-handle-error.service.ts","../../../../projects/rero/ng-core/src/lib/record/service/record/record.service.ts","../../../../projects/rero/ng-core/src/lib/formly/config/extensions.ts","../../../../projects/rero/ng-core/src/lib/formly/types/date-picker/date-picker.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/input/input.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/markdown/markdown.component.ts","../../../../projects/rero/ng-core/src/lib/formly/service/translate-label.service.ts","../../../../projects/rero/ng-core/src/lib/formly/types/multi-checkbox/multi-checkbox.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/multi-select/multi-select.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/multischema/multischema.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/object/object.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/object/object.component.html","../../../../projects/rero/ng-core/src/lib/formly/types/password-generator/password-generator.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/radio-button/radio-button.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/remote-autocomplete/remote-autocomplete.service.ts","../../../../projects/rero/ng-core/src/lib/formly/types/remote-autocomplete/remote-autocomplete.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/select/select.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/switch/switch.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/textarea/textarea.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/tree-select/tree-select.component.ts","../../../../projects/rero/ng-core/src/lib/formly/validator/email.validator.ts","../../../../projects/rero/ng-core/src/lib/formly/component/dropdown-label-editor/dropdown-label-editor.component.ts","../../../../projects/rero/ng-core/src/lib/formly/component/dropdown-label-editor/dropdown-label-editor.component.html","../../../../projects/rero/ng-core/src/lib/formly/component/label/label.component.ts","../../../../projects/rero/ng-core/src/lib/formly/component/label/label.component.html","../../../../projects/rero/ng-core/src/lib/formly/wrappers/card-wrapper/card-wrapper.component.ts","../../../../projects/rero/ng-core/src/lib/formly/wrappers/form-field-wrapper/form-field-wrapper.component.ts","../../../../projects/rero/ng-core/src/lib/formly/wrappers/hide-wrapper/hide-wrapper.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/array/array.component.ts","../../../../projects/rero/ng-core/src/lib/formly/types/array/array.component.html","../../../../projects/rero/ng-core/src/lib/formly/config/formly-config.ts","../../../../projects/rero/ng-core/src/lib/core/service/core-config/core-config.service.ts","../../../../projects/rero/ng-core/src/lib/translate/service/translate/translate-service.ts","../../../../projects/rero/ng-core/src/lib/core/service/page-title-strategy/page-title-strategy.ts","../../../../projects/rero/ng-core/src/lib/core/core.provider.ts","../../../../projects/rero/ng-core/src/lib/core/directive/katex.directive.ts","../../../../projects/rero/ng-core/src/lib/core/route-data-types.interface.ts","../../../../projects/rero/ng-core/src/lib/core/service/crypto-js/crypto-js.service.ts","../../../../projects/rero/ng-core/src/lib/core/service/local-storage/local-storage.service.ts","../../../../projects/rero/ng-core/src/lib/core/guard/component-can-deactivate.guard.ts","../../../../projects/rero/ng-core/src/lib/core/service/http-pending/http-pending.service.ts","../../../../projects/rero/ng-core/src/lib/core/interceptor/http-pending.interceptor.ts","../../../../projects/rero/ng-core/src/lib/core/index.ts","../../../../projects/rero/ng-core/src/lib/formly/component/add-field-editor/add-field-editor.component.ts","../../../../projects/rero/ng-core/src/lib/formly/component/add-field-editor/add-field-editor.component.html","../../../../projects/rero/ng-core/src/lib/formly/index.ts","../../../../projects/rero/ng-core/src/lib/model/action-status.interface.ts","../../../../projects/rero/ng-core/src/lib/model/index.ts","../../../../projects/rero/ng-core/src/lib/translate/pipe/date-translate/date-translate-pipe.ts","../../../../projects/rero/ng-core/src/lib/translate/service/translate-language/translate-language.service.ts","../../../../projects/rero/ng-core/src/lib/translate/pipe/translate-language/translate-language.pipe.ts","../../../../projects/rero/ng-core/src/lib/translate/loader/translate-loader.ts","../../../../projects/rero/ng-core/src/lib/translate/index.ts","../../../../projects/rero/ng-core/src/lib/record/pipe/get-record.pipe.ts","../../../../projects/rero/ng-core/src/lib/record/record-search-utils.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/store/features/with-aggregations.feature.ts","../../../../projects/rero/ng-core/src/lib/record/component/detail/default-detail/default-detail.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/record-search-result/default-search-result/default-search-result.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/store/features/with-config.feature.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/store/features/with-results.feature.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/store/features/with-search-params.feature.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/store/record-search.store.ts","../../../../projects/rero/ng-core/src/lib/record/service/record-ui/record-ui.service.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/buckets/buckets.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/buckets/buckets.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/slider/slider.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/slider/slider.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/date-range/date-range.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/date-range/date-range.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/aggregation.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/aggregation.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/list-filters/list-filters.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/aggregation/list-filters/list-filters.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/export-button/export-button.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/export-button/export-button.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/menu-sort/menu-sort.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/menu-sort/menu-sort.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/paginator/paginator.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/paginator/paginator.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/record-search-result/record-search-result.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/record-search-result/record-search-result.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/search-filters/search-filters.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/search-filters/search-filters.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/search-tabs/search-tabs.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/search-tabs/search-tabs.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/record-search.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search/record-search.component.html","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search-page.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/record-search-page.component.html","../../../../projects/rero/ng-core/src/lib/record/component/detail/detail-button/detail-button.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/detail/detail-button/detail-button.component.html","../../../../projects/rero/ng-core/src/lib/record/component/detail/detail.component.ts","../../../../projects/rero/ng-core/src/lib/record/component/detail/detail.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/services/jsonschema/jsonschema.service.ts","../../../../projects/rero/ng-core/src/lib/record/editor/services/template/templates.service.ts","../../../../projects/rero/ng-core/src/lib/record/editor/component/load-template-form/load-template-form.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/component/load-template-form/load-template-form.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/component/save-template-form/save-template-form.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/component/save-template-form/save-template-form.component.html","../../../../projects/rero/ng-core/src/lib/record/editor/component/editor/editor.component.ts","../../../../projects/rero/ng-core/src/lib/record/editor/component/editor/editor.component.html","../../../../projects/rero/ng-core/src/lib/record/record.routes.ts","../../../../projects/rero/ng-core/src/lib/record/component/autocomplete/search-autocomplete.component.ts","../../../../projects/rero/ng-core/src/lib/record/model/result-item.interface.ts","../../../../projects/rero/ng-core/src/lib/record/component/search/model/aggregations-filter.interface.ts","../../../../projects/rero/ng-core/src/lib/record/model/record-search.interface.ts","../../../../projects/rero/ng-core/src/lib/record/index.ts","../../../../projects/rero/ng-core/src/public-api.ts","../../../../projects/rero/ng-core/src/rero-ng-core.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * Pipe for converting carriage returns to <br> html entities.\n */\n@Pipe({ name: 'nl2br' })\nexport class Nl2brPipe implements PipeTransform {\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): SafeHtml {\n    if (!value) {\n      return this.sanitizer.bypassSecurityTrustHtml('');\n    }\n    return this.sanitizer.bypassSecurityTrustHtml(value.replace(/\\r\\n?|\\n/g, '<br>\\n'));\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Get human readable file size.\n */\n@Pipe({ name: 'filesize' })\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): string {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe for truncating text.\n */\n@Pipe({ name: 'truncateText' })\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 = 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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nexport function extractIdOnRef(ref: string): string {\n  if (!ref) {\n    throw new Error('extractIdOnRef: ref is null or empty');\n  }\n\n  const match = /.*\\/([^/]+)$/.exec(ref);\n\n  if (!match) {\n    throw new Error(`extractIdOnRef: unable to extract id from ref \"${ref}\"`);\n  }\n\n  return match[1];\n}\n\nexport function cleanDictKeys<T extends Record<string, unknown>>(data: T): Partial<T> {\n  return Object.fromEntries(\n    Object.entries(data).filter(([, value]) => {\n      if (value == null) {\n        return false;\n      }\n\n      if (typeof value === 'string' || Array.isArray(value)) {\n        return value.length > 0;\n      }\n\n      return true;\n    }),\n  ) as Partial<T>;\n}\n\nexport function capitalize(value: string): 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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { capitalize } from '../../utils/utils';\n\n/**\n * Uppercase the first letter of the string.\n */\n@Pipe({ name: 'ucfirst' })\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): string {\n    if (!value) {\n      return value;\n    }\n\n    return capitalize(value);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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({ name: 'markdown' })\nexport class MarkdownPipe implements PipeTransform {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe for applying a callback function to filter array items.\n */\n@Pipe({ name: 'callbackArrayFilter' })\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<T>(items: T[], callback?: (item: T) => boolean): T[] {\n    if (items?.length) {\n      if (!callback) {\n        return items;\n      } else {\n        return items.filter((item) => callback(item));\n      }\n    }\n    return [];\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { AbstractControl, UntypedFormArray, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { DateTime } from 'luxon';\n\n// @dynamic\nexport class TimeValidator {\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      const startTime = control.get(start);\n      const endTime = control.get(end);\n      if (control && startTime && endTime) {\n        let isLessThan = false;\n        const startDate = DateTime.fromFormat(startTime.value, TimeValidator.FORMAT);\n        const endDate = DateTime.fromFormat(endTime.value, TimeValidator.FORMAT);\n        if (\n          startDate.toFormat(TimeValidator.FORMAT) !== '00:00' ||\n          endDate.toFormat(TimeValidator.FORMAT) !== '00:00'\n        ) {\n          isLessThan = startDate >= endDate;\n        }\n        return isLessThan ? { lessThan: { value: isLessThan } } : null;\n      }\n      return null;\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 && 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 <= lastStartDate || firstStartDate <= lastEndDate;\n          } else {\n            isRangeLessThan = lastStartDate <= firstEndDate || lastStartDate <= firstEndDate;\n          }\n        }\n        return isRangeLessThan ? { rangeLessThan: { value: isRangeLessThan } } : null;\n      }\n      return null;\n    };\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { AbstractControl } from '@angular/forms';\nimport { RecordService } from '../../record/service/record/record.service';\n\n// @dynamic\nexport class UniqueValidator {\n  static createValidator(recordService: RecordService, recordType: string, fieldName: string, excludePid?: string) {\n    return (control: AbstractControl) => {\n      return recordService.valueAlreadyExists(recordType, fieldName, control.value, excludePid);\n    };\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { definePreset } from '@primeuix/themes';\nimport Aura from '@primeuix/themes/aura';\n\nexport const primeNGConfig = {\n  theme: {\n    options: {\n      // Layer order (lowest → highest priority). PrimeNG injects this @layer\n      // declaration before styles.css, so \"primeng\" is established below\n      // \"utilities\" — allowing Tailwind utility classes (ui:, core:) to\n      // override PrimeNG component styles. Do not move \"utilities\" before\n      // \"primeng\" or Tailwind overrides will stop working.\n      cssLayer: {\n        name: 'primeng',\n        order: 'theme, base, primeng, utilities'\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nexport const CONFIG = {\n  MESSAGE_LIFE: 5000, // Message lifetime in ms\n  DEFAULT_SELECT_SCROLL_HEIGHT: '50vh',\n};\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, computed, input, linkedSignal } from '@angular/core';\nimport { _, TranslatePipe } from '@ngx-translate/core';\nimport { Nl2brPipe } from '../../pipe/nl2br/nl2br.pipe';\nimport { Button } from 'primeng/button';\n\n@Component({\n  selector: 'ng-core-read-more',\n  template: `\n    <span [innerHTML]=\"textDisplay() | nl2br\"></span>\n\n    @if (showMoreActivated()) {\n      <p-button link size=\"small\" (click)=\"toggleText($event)\">{{ showMoreLinkLabel() | translate }}</p-button>\n    }\n  `,\n  imports: [TranslatePipe, Nl2brPipe, Button],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ReadMoreComponent {\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\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 = [];\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { Button } from 'primeng/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Nl2brPipe } from '../../pipe/nl2br/nl2br.pipe';\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  imports: [Button, TranslatePipe, Nl2brPipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DialogComponent {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Error } from './error.interface';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n/**\n * Component for displaying errors.\n */\n@Component({\n  selector: 'ng-core-error',\n  template: `\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 || ('You cannot access this page.' | translate) }}</h5>\n    </div>\n  `,\n  imports: [TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ErrorComponent {\n  // Error object containing title, status and optionally a message.\n  readonly error = input.required<Error>();\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/**\n * Interface representing an error.\n */\nexport interface Error {\n  status: number;\n  title: string;\n  message?: string;\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, ElementRef, effect, input, output, viewChild } from '@angular/core';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputText } from 'primeng/inputtext';\nimport { AutoFocus } from 'primeng/autofocus';\nimport { InputGroupAddon } from 'primeng/inputgroupaddon';\nimport { Button } from 'primeng/button';\n\n@Component({\n  selector: 'ng-core-search-input',\n  templateUrl: './search-input.component.html',\n  imports: [InputGroup, InputText, AutoFocus, InputGroupAddon, Button],\n  changeDetection: ChangeDetectionStrategy.OnPush,\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.required<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  searchQuery = output<string>();\n\n  /** Search input reference */\n  readonly input = viewChild<ElementRef>('searchInput');\n\n  constructor() {\n    effect(() => {\n      const inputValue = this.input();\n      if (this.focus() && inputValue?.nativeElement) {\n        inputValue.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.searchQuery.emit(this.trimQueryString() ? value.trim() : value);\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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 icon=\"fa fa-search\" variant=\"text\" severity=\"secondary\" [disabled]=\"disabled()\" (click)=\"doSearch()\" class=\"core:h-[2.5rem]\" />\n  </p-inputGroupAddon>\n</p-inputGroup>\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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})\nexport abstract class AbstractCanDeactivateComponent {\n  abstract canDeactivate: boolean;\n\n  @HostListener('window:beforeunload', ['$event'])\n  unloadNotification($event: BeforeUnloadEvent): void {\n    if (!this.canDeactivate) {\n      $event.preventDefault();\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { extractIdOnRef } from '../../../core/utils/utils';\nimport { JSONSchema7 as JSONSchema7Base } from 'json-schema';\nimport { JsonObject, JsonValue } from '../../../model';\n\nexport interface JSONSchema7 extends JSONSchema7Base {\n  widget: Record<string, any>;\n  propertiesOrder?: string[];\n}\n\n/**\n * Initialize the Formly widget on JSONSchema\n * @param schema - object, the JSONSchema\n */\nfunction createWidgetFormlyConfigProps(schema: JSONSchema7): void {\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: JSONSchema7, schemaProperties: any): JSONSchema7 {\n  if (schemaProperties) {\n    Object.keys(schemaProperties).forEach((property) => {\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: any = 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: JSONSchema7): JSONSchema7 {\n  if (!schema.required || !schema.properties) {\n    return schema;\n  }\n  const properties = schema.properties;\n  schema.required.map((key: string) => {\n    const childSchema = properties[key];\n    if (childSchema && typeof childSchema !== 'boolean') {\n      const child = childSchema as JSONSchema7;\n      createWidgetFormlyConfigProps(child);\n      child.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: JSONSchema7): JSONSchema7 {\n  const original = schema.properties!;\n  schema.properties = Object.fromEntries(\n    schema.propertiesOrder!.filter((p) => p in original).map((p) => [p, original[p]]),\n  );\n  return schema;\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: JSONSchema7): JSONSchema7 {\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    if (schema.properties) {\n      for (const property of Object.keys(schema.properties)) {\n        const prop = schema.properties[property];\n        if (typeof prop === 'object' && prop !== null) {\n          processJsonSchema(prop as JSONSchema7);\n        }\n      }\n    }\n  }\n  // recursion for array\n  if (schema.items) {\n    if (typeof schema.items === 'object') {\n      processJsonSchema(schema.items as JSONSchema7);\n    }\n  }\n  // recursion for oneOf\n  if (schema.oneOf) {\n    for (const item of schema.oneOf) {\n      if (typeof item === 'object' && item !== null) {\n        processJsonSchema(item as JSONSchema7);\n      }\n    }\n  }\n  // recursion for anyOf\n  if (schema.anyOf) {\n    for (const item of schema.anyOf) {\n      if (typeof item === 'object' && item !== null) {\n        processJsonSchema(item as JSONSchema7);\n      }\n    }\n  }\n  // recursion for allOf\n  if (schema.allOf) {\n    for (const item of schema.allOf) {\n      if (typeof item === 'object' && item !== null) {\n        processJsonSchema(item as JSONSchema7);\n      }\n    }\n  }\n  // recursion for definitions\n  if (schema.definitions) {\n    for (const property of Object.keys(schema.definitions)) {\n      const def = schema.definitions[property];\n      if (typeof def === 'object' && def !== null) {\n        processJsonSchema(def as JSONSchema7);\n      }\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: JsonValue): JsonValue {\n  if (Array.isArray(data)) {\n    return data.map((d) => resolveRefs(d));\n  }\n  if (typeof data === 'object' && data !== null) {\n    return Object.fromEntries(\n      Object.entries(data as JsonObject).map(([key, value]) => {\n        const resolved = resolveRefs(value);\n        return key === '$ref' ? ['pid', extractIdOnRef(resolved as string)] : [key, resolved];\n      }),\n    );\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: JsonValue): boolean {\n  return (\n    // null or undefined\n    value == null ||\n    // string or array with length zero\n    (typeof value === 'string' && value.length === 0) ||\n    (Array.isArray(value) && value.length === 0) ||\n    // object with no keys\n    (typeof value === 'object' && value !== null && 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<TMetadata = JsonValue>(data: TMetadata): TMetadata {\n  // array?\n  if (Array.isArray(data)) {\n    // new array with non empty values\n    const newArray: TMetadata[] = [];\n    data.forEach((d) => {\n      const value = removeEmptyValues(d);\n      if (!isEmpty(value)) {\n        newArray.push(value);\n      }\n    });\n    return newArray as TMetadata;\n  }\n  // object?\n  if (typeof data === 'object' && data != null) {\n    // new object with non empty values\n    const newObject: JsonObject = {};\n    const dataRecord = data as JsonObject;\n    for (const key of Object.keys(dataRecord)) {\n      const value = removeEmptyValues(dataRecord[key]);\n      if (!isEmpty(value)) {\n        newObject[key] = value;\n      }\n    }\n    return newObject as TMetadata;\n  }\n  return data;\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Injectable } from '@angular/core';\nimport { CoreConfigService } from '../../../core';\n\n/**\n * Service giving information about API.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ApiService {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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  protected translateService: TranslateService = inject(TranslateService);\n\n  /**\n   * handle http error\n   * @param error - HttpErrorResponse\n   * @returns Observable\n   */\n  handleError(error: HttpErrorResponse): 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 =\n        typeof error.error.errors === 'object'\n          ? error.error.errors.message\n          : error.error.errors.map((err: { message: string }) => this.translateService.instant(err.message)).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      case 409:\n        return throwError(() => ({ status: error.status, title: this.translateService.instant('Conflict') }));\n      case 412:\n        return throwError(() => ({ status: error.status, title: this.translateService.instant('Precondition Failed') }));\n      default:\n        return throwError(() => ({ status: 500, title: this.translateService.instant('An error occurred') }));\n    }\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError, debounceTime, map } from 'rxjs/operators';\nimport { Error as CoreError } from '../../../core/component/error/error.interface';\nimport { EsResult, JsonObject, JsonValue, RecordData } from '../../../model';\nimport { resolveRefs } from '../../editor/utils/utils';\nimport { ApiService } from '../api/api.service';\nimport { RecordHandleErrorService } from '../record-handle-error/record-handle-error.service';\nimport { AggregationsFilter } from '../../component/search/model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RecordService {\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   * 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<T = EsResult>(\n    type: string,\n    {\n      query = '',\n      page = 1,\n      itemsPerPage = RecordService.DEFAULT_REST_RESULTS_SIZE,\n      aggregationsFilters = [],\n      preFilters = {},\n      sort = '',\n      facets = [],\n      headers = new HttpHeaders({ 'Content-Type': 'application/json' }),\n    }: {\n      query?: string;\n      page?: number;\n      itemsPerPage?: number;\n      aggregationsFilters?: AggregationsFilter[];\n      preFilters?: Record<string, string | string[]>;\n      sort?: string;\n      facets?: string[];\n      headers?: HttpHeaders | Record<string, string | string[]>;\n    } = {},\n  ): Observable<T> {\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<T>(this.apiService.getEndpointByType(type, true) + '/', {\n        params: httpParams,\n        headers: headers,\n      })\n      .pipe(catchError((error) => this._handleError(error)));\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 | CoreError> {\n    return this.http\n      .delete<void>(this.apiService.getEndpointByType(type, true) + '/' + pid)\n      .pipe(catchError((error) => this._handleError(error)));\n  }\n\n  /**\n   * Get record data\n   * @param type - string, type of resource\n   * @param pid - string, record PID\n   * TODO: return the raw Response\n   */\n  getRecord<T = RecordData>(\n    type: string,\n    pid: string,\n    options: {\n      resolve?: number;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n    } = {},\n  ): Observable<T> {\n    return this.getRecordWithEtag<T>(type, pid, options).pipe(map((response) => response.body!));\n  }\n\n  /**\n   * Get record data along with its ETag header value.\n   * @param type - string, type of resource\n   * @param pid - string, record PID\n   */\n  getRecordWithEtag<T = RecordData>(\n    type: string,\n    pid: string,\n    {\n      resolve = 0,\n      headers = new HttpHeaders({ 'Content-Type': 'application/json' }),\n    }: {\n      resolve?: number;\n      headers?: HttpHeaders | Record<string, string | string[]>;\n    } = {},\n  ): Observable<HttpResponse<T>> {\n    return this.http\n      .get<T>(`${this.apiService.getEndpointByType(type, true)}/${pid}?resolve=${resolve}`, {\n        headers,\n        observe: 'response',\n      })\n      .pipe(\n        map((response: HttpResponse<T>) => {\n          if (response.body == null) {\n            throw new Error('Server returned empty response body');\n          }\n          return response;\n        }),\n        catchError((error) => this._handleError(error)),\n      );\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): Observable<JsonValue | null> {\n    const url = this.apiService.getSchemaFormEndpoint(recordType, true);\n    return this.http.get<JsonValue>(url).pipe(\n      catchError((e) => {\n        if (e.status === 404) {\n          return of(null);\n        }\n        return throwError(() => e);\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<TMetadata = JsonObject>(recordType: string, record: TMetadata): Observable<RecordData<TMetadata>> {\n    return this.http\n      .post<RecordData<TMetadata>>(this.apiService.getEndpointByType(recordType, true) + '/', record)\n      .pipe(catchError((error) => this._handleError(error)));\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   * @param etag - string, optional ETag value sent as If-Match header for optimistic concurrency control\n   */\n  update<TMetadata = JsonObject>(\n    recordType: string,\n    pid: string,\n    record: TMetadata,\n    etag?: string | null,\n  ): Observable<RecordData<TMetadata>> {\n    let headers = new HttpHeaders();\n    if (etag != null) {\n      headers = headers.set('If-Match', etag);\n    }\n    const url = `${this.apiService.getEndpointByType(recordType, true)}/${pid}`;\n    return this.http.put<RecordData<TMetadata>>(url, record, { headers }).pipe(catchError((error) => this._handleError(error)));\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  ): Observable<ValidationErrors | null> {\n    const escapedValue = value.replace(/\"/g, '\\\\\"');\n    let query = `${field}:\"${escapedValue}\"`;\n\n    if (excludePid != null) {\n      query += ` NOT pid:${excludePid}`;\n    }\n\n    return this.getRecords(recordType, { query, itemsPerPage: 1 }).pipe(\n      map((res): number | string => {\n        if (!res.hits) {\n          return 0;\n        }\n        return res?.hits?.total ? this.totalHits(res.hits.total) : 0;\n      }),\n      map((total) => Number(total)),\n      map((total) => (total > 0 ? { 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,\n    term?: string,\n    limitToValues?: string[],\n    filter?: string,\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 && 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 != null) {\n      const filterFn = Function('model', `return ${filter};`);\n      query = `${query} AND ` + filterFn(model);\n    }\n    if (excludePid != null) {\n      query += ` NOT pid:${excludePid}`;\n    }\n    return this.getRecords(recordType, { query, itemsPerPage: 1 }).pipe(\n      map((res): number | string | null => {\n        if (!res?.hits) {\n          return null;\n        }\n        return res.hits?.total ? this.totalHits(res.hits.total) : 0;\n      }),\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: number | string | { relation: string; value: number }, relation = false): number | string {\n    switch (typeof total) {\n      case 'object': {\n        if (!('value' in total)) {\n          throw new Error('Invalid total object: missing value property');\n        }\n\n        if (relation) {\n          return `${this.translateService.instant(total.relation)} ${total.value}`;\n        }\n\n        return Number(total.value);\n      }\n\n      case 'number':\n        return total;\n\n      case 'string': {\n        const parsed = Number(total);\n        if (Number.isNaN(parsed)) {\n          throw new Error(`Invalid total string value: \"${total}\"`);\n        }\n        return parsed;\n      }\n\n      default:\n        throw new Error(`Unsupported total type: ${typeof total}`);\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(resource: string, url: string, field: string, q: string): 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   * @return throwError\n   */\n  private _handleError(error: HttpErrorResponse): Observable<never> {\n    return this.recordHandleErrorService.handleError(error);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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/record/record.service';\nimport { isEmpty, removeEmptyValues } from '../../record/editor/utils/utils';\n\nexport class NgCoreFormlyExtension {\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 && field?.options?.fieldChanges) {\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      const isRoot = parent?.props?.isRoot === true;\n      const wrappers = field?.wrappers;\n      if (isRoot && Array.isArray(wrappers) && !wrappers.includes('card') && !wrappers.includes('hide')) {\n        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: FormlyFieldConfig): 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 as string;\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 | undefined): 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: FormlyFieldConfig): boolean {\n    let model = field?.model;\n    // for simple object the model is the parent dict\n    if (field.model && !Object.hasOwn(field, 'fieldGroup') && field.key) {\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 &&\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 || field.props.validation == null) {\n      return;\n    }\n    const customValidators = field.props.validation.validators || {};\n    // asyncValidators: valueAlreadyExists\n    if (customValidators.valueAlreadyExists && field?.props?.editorConfig?.recordType) {\n      const { filter, limitToValues, term } = customValidators.valueAlreadyExists;\n\n      const { recordType, pid } = field.props.editorConfig;\n\n      field.asyncValidators = {\n        validation: [\n          () =>\n            this.recordService.uniqueValue(field, recordType, pid, term ?? null, limitToValues ?? [], filter ?? null),\n        ],\n      };\n\n      delete customValidators.valueAlreadyExists;\n    }\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      const validators: { keys: string[] } = 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 = validators.keys;\n            const uniqueItems = Array.from(\n              new Set(\n                control.value.map((v) => {\n                  const keys = keysToKeep.reduce<Record<string, unknown>>((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      const validators: { min: number; max: number; keys: Record<string, string> } =\n        customValidators.numberOfSpecificValuesInObject;\n      field.validators = {\n        numberOfSpecificValuesInObject: {\n          expression: (control: UntypedFormControl): boolean => {\n            function objIntersection(a: Record<string, unknown>, b: Record<string, unknown>): string[] {\n              const keys = Object.keys(a);\n              return keys.filter((k) => a[k] === b[k]);\n            }\n            const min = validators.min || 0;\n            const max = validators.max || Infinity;\n            const keys = validators.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(\n              (element: Record<string, unknown>) => objIntersection(keys, element).length > 0,\n            ).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 validators: { dateFirst: string; dateLast: string; strict?: boolean } = customValidators.datesGreaterThan;\n      const firstDate = validators.dateFirst;\n      const lastDate = validators.dateLast;\n      const strict = validators.strict || false;\n      field.validators = {\n        datesGreaterThan: {\n          expression: (control: UntypedFormControl): boolean => {\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  protected translate: TranslateService = inject(TranslateService);\n\n  prePopulate(field: FormlyFieldConfig<FormlyFieldProps & Record<string, unknown>>): void {\n    const props = 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: Record<string, 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[]): string[] {\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: Record<string, 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      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): 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 * @returns FormlyConfig object configuration\n */\nexport function registerNgCoreFormlyExtension(translate: TranslateService): Record<string, unknown> {\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: unknown, field: FormlyFieldConfig) => {\n          const validatorConfig = field.props?.validation.validators?.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: unknown, 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: unknown, 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: unknown, 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: unknown, 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: unknown, field: FormlyFieldConfig) =>\n          translate.stream(_('should be >=  {{min}}'), { min: field.props!.min }),\n      },\n      {\n        name: 'max',\n        message: (_err: unknown, field: FormlyFieldConfig) =>\n          translate.stream(_('should be <=  {{max}}'), { max: field.props!.max }),\n      },\n      {\n        name: 'exclusiveMinimum',\n        message: (_err: unknown, field: FormlyFieldConfig) =>\n          translate.stream(_('should be >  {{step}}'), { step: field.props!.step }),\n      },\n      {\n        name: 'exclusiveMaximum',\n        message: (_err: unknown, field: FormlyFieldConfig) =>\n          translate.stream(_('should be <  {{step}}'), { step: field.props!.step }),\n      },\n      {\n        name: 'multipleOf',\n        message: (_err: unknown, field: FormlyFieldConfig) =>\n          translate.stream(_('should be multiple of ${{step}}'), { step: field.props!.step }),\n      },\n      {\n        name: 'const',\n        message: (_err: unknown, 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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, LOCALE_ID, model, OnDestroy, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { _, TranslatePipe } from '@ngx-translate/core';\nimport { DateTime } from 'luxon';\nimport { DatePicker } 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 | null;\n  disabledDates: Date[];\n  disabledDays: number[];\n  firstDayOfWeek: number;\n  fluid?: boolean;\n  hourFormat: string;\n  inline?: boolean;\n  inputStyleClass?: string;\n  maxDate?: Date | null;\n  minDate?: Date | null;\n  numberOfMonths: number;\n  panelStyleClass?: string;\n  placeholder?: string;\n  readonlyInput?: boolean;\n  required: 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]=\"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      [class]=\"props.styleClass || ''\"\n      [todayButtonStyleClass]=\"props.todayButtonStyleClass\"\n      [view]=\"props.view\"\n      [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n    />\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [DatePicker, FormlyModule, FormsModule, NgClass, TranslatePipe],\n})\nexport class DatePickerComponent extends FieldType<FieldTypeConfig<IDateTimePickerProps>> implements OnInit, OnDestroy {\n  protected locale = inject(LOCALE_ID);\n\n  value = model<Date | null>();\n\n  private subscription: Subscription = new Subscription();\n\n  defaultOptions: Partial<FieldTypeConfig<IDateTimePickerProps>> = {\n    props: {\n      appendTo: 'body',\n      clearButtonStyleClass: 'p-button-text',\n      dateFormat: 'yy-mm-dd',\n      disabled: false,\n      disabledDays: [],\n      disabledDates: [],\n      firstDayOfWeek: 0,\n      fluid: true,\n      hourFormat: '24',\n      inline: false,\n      numberOfMonths: 1,\n      panelStyleClass: 'core:[p-motion:has(&)]:!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[] = [];\n  maxDate: Date | null = null;\n  minDate: Date | null = null;\n\n  ngOnInit(): void {\n    this.subscription.add(\n      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\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 != null) {\n      this.defaultDate = this.processDate(this.props.defaultDate);\n    }\n\n    if (this.props.disabledDates != null) {\n      this.disabledDates = this.props.disabledDates.map((date) => this.processDate(date));\n    }\n\n    if (this.props.minDate) {\n      this.minDate = this.processDate(this.props.minDate);\n    }\n\n    if (this.props.maxDate) {\n      this.maxDate = this.processDate(this.props.maxDate);\n    }\n\n    this.subscription.add(\n      this.value.subscribe((value) => {\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\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    if (date instanceof Date) {\n      return date;\n    }\n    if (typeof date === 'string') {\n      return new Date(date);\n    }\n    throw new Error('Invalid date value');\n  }\n\n  private outputDate(value: string | Date): string {\n    return DateTime.fromJSDate(this.processDate(value)).toFormat('yyyy-MM-dd');\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, Type } from '@angular/core';\nimport { FieldType, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputGroupAddon } from 'primeng/inputgroupaddon';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputText } from 'primeng/inputtext';\n\nexport interface NgCoreFormlyInputFieldConfig extends FormlyFieldConfig {\n  type: 'input' | Type<InputComponent>;\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 [ngTemplateOutlet]=\"input\" [ngTemplateOutletContext]=\"{ formControl, props, field, showError }\" />\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 [ngTemplateOutlet]=\"input\" [ngTemplateOutletContext]=\"{ formControl, props, field, showError }\" />\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  imports: [\n    InputGroup,\n    InputGroupAddon,\n    NgTemplateOutlet,\n    FormsModule,\n    InputText,\n    ReactiveFormsModule,\n    FormlyModule,\n    NgClass,\n  ],\n})\nexport class InputComponent extends FieldType<NgCoreFormlyInputFieldConfig> {\n  defaultOptions? = {\n    props: {\n      class: 'core:w-full',\n      inputStep: 'number',\n    },\n  };\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { AfterViewInit, ChangeDetectionStrategy, 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';\nimport { NgClass } from '@angular/common';\nimport { Textarea } from 'primeng/textarea';\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  imports: [NgClass, Textarea],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MarkdownFieldComponent extends FieldType<FieldTypeConfig<TextAreaProps>> implements AfterViewInit {\n  // Reference to textarea element.\n  readonly textarea = viewChild<ElementRef>('textarea');\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport type { ISelectOption } from '../types/select/select.component';\n\nexport type TranslatableOptionCollection = ISelectOption[] | Record<string, ISelectOption> | null | undefined;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TranslateLabelService {\n  private translateService: TranslateService = inject(TranslateService);\n\n  translateLabel<T extends TranslatableOptionCollection>(options: T): T {\n    if (Array.isArray(options)) {\n      return options.map((option) => this.translateOption(option)) as T;\n    }\n\n    if (options && typeof options === 'object') {\n      return Object.fromEntries(Object.entries(options).map(([key, value]) => [key, this.translateOption(value)])) as T;\n    }\n\n    return options;\n  }\n\n  private translateOption(option: ISelectOption): ISelectOption {\n    if (!option || typeof option !== 'object') {\n      return option;\n    }\n\n    const untranslatedLabel =\n      typeof option.untranslatedLabel === 'string'\n        ? option.untranslatedLabel\n        : typeof option.label === 'string'\n          ? option.label\n          : undefined;\n\n    return {\n      ...option,\n      untranslatedLabel,\n      label: untranslatedLabel ? this.translateService.instant(untranslatedLabel) : option.label,\n      items: option.items ? this.translateLabel(option.items) : option.items,\n      children: option.children ? this.translateLabel(option.children) : option.children,\n    };\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Injector, OnInit, runInInjectionContext, Signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Checkbox, CheckboxChangeEvent } from 'primeng/checkbox';\nimport { combineLatest, map, Observable, of, startWith } from 'rxjs';\nimport { TranslateLabelService } from '../../service/translate-label.service';\n\nexport interface IMultiCheckBoxProps extends FormlyFieldProps {\n  labelStyleClass?: string;\n  style: 'stacked' | 'inline';\n  styleClass?: string;\n  options?: Observable<Record<string, unknown>[]>;\n}\n\n@Component({\n  selector: 'ng-core-multi-checkbox',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"core:flex\"\n      [ngClass]=\"{\n        'core:gap-3': props.style === 'inline',\n        'core:flex-col core:gap-1': props.style === 'stacked',\n        'p-inputtext ng-invalid ng-dirty': showError,\n      }\"\n    >\n      @for (option of optionValues(); track $index) {\n        @let fieldKey = field.key + '_' + $index;\n        <div class=\"core:flex core:items-center core:gap-2\">\n          <p-checkbox\n            [disabled]=\"option.disabled\"\n            [formlyAttributes]=\"field\"\n            [inputId]=\"fieldKey\"\n            [name]=\"$any(field.key)\"\n            [ngModel]=\"field.formControl.value\"\n            [readonly]=\"props.readonly\"\n            [class]=\"props.styleClass\"\n            [value]=\"option.value\"\n            (onChange)=\"onChange($event)\"\n          />\n          <label [for]=\"fieldKey\" [class]=\"props.labelStyleClass\">{{ option.label }}</label>\n        </div>\n      }\n    </div>\n  `,\n  imports: [NgClass, Checkbox, FormlyModule, FormsModule],\n  providers: [TranslateLabelService],\n})\nexport class MultiCheckboxComponent extends FieldType<FieldTypeConfig<IMultiCheckBoxProps>> implements OnInit {\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n  private injector: Injector = inject(Injector);\n\n  /** Default options */\n  defaultOptions?: Partial<FieldTypeConfig<IMultiCheckBoxProps>> = {\n    props: {\n      style: 'stacked',\n    },\n  };\n\n  optionValues!: Signal<any[]>;\n\n  ngOnInit(): void {\n    const optionsObs = this.props.options ?? of([]);\n    const langChangeObs = this.translateService.onLangChange.pipe(startWith(null));\n    this.optionValues = runInInjectionContext(this.injector, () =>\n      toSignal(\n        combineLatest([optionsObs, langChangeObs]).pipe(\n          map(([options]) => this.translateLabelService.translateLabel(options)),\n        ),\n        { initialValue: [] },\n      ),\n    );\n  }\n\n  onChange(event: CheckboxChangeEvent): void {\n    this.formControl?.patchValue(event.checked);\n    this.formControl?.markAsTouched();\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  Injector,\n  OnInit,\n  Signal,\n  signal,\n  Type,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { FormlyFieldSelectProps, FormlySelectOption } from '@ngx-formly/core/select';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MultiSelect } from 'primeng/multiselect';\nimport { combineLatest, map, Observable, of, startWith } from 'rxjs';\nimport { CONFIG } from '../../../core/config/config';\nimport { TranslateLabelService } from '../../service/translate-label.service';\n\nexport interface NgCoreMultiSelectOption extends FormlySelectOption {\n  items?: NgCoreMultiSelectOption[];\n}\n\nexport interface IMultiSelectProps extends FormlyFieldProps, FormlyFieldSelectProps {\n  appendTo?: string;\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<NgCoreMultiSelectOption[]>;\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  changeDetection: ChangeDetectionStrategy.OnPush,\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]=\"filterEnabled()\"\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()\"\n      optionLabel=\"label\"\n      optionValue=\"value\"\n      [panelStyleClass]=\"props.panelStyleClass\"\n      [placeholder]=\"props.placeholder | translate\"\n      [required]=\"props.required\"\n      [showClear]=\"!props.required\"\n      [class]=\"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 }}\n              @if (!last) {\n                ,\n              }\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  imports: [MultiSelect, FormsModule, ReactiveFormsModule, FormlyModule, NgClass, TranslatePipe],\n  providers: [TranslateLabelService],\n})\nexport class MultiSelectComponent extends FieldType<FieldTypeConfig<IMultiSelectProps>> implements OnInit {\n  private injector: Injector = inject(Injector);\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n\n  optionValues: Signal<NgCoreMultiSelectOption[]> = signal([]);\n  filterEnabled = computed(() => this.enableFilter(this.optionValues(), 0).enabled);\n\n  /** Default properties */\n  defaultOptions: Partial<FieldTypeConfig<IMultiSelectProps>> = {\n    props: {\n      display: 'comma',\n      editable: false,\n      filterMatchMode: 'contains',\n      fluid: true,\n      class: '',\n      group: false,\n      placeholder: 'Select…',\n      emptyFilterMessage: '',\n      emptyMessage: '',\n      required: false,\n      tooltip: '',\n      scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n      sort: false,\n      tooltipPosition: 'top',\n      tooltipPositionStyle: 'absolute',\n      variant: 'outlined',\n    },\n  };\n\n  ngOnInit(): void {\n    if (this.props.disabled) {\n      this.formControl.disable();\n    }\n\n    const optionsObs = this.props.options ?? of([]);\n    const langChangeObs = this.translateService.onLangChange.pipe(startWith(null));\n    this.optionValues = toSignal(\n      combineLatest([optionsObs, langChangeObs]).pipe(\n        map(([options]) => this.translateLabelService.translateLabel(options)),\n      ),\n      { initialValue: [], injector: this.injector },\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  private enableFilter(options?: NgCoreMultiSelectOption[], 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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldType, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { Tooltip } from 'primeng/tooltip';\n\n@Component({\n  selector: 'ng-core-editor-formly-multi-schema',\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  imports: [Tooltip, FormlyModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultiSchemaComponent extends FieldType<FormlyFieldConfig> {}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldType, FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\n\n/**\n * Component for displaying an object in editor.\n */\n@Component({\n  selector: 'ng-core-editor-formly-object',\n  templateUrl: './object.component.html',\n  imports: [FormlyModule, NgClass],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ObjectComponent extends FieldType<FieldTypeConfig> {\n  defaultOptions: Partial<FieldTypeConfig> = {\n    props: {\n      containerCssClass: 'core:flex core:flex-col core:gap-2',\n    },\n  };\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { NgClass } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  OnInit,\n  signal,\n  Signal,\n  viewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { TranslateDirective, TranslatePipe } from '@ngx-translate/core';\nimport { GeneratePassword } from 'generate-password-lite';\nimport { Button } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputGroupAddon } from 'primeng/inputgroupaddon';\nimport { InputText } from 'primeng/inputtext';\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  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: `\n    p-inputGroupAddon {\n      padding: 0 !important;\n    }\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]=\"readonly()\"\n        [class]=\"props.class ? props.class : readonly() ? 'core:!bg-surface-200' : ''\"\n        [ngClass]=\"{ 'ng-invalid ng-dirty': showError }\"\n      />\n      <p-inputGroupAddon class=\"core:flex\">\n        <p-button\n          icon=\"fa fa-repeat\"\n          [title]=\"'Generate a new password' | translate\"\n          (click)=\"onClick()\"\n          severity=\"secondary\"\n          variant=\"text\"\n        />\n      </p-inputGroupAddon>\n      <p-inputGroupAddon>\n        <p-button\n          [icon]=\"type() === 'text' ? 'fa fa-eye-slash' : 'fa fa-eye'\"\n          [title]=\"'Show or hide password' | translate\"\n          (click)=\"showHidePassword()\"\n          severity=\"secondary\"\n          variant=\"text\"\n        />\n      </p-inputGroupAddon>\n      @if (props.enabledEditMode) {\n        <p-inputGroupAddon>\n          <p-button\n            [icon]=\"readonly() ? 'fa fa-lock' : 'fa fa-unlock-alt'\"\n            [title]=\"'Edit mode' | translate\"\n            (click)=\"onEdit()\"\n            severity=\"secondary\"\n            variant=\"text\"\n          />\n        </p-inputGroupAddon>\n      }\n    </p-inputGroup>\n    @if (!showError && hasBeenGenerated()) {\n      <div class=\"core:text-muted-color core:my-4\" translate>The password has been copied to the clipboard.</div>\n    }\n  `,\n  imports: [\n    InputGroup,\n    FormsModule,\n    InputText,\n    ReactiveFormsModule,\n    NgClass,\n    InputGroupAddon,\n    TranslateDirective,\n    TranslatePipe,\n    Button,\n  ],\n})\nexport class PasswordGeneratorComponent extends FieldType<FieldTypeConfig<PasswordGeneratorProps>> implements OnInit {\n  protected httpClient: HttpClient = inject(HttpClient);\n  protected clipboard: Clipboard = inject(Clipboard);\n\n  passwordField: Signal<ElementRef | undefined> = viewChild('password');\n\n  /** Default options */\n  defaultOptions: Partial<FieldTypeConfig<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      api: '',\n    },\n  };\n\n  readonly hasBeenGenerated = signal(false);\n\n  /** Field password type (show or hide password) */\n  readonly type = signal<'text' | 'password'>('password');\n\n  /** Tracks props.readonly reactively - mutated directly in onEdit(), not via Formly expressions */\n  readonly readonly = signal(true);\n\n  /** OnInit hook */\n  ngOnInit(): void {\n    this.readonly.set(this.props.readonly);\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._applyPassword(password);\n  }\n\n  /** Hide or show password data */\n  showHidePassword(): void {\n    this.type.set(this.type() === 'password' ? 'text' : 'password');\n  }\n\n  onEdit(): void {\n    const newValue = !this.readonly();\n    this.props.readonly = newValue;\n    this.readonly.set(newValue);\n    if (!newValue) {\n      this.passwordField()?.nativeElement.focus();\n    }\n  }\n\n  private _applyPassword(password: string): void {\n    this.formControl.setValue(password);\n    this.clipboard.copy(this.formControl.errors ? ' ' : password);\n    this.hasBeenGenerated.set(true);\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._applyPassword(GeneratePassword(this.props.generateOptions));\n  }\n\n  /** Call backend api entrypoint */\n  private _callApi(): void {\n    this.httpClient\n      .get(this.props.api, {\n        responseType: 'text',\n        params: {\n          length: this.props.minLength,\n          special_char: this.props.specialChar,\n        },\n      })\n      .subscribe((password: string) => this._applyPassword(password));\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Injector, OnInit, runInInjectionContext, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { RadioButton } from 'primeng/radiobutton';\nimport { Observable, of } from 'rxjs';\n\ninterface RadioButtonProps {\n  options: Observable<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 optionValues(); 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 optionValues(); track option.value) {\n          <ng-container [ngTemplateOutlet]=\"radioButton\" [ngTemplateOutletContext]=\"{ option }\" />\n        }\n      </div>\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [RadioButton, FormsModule, ReactiveFormsModule, NgTemplateOutlet, TranslatePipe],\n})\nexport class RadioButtonComponent extends FieldType<FieldTypeConfig<RadioButtonProps>> implements OnInit {\n  private injector = inject(Injector);\n\n  defaultOptions?: Partial<FieldTypeConfig<RadioButtonProps>> = {\n    props: {\n      options: of([]),\n      style: 'stacked',\n    },\n  };\n\n  optionValues!: Signal<Option[]>;\n\n  ngOnInit(): void {\n    this.optionValues = runInInjectionContext(this.injector, () =>\n      toSignal(this.props.options ?? of([]), { initialValue: [] })\n    );\n  }\n\n  get disabledControl() {\n    return new FormControl({ value: this.formControl.value, disabled: true });\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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  public getSuggestions(\n    _query: string,\n    _queryOptions: IQueryOptions,\n    _currentPid: string | null,\n  ): 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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, inject, Injector, OnInit, runInInjectionContext, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { AutoComplete, AutoCompleteCompleteEvent, AutoCompleteSelectEvent } from 'primeng/autocomplete';\nimport { Button } from 'primeng/button';\nimport { Select, SelectChangeEvent } from 'primeng/select';\nimport { map, of, shareReplay, startWith, Subject, switchMap } from 'rxjs';\nimport { CONFIG } from '../../../core/config/config';\nimport { removeChars } from '../../../core/utils/utils';\nimport { TranslateLabelService } from '../../service/translate-label.service';\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  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      style=\"padding-inline: 0; padding-block: 0\"\n      class=\"core:flex core:gap-1\"\n      [ngClass]=\"{ 'p-inputtext ng-invalid ng-dirty': showError }\"\n    >\n      @if (!field.formControl.value) {\n        @if (props.filters?.options) {\n          <p-select\n            [options]=\"optionValues()\"\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          inputStyleClass=\"core:w-full\"\n          [scrollHeight]=\"props.scrollHeight\"\n          [minQueryLength]=\"props.minLength\"\n          [maxlength]=\"props.maxLength || null\"\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  imports: [NgClass, Select, FormsModule, AutoComplete, Button, TranslatePipe],\n})\nexport class RemoteAutocompleteComponent\n  extends FieldType<FieldTypeConfig<IRemoteAutoCompleteProps>>\n  implements OnInit, AfterViewInit\n{\n  protected translateService: TranslateService = inject(TranslateService);\n  protected remoteAutocompleteService = inject(RemoteAutocompleteService);\n  protected route = inject(ActivatedRoute);\n  protected translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n  private injector = inject(Injector);\n\n  protected query = new Subject<IQuery>();\n\n  protected onValueSelect = new Subject<IValueSelect>();\n\n  suggestions = toSignal(\n    this.query.pipe(\n      switchMap((data: IQuery) =>\n        this.remoteAutocompleteService.getSuggestions(\n          removeChars(data.query),\n          data.queryOptions,\n          data.recordPid,\n        )\n      ),\n    ),\n    { initialValue: [] },\n  );\n\n  valueSelected = toSignal(\n    this.onValueSelect.pipe(\n      switchMap((data: IValueSelect) => this.remoteAutocompleteService.getValueAsHTML(data.queryOptions, data.item)),\n    ),\n  );\n\n  /** Default properties */\n  defaultOptions: Partial<FieldTypeConfig<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!: Signal<any[]>;\n\n  ngOnInit(): void {\n    const options$ = (this.props.filters?.options ?? of([])).pipe(shareReplay(1));\n    this.optionValues = runInInjectionContext(this.injector, () =>\n      toSignal(\n        this.translateService.onLangChange.pipe(\n          startWith(null),\n          switchMap(() => options$),\n          map((options: any) => this.translateLabelService.translateLabel(options)),\n        ),\n        { initialValue: [] },\n      ),\n    );\n  }\n\n  ngAfterViewInit(): void {\n    if (this.field.props.filters && this.field.props.queryOptions) {\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    if (this.field.props.queryOptions) {\n      this.field.props.queryOptions.filter = filter.value;\n      this.value = '';\n    }\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  Injector,\n  OnInit,\n  Signal,\n  signal,\n  Type,\n  viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { FormlyFieldSelectProps } from '@ngx-formly/core/select';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { _, TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { Select } from 'primeng/select';\nimport { combineLatest, map, Observable, of, startWith } from 'rxjs';\nimport { CONFIG } from '../../../core/config/config';\nimport { TranslateLabelService } from '../../service/translate-label.service';\n\nexport interface ISelectProps extends FormlyFieldProps, FormlyFieldSelectProps {\n  appendTo?: any;\n  autofocus?: boolean;\n  class: 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  options?: Observable<ISelectOption[]>;\n  items: ISelectProps[];\n}\n\nexport interface ISelectOption {\n  label?: string;\n  untranslatedLabel?: string;\n  value?: unknown;\n  items?: ISelectOption[];\n  children?: ISelectOption[];\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        [autofocus]=\"props.autofocus\"\n        [class]=\"props.class\"\n        [dropdownIcon]=\"props.dropdownIcon\"\n        [editable]=\"props.editable\"\n        [emptyFilterMessage]=\"props.emptyFilterMessage\"\n        [emptyMessage]=\"props.emptyMessage\"\n        [filter]=\"filterEnabled()\"\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()\"\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        [class]=\"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  imports: [Select, FormsModule, ReactiveFormsModule, FormlyModule, NgClass, TranslatePipe],\n  providers: [TranslateLabelService],\n})\nexport class SelectComponent extends FieldType<FieldTypeConfig<ISelectProps>> implements OnInit {\n  private injector: Injector = inject(Injector);\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n\n  optionValues: Signal<ISelectOption[]> = signal([]);\n  filterEnabled = computed(() => this.enableFilter(this.optionValues(), 0).enabled);\n\n  /** Reference to the underlying PrimeNG select, used to open its panel programmatically. */\n  private select = viewChild(Select);\n\n  /** Ensures the panel is opened only once when `autofocus` is enabled. */\n  private hasAutoOpened = false;\n\n  /** Default properties */\n  defaultOptions: Partial<FieldTypeConfig<ISelectProps>> = {\n    props: {\n      autofocus: false,\n      disabled: false,\n      editable: false,\n      filterMatchMode: 'contains',\n      emptyFilterMessage: '',\n      emptyMessage: '',\n      fluid: true,\n      items: [],\n      class: '',\n      group: false,\n      placeholder: _('Select…'),\n      required: false,\n      scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n      sort: false,\n      tooltip: '',\n      tooltipPosition: 'top',\n      tooltipPositionStyle: 'absolute',\n    },\n  };\n\n  ngOnInit(): void {\n    if (this.props.disabled) {\n      this.formControl.disable();\n    }\n\n    const optionsObs = this.props.options ?? of([]);\n    const langChangeObs = this.translateService.onLangChange.pipe(startWith(null));\n    this.optionValues = toSignal(\n      combineLatest([optionsObs, langChangeObs]).pipe(\n        map(([options]) => this.translateLabelService.translateLabel(options)),\n      ),\n      { initialValue: [], injector: this.injector },\n    );\n\n    // When autofocus is set, open the panel once options are loaded.\n    // Uses injector so effect() can be called outside the constructor.\n    effect(\n      () => {\n        const select = this.select();\n        const hasOptions = this.optionValues().length > 0;\n        if (!this.props.autofocus || this.hasAutoOpened) {\n          return;\n        }\n        if (select && hasOptions) {\n          this.hasAutoOpened = true;\n          select.show(true);\n        }\n      },\n      { injector: this.injector },\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  private enableFilter(options: ISelectOption[] | undefined, 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  clearValidators() {\n    const { errors } = this.formControl;\n    this.formControl.setErrors(errors?.required ? { required: true } : null);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { ToggleSwitch } from 'primeng/toggleswitch';\nimport { Tooltip } from 'primeng/tooltip';\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  imports: [ToggleSwitch, NgClass, FormsModule, ReactiveFormsModule, FormlyModule, Tooltip],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchComponent extends FieldType<FieldTypeConfig<SwitchProps>> {\n  /** Default properties */\n  defaultOptions: Partial<FieldTypeConfig<SwitchProps>> = {\n    props: {\n      hideLabel: true,\n    },\n  };\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { AbstractControl, FormsModule, ReactiveFormsModule, ValidatorFn } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyModule } from '@ngx-formly/core';\nimport { FormlyFieldProps } from '@ngx-formly/primeng/form-field';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Textarea } from 'primeng/textarea';\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        }\"\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        }\"\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  imports: [FormsModule, Textarea, ReactiveFormsModule, FormlyModule, NgClass, NgTemplateOutlet, TranslatePipe],\n})\nexport class TextareaFieldComponent extends FieldType<FieldTypeConfig<ExtraTextAreaProps>> implements OnInit {\n  /** Default properties */\n  defaultOptions?: Partial<FieldTypeConfig<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) && this.formControl.validator) {\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, unknown> | 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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, OnInit, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { FieldType, FieldTypeConfig, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { FormlySelectOption } from '@ngx-formly/core/select';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { TreeNode } from 'primeng/api';\nimport { TreeNodeSelectEvent } from 'primeng/tree';\nimport { TreeSelect } from 'primeng/treeselect';\nimport { combineLatest, map, of, startWith, tap } from 'rxjs';\nimport { CONFIG } from '../../../core/config/config';\nimport { TranslateLabelService } from '../../service/translate-label.service';\n\nexport interface NgCoreTreeSelectOption extends FormlySelectOption {\n  children?: NgCoreTreeSelectOption[];\n}\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: 'filled' | 'outlined';\n}\n\n@Component({\n  selector: 'ng-core-tree-select',\n  changeDetection: ChangeDetectionStrategy.OnPush,\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  imports: [TreeSelect, FormlyModule, FormsModule, NgClass, TranslatePipe],\n  providers: [TranslateLabelService],\n})\nexport class TreeSelectComponent extends FieldType<FieldTypeConfig<ITreeSelectProps>> implements OnInit {\n  private readonly destroyRef = inject(DestroyRef);\n  private translateService: TranslateService = inject(TranslateService);\n  private translateLabelService: TranslateLabelService = inject(TranslateLabelService);\n\n  filter = false;\n\n  /** Default properties */\n  defaultOptions: Partial<FieldTypeConfig<ITreeSelectProps>> = {\n    props: {\n      filterBy: 'label',\n      filterInputAutoFocus: true,\n      disabled: false,\n      fluid: true,\n      class: '',\n      containerStyleClass: '',\n      panelClass: '',\n      panelStyleClass: '',\n      placeholder: 'Select…',\n      scrollHeight: CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT,\n      variant: 'outlined',\n    },\n  };\n\n  readonly nodeSelected = signal<TreeNode | null>(null);\n  readonly optionValues = signal<TreeNode[]>([]);\n\n  ngOnInit(): void {\n    const optionsObs = this.props.options ?? of([]);\n    const langChangeObs = this.translateService.onLangChange.pipe(startWith(null));\n    combineLatest([optionsObs, langChangeObs]).pipe(\n      tap(([options]) => {\n        this.filter = this.enableFilter(options, 0).enabled;\n      }),\n      map(([options]) => this.translateLabelService.translateLabel(options)),\n      takeUntilDestroyed(this.destroyRef),\n    ).subscribe((options: TreeNode[]) => {\n      this.optionValues.set(options);\n      this.nodeSelected.set(this.formControl?.value ? this.findNodeByValue(options, this.formControl.value) : null);\n    });\n\n    this.formControl?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n      this.nodeSelected.set(value ? this.findNodeByValue(this.optionValues(), value) : null);\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?: NgCoreTreeSelectOption[], 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  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): TreeNode | null {\n    if (!data) {\n      node.map((treeNode: TreeNode) => {\n        if (treeNode.data === value) {\n          data = treeNode;\n        } else if (treeNode.children) {\n          data = this.findNodeByValue(treeNode.children, value, data) ?? undefined;\n        }\n      });\n    }\n\n    return data ?? null;\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Tooltip } from 'primeng/tooltip';\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  imports: [Tooltip],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownLabelEditorComponent {\n  // current form field configuration\n  readonly field = input.required<FormlyFieldConfig>();\n\n  // can we add a new element to the related array\n  readonly canAdd = input.required<boolean>();\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (field().props?.label) {\n  <div class=\"core:flex core:items-center\">\n    <span class=\"p-fieldset-legend-label\" [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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItem } from 'primeng/api';\nimport { merge, of, switchMap } from 'rxjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DropdownLabelEditorComponent } from '../dropdown-label-editor/dropdown-label-editor.component';\nimport { Button } from 'primeng/button';\nimport { TieredMenu } from 'primeng/tieredmenu';\nimport { Tooltip } from 'primeng/tooltip';\n\n@Component({\n  selector: 'ng-core-label-editor',\n  templateUrl: './label.component.html',\n  imports: [NgTemplateOutlet, DropdownLabelEditorComponent, Button, TieredMenu, Tooltip],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LabelComponent {\n  protected translateService: TranslateService = inject(TranslateService);\n  private destroyRef = inject(DestroyRef);\n\n  // Current field\n  readonly field = input.required<FormlyFieldConfig>();\n\n  items = signal<MenuItem[]>([]);\n\n  // Subscribes to translate.stream() so the label re-renders on language change\n  // in zoneless mode. switchMap re-subscribes when field() changes.\n  readonly label = toSignal(\n    toObservable(this.field).pipe(\n      switchMap((field) => {\n        const untranslated = field.props?.['untranslatedLabel'] ?? field.props?.label;\n        return untranslated ? this.translateService.stream(untranslated) : of('');\n      })\n    ),\n    { initialValue: '' }\n  );\n\n  // Tracks props.required reactively — Formly mutates props directly (plain JS),\n  // so we subscribe to fieldChanges to propagate the change into a signal.\n  readonly required = signal(false);\n\n  readonly isRoot = computed(() => this.field().props?.isRoot ?? false);\n\n  readonly getIndex = computed(() => {\n    const field = this.field();\n    return field?.parent?.type === 'array' ? Number(field.key) : 0;\n  });\n\n  // Writable signal — Formly mutates fieldGroup items (hide flag) without changing the field\n  // reference, so computed() would not recompute. Updated explicitly via fieldChanges subscriptions.\n  readonly hasMenu = signal(false);\n\n  // Writable signal — field.hide is mutated directly by Formly without changing the field reference.\n  readonly canRemove = signal(false);\n\n  readonly canAdd = computed(() => {\n    const field = this.field();\n    if (field.parent?.type === 'array') {\n      return field.parent.props?.canAdd();\n    }\n    return false;\n  });\n\n  // Writable signal — field.fieldGroup array is mutated (items added/removed) without reference change.\n  readonly canAddItem = signal(false);\n\n  constructor() {\n    // Update items when field changes or its children's hidden state changes.\n    // Also tracks props.required via fieldChanges (Formly mutates props directly).\n    effect((onCleanup) => {\n      const field = this.field();\n      this.required.set(field.props?.required ?? false);\n      this._updateHasMenu();\n      this._updateCanRemove();\n      this._updateCanAddItem();\n      this.updateItems();\n\n      const subs: (() => void)[] = [];\n\n      if (field.options?.fieldChanges) {\n        const sub = field.options.fieldChanges.subscribe(() => {\n          this.required.set(field.props?.required ?? false);\n          this._updateCanRemove();\n          this._updateCanAddItem();\n        });\n        subs.push(() => sub.unsubscribe());\n      }\n\n      const fields = this.getFieldGroup(field);\n      if (fields?.length) {\n        const sub = merge(...fields.map((child) => child.options?.fieldChanges)).subscribe((changes) => {\n          if (changes.type === 'hidden') {\n            this._updateHasMenu();\n            this.updateItems();\n          }\n        });\n        subs.push(() => sub.unsubscribe());\n      }\n\n      onCleanup(() => subs.forEach((fn) => fn()));\n    });\n\n    // Update items on language change.\n    this.translateService.onLangChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.updateItems());\n  }\n\n  private _updateCanRemove(): void {\n    const field = this.field();\n    switch (field.parent?.type) {\n      case 'object':\n        if (!field.props?.editorConfig?.longMode) {\n          this.canRemove.set(false);\n          return;\n        }\n        this.canRemove.set(!this.required() && !field.hide);\n        return;\n      case 'array':\n        this.canRemove.set(field.parent.props?.canRemove());\n        return;\n      default:\n        this.canRemove.set(false);\n    }\n  }\n\n  private _updateCanAddItem(): void {\n    const field = this.field();\n    if (field.type === 'array' && field.props?.canAdd) {\n      this.canAddItem.set(field.props.canAdd() && field.fieldGroup?.length === 0);\n    } else {\n      this.canAddItem.set(false);\n    }\n  }\n\n  private _updateHasMenu(): void {\n    const field = this.field();\n    if (field?.fieldGroup?.[0]?.type === 'multischema' || field.fieldGroup == null) {\n      this.hasMenu.set(false);\n      return;\n    }\n    this.hasMenu.set(\n      !!(\n        (this.hiddenFieldGroup(this.getFieldGroup(field)).length > 0 || field.props?.helpURL) &&\n        field.props?.editorConfig?.longMode\n      ),\n    );\n  }\n\n  updateItems(): void {\n    const field = this.field();\n    const fieldGroup = this.getFieldGroup(field);\n    if (this.hasMenu() && fieldGroup) {\n      this.items.set(\n        this.hiddenFieldGroup(fieldGroup).map((f: any) => {\n          if (!f.props.untranslatedLabel) {\n            f.props.untranslatedLabel = f.props.label;\n          }\n          return {\n            label: this.translateService.instant(f.props.untranslatedLabel),\n            command: () => this.show(f),\n          };\n        }),\n      );\n    }\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): FormlyFieldConfig[] | undefined {\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    // [0] is the enum i.e. (select) for the oneOf\n    const multischemaFieldGroup = field.fieldGroup?.[0];\n    if (multischemaFieldGroup?.type === 'multischema') {\n      let activeGroups = multischemaFieldGroup.fieldGroup?.[1]?.fieldGroup;\n      if (activeGroups?.length) {\n        activeGroups = activeGroups.filter((f) => f.hide === false);\n        return activeGroups;\n      }\n    }\n    return field.fieldGroup;\n  }\n\n  /**\n   * Filter the fieldGroup to return the list of hidden fields.\n   * @param fieldGroup - FormlyFieldConfig[], the fieldGroup to filter\n   * @returns FormlyFieldConfig[], the filtered list\n   */\n  hiddenFieldGroup(fieldGroup?: FormlyFieldConfig[]): FormlyFieldConfig[] {\n    if (!fieldGroup) {\n      return [];\n    }\n    return fieldGroup.filter((f) => f.hide && !f?.expressions?.hide);\n  }\n\n  /**\n   * Hide the field\n   * @param field - FormlyFieldConfig, the field to hide\n   */\n  remove(): void {\n    const field = this.field();\n    if (field?.parent?.type === 'object') {\n      if (field.props?.setHide) {\n        field.props.setHide(field, true);\n      } else {\n        field.hide = true;\n      }\n    }\n    if (field?.parent?.type === 'array') {\n      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): void {\n    if (field.props?.setHide) {\n      field.props.setHide(field, false);\n    } else {\n      field.hide = false;\n    }\n  }\n\n  /**\n   * Add a new item element\n   */\n  addItem(): void {\n    const field = this.field();\n    if (field.type === 'array') {\n      field.props?.add(0);\n    }\n  }\n\n  /**\n   * Add a array item after the current field.\n   */\n  add(): void {\n    const field = this.field();\n    if (field.parent?.type === 'array') {\n      field.parent.props?.add(this.getIndex() + 1);\n    }\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (field()) {\n  <!-- header and menu -->\n  @if (!isRoot()) {\n    <ng-container *ngTemplateOutlet=\"hasMenu() ? 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\n            icon=\"fa fa-caret-down\"\n            severity=\"secondary\"\n            size=\"small\"\n            [text]=\"true\"\n            (onClick)=\"menu.toggle($event)\"\n          />\n          <p-tieredMenu #menu [model]=\"items()\" [popup]=\"true\" appendTo=\"body\" />\n        </div>\n      </ng-container>\n      <ng-container buttons>\n        <div class=\"core:flex\">\n          @if (canAddItem()) {\n            <p-button icon=\"fa fa-plus\" severity=\"secondary\" size=\"small\" [text]=\"true\" (onClick)=\"addItem()\" />\n          }\n          @if (canAdd()) {\n            <p-button\n              id=\"{{ f.id }}-clone-button\"\n              icon=\"fa fa-clone\"\n              severity=\"secondary\"\n              size=\"small\"\n              [text]=\"true\"\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              size=\"small\"\n              [text]=\"true\"\n              (onClick)=\"remove()\"\n            />\n          }\n        </div>\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 (label()) {\n        <label class=\"p-fieldset-legend-label\" [attr.for]=\"f.id\" [pTooltip]=\"f.props.description\" tooltipPosition=\"top\">\n          {{ label() }}\n        </label>\n        @if (required() && f.props.hideRequiredMarker !== true) {\n          *\n        }\n        @if (canAddItem()) {\n          <p-button icon=\"fa fa-plus\" severity=\"secondary\" [text]=\"true\" size=\"small\" (onClick)=\"addItem()\" />\n        }\n        @if (canAdd()) {\n          <p-button\n            id=\"{{ f.id }}-clone-button\"\n            icon=\"fa fa-clone\"\n            [text]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\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            [text]=\"true\"\n            severity=\"secondary\"\n            size=\"small\"\n            (onClick)=\"remove()\"\n          />\n        }\n      }\n    </div>\n  </ng-template>\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FieldWrapper } from '@ngx-formly/core';\nimport { Fieldset } from 'primeng/fieldset';\nimport { LabelComponent } from '../../component/label/label.component';\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  imports: [Fieldset, LabelComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardWrapperComponent extends FieldWrapper implements OnInit {\n  ngOnInit(): void {\n    // remove the field label as it is displayed by this wrapper\n    if (this.field.props) {\n      this.field.props.hideLabel = true;\n    }\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FieldWrapper, FormlyModule } from '@ngx-formly/core';\nimport { Tooltip } from 'primeng/tooltip';\nimport { Button } from 'primeng/button';\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  imports: [Tooltip, Button, FormlyModule],\n})\nexport class FormFieldWrapperComponent extends FieldWrapper {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, 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  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HideWrapperComponent extends FieldWrapper {}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { FieldArrayType, FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { LabelComponent } from '../../component/label/label.component';\n\n/**\n * Component for displaying array fields in editor.\n */\n@Component({\n  selector: 'ng-core-editor-formly-array',\n  templateUrl: 'array.component.html',\n  imports: [LabelComponent, FormlyModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ArrayComponent extends FieldArrayType implements OnInit {\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    // props is a plain object mutation — emit fieldChanges so LabelComponent\n    // re-evaluates canAddItem after these callbacks are set.\n    this.field.options?.fieldChanges?.next({ field: this.field, type: 'hidden', value: false });\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    if (!this.field.fieldGroup) {\n      return false;\n    }\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    if (!this.field.fieldGroup) {\n      return false;\n    }\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    if (this.field.fieldGroup == null) {\n      return;\n    }\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","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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) {\n      @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    }\n  </div>\n</div>\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ConfigOption } from '@ngx-formly/core';\nimport { withFormlyPrimeNG } from '@ngx-formly/primeng';\nimport { DatePickerComponent } from '../types/date-picker/date-picker.component';\nimport { InputComponent } from '../types/input/input.component';\nimport { MarkdownFieldComponent } from '../types/markdown/markdown.component';\nimport { MultiCheckboxComponent } from '../types/multi-checkbox/multi-checkbox.component';\nimport { MultiSelectComponent } from '../types/multi-select/multi-select.component';\nimport { MultiSchemaComponent } from '../types/multischema/multischema.component';\nimport { ObjectComponent } from '../types/object/object.component';\nimport { PasswordGeneratorComponent } from '../types/password-generator/password-generator.component';\nimport { RadioButtonComponent } from '../types/radio-button/radio-button.component';\nimport { RemoteAutocompleteComponent } from '../types/remote-autocomplete/remote-autocomplete.component';\nimport { SelectComponent } from '../types/select/select.component';\nimport { SwitchComponent } from '../types/switch/switch.component';\nimport { TextareaFieldComponent } from '../types/textarea/textarea.component';\nimport { TreeSelectComponent } from '../types/tree-select/tree-select.component';\nimport { emailValidator } from '../validator/email.validator';\nimport { CardWrapperComponent } from '../wrappers/card-wrapper/card-wrapper.component';\nimport { FormFieldWrapperComponent } from '../wrappers/form-field-wrapper/form-field-wrapper.component';\nimport { HideWrapperComponent } from '../wrappers/hide-wrapper/hide-wrapper.component';\nimport { ArrayComponent } from '../types/array/array.component';\n\n/**\n * Default Formly configuration for ng-core\n * Can be used with provideFormlyCore(withNgCoreFormly())\n */\nexport function withNgCoreFormly(): ConfigOption[] {\n  return [\n    ...withFormlyPrimeNG(),\n    {\n      extensions: [{ name: 'email', extension: { prePopulate: emailValidator } }],\n      extras: {\n        checkExpressionOn: 'changeDetectionCheck',\n        resetFieldOnHide: true,\n      },\n      types: [\n        {\n          name: 'datePicker',\n          component: DatePickerComponent,\n          wrappers: ['form-field'],\n        },\n        {\n          name: 'dateTimePicker', // For compatibility TODO: remove in future\n          extends: 'datePicker',\n        },\n        {\n          name: 'multi-select',\n          component: MultiSelectComponent,\n          wrappers: ['form-field'],\n        },\n        {\n          name: 'tree-select',\n          component: TreeSelectComponent,\n          wrappers: ['form-field'],\n        },\n        {\n          name: 'multi-checkbox',\n          component: MultiCheckboxComponent,\n          wrappers: ['form-field'],\n        },\n        {\n          name: 'input',\n          component: InputComponent,\n          wrappers: ['form-field'],\n        },\n        { name: 'string', extends: 'input' },\n        {\n          name: 'select',\n          component: SelectComponent,\n          wrappers: ['form-field'],\n        },\n        { name: 'enum', extends: 'select' },\n        {\n          name: 'number',\n          extends: 'input',\n          defaultOptions: {\n            props: {\n              type: 'number',\n            },\n          },\n        },\n        {\n          name: 'remoteAutoComplete',\n          component: RemoteAutocompleteComponent,\n        },\n        {\n          name: 'integer',\n          extends: 'input',\n          defaultOptions: {\n            props: {\n              type: 'number',\n            },\n          },\n        },\n        { name: 'boolean', component: SwitchComponent },\n        { name: 'enum', extends: 'select' },\n        { name: 'array', component: ArrayComponent, wrappers: ['card'] },\n        { name: 'object', component: ObjectComponent, wrappers: ['card'] },\n        { name: 'multischema', component: MultiSchemaComponent },\n        { name: 'textarea', component: TextareaFieldComponent },\n        { name: 'markdown', component: MarkdownFieldComponent },\n        { name: 'passwordGenerator', component: PasswordGeneratorComponent },\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  ];\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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?: string[];\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: string | undefined = undefined;\n  apiBaseUrl = '';\n  apiEndpointPrefix = '/api';\n  schemaFormEndpoint = '/api/schemaform';\n  $refPrefix = '';\n  languages = ['en'];\n  defaultLanguage = 'en';\n  secretPassphrase = 'ShERWIN53SnAggIng48rELAtiVes';\n  translationsURLs: string[] = [];\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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 { InterpolatableTranslationObject, TranslateService } from '@ngx-translate/core';\nimport { Settings } from 'luxon';\nimport { de } from 'primelocale/js/de.js';\nimport { en } from 'primelocale/js/en.js';\nimport { fr } from 'primelocale/js/fr.js';\nimport { it } from 'primelocale/js/it.js';\nimport { PrimeNG } from 'primeng/config';\nimport { Observable } from 'rxjs';\nimport { CoreConfigService } from '../../../core/service/core-config/core-config.service';\nimport { Translation } from 'primeng/api';\n\ntype Locales = Record<\n  string,\n  {\n    angular: unknown;\n    primeng: Translation;\n  }\n>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgCoreTranslateService extends TranslateService {\n  protected primeNG: PrimeNG = inject(PrimeNG);\n  protected coreConfigService: CoreConfigService = inject(CoreConfigService);\n\n  private locales: 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  constructor() {\n    super();\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.setFallbackLang(this.coreConfigService.defaultLanguage);\n    if (!super.getCurrentLang()) {\n      super.use(this.coreConfigService.defaultLanguage);\n    }\n  }\n\n  use(lang: string): Observable<InterpolatableTranslationObject> {\n    Settings.defaultLocale = lang;\n    if (this.locales[lang]) {\n      this.primeNG.setTranslation(this.locales[lang].primeng);\n    }\n    return super.use(lang);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Title } from '@angular/platform-browser';\nimport { RouterStateSnapshot, TitleStrategy } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Config, CoreConfigService } from '../core-config/core-config.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PageTitleStrategy extends TitleStrategy {\n  private title = inject(Title);\n  private config: Config = inject(CoreConfigService);\n  private translate = inject(TranslateService);\n  private lastRouterState: RouterStateSnapshot | null = null;\n\n  constructor() {\n    super();\n    this.translate.onLangChange\n      .pipe(takeUntilDestroyed(inject(DestroyRef)))\n      .subscribe(() => {\n        if (this.lastRouterState) {\n          this.updateTitle(this.lastRouterState);\n        }\n      });\n  }\n\n  override updateTitle(routerState: RouterStateSnapshot): void {\n    this.lastRouterState = routerState;\n\n    const routeTitle = this.buildTitle(routerState);\n    const projectTitle = this.config.projectTitle ?? '';\n    const translatedRouteTitle = routeTitle ? this.translate.instant(routeTitle) : '';\n\n    const fullTitle =\n      translatedRouteTitle && projectTitle\n        ? `${translatedRouteTitle} | ${projectTitle}`\n        : translatedRouteTitle || projectTitle || '-';\n\n    this.title.setTitle(fullTitle);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { TitleStrategy } from '@angular/router';\nimport { FORMLY_CONFIG, provideFormlyCore } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { DialogService } from 'primeng/dynamicdialog';\nimport { registerNgCoreFormlyExtension } from '../formly/config/extensions';\nimport { withNgCoreFormly } from '../formly/config/formly-config';\nimport { NgCoreTranslateService } from '../translate/service/translate/translate-service';\nimport { PageTitleStrategy } from './service/page-title-strategy/page-title-strategy';\n\nexport function provideCore(): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    ConfirmationService,\n    DialogService,\n    MessageService,\n    provideFormlyCore(withNgCoreFormly()),\n    {\n      provide: FORMLY_CONFIG,\n      multi: true,\n      useFactory: registerNgCoreFormlyExtension,\n      deps: [TranslateService],\n    },\n    {\n      provide: TitleStrategy,\n      useClass: PageTitleStrategy,\n    },\n    {\n      provide: TranslateService,\n      useClass: NgCoreTranslateService,\n    },\n  ]);\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport {\n  afterNextRender,\n  booleanAttribute,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n} from '@angular/core';\nimport renderMathInElement, { RenderMathInElementOptions } from 'katex/contrib/auto-render';\n\n/**\n * KaTeX auto-render directive.\n *\n * This directive automatically renders LaTeX math expressions\n * inside the host element whenever:\n * - the directive inputs change (Signals)\n * - the DOM content of the element changes (innerHTML, *ngIf, async updates, etc.)\n *\n * It relies on:\n * - Angular Signals (`effect`)\n * - DOM MutationObserver (to track dynamic content)\n *\n * Docs:\n * https://katex.org/docs/autorender.html\n */\n/* eslint-disable @angular-eslint/directive-selector */\n@Directive({\n  selector: '[katex]',\n})\n/* eslint-enable @angular-eslint/directive-selector */\nexport class KatexDirective implements OnDestroy {\n  /**\n   * Reference to the host DOM element.\n   */\n  private readonly el = inject(ElementRef<HTMLElement>);\n\n  /**\n   * Boolean attribute to enable/disable KaTeX rendering.\n   *\n   * Usage:\n   *  <span katex></span>\n   *  <span [katex]=\"true\"></span>\n   *  <span [katex]=\"false\"></span>\n   */\n  readonly katex = input(false, { transform: booleanAttribute });\n\n  /**\n   * Optional KaTeX auto-render configuration.\n   *\n   * Example:\n   *  [katexOptions]=\"{ delimiters: [...] }\"\n   */\n  readonly katexOptions = input<RenderMathInElementOptions | undefined>(undefined);\n\n  /**\n   * MutationObserver used to detect changes\n   * inside the host element (text, HTML, children).\n   */\n  private observer?: MutationObserver;\n\n  constructor() {\n    /**\n     * React to Signal changes.\n     *\n     * This effect is triggered when:\n     * - `katex` input changes\n     * - `katexOptions` input changes\n     *\n     * The DOM mutations themselves are handled by the MutationObserver.\n     */\n    // Start observing DOM changes (only once)\n    // only when the element is rendered.\n    afterNextRender(() => {\n      this.startObserving();\n    });\n\n    effect(() => {\n      if (!this.katex()) {\n        return;\n      }\n      // Initial render\n      this.render();\n    });\n  }\n\n  /**\n   * Render KaTeX math expressions inside the host element.\n   */\n  private render(): void {\n    renderMathInElement(this.el.nativeElement, this.katexOptions());\n  }\n\n  /**\n   * Start observing DOM mutations to re-render KaTeX\n   * when the content of the element changes.\n   */\n  private startObserving(): void {\n    // Avoid registering multiple observers\n    if (this.observer) {\n      return;\n    }\n\n    this.observer = new MutationObserver(() => {\n      this.render();\n    });\n\n    this.observer.observe(this.el.nativeElement, {\n      childList: true,\n      subtree: true,\n      characterData: true,\n    });\n  }\n\n  /**\n   * Clean up the MutationObserver to avoid memory leaks.\n   */\n  ngOnDestroy(): void {\n    this.observer?.disconnect();\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { JsonObject } from '../model';\nimport { RecordType } from '../record/model';\n\nexport interface RouteDataTypesInterface<TMetadata = JsonObject> {\n  /** Route name */\n  readonly name: string;\n\n  /** Get record types exposed by the current route */\n  getTypes(): Partial<RecordType<TMetadata>>[];\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Injectable } from '@angular/core';\nimport * as CryptoJS from 'crypto-js';\nimport { CoreConfigService } from '../core-config/core-config.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CryptoJsService {\n  protected coreConfigService: CoreConfigService = inject(CoreConfigService);\n\n  encrypt(value: string): string {\n    const _key = this.secretPassphrase();\n    return CryptoJS.AES.encrypt(value, _key, { iv: _key }).toString();\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(): CryptoJS.lib.WordArray {\n    return CryptoJS.enc.Utf8.parse(this.coreConfigService.secretPassphrase);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CryptoJsService } from '../crypto-js/crypto-js.service';\n\n/**\n * LocalStorageEvent interface\n */\nexport interface LocalStorageEvent {\n  key: string;\n  data: unknown;\n}\n\n/**\n * Service for managing data saved into local storage.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class LocalStorageService {\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<unknown>();\n\n  /**\n   * Event for clear on local storage\n   */\n  private onClear = new Subject<unknown>();\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: unknown) {\n    const data = { date: new Date(), data: value };\n    localStorage.setItem(key, this.cryptoService.encrypt(JSON.stringify(data)));\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(JSON.stringify(local)));\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(localStorage.getItem(key) || ''));\n  }\n\n  /**\n   * Return keys of LocaleStorage\n   * @return array\n   */\n  private keys() {\n    return Object.keys(localStorage);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Injectable } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { AbstractCanDeactivateComponent } from '../component/abstract-can-deactivate/abstract-can-deactivate.component';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { DialogComponent } from '../component/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  protected translateService: TranslateService = inject(TranslateService);\n  protected dialogService: DialogService = inject(DialogService);\n\n  ref: DynamicDialogRef<DialogComponent> | null = null;\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('Do you want to quit the page? The changes made so far will be lost.'),\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 || true;\n    }\n\n    return true;\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 { computed, Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class HttpPendingService {\n  private _count = signal(0);\n  readonly isPending = computed(() => this._count() > 0);\n\n  increment(): void { this._count.update(n => n + 1); }\n  decrement(): void { this._count.update(n => Math.max(0, n - 1)); }\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 { HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { finalize } from 'rxjs/operators';\nimport { HttpPendingService } from '../service/http-pending/http-pending.service';\n\nexport function httpPendingInterceptor(req: HttpRequest<unknown>, next: HttpHandlerFn) {\n  if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(req.method)) {\n    const service = inject(HttpPendingService);\n    service.increment();\n    return next(req).pipe(finalize(() => service.decrement()));\n  }\n  return next(req);\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nexport * from './pipe/nl2br/nl2br.pipe';\nexport * from './pipe/filesize/filesize.pipe';\nexport * from './pipe/truncate-text/truncate-text.pipe';\nexport * from './pipe/ucfirst/ucfirst.pipe';\nexport * from './pipe/markdown/markdown.pipe';\nexport * from './pipe/callback-array-filter/callback-array-filter.pipe';\nexport * from './validator/time.validator';\nexport * from './validator/unique.validator';\nexport * from './config/primeng-config';\nexport * from './config/config';\nexport * from './component/read-more/read-more.component';\nexport * from './component/dialog/dialog.component';\nexport * from './component/error/error.component';\nexport * from './component/error/error.interface';\nexport * from './component/search-input/search-input.component';\nexport * from './component/abstract-can-deactivate/abstract-can-deactivate.component';\nexport * from './utils/utils';\nexport * from './core.provider';\nexport * from './directive/katex.directive';\nexport * from './route-data-types.interface';\nexport * from './service/local-storage/local-storage.service';\nexport * from './service/crypto-js/crypto-js.service';\nexport * from './service/core-config/core-config.service';\nexport * from './guard/component-can-deactivate.guard';\nexport * from './service/page-title-strategy/page-title-strategy';\nexport * from './service/http-pending/http-pending.service';\nexport * from './interceptor/http-pending.interceptor';\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  Injector,\n  OnInit,\n  signal,\n  WritableSignal,\n  input,\n  viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\nimport { AutoComplete, AutoCompleteCompleteEvent, AutoCompleteSelectEvent } from 'primeng/autocomplete';\nimport { SelectChangeEvent } from 'primeng/select';\nimport { Listbox } from 'primeng/listbox';\nimport { EditorComponent } from '../../../record';\nimport { JsonObject } from '../../../model';\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  imports: [AutoComplete, Listbox, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AddFieldEditorComponent<TMetadata extends JsonObject = JsonObject> implements OnInit {\n  protected translateService: TranslateService = inject(TranslateService);\n  private readonly injector = inject(Injector);\n  private readonly onLangChange = toSignal(this.translateService.onLangChange, { initialValue: null });\n\n  /** Instance of EditorComponent */\n  readonly editorComponent = input.required<EditorComponent<TMetadata>>();\n\n  items: WritableSignal<FormlyFieldConfig[]> = signal([]);\n\n  suggestions: FormlyFieldConfig[] = [];\n\n  essentialsOptions = computed(() => (this.items() ?? []).filter((f) => this.isFieldEssential(f)));\n\n  readonly autocomplete = viewChild<AutoComplete>('addField');\n\n  onAddField(event: SelectChangeEvent): void {\n    this.editorComponent().setHide(event.value, false, true);\n  }\n\n  /** onInit hook */\n  ngOnInit(): void {\n    effect(\n      () => {\n        this.onLangChange();\n        this.fieldsTranslate(this.editorComponent().hiddenFields());\n      },\n      { injector: this.injector },\n    );\n  }\n\n  search(event: AutoCompleteCompleteEvent): void {\n    this.suggestions = this.items().filter((item) => {\n      return (item.props?.label ?? '').toLowerCase().indexOf(event.query.toLowerCase()) > -1;\n    });\n  }\n\n  onSelect(event: AutoCompleteSelectEvent): void {\n    this.editorComponent().setHide(event.value, false, true);\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: FormlyFieldConfig[]) {\n    this.items.set(\n      fields\n        .map((field) => {\n          if (field.props?.label) {\n            field.props.label = this.translateService.instant(field.props.untranslatedLabel);\n          }\n          return field;\n        })\n        .sort(\n          (field1: FormlyFieldConfig, field2: FormlyFieldConfig) =>\n            field1.props?.label?.localeCompare(field2.props?.label || '') || 0,\n        ),\n    );\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<div>\n  <p-autoComplete\n    [dropdown]=\"true\"\n    #addField\n    optionLabel=\"props.label\"\n    [placeholder]=\"'Add field' | translate\"\n    class=\"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 [options]=\"essentialsOptions()\" scrollHeight=\"\" class=\"core:mt-2\" (onChange)=\"onAddField($event)\">\n    <ng-template #item let-item>\n      {{ item.props.label }}\n    </ng-template>\n  </p-listbox>\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nexport * from './wrappers/hide-wrapper/hide-wrapper.component';\nexport * from './wrappers/card-wrapper/card-wrapper.component';\nexport * from './wrappers/form-field-wrapper/form-field-wrapper.component';\nexport * from './types/password-generator/password-generator.component';\nexport * from './types/array/array.component';\nexport * from './types/markdown/markdown.component';\nexport * from './types/textarea/textarea.component';\nexport * from './types/object/object.component';\nexport * from './types/multischema/multischema.component';\nexport * from './types/switch/switch.component';\nexport * from './types/radio-button/radio-button.component';\nexport * from './types/tree-select/tree-select.component';\nexport * from './types/multi-checkbox/multi-checkbox.component';\nexport * from './types/input/input.component';\nexport * from './types/multi-select/multi-select.component';\nexport * from './types/date-picker/date-picker.component';\nexport * from './types/remote-autocomplete/remote-autocomplete.service';\nexport * from './types/remote-autocomplete/remote-autocomplete.interface';\nexport * from './types/remote-autocomplete/remote-autocomplete.component';\nexport * from './types/select/select.component';\nexport * from './service/translate-label.service';\nexport * from './validator/email.validator';\nexport * from './config/formly-config';\nexport * from './config/extensions';\nexport * from './component/label/label.component';\nexport * from './component/dropdown-label-editor/dropdown-label-editor.component';\nexport * from './component/add-field-editor/add-field-editor.component';\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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;\n}\n\nexport const DEFAULT_ACTION_STATUS: ActionStatus = {\n  can: true,\n  message: '',\n};\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nexport * from './record.interface';\nexport * from './action-status.interface';\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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})\nexport class DateTranslatePipe extends DatePipe implements PipeTransform {\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(\n    value: Date | string | number | null | undefined,\n    format?: string,\n    timezone?: string,\n    locale?: string,\n  ): string | null {\n    if (!locale) {\n      locale = this.translateService.getCurrentLang();\n    }\n\n    if (locale === 'en') {\n      locale = `${locale}-GB`;\n    }\n\n    return super.transform(value, format, timezone, locale);\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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  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: Record<string, Record<string, string>> = { 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.getCurrentLang();\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateLanguageService } from '../../service/translate-language/translate-language.service';\n\n@Pipe({\n  name: 'translateLanguage',\n  pure: false,\n})\nexport class TranslateLanguagePipe implements PipeTransform {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { TranslateLoader, TranslationObject } from '@ngx-translate/core';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { CoreConfigService } from '../../core';\nimport de from '../i18n/de.json' with { type: 'json' };\nimport en from '../i18n/en.json' with { type: 'json' };\nimport fr from '../i18n/fr.json' with { type: 'json' };\nimport it from '../i18n/it.json' with { type: 'json' };\n\n/**\n * Loader for translations used in ngx-translate library.\n */\n@Injectable()\nexport class CoreTranslateLoader implements TranslateLoader {\n  // prefix: string;\n  // suffix: string;\n  // enforceLoading: boolean;\n  // useHttpBackend: boolean;\n\n  protected coreConfigService: CoreConfigService = inject(CoreConfigService);\n  protected http: HttpClient = inject(HttpClient);\n\n  // translations\n  private translations: Record<string, Record<string, string>> = {};\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: Record<string, Record<string, string>> = { 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<TranslationObject> {\n    // Already in cache\n    if (this.translations[lang] != null) {\n      return of(this.translations[lang]);\n    }\n\n    const urls: string[] = this.coreConfigService.translationsURLs;\n\n    // create the list of http requests\n    const observers = urls.map((url) => {\n      const langURL = url.replace('${lang}', lang);\n      return this.http.get<Record<string, string>>(langURL).pipe(\n        catchError(() => {\n          console.log(`ERROR: Cannot load translation: ${langURL}`);\n          return of({});\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        } else {\n          this.translations[lang] = {};\n        }\n        // get remote translations\n        translations.forEach((trans) => {\n          this.translations[lang] = {\n            ...this.translations[lang],\n            ...trans,\n          };\n        });\n        return this.translations[lang];\n      }),\n    );\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nexport * from './pipe/date-translate/date-translate-pipe';\nexport * from './pipe/translate-language/translate-language.pipe';\nexport * from './loader/translate-loader';\nexport * from './service/translate-language/translate-language.service';\nexport * from './service/translate/translate-service';\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { HttpHeaders } from '@angular/common/http';\nimport { inject, Pipe, PipeTransform } from '@angular/core';\nimport { catchError, map } from 'rxjs/operators';\nimport { extractIdOnRef } from '../../core/utils/utils';\nimport { RecordService } from '../service/record/record.service';\nimport { Observable, of } from 'rxjs';\nimport { JsonValue, RecordData } from '../../model';\n\n/**\n * Get a record by its PID.\n */\n@Pipe({ name: 'getRecord' })\nexport class GetRecordPipe implements PipeTransform {\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(\n    pid: string,\n    type: string,\n    returnType = 'object',\n    field?: string,\n    headers?: HttpHeaders | Record<string, string | string[]>,\n  ): Observable<RecordData | JsonValue | null> {\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\n      .getRecord(type, pid, { resolve:1, headers: headers || new HttpHeaders({ 'Content-Type': 'application/json' }) })\n      .pipe(\n        map((data) => {\n          if (!data) {\n            return null;\n          }\n          if ('object' === returnType) {\n            return data;\n          }\n          if (field && field in data.metadata) {\n            return data.metadata[field];\n          }\n          return null;\n        }),\n        catchError((error) => {\n          console.error('[GetRecordPipe]', error);\n          return of(null);\n        }),\n      );\n  }\n}\n","import { ParamMap } from '@angular/router';\nimport { SearchParams } from './model';\nimport { AggregationsFilter } from '../../public-api';\n\nexport function shallowEqual(a: unknown, b: unknown): boolean {\n  if (a === b) return true;\n\n  // null / undefined / primitive mismatch\n  if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n    return false;\n  }\n\n  // Arrays\n  if (Array.isArray(a) || Array.isArray(b)) {\n    if (!Array.isArray(a) || !Array.isArray(b)) {\n      return false;\n    }\n\n    if (a.length !== b.length) return false;\n\n    for (let i = 0; i < a.length; i++) {\n      if (!shallowEqual(a[i], b[i])) return false;\n    }\n    return true;\n  }\n\n  // Objects\n  const aObj = a as Record<string, unknown>;\n  const bObj = b as Record<string, unknown>;\n\n  const aKeys = Object.keys(aObj);\n  const bKeys = Object.keys(bObj);\n\n  if (aKeys.length !== bKeys.length) return false;\n\n  for (const key of aKeys) {\n    if (!(key in bObj)) return false;\n    if (!shallowEqual(aObj[key], bObj[key])) return false;\n  }\n\n  return true;\n}\n\nfunction stripUndefined<T extends object>(obj: T): Partial<T> {\n  return Object.fromEntries(Object.entries(obj).filter(([, v]) => v != undefined)) as Partial<T>;\n}\n\nexport function paramMapToSearchParams(map: ParamMap): Partial<SearchParams> {\n  const aggregationsFilters: AggregationsFilter[] = [];\n  map.keys.forEach((key: string) => {\n    if (['q', 'page', 'size', 'sort', 'index'].includes(key) === false) {\n      const values = map.getAll(key);\n      aggregationsFilters.push({ key, values });\n    }\n  });\n  return stripUndefined<object>({\n    q: map.get('q') != null ? map.get('q') : undefined,\n    page: map.get('page') ? +map.get('page')! : undefined,\n    size: map.get('size') ? +map.get('size')! : undefined,\n    sort: map.get('sort') != null ? map.get('sort') : undefined,\n    index: map.get('index') != null ? map.get('index') : undefined,\n    aggregationsFilters: aggregationsFilters,\n  });\n}\n\nexport function searchParamsToUrlParams(\n  params: SearchParams,\n  aggregationsFilters: AggregationsFilter[],\n): Record<string, unknown> {\n  const urlParams: Record<string, unknown> = stripUndefined({\n    q: params.q,\n    page: params.page,\n    size: params.size,\n    sort: params.sort,\n  });\n  aggregationsFilters.forEach((filter) => (urlParams[filter.key] = filter.values));\n  return urlParams;\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { computed, inject, Injector, Signal } from '@angular/core';\nimport { patchState, signalStoreFeature, type, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { rxMethod } from '@ngrx/signals/rxjs-interop';\nimport { catchError, EMPTY, pipe, switchMap, tap } from 'rxjs';\nimport { Aggregation, Bucket, EsResult } from '../../../../../model';\nimport { RecordType } from '../../../../model';\nimport { shallowEqual } from '../../../../record-search-utils';\nimport { RecordService } from '../../../../service/record/record.service';\nimport { AggregationsFilter } from '../../model/aggregations-filter.interface';\nimport { FetchRecordsParams } from './with-results.feature';\n\n/**\n * Aggregations state interface\n */\nexport interface AggregationsState {\n  /** Available aggregations from search results */\n  aggregations: Aggregation[];\n}\n\n/**\n * Feature that manages aggregations state and processing.\n *\n * Requires withConfig and withSearchParams to be composed before this feature.\n *\n * State:\n * - aggregations: Array of aggregation objects\n *\n * Computed:\n * - facetsParameter: Array of aggregation keys to include in search facets\n *\n * Methods:\n * - updateAggregations(), clearAggregations()\n * - processBuckets(): Recursively process buckets for parent refs and indeterminate state\n * - enrichAggregation(): Enrich an aggregation with Elasticsearch response data\n * - fetchAggregationBuckets(): Lazily fetch buckets for an aggregation via API\n *\n * @returns SignalStore feature for aggregations management\n */\nexport function withAggregations() {\n  return signalStoreFeature(\n    {\n      state: type<{\n        aggregationsFilters: AggregationsFilter[];\n        sort: string;\n        q: string;\n        esResult: EsResult | null;\n        currentType: string;\n      }>(),\n      props: type<{\n        config: Signal<RecordType>;\n        currentIndex: Signal<string>;\n        aggregationsExpand: Signal<string[]>;\n        recordService: RecordService;\n      }>(),\n      methods: type<{\n        hasFilter(aggregationKey: string, bucketKey: string): boolean;\n        setLoading(isLoading: boolean): void;\n      }>(),\n    },\n    withState<AggregationsState>({\n      aggregations: [],\n    }),\n    withComputed((store) => ({\n      facetsParameter: computed(\n        () => {\n          const aggregations = store.aggregations();\n          if (!aggregations?.length) return [];\n\n          const filterKeys = new Set(store.aggregationsFilters().map((f) => f.key));\n\n          const result = aggregations\n            .filter((agg) => agg.included === true || filterKeys.has(agg?.key))\n            .map((agg) => agg.key);\n\n          // Sort for stable ordering (order independence)\n          result.sort();\n\n          return result;\n        },\n        { equal: shallowEqual },\n      ),\n    })),\n    withMethods((store) => ({\n      /**\n       * Update available aggregations from search results\n       * @param aggregations Aggregations from Elasticsearch response\n       */\n      updateAggregations(aggregations: Aggregation[]): void {\n        const current = store.aggregations();\n        if (shallowEqual(current, aggregations)) {\n          return;\n        }\n        patchState(store, { aggregations });\n      },\n\n      /**\n       * Clear aggregations\n       */\n      clearAggregations(): void {\n        patchState(store, { aggregations: [] });\n      },\n\n      setAggregationExpanded(key: string, expanded: boolean): void {\n        const aggregations = store.aggregations().map((agg) =>\n          agg.key === key ? { ...agg, expanded } : agg,\n        );\n        patchState(store, { aggregations });\n      },\n\n      aggregationNameFromConfig(key: string): string | null {\n        return store.config().aggregationsName && key in store.config().aggregationsName\n          ? store.config().aggregationsName[key]\n          : null;\n      },\n    })),\n    // processBuckets and enrichAggregation must be in a separate withMethods block\n    // so they are available on `store` when fetchAggregationBuckets (rxMethod) is created.\n    withMethods((store) => ({\n      /**\n       * Process buckets recursively to set parent references and indeterminate state\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: Bucket, aggregationKey: string): boolean {\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            // set the parent as non-enumerable to avoid circular traversal in equality checks (shallowEqual)\n            Object.defineProperty(childBucket, 'parent', {\n              value: bucket,\n              writable: true,\n              configurable: true,\n              enumerable: false,\n            });\n            // store the aggregation key as we re-organize the bucket structure\n            bucket.indeterminate ||= store.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       * Enrich an aggregation with data from Elasticsearch response\n       * @param aggregation Target aggregation object\n       * @param esAggregation Aggregation data from Elasticsearch\n       * @param processBuckets If true, automatically process buckets (default: true)\n       */\n      enrichAggregation(aggregation: Aggregation, esAggregation: any, processBuckets = true): Aggregation {\n        // TODO: Change any to another type\n        // Copy the custom properties\n        const keys = ['buckets', 'config', 'doc_count', 'name', 'type', 'value'];\n        const additionalProperties: any = {};\n        Object.keys(esAggregation).find(key => {\n          if (!keys.includes(key)) {\n            additionalProperties[key] = esAggregation[key];\n          }}\n        );\n\n        const enriched: Aggregation = {\n          ...aggregation,\n          ...additionalProperties,\n          doc_count: esAggregation.doc_count || aggregation.doc_count,\n          type: esAggregation.type || aggregation.type || 'terms',\n          config: esAggregation.config || aggregation.config,\n          name: aggregation.name || esAggregation.name,\n          value: {\n            ...aggregation.value,\n            buckets: esAggregation.buckets || aggregation.value.buckets,\n          },\n          loaded: true,\n        };\n\n        // Process buckets automatically if requested\n        if (processBuckets && enriched.value.buckets) {\n          enriched.value.buckets.forEach(bucket => this.processBuckets(bucket, enriched.key));\n        }\n        return enriched;\n      },\n    })),\n    withMethods((store) => ({\n      /**\n       * Fetch aggregation buckets for a specific aggregation key.\n       * This method calls the API with size=1 to get only aggregation data without fetching many records.\n       * Buckets are automatically processed to set parent references and indeterminate states.\n       */\n      fetchAggregationBuckets: rxMethod<{\n        aggregationKey: string;\n      }>(\n        pipe(\n          tap(() => store.setLoading(true)),\n          switchMap(params => {\n            const aggregations = store.aggregations();\n            const aggregationsFilters = store.aggregationsFilters();\n            const config = store.config();\n            const sort = store.sort();\n            const currentIndex = store.currentIndex();\n            const query = store.q();\n\n            const aggregation = aggregations.find(agg => agg.key === params.aggregationKey);\n            if (!aggregation) {\n              store.setLoading(false);\n              return EMPTY;\n            }\n            if (aggregation.loaded) {\n              store.setLoading(false);\n              return EMPTY;\n            }\n\n            const searchParams: FetchRecordsParams = {\n              index: currentIndex,\n              query: query,\n              page: 1,\n              itemsPerPage: 1,\n              allowEmptySearch: true,\n              aggregationsFilters: aggregationsFilters,\n              preFilters: config.preFilters,\n              facets: [params.aggregationKey],\n              headers: config.listHeaders,\n              sort: sort,\n            };\n\n            return store.recordService.getRecords(searchParams.index, searchParams).pipe(\n              tap(esResult => {\n                store.setLoading(false);\n                if (esResult.aggregations && esResult.aggregations[params.aggregationKey]) {\n                  const currentAggregations = store.aggregations();\n                  const updatedAggregations = currentAggregations.map(agg => {\n                    if (agg.key === params.aggregationKey) {\n                      return store.enrichAggregation(agg, esResult.aggregations[params.aggregationKey]);\n                    }\n                    return agg;\n                  });\n                  store.updateAggregations(updatedAggregations);\n                }\n              }),\n              catchError(error => {\n                store.setLoading(false);\n                console.error('Failed to fetch buckets', error);\n                return EMPTY;\n              }),\n            );\n          }),\n        ),\n      ),\n      initializeAggregations: rxMethod<{ currentType: string; config: RecordType }>(\n        pipe(\n          tap(params => {\n            const aggregationsOrder = params.config.aggregationsOrder as string[];\n            if (!params.currentType || !aggregationsOrder.length) {\n              return;\n            }\n            store.updateAggregations(\n              aggregationsOrder.map(key => ({\n                key: key,\n                bucketSize: store.config().aggregationsBucketSize,\n                value: { buckets: [] },\n                expanded: store.aggregationsExpand().includes(key),\n                included: [...store.aggregationsExpand(), ...store.config().aggregationsHide].includes(key),\n                doc_count: 0,\n                name: key,\n              })),\n            );\n          }),\n        ),\n      ),\n      setAggregations: rxMethod<{ currentType: string; esResult: EsResult } | null>(\n        pipe(\n          tap(params => {\n            if (params == null) {\n              return;\n            }\n            const currentAggregations = store.aggregations();\n            const updatedAggregations = currentAggregations.map(agg => {\n              if (params.esResult.aggregations?.[agg.key]) {\n                return store.enrichAggregation(agg, params.esResult.aggregations[agg.key]);\n              }\n              return agg;\n            });\n            store.updateAggregations([...updatedAggregations]);\n          }),\n        ),\n      ),\n    })),\n    withHooks((store) => {\n      const injector = inject(Injector);\n      return {\n        onInit() {\n          store.initializeAggregations(computed(() => ({ currentType: store.currentType(), config: store.config() })), { injector });\n          const tracked = computed(() => {\n            const esResult = store.esResult();\n            if (!esResult) {\n              return null;\n            }\n            return {\n              currentType: store.currentType(),\n              esResult: esResult,\n            };\n          });\n          store.setAggregations(tracked, { injector });\n        },\n      };\n    }),\n  );\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { JsonPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RecordData } from '../../../../model/record.interface';\nimport { DetailRecord } from '../detail-record.interface';\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  imports: [JsonPipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultDetailComponent implements DetailRecord {\n  // Record data\n  record = input.required<RecordData | undefined>();\n\n  // Resource type\n  type = input.required<string>();\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { JsonPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { RecordData } from '../../../../../../model';\nimport { DetailUrl, ResultItem } from '../../../../../model/result-item.interface';\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\" (click)=\"openLink()\" />\n        }\n      </div>\n    }\n  `,\n  imports: [Button, RouterLink, JsonPipe, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultSearchResultComponent implements ResultItem {\n  // Record data.\n  record = input.required<RecordData>();\n\n  // Type of resource.\n  type = input.required<string>();\n\n  // Info for detail URL link.\n  detailUrl = input<DetailUrl>();\n\n  openLink() {\n    if (!this.detailUrl()) {\n      return;\n    }\n    const detailUrl = this.detailUrl();\n    if (detailUrl?.link) {\n      window.location.href = detailUrl.link;\n    }\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { HttpHeaders } from '@angular/common/http';\nimport { computed } from '@angular/core';\nimport { patchState, signalStoreFeature, type, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { Observable, of, switchMap } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { ActionStatus, RecordData } from '../../../../../model';\nimport { RecordType } from '../../../../model/record-search.interface';\nimport { shallowEqual } from '../../../../record-search-utils';\nimport { DefaultDetailComponent } from '../../../detail/default-detail/default-detail.component';\nimport { DefaultSearchResultComponent } from '../../record-search/record-search-result/default-search-result/default-search-result.component';\n\nexport interface RouteConfig {\n  /** Record type configurations */\n  detailUrl: string;\n  showSearchInput: boolean;\n  adminMode: boolean;\n  types: RecordType[];\n}\n\nexport const DEFAULT_RECORD_TYPE: RecordType = {\n  key: 'documents',\n  label: 'Documents',\n  index: '',\n  component: DefaultSearchResultComponent,\n  detailComponent: DefaultDetailComponent,\n  canAdd: () => of({ can: true, message: '' }),\n  canUpdate: null,\n  canDelete: null,\n  canRead: null,\n  canUse: null,\n  editorSettings: {\n    longMode: true,\n  },\n  permissions: () => of({}),\n  processBucketName: null,\n  processFilterName: null,\n  exportFormats: [],\n  preFilters: {},\n  defaultSearchInputFilters: [],\n  listHeaders: new HttpHeaders({ 'Content-Type': 'application/json' }),\n  itemHeaders: new HttpHeaders({ 'Content-Type': 'application/json' }),\n  showFacetsIfNoResults: false,\n  showLabel: true,\n  allowEmptySearch: true,\n  aggregationsName: {},\n  aggregationsOrder: [],\n  aggregationsExpand: [],\n  aggregationsHide: [],\n  aggregationsBucketSize: 0,\n  resultsText: null,\n  pagination: {\n    boundaryLinks: true,\n    maxSize: 5,\n    pageReport: false,\n    rowsPerPageOptions: [10, 25, 50, 100],\n  },\n  sortOptions: [],\n  formFieldMap: (field) => field,\n  hideInTabs: false,\n  preCreateRecord: (record) => record,\n  preUpdateRecord: (record) => record,\n  postprocessRecordEditor: (record) => record,\n  preprocessRecordEditor: (record) => record,\n  redirectUrl: () => of(''),\n  deleteMessage: null,\n  searchFilters: [],\n};\n\nexport const DEFAULT_ROUTE_CONFIG: RouteConfig = {\n  detailUrl: '',\n  showSearchInput: true,\n  adminMode: true,\n  types: [DEFAULT_RECORD_TYPE],\n};\n\n/**\n * SignalStore feature for managing configuration and current type selection.\n *\n * State:\n * - routeConfig: Route configuration containing record type definitions\n * - currentType: Currently selected record type key\n *\n * Computed:\n * - configs: Array of RecordType from routeConfig\n * - config: Active RecordType selected by currentType\n * - currentIndex: Elasticsearch index for current type\n * - aggregationsExpand: Expanded aggregation keys\n *\n * Methods:\n * - updateRouteConfig(): Update route configuration\n * - setCurrentType(): Set the current record type\n * - canAddRecord$(), canUpdateRecord$(), canDeleteRecord$(), canReadRecord$(), canUseRecord$()\n */\nexport function withConfig() {\n  return signalStoreFeature(\n    {\n      state: type<{\n        q: string;\n        sort: string;\n      }>(),\n    },\n    withState({\n      routeConfig: { ...DEFAULT_ROUTE_CONFIG },\n      currentType: '',\n    }),\n    withComputed((store) => ({\n      configs: computed(() => store.routeConfig().types),\n      config: computed(() => {\n        const configs = store.routeConfig().types;\n        const currentType = store.currentType();\n        if (!configs || !currentType) {\n          return DEFAULT_RECORD_TYPE;\n        }\n        const config = configs.find((c) => c.key === currentType);\n        if (!config) {\n          throw new Error(`Unknown config type: ${currentType}`);\n        }\n        return config;\n      }),\n    })),\n    withComputed((store) => ({\n      currentIndex: computed(() => {\n        const config = store.config();\n        return config.index || config.key;\n      }),\n      aggregationsExpand: computed(() => {\n        const config = store.config();\n        const aggregationsExpand = config.aggregationsExpand;\n        if (typeof aggregationsExpand === 'function') {\n          return aggregationsExpand();\n        }\n        return aggregationsExpand ?? [];\n      }),\n      defaultSort: computed(() => {\n        const config = store.config();\n        const defaultKey = store.q() ? 'defaultQuery' : 'defaultNoQuery';\n        return config.sortOptions.find((opt) => opt[defaultKey] === true)?.value || '';\n      }),\n    })),\n    withComputed((store) => ({\n      activeSort: computed(() => (store.sort() !== '' ? store.sort() : store.defaultSort())),\n    })),\n    withMethods((store) => ({\n      /**\n       * Update route configuration\n       * @param config New route configuration\n       */\n      updateRouteConfig(partial: Partial<RouteConfig>) {\n        const next = { ...store.routeConfig(), ...partial };\n        next.types = next.types.map((type) => {\n          return { ...DEFAULT_RECORD_TYPE, ...type };\n        });\n        if (shallowEqual(next, store.routeConfig())) return;\n        patchState(store, { routeConfig: next });\n      },\n\n      /**\n       * Set the current record type\n       * @param currentType Record type key\n       */\n      setCurrentType(currentType: string) {\n        if (currentType !== store.currentType()) {\n          patchState(store, { currentType });\n        }\n      },\n\n      /**\n       * Check if a record can be added\n       * @returns Observable resolving an object containing the result of a permission check.\n       */\n      canAddRecord$(): Observable<ActionStatus> {\n        const config = store.config();\n        return config.canAdd ? config.canAdd().pipe(first()) : of({ can: true, message: '' });\n      },\n\n      /**\n       * Check if a record can be updated\n       * @param record - Record to check\n       * @returns Observable resolving an object containing the result of a permission check.\n       */\n      canUpdateRecord$(record: RecordData): Observable<ActionStatus> {\n        const config = store.config();\n        if (config.canUpdate) {\n          return config.canUpdate(record).pipe(first());\n        }\n        if (config.permissions) {\n          return config\n            .permissions(record)\n            .pipe(switchMap((perms) => ('canUpdate' in perms ? of(perms.canUpdate) : of({ can: true, message: '' }))));\n        }\n        return of({ can: true, message: '' });\n      },\n\n      /**\n       * Check if a record can be deleted\n       * @param record - Record to check\n       * @returns Observable resolving an object containing the result of a permission check.\n       */\n      canDeleteRecord$(record: RecordData): Observable<ActionStatus> {\n        const config = store.config();\n        if (config.canDelete) {\n          return config.canDelete(record).pipe(first());\n        }\n        if (config.permissions) {\n          return config\n            .permissions(record)\n            .pipe(switchMap((perms) => ('canDelete' in perms ? of(perms.canDelete) : of({ can: true, message: '' }))));\n        }\n        return of({ can: true, message: '' });\n      },\n\n      /**\n       * Check if a record can be read\n       * @param record - Record to check\n       * @returns Observable resolving an object containing the result of a permission check.\n       */\n      canReadRecord$(record: RecordData): Observable<ActionStatus> {\n        const config = store.config();\n        if (config.canRead) {\n          return config.canRead(record).pipe(first());\n        }\n        if (config.permissions) {\n          return config\n            .permissions(record)\n            .pipe(switchMap((perms) => ('canRead' in perms ? of(perms.canRead) : of({ can: true, message: '' }))));\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 - Record to check\n       * @returns Observable resolving an object containing the result of a permission check.\n       */\n      canUseRecord$(record: RecordData): Observable<ActionStatus> {\n        const config = store.config();\n        if (config.canUse) {\n          return config.canUse(record).pipe(first());\n        }\n        if (config.permissions) {\n          return config\n            .permissions(record)\n            .pipe(switchMap((perms) => ('canUse' in perms ? of(perms.canUse) : of({ can: true, message: '' }))));\n        }\n        return of({ can: true, message: '' });\n      },\n    })),\n  );\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { HttpHeaders } from '@angular/common/http';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStoreFeature, type, withComputed, withMethods, withProps, withState } from '@ngrx/signals';\nimport { rxMethod } from '@ngrx/signals/rxjs-interop';\nimport { catchError, EMPTY, filter, pipe, switchMap, tap } from 'rxjs';\nimport { Error } from '../../../../../core';\nimport { EsResult } from '../../../../../model';\nimport { RecordService } from '../../../../service/record/record.service';\nimport { AggregationsFilter } from '../../model/aggregations-filter.interface';\n\n/**\n * Parameters for fetching records.\n * All values are passed explicitly to decouple from other features.\n */\nexport interface FetchRecordsParams {\n  index: string;\n  query: string;\n  page: number;\n  itemsPerPage: number;\n  allowEmptySearch: boolean;\n  aggregationsFilters: AggregationsFilter[];\n  preFilters: Record<string, string | string[]>;\n  sort: string;\n  facets: string[];\n  headers: HttpHeaders | Record<string, string | string[]>;\n}\n\n/**\n * State for search results management\n */\nexport interface ResultsState {\n  /** Elasticsearch result object containing hits and total */\n  esResult: EsResult | null;\n  /** Loading state indicator */\n  isLoading: boolean;\n  /** Error object if search fails */\n  error: Error | null;\n}\n\n/**\n * Feature for managing search results\n *\n * Provides:\n * - State: esResult, total, isLoading, error\n * - Computed: hits (array of record hits from ES), hasRecords, isEmpty\n * - Methods: setResults(), setLoading(), setError(), clearResults(), fetchRecords()\n */\nexport function withResults() {\n  return signalStoreFeature(\n    {\n      state: type<{ currentType: string }>(),\n    },\n    withState<ResultsState>({\n      esResult: null,\n      isLoading: false,\n      error: null,\n    }),\n\n    withComputed((store) => ({\n      /** Extract hits array from Elasticsearch result */\n      hits: computed(() => store.esResult()?.hits?.hits ?? []),\n\n      total: computed(() => store.esResult()?.hits?.total?.value ?? 0),\n\n      /** Check if there are any records */\n      hasRecords: computed(() => (store.esResult()?.hits?.total?.value ?? 0) > 0),\n\n      /** Check if result set is empty */\n      isEmpty: computed(() => (store.esResult()?.hits?.total?.value ?? 0) === 0),\n    })),\n\n    withProps(() => ({\n      recordService: inject(RecordService),\n    })),\n\n    withMethods((store) => ({\n      /**\n       * Update search results\n       * @param esResult Elasticsearch result object\n       */\n      setResults(esResult: EsResult): void {\n        patchState(store, {\n          esResult,\n          isLoading: false,\n          error: null,\n        });\n      },\n\n      /**\n       * Update loading state\n       * @param isLoading Loading indicator\n       */\n      setLoading(isLoading: boolean): void {\n        patchState(store, { isLoading });\n      },\n\n      /**\n       * Set error state\n       * @param error Error object\n       */\n      setError(error: Error): void {\n        patchState(store, {\n          error,\n          isLoading: false,\n        });\n      },\n\n      /**\n       * Clear all results\n       */\n      clearResults(): void {\n        patchState(store, {\n          esResult: null,\n          error: null,\n          isLoading: false,\n        });\n      },\n    })),\n\n    // fetchRecords must be in a separate withMethods block\n    // so it can access setLoading/setResults defined above.\n    withMethods((store) => ({\n      fetchRecords: rxMethod<FetchRecordsParams | null>(\n        pipe(\n          // Skip null params (emitted when currentType is not set)\n          filter((params) => !!params),\n          tap((params) => {\n            if (!params.allowEmptySearch && !params.query.trim()) {\n              store.setResults({ aggregations: {}, hits: { hits: [], total: { relation: 'eq', value: 0 } } });\n            }\n          }),\n          filter((params) => params.allowEmptySearch || !!params.query.trim()),\n          tap(() => store.setLoading(true)),\n          switchMap((params) =>\n            store.recordService.getRecords(params.index, {\n              query: params.query,\n              page: params.page,\n              itemsPerPage: params.itemsPerPage,\n              aggregationsFilters: params.aggregationsFilters,\n              preFilters: params.preFilters,\n              sort: params.sort,\n              facets: params.facets,\n              headers: params!.headers,\n            }),\n          ),\n          tap((records) => {\n            if (records != null) {\n              store.setResults(records);\n            }\n          }),\n          catchError(() => {\n            store.setLoading(false);\n            return EMPTY;\n          }),\n        ),\n      ),\n    })),\n  );\n}\n","/**\n * Feature that provides computed properties for building search parameters.\n * These are derived values calculated from the store store.\n */\nimport { computed } from '@angular/core';\nimport { patchState, signalStoreFeature, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { rxMethod } from '@ngrx/signals/rxjs-interop';\nimport { Bucket } from '../../../../../model/record.interface';\nimport { pipe, tap } from 'rxjs';\nimport { SearchFilter, SearchFilterSection } from '../../../../../model';\nimport { SearchParams } from '../../../../model';\nimport { shallowEqual } from '../../../../record-search-utils';\nimport { AggregationsFilter } from '../../model';\n\nexport const DEFAULT_SEARCH_PARAMS: SearchParams = {\n  q: '',\n  page: 1,\n  size: 10,\n  sort: '',\n  index: '',\n  aggregationsFilters: [],\n  searchFilters: [],\n};\n\n/** Collect {key, value} pairs from parent bucket chain (pure function) */\nfunction collectParentRemovals(bucket: Bucket): { key: string; value: string }[] {\n  const removals: { key: string; value: string }[] = [];\n  if (bucket.parent) {\n    removals.push(...collectParentRemovals(bucket.parent));\n  }\n  removals.push({ key: bucket.aggregationKey, value: bucket.key });\n  return removals;\n}\n\n/** Collect {key, value} pairs from children buckets (pure function) */\nfunction collectChildrenRemovals(bucket: Bucket): { key: string; value: string }[] {\n  const removals: { key: string; value: string }[] = [];\n  for (const k of Object.keys(bucket).filter((key) => bucket[key]?.buckets)) {\n    for (const childBucket of bucket[k].buckets) {\n      removals.push({ key: k, value: childBucket.key });\n      removals.push(...collectChildrenRemovals(childBucket));\n    }\n  }\n  return removals;\n}\n\n/** Apply a list of {key, value} removals to an aggregations filters array (pure function) */\nfunction applyRemovals(\n  filters: AggregationsFilter[],\n  removals: { key: string; value: string }[],\n): AggregationsFilter[] {\n  let result = filters;\n  for (const removal of removals) {\n    const filterIndex = result.findIndex((f) => f.key === removal.key);\n    if (filterIndex >= 0) {\n      const newValues = result[filterIndex].values.filter((v) => v !== removal.value);\n      if (newValues.length === 0) {\n        result = result.filter((f) => f.key !== removal.key);\n      } else {\n        result = [...result];\n        result[filterIndex] = { ...result[filterIndex], values: newValues };\n      }\n    }\n  }\n  return result;\n}\n\nexport function withSearchParams() {\n  return signalStoreFeature(\n    withState<SearchParams>({ ...DEFAULT_SEARCH_PARAMS }),\n    withComputed((store) => ({\n      searchParams: computed(() => ({\n        q: store.q(),\n        page: store.page(),\n        size: store.size(),\n        sort: store.sort(),\n        index: store.index(),\n        aggregationsFilters: store.aggregationsFilters(),\n        searchFilters: store.searchFilters(),\n      })),\n\n      /** Get a flat array of all search filters (extracts filters from sections) */\n      flatSearchFilters: computed(() => {\n        const flat: SearchFilter[] = [];\n        (store.searchFilters() ?? []).forEach((item) => {\n          if ('filters' in item) {\n            flat.push(...item.filters);\n          } else {\n            flat.push(item);\n          }\n        });\n        return flat;\n      }),\n\n      /** Check if any search filters are available */\n      hasSearchFilters: computed(() => (store.searchFilters() ?? []).length > 0),\n    })),\n    withMethods((store) => ({\n      syncUrlParams: rxMethod<Partial<SearchParams>>(\n        pipe(\n          tap((urlParams) => {\n            const current = store.searchParams();\n            const next = { ...current, ...urlParams };\n\n            if (shallowEqual(current, next)) {\n              return;\n            }\n\n            patchState(store, urlParams);\n          }),\n        ),\n      ),\n      updateQuery(q: string): void {\n        patchState(store, { q, page: 1 });\n      },\n      updatePage(page: number) {\n        patchState(store, { page });\n      },\n      updateSearchFilters(searchFilters: (SearchFilter | SearchFilterSection)[]) {\n        patchState(store, { searchFilters });\n      },\n      clearSearchFilters(): void {\n        patchState(store, { searchFilters: [] });\n      },\n      updateSize(size: number) {\n        patchState(store, { size });\n      },\n      updateSort(sort: string) {\n        patchState(store, { sort });\n      },\n\n      /**\n       * Add or update a single aggregation filter.\n       * When a bucket is provided, parent and children filters are removed atomically.\n       * @param key Filter key (aggregation name)\n       * @param values Filter values\n       * @param bucket Optional bucket for hierarchical removal\n       */\n      updateAggregationsFilter(key: string, values: string[], bucket?: Bucket): void {\n        let currentFilters = store.aggregationsFilters();\n\n        // Collect and apply parent/children removals in memory (no intermediate patchState)\n        if (bucket) {\n          const removals = [...collectParentRemovals(bucket), ...collectChildrenRemovals(bucket)];\n          currentFilters = applyRemovals(currentFilters, removals);\n        }\n\n        const existingIndex = currentFilters.findIndex((f: AggregationsFilter) => f.key === key);\n        let newFilters: AggregationsFilter[];\n        if (values.length === 0) {\n          newFilters = currentFilters.filter((f: AggregationsFilter) => f.key !== key);\n        } else if (existingIndex >= 0) {\n          newFilters = [...currentFilters];\n          newFilters[existingIndex] = { key, values: [...values].sort() };\n        } else {\n          newFilters = [...currentFilters, { key, values: [...values].sort() }];\n        }\n        patchState(store, { aggregationsFilters: newFilters });\n      },\n\n      /**\n       * Replace all aggregation filters at once.\n       * @param filters New set of aggregation filters (values are sorted within each filter)\n       */\n      updateAggregationsFilters(filters: AggregationsFilter[]): void {\n        patchState(store, {\n          aggregationsFilters: filters.map((f) => ({ key: f.key, values: [...f.values].sort() })),\n        });\n      },\n\n      /**\n       * Remove a specific filter by key\n       * @param key Filter key to remove\n       */\n      removeFilter(key: string): void {\n        const newFilters = store.aggregationsFilters().filter((f) => f.key !== key);\n        patchState(store, { aggregationsFilters: newFilters });\n      },\n\n      /**\n       * Remove a specific value from a filter\n       * @param key Filter key\n       * @param value Value to remove\n       */\n      removeFilterValue(key: string, value: string): void {\n        const currentFilters = store.aggregationsFilters();\n        const filter = currentFilters.find((f) => f.key === key);\n\n        if (filter) {\n          const newValues = filter.values.filter((v) => v !== value);\n          this.updateAggregationsFilter(key, newValues);\n        }\n      },\n\n      /**\n       * Clear all aggregations filters\n       */\n      clearFilters(): void {\n        patchState(store, { aggregationsFilters: [] });\n      },\n      /**\n       * Check if a given filter exists in the current aggregations filters\n       * @param key Filter name/key\n       * @param value Filter value\n       * @returns true if the filter exists\n       */\n      hasFilter(key: string, value: string): boolean {\n        const filter = store.aggregationsFilters().find((a) => a.key === key);\n        return !!(filter && filter.values.some((v) => v === value));\n      },\n\n      /**\n       * Remove the given value from selected filters and removes all children\n       * and parent selected values atomically (single state update).\n       * @param key Aggregation key\n       * @param bucket Bucket containing the value to remove\n       */\n      removeAggregationFilter(key: string, bucket: any): void {\n        const removals = [\n          { key, value: bucket.key.toString() },\n          ...collectChildrenRemovals(bucket),\n          ...collectParentRemovals(bucket),\n        ];\n        const newFilters = applyRemovals(store.aggregationsFilters(), removals);\n        patchState(store, { aggregationsFilters: newFilters });\n      },\n\n      /**\n       * Remove the parent filters of a given bucket (single state update).\n       * @param bucket The ElasticSearch bucket\n       */\n      removeParentFilters(bucket: Bucket): void {\n        const removals = collectParentRemovals(bucket);\n        const newFilters = applyRemovals(store.aggregationsFilters(), removals);\n        patchState(store, { aggregationsFilters: newFilters });\n      },\n\n      /**\n       * Removes children filters of a given bucket (single state update).\n       * @param bucket The ElasticSearch bucket\n       */\n      removeChildrenFilters(bucket: Bucket): void {\n        const removals = collectChildrenRemovals(bucket);\n        const newFilters = applyRemovals(store.aggregationsFilters(), removals);\n        patchState(store, { aggregationsFilters: newFilters });\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: Bucket): boolean {\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            if (this.hasFilter(aggregationsKey, childBucket.key) || this.hasChildrenFilter(childBucket)) {\n              return true;\n            }\n          }\n        }\n        return false;\n      },\n    })),\n  );\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { computed, inject, Injector } from '@angular/core';\nimport { signalStore, withComputed, withHooks, withMethods, withProps } from '@ngrx/signals';\nimport { rxMethod } from '@ngrx/signals/rxjs-interop';\nimport { _, TranslateService } from '@ngx-translate/core';\nimport { filter, pipe, tap } from 'rxjs';\nimport { RecordType } from '../../../model';\nimport { shallowEqual } from '../../../record-search-utils';\nimport { withAggregations } from './features/with-aggregations.feature';\nimport { withConfig } from './features/with-config.feature';\nimport { FetchRecordsParams, withResults } from './features/with-results.feature';\nimport { withSearchParams } from './features/with-search-params.feature';\n\n/**\n * RecordSearchStore - SignalStore for managing record search state\n *\n * This store manages all state related to record search including:\n * - Search query and parameters (via withSearchParams)\n * - Results and loading state (via withResults)\n * - Aggregations and filters (via withAggregations)\n * - Configuration and current type (via withConfig)\n *\n * The store is provided at component level to support multiple instances.\n */\nexport const RecordSearchStore = signalStore(\n  // Compose features progressively\n  withSearchParams(),\n  withConfig(),\n  withResults(),\n  withAggregations(),\n  withProps(() => ({\n    translateService: inject(TranslateService),\n  })),\n  withComputed((store) => ({\n    resultsText: computed((): string => {\n      const esResult = store.esResult();\n      const total = store.total();\n      const resultsText = store.config().resultsText;\n      if (resultsText && esResult) {\n        return resultsText(esResult.hits);\n      }\n      return total <= 1 ? _('{{ total }} result') : _('{{ total }} results');\n    }),\n  })),\n\n  withMethods((store) => ({\n    updateCurrentType(currentType: string) {\n      if (currentType !== store.currentType()) {\n        store.clearResults();\n      }\n      store.setCurrentType(currentType);\n    },\n    applyDefaultFilters: rxMethod<{ currentType: string; config: RecordType }>(\n      pipe(\n        filter((params) => !!params.currentType),\n        filter(() => !store.q()),\n        filter((params) => params.config.defaultSearchInputFilters?.length > 0),\n        tap((params) => {\n          params.config.defaultSearchInputFilters.forEach((filter) => {\n            store.updateAggregationsFilter(filter.key, filter.values);\n          });\n        }),\n      ),\n    ),\n    initializeSearchFilters: rxMethod<{ currentType: string; config: RecordType }>(\n      pipe(\n        filter((params) => !!params.currentType),\n        filter((params) => params.config.searchFilters?.length > 0),\n        tap((params) => {\n          const filters = params.config.searchFilters || [];\n          if (!shallowEqual(filters, store.searchFilters())) {\n            store.updateSearchFilters(filters);\n          }\n        }),\n      ),\n    ),\n  })),\n  withHooks((store) => {\n    const injector = inject(Injector);\n    return {\n      onInit() {\n        store.applyDefaultFilters(computed(() => ({ currentType: store.currentType(), config: store.config() })), { injector });\n        store.initializeSearchFilters(computed(() => ({ currentType: store.currentType(), config: store.config() })), { injector });\n        // Fetch records when search parameters change\n        // Build a computed signal that produces FetchRecordsParams (or null if not ready)\n        const fetchParams = computed((): FetchRecordsParams | null => {\n          const currentType = store.currentType();\n          if (!currentType) return null;\n          const config = store.config();\n          return {\n            index: store.currentIndex(),\n            query: store.q(),\n            page: store.page(),\n            allowEmptySearch: config.allowEmptySearch,\n            itemsPerPage: store.size(),\n            aggregationsFilters: store.aggregationsFilters(),\n            preFilters: config.preFilters,\n            sort: store.sort(),\n            facets: store.facetsParameter(),\n            headers: config.listHeaders,\n          };\n        });\n        store.fetchRecords(fetchParams, { injector });\n      },\n    };\n  }),\n);\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\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 { JsonObject, RecordData } from '../../../model/record.interface';\nimport { Observable, Subject, of } from 'rxjs';\nimport { first, switchMap } from 'rxjs/operators';\nimport { CONFIG } from '../../../core';\nimport { ActionStatus } from '../../../model/action-status.interface';\nimport { RecordService } from '../record/record.service';\nimport { RecordType } from '../../model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RecordUiService {\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  /**\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, deleteMessage: string[] = this.defaultDeleteMessage()): Observable<boolean> {\n    const delete$ = new Subject<boolean>();\n    this.confirmationService.confirm({\n      acceptLabel: this.translateService.instant('Delete'),\n      rejectLabel: this.translateService.instant('Cancel'),\n      message: deleteMessage.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) => {\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<T = JsonObject>(types: Partial<RecordType>[], type: string): RecordType<T> {\n    if (types == null) {\n      throw new Error(`Configuration not found for type \"${type}\"`);\n    }\n    const index = types.findIndex((item) => item.key === type);\n    if (index === -1) {\n      throw new Error(`Configuration not found for type \"${type}\"`);\n    }\n    return types[index] as unknown as RecordType<T>;\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<T = JsonObject>(\n    pid: string,\n    record: RecordData<T>,\n    config: Partial<RecordType<T>> | null,\n    action: string,\n    route: ActivatedRoute,\n  ): void {\n    if (!config?.redirectUrl) {\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      return;\n    }\n\n    config.redirectUrl(record, action).subscribe((result: string) => {\n      if (result !== null) {\n        this.router.navigateByUrl(result);\n      }\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<T = JsonObject>(pid: string, config?: Partial<RecordType<T>> | null): string[] {\n    return config?.deleteMessage ? config.deleteMessage(pid) : this.defaultDeleteMessage();\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$(config: Partial<RecordType> | null): Observable<ActionStatus> {\n    if (!config) {\n      return of({ can: true, message: '' });\n    }\n    return config.canAdd ? config.canAdd().pipe(first()) : 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$<T = JsonObject>(record: RecordData<T>, config: Partial<RecordType<T>> | null): Observable<ActionStatus> {\n    if (!config) {\n      return of({ can: true, message: '' });\n    }\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        switchMap((perms) => {\n          if ('canUpdate' in perms) {\n            return of(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$<T = JsonObject>(record: RecordData<T>, config: Partial<RecordType<T>> | null): Observable<ActionStatus> {\n    if (!config) {\n      return of({ can: true, message: '' });\n    }\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        switchMap((perms) => {\n          if ('canDelete' in perms) {\n            return of(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$<T = JsonObject>(record: RecordData<T>, config: Partial<RecordType<T>> | null): Observable<ActionStatus> {\n    if (!config) {\n      return of({ can: true, message: '' });\n    }\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        switchMap((perms) => {\n          if ('canRead' in perms) {\n            return of(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$<T = JsonObject>(record: RecordData<T>, config: Partial<RecordType<T>> | null): Observable<ActionStatus> {\n    if (!config) {\n      return of({ can: false, message: '' });\n    }\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      return permissions.pipe(\n        switchMap((perms) => {\n          if ('canUse' in perms) {\n            return of(perms.canUse);\n          } else {\n            return of({ can: false, message: '' });\n          }\n        }),\n      );\n    }\n    return of({ can: false, message: '' });\n  }\n\n  private defaultDeleteMessage(): string[] {\n    return [this.translateService.instant('Do you really want to delete this record?')];\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { AsyncPipe, SlicePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { Checkbox } from 'primeng/checkbox';\nimport { Bucket } from '../../../../../../model';\nimport { AggregationsFilter } from '../../../model/aggregations-filter.interface';\nimport { RecordSearchStore } from '../../../store/record-search.store';\nimport { Observable, of, shareReplay } from 'rxjs';\n\n@Component({\n  selector: 'ng-core-record-search-aggregation-buckets',\n  templateUrl: './buckets.component.html',\n  imports: [Checkbox, FormsModule, SlicePipe, TranslatePipe, Button, AsyncPipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BucketsComponent {\n  protected store = inject(RecordSearchStore);\n  private translateService = inject(TranslateService);\n\n  readonly enrichedBuckets = computed(() => {\n    const processFn = this.store.config().processBucketName;\n    return this.buckets().map((bucket) => {\n      const enriched = {\n        ...bucket,\n        parent: bucket.parent,\n        label$: (processFn\n          ? processFn(bucket).pipe(shareReplay(1))\n          : bucket.name\n            ? of(bucket.name)\n            : this.translateService.stream(bucket.key)) as Observable<string>,\n      };\n      return enriched;\n    });\n  });\n\n  // COMPONENT ATTRIBUTES ============================================================\n  /** Buckets list for aggregation */\n  buckets = input.required<Bucket[]>();\n  /** Aggregation key */\n  aggregationKey = input.required<string>();\n\n  /** More and less on aggregation content (facet) */\n  moreMode = signal(true);\n\n  // COMPUTED SIGNALS =================================================================\n  /** Aggregation config derived from the store. */\n  private readonly aggregation = computed(() =>\n    this.store.aggregations()?.find((a: any) => a.key === this.aggregationKey()),\n  );\n\n  /** Returns selected filters for the aggregation key. */\n  readonly aggregationFilters = computed(\n    () =>\n      this.store.aggregationsFilters().find((item: AggregationsFilter) => item.key === this.aggregationKey())?.values ??\n      [],\n  );\n\n  /** Get bucket size. */\n  readonly bucketSize = computed(() => {\n    const size = this.buckets().length;\n    const configuredSize = this.aggregation()?.bucketSize ?? 0;\n    return configuredSize == 0 || !this.moreMode() ? size : configuredSize;\n  });\n\n  /** Get the number of bucket items with non-zero doc_count. */\n  readonly bucketsLength = computed(() =>\n    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  readonly displayMoreAndLessLink = computed(() => {\n    const configuredSize = this.aggregation()?.bucketSize ?? 0;\n    if (configuredSize == 0) {\n      return false;\n    }\n    return this.bucketsLength() > configuredSize;\n  });\n\n  /** Children of current bucket, derived from buckets input. */\n  readonly bucketChildren = computed(() => {\n    const children: Record<string, { aggregationKey: string; key: string; buckets: Bucket[] }[]> = {};\n    for (const bucket of this.buckets()) {\n      children[bucket.key] = this.getBucketChildren(bucket);\n    }\n    return children;\n  });\n\n  // COMPONENT FUNCTIONS =====================================================\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: string | number): 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: 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.store.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: Bucket) {\n    const filters = this.store.aggregationsFilters();\n    const index = filters.findIndex((item: AggregationsFilter) => item.key === this.aggregationKey());\n    if (index === -1) {\n      // No filters exist for the aggregation.\n      this.store.updateAggregationsFilter(this.aggregationKey(), [bucket.key], bucket);\n    } else {\n      const aggFilter = filters[index];\n      if (!aggFilter.values.includes(bucket.key.toString())) {\n        // Bucket value is not yet selected, we add value to selected values.\n        const newValues = [...aggFilter.values, bucket.key.toString()];\n        this.store.updateAggregationsFilter(this.aggregationKey(), newValues, bucket);\n      } else {\n        // Removes value from selected values and all children selected values.\n        this.store.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  private getBucketChildren(bucket: Bucket): { aggregationKey: string; key: string; buckets: Bucket[] }[] {\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        key: k,\n        buckets: bucket[k].buckets,\n      });\n    }\n    return children;\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (enrichedBuckets()) {\n  <ul class=\"core:list-none core:text-sm\">\n    @for (bucket of enrichedBuckets() | 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              {{ bucket.label$ | async }}\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                [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    <p-button link size=\"small\" (click)=\"moreMode.set(!moreMode())\">{{\n      (moreMode() ? 'more…' : 'less…') | translate\n    }}</p-button>\n  </div>\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, computed, inject, input, linkedSignal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { InputGroup } from 'primeng/inputgroup';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { RecordSearchStore } from '../../../store/record-search.store';\n\n@Component({\n  selector: 'ng-core-aggregation-slider',\n  templateUrl: './slider.component.html',\n  imports: [InputGroup, InputNumber, FormsModule, Button, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AggregationSliderComponent {\n  protected store = inject(RecordSearchStore);\n\n  // COMPONENT ATTRIBUTES =====================================================\n  /** The aggregation key. */\n  key = input.required<string>();\n\n  // COMPUTED SIGNALS ==========================================================\n  /** Aggregation config derived from the store. */\n  private readonly aggregation = computed(() => this.store.aggregations()?.find((a: any) => a.key === this.key()));\n\n  readonly min = computed(() => this.aggregation()?.config?.min ?? 1);\n  readonly max = computed(() => this.aggregation()?.config?.max ?? 100);\n  readonly step = computed(() => this.aggregation()?.config?.step ?? 1);\n\n  /** True if route have aggregation query param. */\n  readonly hasQueryParam = computed(() => this.store.aggregationsFilters().some((f: any) => f.key === this.key()));\n\n  /** Range to search. Derived from store filters, but writable by the user. */\n  readonly range = linkedSignal<number[]>(() => {\n    const filter = this.store.aggregationsFilters().find((f: any) => f.key === this.key());\n    return filter ? filter.values[0].split('--').map((item: string) => +item) : [this.min(), this.max()];\n  });\n\n  // COMPONENT FUNCTIONS ======================================================\n  /** Update aggregation filter. */\n  updateFilter() {\n    const r = [...this.range()];\n    if (!r[0] || r[0] < this.min()) {\n      r[0] = this.min();\n    }\n    if (!r[1] || r[1] > this.max()) {\n      r[1] = this.max();\n    }\n    this.store.updateAggregationsFilter(this.key(), [`${r[0]}--${r[1]}`]);\n  }\n\n  /** Clear aggregation filter. */\n  clearFilter() {\n    this.store.updateAggregationsFilter(this.key(), []);\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<p-inputGroup>\n  <p-inputNumber\n    class=\"core:mr-1\"\n    inputId=\"integeronly\"\n    [useGrouping]=\"false\"\n    [ngModel]=\"range()[0]\"\n    (ngModelChange)=\"range.set([$event, range()[1]])\"\n    [min]=\"range()[0]\"\n    [max]=\"range()[1]\"\n  />\n  <p-inputNumber\n    class=\"core:ml-1\"\n    inputId=\"integeronly\"\n    [useGrouping]=\"false\"\n    [ngModel]=\"range()[1]\"\n    (ngModelChange)=\"range.set([range()[0], $event])\"\n    [min]=\"range()[0]\"\n    [max]=\"range()[1]\"\n  />\n</p-inputGroup>\n<div class=\"core:flex core:justify-end core:mt-2 core:gap-2\">\n  @if (hasQueryParam()) {\n    <p-button\n      size=\"small\"\n      [label]=\"'Clear' | translate\"\n      [outlined]=\"true\"\n      (onClick)=\"$event.preventDefault(); clearFilter()\"\n    />\n  }\n  <p-button\n    size=\"small\"\n    [label]=\"'Apply' | translate\"\n    [outlined]=\"true\"\n    (onClick)=\"$event.preventDefault(); updateFilter()\"\n  />\n</div>\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, computed, inject, input, linkedSignal, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { DatePicker } from 'primeng/datepicker';\nimport { Divider } from 'primeng/divider';\nimport { RecordSearchStore } from '../../../store/record-search.store';\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  imports: [DatePicker, FormsModule, Divider, Button, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AggregationDateRangeComponent {\n  protected store = inject(RecordSearchStore);\n  protected translateService: TranslateService = inject(TranslateService);\n\n  // COMPONENTS ATTRIBUTES ====================================================\n  // Aggregation key\n  key = input.required<string>();\n\n  // COMPUTED SIGNALS ==========================================================\n  /** Aggregation config derived from the store. */\n  private readonly aggregation = computed(() => this.store.aggregations()?.find((a: any) => a.key === this.key()));\n\n  // Date minimum\n  readonly minDate = computed(() => {\n    const min = this.aggregation()?.config?.min;\n    return min ? new Date(min) : new Date(1900, 0, 1);\n  });\n\n  // Date maximum\n  readonly maxDate = computed(() => {\n    const max = this.aggregation()?.config?.max;\n    const d = max ? new Date(max) : new Date();\n    return new Date(d.setHours(23, 59, 59));\n  });\n\n  /** True if route have aggregation query param. */\n  readonly hasQueryParam = computed(() => this.store.aggregationsFilters().some((f) => f.key === this.key()));\n\n  /** Model used for Datepicker field. Derived from store filters, but writable by the user. */\n  readonly dateRangeModel = linkedSignal<Date[]>(() => {\n    const filter = this.store.aggregationsFilters().find((f: Filter) => f.key === this.key());\n    return filter\n      ? filter.values[0].split('--').map((item: string) => new Date(+item))\n      : [this.minDate(), this.maxDate()];\n  });\n\n  private readonly today = signal(new Date());\n  private readonly langChange = toSignal(this.translateService.onLangChange);\n\n  readonly buttonConfig = computed(() => {\n    this.langChange(); // track language changes\n    const today = this.today();\n    return [\n      {\n        value: [new Date(new Date().setDate(today.getDate() - 31)), today],\n        label: this.translateService.instant('Last month'),\n      },\n      {\n        value: [new Date(new Date().setDate(today.getDate() - 366)), today],\n        label: this.translateService.instant('Last year'),\n      },\n      {\n        value: [\n          new Date(today.getFullYear(), today.getMonth(), 1),\n          new Date(today.getFullYear(), today.getMonth() + 1, 0),\n        ],\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\n  setRange(value: Date[]) {\n    this.dateRangeModel.set(value);\n    this.updateFilter();\n  }\n\n  // COMPONENTS FUNCTIONS =====================================================\n  /** Update aggregation filter. */\n  updateFilter() {\n    const model = this.dateRangeModel();\n    if (model && model[0] && model[1]) {\n      const maxDate = new Date(model[1]).setHours(23, 59, 59);\n      this.store.updateAggregationsFilter(this.key(), [`${model[0].getTime()}--${maxDate}`]);\n    }\n  }\n\n  /** Clear aggregation filter. */\n  clearFilter(): void {\n    this.store.updateAggregationsFilter(this.key(), []);\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<p-datepicker\n  class=\"core:w-full\"\n  inputStyleClass=\"core:text-center\"\n  [ngModel]=\"dateRangeModel()\"\n  (ngModelChange)=\"dateRangeModel.set($event)\"\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\n            (onClick)=\"setRange(cfg.value)\"\n            styleClass=\"core:w-full\"\n            class=\"core:grow core:p-1\"\n            outlined\n            size=\"small\"\n            [label]=\"cfg.label\"\n          />\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { BucketsComponent } from './buckets/buckets.component';\nimport { Fieldset } from 'primeng/fieldset';\nimport { AggregationSliderComponent } from './slider/slider.component';\nimport { AggregationDateRangeComponent } from './date-range/date-range.component';\nimport { TranslateDirective, TranslatePipe } from '@ngx-translate/core';\nimport { Aggregation } from '../../../../../model/record.interface';\nimport { UpperCaseFirstPipe } from '../../../../../core/pipe/ucfirst/ucfirst.pipe';\nimport { RecordSearchStore } from '../../store/record-search.store';\n\n@Component({\n  selector: 'ng-core-record-search-aggregation',\n  templateUrl: './aggregation.component.html',\n  imports: [\n    BucketsComponent,\n    Fieldset,\n    AggregationSliderComponent,\n    AggregationDateRangeComponent,\n    TranslateDirective,\n    TranslatePipe,\n    UpperCaseFirstPipe,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RecordSearchAggregationComponent {\n  protected store = inject(RecordSearchStore);\n\n  // COMPONENT ATTRIBUTES =====================================================\n  /** Aggregation data */\n  aggregation = input.required<Aggregation>();\n\n  // COMPUTED SIGNALS ==========================================================\n  /** Returns selected filter values for this aggregation key. */\n  readonly aggregationFilters = computed(\n    () => this.store.aggregationsFilters().find((item: any) => item.key === this.aggregation().key)?.values ?? [],\n  );\n\n  /** Whether the aggregation panel should be expanded. */\n  readonly isAggregationDisplayed = computed(() => this.aggregation().expanded || this.aggregationFilters().length > 0);\n\n  // PUBLIC METHODS ========================================================\n\n  /**\n   * Method called when the title of an aggregation is clicked.\n   */\n  toggleVisibility(): void {\n    if (this.aggregationFilters().length > 0) {\n      return;\n    }\n    const agg = this.aggregation();\n    const expanded = !agg.expanded;\n    this.store.setAggregationExpanded(agg.key, expanded);\n    if (expanded) {\n      this.store.fetchAggregationBuckets({ aggregationKey: agg.key });\n    }\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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, aggregationKey: '', name: (store.aggregationNameFromConfig(aggregation().key) || aggregation().name || aggregation().key | translate | ucfirst) || '' }]\"\n      [aggregationKey]=\"aggregation().key\"\n    />\n  </div>\n} @else {\n  <p-fieldset\n    [legend]=\"(store.aggregationNameFromConfig(aggregation().key) || 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 [key]=\"aggregation().key\" />\n        }\n        @case ('date-range') {\n          <ng-core-aggregation-date-range [key]=\"aggregation().key\" />\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            />\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { Bucket } from '../../../../../../model';\nimport { RecordSearchStore } from '../../../store/record-search.store';\nimport { Observable, of, shareReplay } from 'rxjs';\n\nexport interface IFilter {\n  key: string;\n  aggregationKey: string;\n  name?: string;\n  label$?: Observable<string>;\n}\n\n@Component({\n  selector: 'ng-core-list-filters',\n  templateUrl: './list-filters.component.html',\n  imports: [Button, AsyncPipe, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListFiltersComponent {\n  protected translateService: TranslateService = inject(TranslateService);\n  protected store = inject(RecordSearchStore);\n\n  // Filters to hide\n  filtersToHide = ['simple'];\n\n  // Filters selected\n  filters = computed(() => this.getActiveFilters());\n\n\n  /**\n   * Returns promised filters\n   * @returns the array of IFilter\n   */\n  private getActiveFilters(): IFilter[] {\n    const filterSet: string[] = [];\n    this.store.config().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: IFilter[] = [];\n    this.store.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.getCurrentLang()).format(+min);\n              const dateMax = new Intl.DateTimeFormat(this.translateService.getCurrentLang()).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    const aggregations = this.store.aggregations();\n    if (aggregations) {\n      aggregations.map((item: any) => {\n        this.getFilterNames(item.value.buckets, filters);\n      });\n    }\n    const processFn = this.store.config().processFilterName;\n    filters.forEach((filter) => {\n      if (!filter.label$) {\n        filter.label$ = (processFn\n          ? processFn(filter).pipe(shareReplay(1))\n          : filter.name\n            ? of(filter.name)\n            : this.translateService.stream(filter.key)) as Observable<string>;\n      }\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: Bucket[], filters: IFilter[]) {\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      const index = filters.findIndex(\n        (filter: any) => filter.key === bucket.key && filter.aggregationKey === bucket.aggregationKey,\n      );\n      if (index > -1) {\n        if (bucket.name) {\n          filters[index].name = bucket.name;\n        }\n        // Reuse bucket.label$ (stable Observable) to avoid re-subscription on re-renders\n        if (bucket.label$) {\n          filters[index].label$ = bucket.label$;\n        }\n        filters[index] = { ...filters[index] };\n      }\n    });\n  }\n\n  /**\n   * Remove filter.\n   * @param filter - the filter to remove\n   */\n  removeFilter(filter: IFilter): void {\n    this.store.removeFilterValue(filter.aggregationKey, filter.key);\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (filters().length) {\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.label$ | async)!\"\n        icon=\"fa fa-times\"\n        [outlined]=\"true\"\n        severity=\"secondary\"\n        [title]=\"filter.aggregationKey | translate\"\n        (onClick)=\"removeFilter(filter)\"\n      />\n    }\n  </div>\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ButtonDirective, Button } from 'primeng/button';\nimport { Tooltip } from 'primeng/tooltip';\nimport { Menu } from 'primeng/menu';\nimport { TranslatePipe } from '@ngx-translate/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  imports: [ButtonDirective, Button, Tooltip, Menu, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExportButtonComponent {\n  /** Export formats configuration */\n  exportOptions = input.required<IExportOption[]>();\n\n  openLink(url: string): void {\n    window.location.href = url;\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (exportOptions() && exportOptions().length > 0) {\n  <!-- check single export format -->\n  @if (exportOptions().length === 1) {\n    @if (!exportOptions()[0]?.disabled) {\n      <a pButton outlined severity=\"secondary\" [href]=\"exportOptions()[0].url\" rel=\"noopener noreferrer\">\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        (onClick)=\"openLink(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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MenuItem, MenuItemCommandEvent } from 'primeng/api';\nimport { Button } from 'primeng/button';\nimport { Menu } from 'primeng/menu';\nimport { SortOption } from '../../../../model/record-search.interface';\nimport { RecordSearchStore } from '../../store/record-search.store';\n\n@Component({\n  selector: 'ng-core-menu-sort',\n  templateUrl: './menu-sort.component.html',\n  imports: [Menu, Button, NgClass, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuSortComponent {\n  protected translateService: TranslateService = inject(TranslateService);\n  protected store = inject(RecordSearchStore);\n\n  language = toSignal(this.translateService.onLangChange);\n\n  selectedOption = computed(() =>\n    this.store.config().sortOptions.find((opt: SortOption) => opt.value === this.store.activeSort()),\n  );\n\n  options = computed(() => {\n    this.language(); // track language changes to re-evaluate translations\n    return this.sortOptions();\n  });\n\n  /** Return the sort options from config, translated and sorted alphabetically. */\n  sortOptions(): MenuItem[] {\n    const translations: MenuItem[] = [];\n    this.store.config().sortOptions.map((option: SortOption) => {\n      if (option.label) {\n        const newOption: MenuItem = { label: option.label, value: option.value, icon: option.icon };\n        newOption.label = this.translateService.instant(option.label);\n        newOption.command = (event: MenuItemCommandEvent) => {\n          if (event.item?.value) {\n            this.store.updateSort(event.item.value);\n            this.store.updatePage(1);\n          }\n        };\n        translations.push(newOption);\n      }\n    });\n    return translations.sort((a: MenuItem, b: MenuItem) => a.label!.localeCompare(b.label!));\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (options().length) {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, Signal, computed, inject, output } from '@angular/core';\nimport { Paginator, PaginatorState } from 'primeng/paginator';\nimport { RecordSearchStore } from '../../store/record-search.store';\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  imports: [Paginator],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PaginatorComponent {\n  protected store = inject(RecordSearchStore);\n\n  /** Emitted after a page/size change — lets parent trigger scroll-to-top */\n  pageChanged = output<void>();\n\n  alwaysShow: Signal<boolean> = computed(() => this.store.total() > this.store.size());\n  currentPage: Signal<number> = computed(() => this.store.page());\n  pageLinkSize: Signal<number> = computed(() => this.store.config().pagination.maxSize);\n  rows: Signal<number> = computed(() => this.store.size());\n  rowsPerPageOptions: Signal<number[]> = computed(() => this.store.config().pagination.rowsPerPageOptions);\n  showCurrentPageReport: Signal<boolean> = computed(() => this.store.config().pagination.pageReport);\n  showFirstLastIcon: Signal<boolean> = computed(() => this.store.config().pagination.boundaryLinks);\n  totalRecords: Signal<number> = computed(() => this.store.total());\n\n  /** Position offset for the current page (0-based, used by PrimeNG paginator) */\n  first: Signal<number> = computed(() => (this.store.page() - 1) * this.store.size());\n\n  /** Event on change page */\n  onPageChange(event: PaginatorState) {\n    if (event.rows !== undefined) {\n      this.store.updateSize(event.rows);\n    }\n    if (event.page !== undefined) {\n      this.store.updatePage(event.page + 1);\n    }\n    this.pageChanged.emit();\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ViewContainerRef,\n  computed,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  output,\n  viewChild,\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Router, RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { Tooltip } from 'primeng/tooltip';\nimport { Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap } from 'rxjs/operators';\nimport { ActionStatus, DEFAULT_ACTION_STATUS, RecordData } from '../../../../../model';\nimport { DetailUrl } from '../../../../model/result-item.interface';\nimport { RecordSearchStore } from '../../store/record-search.store';\nimport { DefaultSearchResultComponent } from './default-search-result/default-search-result.component';\n\nexport interface IDeleteRecordEvent {\n  pid: string;\n  type?: string;\n}\n\n@Component({\n  selector: 'ng-core-record-search-result',\n  templateUrl: './record-search-result.component.html',\n  imports: [Button, RouterLink, Tooltip, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RecordSearchResultComponent {\n  protected router: Router = inject(Router);\n  protected store = inject(RecordSearchStore);\n\n  // Store current URL to come back to the same page\n  currentUrl: string | null = null;\n\n  // Record to display (only input needed)\n  readonly record = input.required<RecordData>();\n\n  // Create observable from record signal (as class property for injection context)\n  // Use distinctUntilChanged to avoid re-emitting the same record\n  private readonly record$ = toObservable(this.record).pipe(distinctUntilChanged((a, b) => a?.id === b?.id));\n\n  // Convert observables to signals directly - more efficient than manual subscriptions\n  readonly deleteStatus = toSignal(this.record$.pipe(switchMap((record) => this.store.canDeleteRecord$(record))), {\n    initialValue: DEFAULT_ACTION_STATUS,\n  });\n\n  readonly updateStatus = toSignal(this.record$.pipe(switchMap((record) => this.store.canUpdateRecord$(record))), {\n    initialValue: DEFAULT_ACTION_STATUS,\n  });\n\n  readonly useStatus = toSignal(this.record$.pipe(switchMap((record) => this.store.canUseRecord$(record))), {\n    initialValue: DEFAULT_ACTION_STATUS,\n  });\n\n  readonly detailUrl = toSignal(this.record$.pipe(switchMap((record) => this.resolveDetailUrl(record))), {\n    initialValue: { link: '', external: false },\n  });\n\n  // Get type from store\n  readonly type = computed(() => this.store.currentType());\n\n  // Get component view from store config\n  readonly itemViewComponent = computed(() => this.store.config().component);\n\n  // Get admin mode from store routeConfig\n  readonly adminMode = computed(() => this.store.routeConfig().adminMode);\n\n  // Event emitted when a record is deleted\n  readonly deletedRecord = output<IDeleteRecordEvent>();\n\n  readonly deleteMessageEvent = output<string>();\n\n  // Location for component item creation\n  readonly container = viewChild.required('item', { read: ViewContainerRef });\n\n  // Return a message containing the reasons why the item cannot be deleted\n  readonly deleteInfoMessage = computed(() => this.deleteStatus().message || '');\n\n  // Helper computed for template access\n  readonly useStatusUrl = computed(() => this.useStatus().url);\n\n  readonly updateStatusRouterLink = computed(() => this.updateStatus().routerLink);\n\n  readonly deleteStatusType = computed(() => this.deleteStatus().type);\n\n  constructor() {\n    this.currentUrl = window.location.href;\n\n    // Effect to create/update the dynamic component when dependencies change\n    effect(() => {\n      const container = this.container();\n      const component = this.itemViewComponent();\n      const record = this.record();\n      const type = this.type();\n      const detailUrl = this.detailUrl();\n\n      // Clear and create component\n      container.clear();\n      container.createComponent(component || DefaultSearchResultComponent, {\n        bindings: [\n          inputBinding('record', () => record),\n          inputBinding('type', () => type),\n          inputBinding('detailUrl', () => detailUrl),\n        ],\n      });\n    });\n  }\n\n  /**\n   * Resolves detail URL for a record\n   * @param record - Record to resolve URL for\n   * @returns Observable with detail URL\n   */\n  private resolveDetailUrl(record: RecordData): Observable<DetailUrl> {\n    const url = { link: `detail/${record.id}`, external: false };\n\n    const detailUrl = this.store.routeConfig().detailUrl;\n    if (detailUrl) {\n      url.link = detailUrl.replace(':type', this.store.currentIndex()).replace(':pid', record.id);\n      url.external = true;\n    }\n\n    if (!this.store.config()?.canRead) {\n      return of(url);\n    }\n\n    return this.store.canReadRecord$(record).pipe(\n      map((status: ActionStatus) => {\n        if (status.can === false) {\n          return { link: '', external: false };\n        }\n        return url;\n      }),\n    );\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    const status = this.deleteStatus();\n    if (status.can) {\n      this.deletedRecord.emit({ pid, type });\n    } else {\n      if (status.message) {\n        this.deleteMessageEvent.emit(status.message.replace(new RegExp('\\\\n', 'g'), '<br>'));\n      }\n    }\n  }\n\n  /**\n   * Use a record\n   */\n  useRecord() {\n    const status = this.useStatus();\n    if ('url' in status && status.url) {\n      this.router.navigateByUrl(status.url);\n    }\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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()) {\n      <!-- use button -->\n      @if (useStatus().can && useStatusUrl()) {\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]=\"updateStatusRouterLink() || ['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, deleteStatusType())\"\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ToggleSwitch, ToggleSwitchChangeEvent } from 'primeng/toggleswitch';\nimport { SearchFilter, SearchFilterSection } from '../../../../../model';\nimport { RecordSearchStore } from '../../store/record-search.store';\n\n@Component({\n  selector: 'ng-core-search-filters',\n  templateUrl: './search-filters.component.html',\n  imports: [NgClass, NgTemplateOutlet, ToggleSwitch, FormsModule, RouterLink, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SearchFiltersComponent {\n  protected store = inject(RecordSearchStore);\n\n  // Class for section (layout customization, provided by parent)\n  styleClassSection = input<string>();\n\n  protected readonly allSearchFilters = computed(\n    () => this.store.config().searchFilters as (SearchFilter | SearchFilterSection)[],\n  );\n\n  protected isSection(item: SearchFilter | SearchFilterSection): item is SearchFilterSection {\n    return 'filters' in item;\n  }\n\n  protected asSection(item: SearchFilter | SearchFilterSection): SearchFilterSection {\n    return item as SearchFilterSection;\n  }\n\n  /**\n   * Check if a filter section should be displayed\n   * @param searchFilterSection - SearchFilterSection\n   * @returns True if the section should be shown\n   */\n  showFilterSection(searchFilterSection: SearchFilterSection): boolean {\n    return searchFilterSection.filters.some((filter: SearchFilter) =>\n      this.store.config().allowEmptySearch\n        ? true\n        : (this.store.q() && filter.showIfQuery === true) || !filter?.showIfQuery,\n    );\n  }\n\n  /**\n   * Check if a simple filter should be displayed\n   * @param searchFilter - SearchFilter\n   * @returns True if the filter should be shown\n   */\n  showFilter(searchFilter: SearchFilter): boolean {\n    if (this.store.config().allowEmptySearch) {\n      return true;\n    }\n    if (!this.store.q()) {\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 store aggregations filters (signal-based).\n   * @param filter - SearchFilter\n   * @returns True, if the filter is active.\n   */\n  isChecked(filter: SearchFilter): boolean {\n    const entry = this.store.aggregationsFilters().find((f) => f.key === filter.filter);\n    if (!entry || entry.values.length === 0) {\n      return false;\n    }\n    const value = entry.values[0];\n    if (filter.filter === 'simple') {\n      return !JSON.parse(value);\n    }\n    return Boolean(JSON.parse(value));\n  }\n\n  /**\n   * Event on switch — updates the store directly\n   * @param event - ToggleSwitchChangeEvent primeng\n   * @param filter the search filter\n   */\n  change(event: ToggleSwitchChangeEvent, filter: SearchFilter): void {\n    const values: string[] = [];\n    if (filter.filter === 'simple') {\n      values.push(event.checked ? '0' : '1');\n    } else if (event.checked) {\n      values.push(String(event.checked));\n    }\n    this.store.updateAggregationsFilter(filter.filter, values);\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (allSearchFilters().length > 0) {\n  <div class=\"core:mb-2 core:flex core:flex-col core:gap-1\">\n    @for (item of allSearchFilters(); track $index) {\n      @if (isSection(item)) {\n        @if (showFilterSection(asSection(item))) {\n          <div [ngClass]=\"styleClassSection()\">{{ asSection(item).label | translate }}</div>\n          @for (searchFilter of asSection(item).filters; track searchFilter.filter) {\n            @if (showFilter(searchFilter)) {\n              <ng-container\n                [ngTemplateOutlet]=\"searchFilterTemplate\"\n                [ngTemplateOutletContext]=\"{ filter: searchFilter }\"\n              />\n            }\n          }\n        }\n      } @else {\n        @if (showFilter(item)) {\n          <ng-container [ngTemplateOutlet]=\"searchFilterTemplate\" [ngTemplateOutletContext]=\"{ filter: item }\" />\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, model } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Ripple } from 'primeng/ripple';\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\nimport { RecordSearchStore } from '../../store/record-search.store';\n\n// Documentation: https://primeng.org/tabview\n\n@Component({\n  selector: 'ng-core-search-tabs',\n  templateUrl: './search-tabs.component.html',\n  imports: [Tabs, TabList, Ripple, Tab, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SearchTabsComponent {\n  private store = inject(RecordSearchStore);\n  protected activatedRoute: ActivatedRoute = inject(ActivatedRoute);\n\n  /** Tabs displayed (configs not flagged as hidden) */\n  readonly typesInTabs = computed(() => this.store.configs().filter((item) => item.hideInTabs !== true));\n\n  /** Currently selected tab value, two-way bound to PrimeNG Tabs. */\n  currentType = model<string | undefined>(undefined);\n\n  constructor() {\n    this.currentType.set(this.activatedRoute.snapshot.params.type);\n    effect(() => {\n      const typeName = this.currentType();\n      if (typeName) {\n        this.store.updateCurrentType(typeName);\n      }\n    });\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  Signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { Button } from 'primeng/button';\nimport { DataView } from 'primeng/dataview';\nimport { Message } from 'primeng/message';\nimport { Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { ErrorComponent, SearchInputComponent, UpperCaseFirstPipe } from '../../../../core';\nimport { Aggregations, SearchFilter } from '../../../../model';\nimport { ActionStatus } from '../../../../model/action-status.interface';\nimport { ExportFormat } from '../../../model/record-search.interface';\nimport { ApiService } from '../../../service/api/api.service';\nimport { RecordUiService } from '../../../service/record-ui/record-ui.service';\nimport { RecordService } from '../../../service/record/record.service';\nimport { AggregationsFilter } from '../model/aggregations-filter.interface';\nimport { RecordSearchStore } from '../store/record-search.store';\nimport { RecordSearchAggregationComponent } from './aggregation/aggregation.component';\nimport { ListFiltersComponent } from './aggregation/list-filters/list-filters.component';\nimport { ExportButtonComponent, IExportOption } from './export-button/export-button.component';\nimport { MenuSortComponent } from './menu-sort/menu-sort.component';\nimport { PaginatorComponent } from './paginator/paginator.component';\nimport { RecordSearchResultComponent } from './record-search-result/record-search-result.component';\nimport { SearchFiltersComponent } from './search-filters/search-filters.component';\nimport { SearchTabsComponent } from './search-tabs/search-tabs.component';\n\n@Component({\n  selector: 'ng-core-record-search',\n  templateUrl: './record-search.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ErrorComponent,\n    SearchTabsComponent,\n    SearchInputComponent,\n    Message,\n    Button,\n    RouterLink,\n    MenuSortComponent,\n    ExportButtonComponent,\n    ListFiltersComponent,\n    SearchFiltersComponent,\n    RecordSearchAggregationComponent,\n    DataView,\n    RecordSearchResultComponent,\n    PaginatorComponent,\n    TranslatePipe,\n    UpperCaseFirstPipe,\n    CommonModule,\n  ],\n})\nexport class RecordSearchComponent {\n  private readonly destroyRef = inject(DestroyRef);\n  protected recordService: RecordService = inject(RecordService);\n  protected recordUiService: RecordUiService = inject(RecordUiService);\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  // this is inherited from the parent component\n  protected readonly elementRef = inject(ElementRef);\n  readonly store = inject(RecordSearchStore);\n\n  // COMPONENT ATTRIBUTES =====================================================\n  /** If admin mode is disabled, no action can be performed on a record (as add, update or remove) */\n  // this cannot be done in the store because we want to let it as pure\n  readonly adminMode = computed(() => this.store.routeConfig().adminMode);\n\n  // Convert observables to signals directly - more efficient than manual subscriptions\n  readonly addStatus: Signal<ActionStatus> = toSignal(this.store.canAddRecord$(), {\n    initialValue: { can: false, message: '' },\n  });\n\n  /** If we need to show the empty search message info. */\n  showEmptySearchMessage = computed(() => this.store.config().allowEmptySearch === false && !this.store.q());\n\n  /** Define if title have to be displayed or not. */\n  readonly _showLabel = input(true);\n\n  availableTypes = computed(() => this.store.configs().filter((item) => item.hideInTabs !== true));\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  exportFormats = computed((): IExportOption[] =>\n    this.store.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  /** Get showLabel value, given either by config or by local value. */\n  showLabel = computed(() => {\n    if (this.config().showLabel != null) {\n      return this.config().showLabel;\n    }\n    return this._showLabel();\n  });\n\n  /** Config getter for backward compatibility */\n  config = computed(() => this.store.config());\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.store.q() && this.store.hits().length === 0 && !this.showEmptySearchMessage;\n  }\n\n  /** Return a message containing the reasons why record list cannot be exported. */\n  exportInfoMessage = computed(() =>\n    this.store.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  constructor() {\n    effect(() => {\n      if (this.store.isLoading()) {\n        this.spinner.show();\n      } else {\n        this.spinner.hide();\n      }\n    });\n  }\n\n  // COMPONENT FUNCTIONS ======================================================\n\n  /**\n   * Change query text.\n   * @param event - string, new query text\n   */\n  searchByQuery(event: string) {\n    this.store.updateQuery(event);\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.store.currentType();\n    const deleteMessage = this.recordUiService.deleteMessage(event.pid, this.store.config());\n    this.recordUiService\n      .deleteRecord(type, event.pid, deleteMessage)\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        tap(() => {\n          this.store.updatePage(1);\n          // Force reload of results after deletion\n          // TODO: force reload event if no params has changed\n          this.store.fetchRecords({\n            index: this.store.currentIndex(),\n            query: this.store.q(),\n            page: this.store.page(),\n            allowEmptySearch: this.store.config().allowEmptySearch,\n            itemsPerPage: this.store.size(),\n            aggregationsFilters: this.store.aggregationsFilters(),\n            preFilters: this.store.config().preFilters,\n            sort: this.store.activeSort(),\n            facets: this.store.facetsParameter(),\n            headers: this.store.config().listHeaders,\n          });\n        }),\n      )\n      .subscribe();\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 format url.\n   * @param format - export format object\n   * @return formatted url for an export format.\n   */\n  getExportFormatUrl(format: ExportFormat): string {\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.store.currentIndex());\n    let url = `${baseUrl}?q=${encodeURIComponent(this.store.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().preFilters) {\n      for (const [key, value] of Object.entries(this.store.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.store.aggregationsFilters()) {\n      this.store.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: ExportFormat): boolean {\n    return Object.hasOwn(format, 'disableMaxRestResultsSize') && format.disableMaxRestResultsSize\n      ? this.store.total() > 0\n      : 0 < this.store.total() && this.store.total() < RecordService.MAX_REST_RESULTS_SIZE;\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: Aggregations): Observable<Aggregations> {\n    return of(aggregations);\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: AggregationsFilter[] = [];\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: SearchFilter[] = [];\n    this.store.config().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  scrollToTop(): void {\n    this.elementRef.nativeElement.scrollIntoView({ behavior: 'smooth' });\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n@if (store.error(); as error) {\n  <ng-core-error [error]=\"error\"></ng-core-error>\n} @else {\n  <div class=\"core:flex core:flex-col core:gap-2\">\n    <ng-core-search-tabs />\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 (store.routeConfig().showSearchInput) {\n        <ng-core-search-input\n          class=\"core:grow\"\n          [placeholder]=\"('search' | translate | ucfirst) || ''\"\n          [searchText]=\"store.q()\"\n          [displayLabel]=\"false\"\n          (searchQuery)=\"searchByQuery($event)\"\n          [focus]=\"true\"\n        />\n      }\n      <ng-content select=\"[afterInputSearch]\" />\n    </div>\n    @if (!store.isLoading() && hasNoRecord) {\n      <p-message severity=\"info\">\n        {{ 'There are no records in this section' | translate }}\n      </p-message>\n      @if (adminMode() && 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        <div class=\"core:flex core:items-center core:w-full\">\n          <strong>{{ store.resultsText() | translate: { total: store.total() } }}</strong>\n        </div>\n        <div class=\"core:flex core:items-center core:justify-end core:w-full\">\n          @if (adminMode() && 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) {\n            <ng-core-menu-sort class=\"core:ml-1\" />\n          }\n          <!-- EXPORT BUTTON -->\n          <ng-core-export-button class=\"core:ml-1\" [exportOptions]=\"exportFormats()\" />\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 class=\"core:col-span-12\" />\n        <ng-content select=\"[top-search-result]\"></ng-content>\n        @if (\n          (store.aggregations() && store.aggregations().length) ||\n          config().searchFilters.length > 0\n        ) {\n          <div class=\"core:md:col-span-5 core:lg:col-span-3 core:col-span-12\">\n            <ng-core-search-filters styleClassSection=\"core:my-2\" />\n\n            @if (!showEmptySearchMessage() || store.q()) {\n              <ng-content select=\"[top-facets]\" />\n              @for (item of store.aggregations(); track item.key) {\n                <div>\n                  @if (!config().aggregationsHide.includes(item.key)) {\n                    <ng-core-record-search-aggregation [aggregation]=\"item\" />\n                  }\n                </div>\n              }\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]=\"store.hits()\" [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                      [record]=\"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 (pageChanged)=\"scrollToTop()\" />\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, inject, effect, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { map } from 'rxjs';\nimport { paramMapToSearchParams, searchParamsToUrlParams, shallowEqual } from '../../record-search-utils';\nimport { RecordSearchStore } from './store/record-search.store';\nimport { RecordSearchComponent } from './record-search/record-search.component';\nimport { SearchParams } from '../../model';\n\n@Component({\n  selector: 'ng-core-record-search-page',\n  standalone: true,\n  templateUrl: './record-search-page.component.html',\n  imports: [RecordSearchComponent],\n  providers: [RecordSearchStore], // Store is scoped to this page component\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RecordSearchPageComponent {\n  private readonly route = inject(ActivatedRoute);\n  private readonly router = inject(Router);\n\n  readonly store = inject(RecordSearchStore);\n\n  constructor() {\n    /**\n     * A1. Sync URL path param :type -> currentType (via updateCurrentType)\n     */\n    this.route.paramMap\n      .pipe(\n        map((p) => p.get('type') || ''),\n        takeUntilDestroyed(),\n      )\n      .subscribe((type) => {\n        if (type) {\n          this.store.updateCurrentType(type);\n        }\n      });\n    /**\n     * A2. Sync URL query params -> searchParams (via syncUrlParams rxMethod)\n     */\n    this.store.syncUrlParams(this.route.queryParamMap.pipe(map((paramMap) => paramMapToSearchParams(paramMap))));\n\n    /**\n     * B. Sync Route Data (Static or Resolved data)\n     */\n    this.store.updateRouteConfig(this.route.snapshot.data);\n\n    /**\n     * C. Sync Store -> URL (Output Effect)\n     * Reacts whenever the store state changes to update the browser URL.\n     */\n    effect(() => {\n      const currentType = this.store.currentType();\n      // Read individual signals so the effect tracks only the URL-relevant fields\n      const storeParams: Partial<SearchParams> = {\n        q: this.store.q(),\n        page: this.store.page(),\n        size: this.store.size(),\n        sort: this.store.sort(),\n        aggregationsFilters: this.store.aggregationsFilters(),\n      };\n\n      // We use untracked to read current route state without creating dependencies,\n      // preventing recursive effect triggers.\n      untracked(() => {\n        const urlParams = paramMapToSearchParams(this.route.snapshot.queryParamMap);\n        const currentTypeInUrl = this.route.snapshot.paramMap.get('type');\n\n        const paramsInSync = shallowEqual(storeParams, urlParams);\n        const typeInSync = currentType === currentTypeInUrl;\n\n        if (!paramsInSync || !typeInSync) {\n          this.navigate(currentType, storeParams as SearchParams);\n        }\n      });\n    });\n  }\n\n  /**\n   * Helper method to perform the actual router navigation\n   */\n  private navigate(currentType: string, params: SearchParams) {\n    this.router.navigate(['..', currentType], {\n      relativeTo: this.route,\n      queryParams: searchParamsToUrlParams(params, this.store.aggregationsFilters()),\n      replaceUrl: true, // Prevents polluting browser history with every filter change\n    });\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<ng-core-record-search class=\"core:my-1\" />\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Location } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';\nimport { ActionStatus } from '../../../../model/action-status.interface';\nimport { RecordActionEvent } from './record-action-event.interface';\nimport { Button } from 'primeng/button';\nimport { TranslateDirective, TranslatePipe } from '@ngx-translate/core';\nimport { Tooltip } from 'primeng/tooltip';\nimport { RecordData } from '../../../../model/record.interface';\n\n@Component({\n  selector: 'ng-core-detail-button',\n  templateUrl: './detail-button.component.html',\n  imports: [Button, TranslateDirective, Tooltip, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DetailButtonComponent {\n  // Inject\n  location: Location = inject(Location);\n\n  /** Record */\n  record = input<RecordData | null>(null);\n\n  /** Record type */\n  type = input<string>('');\n\n  /** Admin mode for CRUD operations */\n  adminMode = input(false);\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<RecordActionEvent>();\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.useStatus().url });\n  }\n\n  /**\n   * Update record event\n   * @param record - the current record\n   */\n  updateRecord(record: RecordData): 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: RecordData): 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(): void {\n    this.location.back();\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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()) {\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Location } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  inject,\n  inputBinding,\n  signal,\n  ViewContainerRef,\n  viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { MessageService } from 'primeng/api';\nimport { catchError, finalize, map, of, switchMap } from 'rxjs';\nimport { ActionStatus } from '../../../model/action-status.interface';\nimport { RecordData } from '../../../model/record.interface';\nimport { RecordUiService } from '../../service/record-ui/record-ui.service';\nimport { RecordService } from '../../service/record/record.service';\nimport { RecordType } from '../../model';\nimport { DetailButtonComponent } from './detail-button/detail-button.component';\nimport { RecordActionEvent } from './detail-button/record-action-event.interface';\nimport { DefaultDetailComponent } from './default-detail/default-detail.component';\nimport { ErrorComponent } from '../../../core/component/error/error.component';\nimport { Error as RecordError } from '../../../core';\nimport { HttpHeaders } from '@angular/common/http';\n\n@Component({\n  templateUrl: './detail.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [DetailButtonComponent, ErrorComponent],\n})\nexport class DetailComponent {\n  protected readonly route = inject(ActivatedRoute);\n  protected readonly router = inject(Router);\n  protected readonly location = inject(Location);\n  protected readonly recordService = inject(RecordService);\n  protected readonly recordUiService = inject(RecordUiService);\n  protected readonly translate = inject(TranslateService);\n  protected readonly spinner = inject(NgxSpinnerService);\n  protected readonly messageService = inject(MessageService);\n  private readonly destroyRef = inject(DestroyRef);\n\n  readonly dynamicHost = viewChild.required('dynamicHost', { read: ViewContainerRef });\n\n  private readonly paramMap = toSignal(this.route.paramMap, { requireSync: true });\n  private readonly routeData = toSignal(this.route.data, { requireSync: true });\n\n  readonly type = computed(() => this.paramMap().get('type') ?? '');\n  readonly pid = computed(() => this.paramMap().get('pid') ?? '');\n\n  private readonly recordRequest = computed(() => {\n    const config = this.config();\n    const pid = this.pid();\n    const type = this.type();\n    if (!config || !pid || !type) {\n      return null;\n    }\n    return { config, pid };\n  });\n  private readonly recordContext = computed(() => ({\n    record: this.record(),\n    config: this.config(),\n    type: this.type(),\n  }));\n\n  private readonly config = computed<RecordType | null>(() => {\n    const types = this.getTypes();\n    const type = this.type();\n    if (!types.length || !type) return null;\n    return types.find((t) => t.key === type) ?? null;\n  });\n\n  readonly record = toSignal(\n    toObservable(this.recordRequest).pipe(\n      switchMap((request) => {\n        if (!request) {\n          this.spinner.hide();\n          return of(undefined);\n        }\n\n        this.error.set(undefined);\n        this.spinner.show();\n\n        const { config, pid } = request;\n        const resourceType = config.index || config.key;\n        return this.recordService\n          .getRecord<RecordData>(resourceType, pid, {\n            resolve: 1,\n            headers: config.itemHeaders || new HttpHeaders({ 'Content-Type': 'application/json' }),\n          })\n          .pipe(\n            map((record) => record ?? undefined),\n            catchError((err) => {\n              this.error.set(err);\n              return of(undefined);\n            }),\n            finalize(() => this.spinner.hide()),\n          );\n      }),\n    ),\n    { initialValue: undefined },\n  );\n  readonly error = signal<RecordError | undefined>(undefined);\n  readonly useStatus = toSignal(\n    toObservable(this.recordContext).pipe(\n      switchMap(({ record, config }) =>\n        record && config\n          ? this.recordUiService.canUseRecord$(record, config)\n          : of({ can: false, message: '', url: '' }),\n      ),\n    ),\n    { initialValue: { can: false, message: '', url: '' } },\n  );\n  readonly updateStatus = toSignal(\n    toObservable(this.recordContext).pipe(\n      switchMap(({ record, config }) =>\n        record && config ? this.recordUiService.canUpdateRecord$(record, config) : of({ can: false, message: '' }),\n      ),\n    ),\n    { initialValue: { can: false, message: '' } },\n  );\n  readonly deleteStatus = toSignal(\n    toObservable(this.recordContext).pipe(\n      switchMap(({ record, config }) =>\n        record && config ? this.recordUiService.canDeleteRecord$(record, config) : of({ can: false, message: '' }),\n      ),\n    ),\n    { initialValue: { can: false, message: '' } },\n  );\n  readonly adminMode = computed(() => this.routeData()?.adminMode ?? true);\n  readonly canReadStatus = toSignal<ActionStatus | null>(\n    toObservable(this.recordContext).pipe(\n      switchMap(({ record, config }) => (record && config ? this.recordUiService.canReadRecord$(record, config) : of(null))),\n    ),\n    { initialValue: null },\n  );\n\n  constructor() {\n    // Reactively render the detail component when config or record changes\n    effect(() => {\n      const config = this.config();\n      const vcr = this.dynamicHost();\n      vcr.clear();\n      vcr.createComponent(config?.detailComponent || DefaultDetailComponent, {\n        bindings: [\n          inputBinding('record', () => this.record()),\n          inputBinding('type', () => this.type()),\n        ],\n      });\n    });\n\n    effect(() => {\n      const record = this.record();\n      const type = this.type();\n      if (!record || !type) {\n        return;\n      }\n\n      const canReadStatus = this.canReadStatus();\n      if (canReadStatus && !canReadStatus.can) {\n        this.messageService.add({\n          severity: 'error',\n          summary: this.translate.instant(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  }\n\n  recordEvent(event: RecordActionEvent): void {\n    switch (event.action) {\n      case 'use':\n        if (event.url) {\n          this.router.navigateByUrl(event.url);\n        }\n        break;\n      case 'update':\n        this.router.navigate(['../../edit', event.record.id], { relativeTo: this.route, replaceUrl: true });\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  deleteRecord(element: RecordData | string): void {\n    const pid = typeof element === 'object' ? element.id : element;\n    const deleteMessage = this.recordUiService.deleteMessage(pid, this.config());\n    this.recordUiService\n      .deleteRecord(this.type(), pid, deleteMessage)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((result: boolean) => {\n        if (result === true) {\n          let redirectUrl = '../..';\n          const navigateOptions = { relativeTo: this.route };\n          if (typeof element === 'object' && this.config()?.redirectUrl) {\n            this.config()!\n              .redirectUrl!(element, 'delete')\n              .pipe(takeUntilDestroyed(this.destroyRef))\n              .subscribe((redirect: string) => {\n                if (redirect !== null) {\n                  redirectUrl = redirect;\n                }\n                this.router.navigate([redirectUrl], navigateOptions);\n              });\n          } else {\n            this.router.navigate([redirectUrl], navigateOptions);\n          }\n        }\n      });\n  }\n\n  showDeleteMessage(message: string): void {\n    this.recordUiService.showDeleteMessage(message);\n  }\n\n  private getTypes(): RecordType[] {\n    const directTypes = (this.routeData()?.types ?? []) as RecordType[];\n    if (directTypes.length > 0) {\n      return directTypes;\n    }\n\n    let current = this.route.parent;\n    while (current) {\n      const inheritedTypes = (current.snapshot.data?.['types'] ?? []) as RecordType[];\n      if (inheritedTypes.length > 0) {\n        return inheritedTypes;\n      }\n      current = current.parent;\n    }\n\n    return [];\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<div>\n  @if (record()) {\n    <ng-core-detail-button\n      [record]=\"record() ?? null\"\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  @let err = error();\n  @if (err) {\n    <ng-core-error [error]=\"err\" />\n  }\n  <ng-container #dynamicHost />\n</div>\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Injectable } 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 { RecordData } from '../../../../model';\nimport { ApiService } from '../../../service/api/api.service';\nimport { RecordService } from '../../../service/record/record.service';\nimport { JSONSchema7 } from '../../utils/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class JSONSchemaService {\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      if (!field.props) {\n        field.props = {};\n      }\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);\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(field: FormlyFieldConfig, formOptions: any): 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          if (!f.props) {\n            f.props = {};\n          }\n          f.props.options = this.recordService\n            .getRecords(recordType, { query, itemsPerPage: RecordService.MAX_REST_RESULTS_SIZE })\n            .pipe(\n              map((data) => {\n                if (data.hits.hits) {\n                  return data.hits.hits.map((record: RecordData) => {\n                    return {\n                      label:\n                        formOptions.remoteOptions.labelField && formOptions.remoteOptions.labelField in record.metadata\n                          ? record.metadata[formOptions.remoteOptions.labelField]\n                          : record.metadata.name,\n                      value: this.apiService.getRefEndpoint(recordType, record.id),\n                    };\n                  });\n                } else {\n                  return [];\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$/, '')] = () =>\n            // translate the validation messages coming from the JSONSchema\n            this.translateService.stream(msg);\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): 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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { EsResult, JsonObject } from '../../../../model';\nimport { RecordService } from '../../../service/record/record.service';\n\nexport interface TemplateMetadata extends JsonObject {\n  name: string;\n  pid?: string;\n  visibility?: 'public' | 'private';\n  data?: JsonObject;\n  template_type?: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TemplatesService {\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<TemplateMetadata[]> {\n    const query = resourceType !== undefined ? `template_type:${resourceType}` : '';\n    return this.recordService\n      .getRecords<EsResult<TemplateMetadata>>(templateResourceType, {\n        query: query,\n        itemsPerPage: RecordService.MAX_REST_RESULTS_SIZE,\n      })\n      .pipe(\n        map((data) => {\n          if (data.hits) {\n            return data.hits;\n          } else {\n            return {\n              total: { value: 0 },\n              hits: [],\n            };\n          }\n        }),\n        map((hits) => (hits.total.value === 0 ? [] : hits.hits)),\n        map((hits) => hits.map((hit) => hit.metadata)),\n      );\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, OnInit, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { TranslateDirective, TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\nimport { Button } from 'primeng/button';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { Message } from 'primeng/message';\nimport { CONFIG } from '../../../../core';\nimport { RecordService } from '../../../service/record/record.service';\nimport { TemplatesService } from '../../services/template/templates.service';\n\n@Component({\n  selector: 'ng-core-load-template-form',\n  templateUrl: './load-template-form.component.html',\n  imports: [FormsModule, ReactiveFormsModule, Message, TranslateDirective, FormlyModule, Button, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoadTemplateFormComponent implements OnInit {\n  private readonly destroyRef = inject(DestroyRef);\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 = signal(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        autofocus: true,\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\n      .getTemplates(data.templateResourceType, data.resourceType)\n      .pipe(takeUntilDestroyed(this.destroyRef))\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        if (!this.formFields[0].props) {\n          this.formFields[0].props = {};\n        }\n        this.formFields[0].props.options = items;\n        this.isDataFormLoaded.set(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\n      .getRecord('templates', formValues.template)\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .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","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core';\nimport { UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { Button } from 'primeng/button';\n\n@Component({\n  selector: 'ng-core-save-template-form',\n  templateUrl: './save-template-form.component.html',\n  imports: [FormsModule, ReactiveFormsModule, FormlyModule, Button, TranslatePipe],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SaveTemplateFormComponent implements OnInit {\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 = { name: '' };\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","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { Location } from '@angular/common';\nimport { HttpHeaders } from '@angular/common/http';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  inject,\n  input,\n  model,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  output,\n  signal,\n  SimpleChanges,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\nimport { FormlyJsonschema } from '@ngx-formly/core/json-schema';\nimport { TranslateDirective, TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { MessageService } from 'primeng/api';\nimport { Button } from 'primeng/button';\nimport { Divider } from 'primeng/divider';\nimport { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { SplitButton } from 'primeng/splitbutton';\nimport { Tooltip } from 'primeng/tooltip';\nimport { combineLatest, Observable, of, Subscription, throwError } from 'rxjs';\nimport { catchError, finalize, map, switchMap } from 'rxjs/operators';\nimport { HttpPendingService, UpperCaseFirstPipe } from '../../../../core';\nimport { AbstractCanDeactivateComponent } from '../../../../core/component/abstract-can-deactivate/abstract-can-deactivate.component';\nimport { ErrorComponent } from '../../../../core/component/error/error.component';\nimport { Error } from '../../../../core/component/error/error.interface';\nimport { CONFIG } from '../../../../core/config/config';\nimport { AddFieldEditorComponent } from '../../../../formly';\nimport { ActionStatus, JsonObject, JsonValue, RecordData } from '../../../../model';\nimport { ApiService } from '../../../service/api/api.service';\nimport { RecordUiService } from '../../../service/record-ui/record-ui.service';\nimport { RecordService } from '../../../service/record/record.service';\nimport { JSONSchemaService } from '../../services/jsonschema/jsonschema.service';\nimport { TemplateMetadata } from '../../services/template/templates.service';\nimport { JSONSchema7, processJsonSchema, removeEmptyValues, resolve$ref } from '../../utils/utils';\nimport { LoadTemplateFormComponent } from '../load-template-form/load-template-form.component';\nimport { SaveTemplateFormComponent } from '../save-template-form/save-template-form.component';\nimport { RecordType } from '../../../model';\n\nexport interface EditorTemplateSettings {\n  recordType: string;\n  loadFromTemplate: boolean;\n  saveAsTemplate: boolean;\n}\n\nexport interface EditorSettingsConfig {\n  longMode?: boolean;\n  getHeaders?: unknown;\n  template?: Partial<EditorTemplateSettings>;\n}\n\ninterface EditorResourceConfig {\n  recordResource?: boolean;\n  editorSettings?: EditorSettingsConfig;\n}\n\ntype ResourceConfigType = ReturnType<RecordUiService['getResourceConfig']> & EditorResourceConfig;\n\ninterface EditorRouteParams {\n  type?: string;\n  pid?: string;\n}\n\ninterface EditorQueryParams {\n  source?: string;\n  pid?: string;\n}\n\ninterface EditorSchemaFormResponse {\n  schema: {\n    properties?: {\n      metadata?: unknown;\n    };\n  };\n}\n\ninterface EditorRecordLoadResult {\n  result: ActionStatus | boolean | null;\n  record: JsonObject;\n}\n\ninterface EditorRecordActionResult {\n  record: RecordData<JsonObject>;\n  action: 'update' | 'create';\n  message: string;\n}\n\n@Component({\n  selector: 'ng-core-editor',\n  templateUrl: './editor.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    Tooltip,\n    Button,\n    SplitButton,\n    Divider,\n    AddFieldEditorComponent,\n    FormlyModule,\n    TranslateDirective,\n    ErrorComponent,\n    TranslatePipe,\n    UpperCaseFirstPipe,\n  ],\n})\nexport class EditorComponent<TMetadata extends JsonObject = JsonObject>\n  extends AbstractCanDeactivateComponent\n  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 jsonschemaService: JSONSchemaService = inject(JSONSchemaService);\n  protected dialogService: DialogService = inject(DialogService);\n  protected messageService: MessageService = inject(MessageService);\n  protected cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  // form initial values\n  readonly model = input<JsonValue | null>(null);\n  formlyModel = signal<any>(null);\n\n  // JSONSchema\n  readonly schema = input<JSONSchema7 | undefined>(undefined);\n  protected _schema = signal<any>(undefined);\n\n  // store pid on edit mode\n  readonly pid = input<string | null>(null);\n  protected _pid = signal<string | null>(null);\n  private resourceTypes: Partial<RecordType>[] = [];\n\n  // initial values changes notification\n  readonly modelChange = output<JsonValue | null>();\n\n  // editor loading state notifications\n  readonly loadingChange = output<boolean>();\n\n  // editor can deactivate change notification\n  readonly canDeactivateChange = output<boolean>();\n\n  // Resource title\n  title = signal<string | undefined>(undefined);\n\n  // Resource description\n  description = signal<string | undefined>(undefined);\n\n  // Can Deactivate\n  canDeactivate = false;\n\n  // angular formGroup root\n  form: UntypedFormGroup;\n\n  // additional form options\n  options = signal<FormlyFormOptions>({});\n\n  // form configuration\n  fields = signal<FormlyFieldConfig[]>([]);\n\n  // root element of the editor\n  rootField = signal<FormlyFieldConfig | null>(null);\n\n  // list of fields to display in the TOC\n  readonly tocFields = computed(() => {\n    this.hiddenFields();\n    const fieldList = this.fields();\n    if (fieldList.length === 0) {\n      return [];\n    }\n    return (\n      fieldList[0]?.fieldGroup?.filter((f) => {\n        if (f.hide === true) {\n          return false;\n        }\n        if (f.props?.alwaysHidden) {\n          return false;\n        }\n        return true;\n      }) ?? []\n    );\n  });\n\n  // editor settings\n  readonly editorSettings = model({\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  // save alternatives\n  saveAlternatives = signal<{ label: string; command: () => void }[]>([]);\n\n  // current record type from the url\n  recordType = signal('');\n\n  // If an error occurred, it is stored, to display in interface.\n  error = signal<Error | null>(null);\n\n  /** True while an HTTP mutation is in flight or a 409/412 conflict requires a page reload */\n  protected readonly httpPending = inject(HttpPendingService);\n  private readonly _keepDisabled = signal(false);\n  readonly isSaving = computed(() => this.httpPending.isPending() || this._keepDisabled());\n\n  /** ETag of the currently loaded record, used for optimistic concurrency control */\n  private _etag = signal<string | null>(null);\n\n  // subscribers\n  private _subscribers: Subscription = new Subscription();\n\n  // Config for resource\n  private _resourceConfig: ResourceConfigType | null = null;\n\n  // list of fields to be hidden\n  private _hiddenFields = signal<FormlyFieldConfig[]>([]);\n\n  // current list of hidden fields\n  readonly hiddenFields = computed(() => this._hiddenFields());\n\n  // Dialog Ref\n  ref: DynamicDialogRef | null = null;\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<TMetadata> {\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    const schema = this._schema();\n    if (changes.model && !changes.model.isFirstChange()) {\n      // 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 (schema) {\n        this.setSchema(schema);\n      }\n    }\n    if (changes.schema) {\n      // Schema has changed\n      this.setSchema(changes.schema.currentValue);\n    }\n    if (changes.pid) {\n      // Assign pid on schema. Reload schema\n      this._pid.set(changes.pid.currentValue);\n      if (schema) {\n        this.setSchema(schema);\n      }\n    }\n  }\n\n  /** onInit hook */\n  ngOnInit(): void {\n    this._subscribers.add(\n      combineLatest([this.route.params, this.route.queryParams])\n        .pipe(switchMap(([params, queryParams]) => this.loadEditorData(params, queryParams)))\n        .subscribe(),\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      const modelValue = this.formlyModel();\n      if (\n        !this._resourceConfig.recordResource &&\n        this._pid() != null &&\n        (modelValue == null || modelValue.pid == null)\n      ) {\n        model.pid = this._pid();\n      }\n      // preprocess the model before sending to formly\n      this.formlyModel.set(this.preprocessRecord(model));\n      this.modelChanged(this.formlyModel());\n      this.cdr.markForCheck();\n    }\n  }\n\n  /**\n   * Emit value when model is changed.\n   * @param modelValue Model.\n   */\n  modelChanged(modelValue: JsonValue): 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: TMetadata): TMetadata {\n    const config = this.getResourceConfig<TMetadata>(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: TMetadata): TMetadata {\n    const config = this.getResourceConfig<TMetadata>(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: TMetadata): TMetadata {\n    const config = this.getResourceConfig<TMetadata>(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: TMetadata): TMetadata {\n    const config = this.getResourceConfig<TMetadata>(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.set(processJsonSchema(resolve$ref(schema, schema.properties)));\n    this.options.set({});\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, jsonSchema): FormlyFieldConfig => {\n          /**** additional JSONSchema configurations *******/\n          field = this.jsonschemaService.processField(field, jsonSchema as JSONSchema7);\n          if (!field.props) {\n            field.props = {};\n          }\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 as unknown as JSONSchema7);\n          }\n          return field;\n        },\n      }),\n    ];\n    // mark the root field\n    if (fields[0]?.props) {\n      fields[0].props.isRoot = true;\n    }\n\n    this.fields.set(fields);\n\n    // set root element\n    if (fields.length > 0) {\n      this.title.set(fields[0].props?.label);\n      this.description.set(fields[0].props?.description);\n      this.rootField.set(fields[0]);\n    }\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Save the data on the server.\n   */\n  submit(): void {\n    if (this.isSaving()) {\n      return;\n    }\n    this.form.markAllAsTouched();\n\n    if (this.form.valid === false) {\n      const fields: string[] = [];\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      return;\n    }\n\n    this._canDeactivate();\n    this.loadingChange.emit(true);\n\n    let data = removeEmptyValues(this.formlyModel());\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    let recordAction$: Observable<EditorRecordActionResult>;\n    let keepDisabled = false;\n    const pid = this._pid();\n    if (pid != null) {\n      recordAction$ = this.recordService.update(this.recordType(), pid, this.preUpdateRecord(data), this._etag()).pipe(\n        catchError((error) => {\n          keepDisabled = error.status === 409 || error.status === 412;\n          return this._handleError(error);\n        }),\n        map((record) => {\n          return { record, action: 'update' as const, message: this.translateService.instant('Record updated.') };\n        }),\n        finalize(() => { if (keepDisabled) this._keepDisabled.set(true); }),\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' as const, message: this.translateService.instant('Record created.') };\n        }),\n      );\n    }\n\n    this._subscribers.add(\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._resourceConfig,\n          result.action,\n          this.route,\n        );\n        this.loadingChange.emit(true);\n        this.cdr.markForCheck();\n      }),\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._subscribers.add(\n      this.ref?.onClose.subscribe((data: { name?: string } | null) => {\n        if (data?.name) {\n          let modelData = removeEmptyValues(this.formlyModel());\n          modelData = this.postprocessRecord(modelData);\n          let record: TemplateMetadata = {\n            name: data.name,\n            data: modelData,\n            template_type: this.recordType(),\n          };\n          const tmplConfig = this.getResourceConfig<TemplateMetadata>(this.editorSettings().template.recordType);\n          if (tmplConfig.preCreateRecord) {\n            record = tmplConfig.preCreateRecord(record);\n          }\n          this.loadingChange.emit(true);\n          this._subscribers.add(\n            this.recordService.create<TemplateMetadata>(this.editorSettings().template.recordType, record).subscribe({\n              next: (createdRecord) => {\n                const editorSettings = this.editorSettings();\n                this.messageService.add({\n                  severity: 'success',\n                  summary: this.translateService.instant(editorSettings.template.recordType),\n                  detail: this.translateService.instant('Record created.'),\n                  life: CONFIG.MESSAGE_LIFE,\n                });\n                this.recordUiService.redirectAfterSave<TemplateMetadata>(\n                  createdRecord.id,\n                  createdRecord,\n                  tmplConfig,\n                  'create',\n                  this.route,\n                );\n                this.cdr.markForCheck();\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                this.cdr.markForCheck();\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: Event, 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 (field.parent && 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.update((fields) => {\n        const updated = fields.filter((f) => f.id !== field.id);\n        updated.push(field);\n        return updated;\n      });\n    }\n  }\n\n  /**\n   * Clear the list of the hidden fields\n   */\n  clearHiddenFields(): void {\n    this._hiddenFields.set([]);\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 ?? null)) {\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.update((fields) => fields.filter((f) => f.id !== field.id));\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 | null): 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 !field.props?.required && !field.hide && !field?.expressions?.hide;\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   * 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<never> {\n    if (error.status === 409 || error.status === 412) {\n      this.messageService.add({\n        severity: 'warn',\n        summary: this.translateService.instant('Record conflict'),\n        detail: this.translateService.instant(\n          'This record has been modified by another user. Please reload the page — your local changes will be lost.',\n        ),\n        sticky: true,\n        closable: true,\n      });\n    } else {\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    }\n    return throwError(() => ({ status: error.status, title: error.title }));\n  }\n\n  private _canDeactivate(activate = true): void {\n    this.canDeactivate = activate;\n    this.canDeactivateChange.emit(activate);\n  }\n\n  private loadEditorData(params: EditorRouteParams, queryParams: EditorQueryParams): Observable<void> {\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    this._keepDisabled.set(false);\n    if (!params.type) {\n      this.formlyModel.set({});\n      this._schema.set({});\n      this.loadingChange.emit(false);\n      this.cdr.markForCheck();\n      return of(void 0);\n    }\n\n    this.recordType.set(params.type);\n    this.resourceTypes = [...(this.route.snapshot.data.types ?? [])];\n\n    this._resourceConfig = this.getResourceConfig(this.recordType());\n    if (this._resourceConfig?.editorSettings) {\n      const mergedSettings: ReturnType<EditorComponent['editorSettings']> = {\n        ...cloneDeep(this.editorSettings()),\n        ...(this._resourceConfig.editorSettings as Partial<ReturnType<EditorComponent['editorSettings']>>),\n      };\n      this.editorSettings.set(mergedSettings);\n    }\n\n    const editorSettings = this.editorSettings();\n    if (editorSettings.template.recordType !== '') {\n      const tmplTypes = this.route.snapshot.data.types.filter((recordType: Partial<RecordType>) => recordType.key === editorSettings.template.recordType);\n      if (tmplTypes?.length) {\n        this.resourceTypes = this.resourceTypes.concat(tmplTypes);\n      }\n    }\n\n    this.saveAlternatives.set([]);\n    if (editorSettings.template.saveAsTemplate) {\n      this.saveAlternatives.update((items) => [\n        ...items,\n        {\n          label: this.translateService.instant('Save as template') + '…',\n          command: () => this.saveAsTemplate(),\n        },\n      ]);\n    }\n\n    this._pid.set(params.pid ?? null);\n    const schema$ = this.recordService.getSchemaForm(\n      this.recordType(),\n    ) as unknown as Observable<EditorSchemaFormResponse>;\n    let record$: Observable<EditorRecordLoadResult> = of({ record: {}, result: null });\n    const pid = this._pid();\n    this._etag.set(null);\n\n    if (queryParams.source === 'templates' && queryParams.pid != null) {\n      record$ = this.recordService.getRecord<RecordData<{ data: JsonObject }>>('templates', queryParams.pid).pipe(\n        map((record) => {\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    } else if (pid) {\n      record$ = this.recordService\n        .getRecordWithEtag<RecordData<JsonObject>>(this.recordType(), pid, {\n          headers: editorSettings.getHeaders || new HttpHeaders({ 'Content-Type': 'application/json' }),\n        })\n        .pipe(\n          switchMap(response => {\n            this._etag.set(response.headers.get('ETag'));\n            const record = response.body!;\n            return this.recordUiService.canUpdateRecord$(record, this._resourceConfig).pipe(\n              map((result) => {\n                return {\n                  result,\n                  record: record.metadata,\n                };\n              }),\n            );\n          }),\n        );\n    }\n\n    return combineLatest([schema$, record$]).pipe(\n      map(([schemaform, data]) => {\n        const editorSchema = this._resourceConfig?.recordResource\n          ? (schemaform.schema.properties?.metadata ?? schemaform.schema)\n          : schemaform.schema;\n        this.setSchema(editorSchema);\n\n        if (typeof data.result === 'object' && data.result !== null && 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      }),\n      map(() => void 0),\n      catchError((error) => {\n        this.error.set(error);\n        return of(void 0);\n      }),\n      finalize(() => {\n        this.loadingChange.emit(false);\n        this.cdr.markForCheck();\n      }),\n    );\n  }\n\n  private getResourceConfig<T = JsonObject>(type: string): RecordType<T> {\n    return this.recordUiService.getResourceConfig<T>(this.resourceTypes, type);\n  }\n}\n","<!--\nSPDX-FileCopyrightText: Fondation RERO+\nSPDX-License-Identifier: AGPL-3.0-or-later\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]=\"isSaving()\"\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              [disabled]=\"isSaving()\"\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\n          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        >\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]=\"formlyModel()\"\n          [fields]=\"fields()\"\n          [options]=\"options()\"\n          [form]=\"form\"\n          (modelChange)=\"modelChanged($event)\"\n        />\n        @if (editorSettings().longMode) {\n          <!-- TOC navigation -->\n          <div\n            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          >\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(); track f.key) {\n                <li class=\"core:mb-1\">\n                  <span\n                    pButton\n                    class=\"text-link-secondary\"\n                    role=\"button\"\n                    tabindex=\"0\"\n                    (click)=\"setFocus($event, f)\"\n                    (keydown.enter)=\"setFocus($event, f)\"\n                    >{{ f.props?.label | translate }}</span\n                  >\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","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { ActivatedRouteSnapshot, ResolveFn, Routes } from '@angular/router';\nimport { RecordSearchPageComponent } from './component/search/record-search-page.component';\nimport { DetailComponent } from './component/detail/detail.component';\nimport { EditorComponent } from './editor/component/editor/editor.component';\n\nexport const typeResolver: ResolveFn<string> = (route) => {\n  return route.params['type'];\n};\n\nconst inheritTypesResolver: ResolveFn<unknown> = (route: ActivatedRouteSnapshot) => {\n  let r: ActivatedRouteSnapshot | null = route.parent;\n  while (r) {\n    if (r.data['types']) return r.data['types'];\n    r = r.parent;\n  }\n  return [];\n};\n\nexport const ngCoreRoutes: Routes = [\n  {\n    path: ':type',\n    title: typeResolver,\n    component: RecordSearchPageComponent,\n  },\n  {\n    path: ':type/new',\n    title: typeResolver,\n    component: EditorComponent,\n  },\n  {\n    path: ':type/detail/:pid',\n    title: typeResolver,\n    component: DetailComponent,\n    resolve: { types: inheritTypesResolver },\n  },\n  {\n    path: ':type/edit/:pid',\n    component: EditorComponent,\n    resolve: { types: inheritTypesResolver },\n  },\n];\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport { NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  HostListener,\n  inject,\n  input,\n  output,\n  viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { OverlayOptions } from 'primeng/api';\nimport { AutoComplete, AutoCompleteCompleteEvent, AutoCompleteSelectEvent } from 'primeng/autocomplete';\nimport { AutoFocus } from 'primeng/autofocus';\nimport { DomHandler } from 'primeng/dom';\nimport { combineLatest, map, Observable, Subject, switchMap } from 'rxjs';\nimport { CONFIG } from '../../../core';\nimport { removeChars } from '../../../core/utils/utils';\nimport { RecordService } from '../../service/record/record.service';\n\nexport interface AutoCompleteRecordType {\n  field: string;\n  groupLabel?: string;\n  index: string;\n  maxSuggestions?: number;\n  processSuggestions: (data: any, query?: string) => AutoCompleteData[];\n  preFilters?: any;\n  queryParams?: Record<string, string>;\n  sort?: string;\n}\n\nexport interface AutoCompleteData {\n  iconClass?: string;\n  index?: string;\n  label: string;\n  originalLabel?: string;\n  value?: string;\n  [key: string]: string | undefined;\n}\n\n@Component({\n  selector: 'ng-core-search-autocomplete',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <p-autoComplete\n      #autoComplete\n      [overlayOptions]=\"overlayOptions\"\n      dropdownIcon=\"fa fa-search\"\n      [dropdown]=\"true\"\n      dropdownMode=\"none\"\n      [class]=\"styleClass()\"\n      [inputStyleClass]=\"inputStyleClass()\"\n      [delay]=\"delay()\"\n      [group]=\"group\"\n      [minQueryLength]=\"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()\"\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  imports: [AutoComplete, FormsModule, AutoFocus, NgClass],\n})\nexport class SearchAutocompleteComponent implements AfterViewInit {\n  protected recordService: RecordService = inject(RecordService);\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<string>();\n  recordTypes = input.required<AutoCompleteRecordType[]>();\n  scrollHeight = input<string>(CONFIG.DEFAULT_SELECT_SCROLL_HEIGHT);\n  styleClass = input<string>('core:w-full');\n  value = input.required<string>();\n\n  // Output\n  searchQuery = 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  readonly autoComplete = viewChild<AutoComplete>('autoComplete');\n\n  // User Query\n  private query = new Subject<string>();\n\n  buttonClick() {\n    this.searchQuery.emit(this.currentValue);\n  }\n\n  suggestions = toSignal<any[], any[]>(this.query.pipe(switchMap((query: string) => this.getSuggestions(query))), {\n    initialValue: [],\n  });\n\n  setSuggestionQuery(event: AutoCompleteCompleteEvent): void {\n    this.query.next(event.query);\n  }\n\n  onSelectValue(event: AutoCompleteSelectEvent) {\n    this.searchQuery.emit(event.value);\n  }\n\n  search(event: KeyboardEvent) {\n    if (event?.key === 'Enter') {\n      this.searchQuery.emit(this.currentValue);\n    }\n  }\n\n  calculateWidth() {\n    let width = 200;\n    const autoComplete = this.autoComplete();\n    if (autoComplete) {\n      width = DomHandler.getOuterWidth(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    if (!value) {\n      return value;\n    }\n    const re = new RegExp('<[^>]*>', 'g');\n    return value.replace(re, '');\n  }\n\n  private getSuggestions(\n    query: string,\n  ): Observable<AutoCompleteData[][] | { label: string; items: AutoCompleteData[] }[]> {\n    return combineLatest(this.prepareQuery(query)).pipe(\n      map((data: AutoCompleteData[][]) => {\n        if (data.length > 1) {\n          this.group = true;\n          return data\n            .map((hits) => {\n              if (hits.length > 0) {\n                const selectedRecordType = this.recordTypes().find(\n                  (type: AutoCompleteRecordType) => type.index === hits[0].index,\n                );\n                if (selectedRecordType && !('groupLabel' in selectedRecordType)) {\n                  throw new Error('Missing groupLabel definition');\n                }\n                return {\n                  label: selectedRecordType?.groupLabel ?? '',\n                  items: hits,\n                };\n              }\n            })\n            .filter((item): item is { label: string; items: AutoCompleteData[] } => item !== undefined);\n        } else {\n          // Only one category, no grouping\n          return [data[0]];\n        }\n      }),\n    );\n  }\n\n  private prepareQuery(query: string): Observable<AutoCompleteData[]>[] {\n    query = removeChars(query);\n    return this.recordTypes().map((recordType: AutoCompleteRecordType) => {\n      const queryParams: string[] = [];\n      if (recordType?.queryParams) {\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      return this.recordService\n        .getRecords(recordType.index, {\n          query: queryRecord,\n          itemsPerPage: recordType.maxSuggestions || 10,\n          preFilters: recordType.preFilters || {},\n          sort: recordType.sort || '',\n        })\n        .pipe(map((data: any) => recordType.processSuggestions(data, query)));\n    });\n  }\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { InputSignal } from '@angular/core';\nimport { RecordData } from '../../model/record.interface';\n\n/**\n * Interface representing a result item in search.\n */\nexport interface ResultItem<TRecordData = RecordData> {\n  // Record data.\n  record: InputSignal<TRecordData>;\n\n  // Type of resource.\n  type: InputSignal<string>;\n\n  // Object containing info about the link to detail.\n  detailUrl?: InputSignal<DetailUrl | undefined>;\n}\n\nexport interface DetailUrl {\n  link: string;\n  external: boolean;\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\n/**\n * Interface representing aggregations filters\n */\nexport interface AggregationsFilter {\n  key: string;\n  values: string[];\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { HttpHeaders } from '@angular/common/http';\nimport { Type } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { EditorSettingsConfig } from '../editor/component/editor/editor.component';\nimport { IFilter } from '../component/search/record-search/aggregation/list-filters/list-filters.component';\nimport { JSONSchema7 } from '../editor/utils/utils';\nimport { Observable } from 'rxjs';\nimport {\n  ActionStatus,\n  Bucket,\n  EsResult,\n  JsonObject,\n  RecordData,\n  SearchFilter,\n  SearchFilterSection\n} from '../../model';\nimport { AggregationsFilter } from '../component/search/model/aggregations-filter.interface';\n\nexport interface SearchParams {\n  index: string;\n  q: string;\n  page: number;\n  size: number;\n  sort: string;\n  aggregationsFilters: AggregationsFilter[];\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\nexport interface ExportFormat {\n  label: string;\n  format: string;\n  endpoint: string;\n  disableMaxRestResultsSize: boolean;\n}\n\nexport interface RecordType<TMetadata = JsonObject> {\n  key: string;\n  label: string;\n  index: string;\n  component: Type<unknown>;\n  detailComponent?: Type<unknown>;\n  canAdd: () => Observable<ActionStatus>;\n  canUpdate: ((record: RecordData<TMetadata>) => Observable<ActionStatus>) | null;\n  canDelete: ((record: RecordData<TMetadata>) => Observable<ActionStatus>) | null;\n  canRead: ((record: RecordData<TMetadata>) => Observable<ActionStatus>) | null;\n  canUse: ((record: RecordData<TMetadata>) => Observable<ActionStatus>) | null;\n  permissions: (record: RecordData<TMetadata>) => Observable<Record<string, ActionStatus>>;\n  processBucketName: null | ((bucket: Bucket) => Observable<string>);\n  processFilterName: null | ((filter: IFilter) => Observable<string>);\n  exportFormats: ExportFormat[];\n  preFilters: Record<string, string | string[]>;\n  //list of filters to apply on load if the query is empty\n  defaultSearchInputFilters: AggregationsFilter[];\n  listHeaders: HttpHeaders | Record<string, string | string[]>;\n  itemHeaders: HttpHeaders | Record<string, string | string[]>;\n  showFacetsIfNoResults: boolean;\n  showLabel: boolean;\n  allowEmptySearch: boolean;\n  aggregationsName: Record<string, string>;\n  // to get the order of the aggregations from the backend, use a resolve in the route config\n  aggregationsOrder: string[];\n  // remove a call and use a resolve in the route config\n  aggregationsExpand: string[] | (() => string[]);\n  aggregationsHide: string[];\n  aggregationsBucketSize: number;\n  resultsText: ((hits: EsResult['hits']) => string) | null;\n  pagination: {\n    boundaryLinks: boolean;\n    maxSize: number;\n    pageReport: boolean;\n    rowsPerPageOptions: number[];\n  };\n  sortOptions: SortOption[];\n  formFieldMap: (field: FormlyFieldConfig, jsonSchema: JSONSchema7) => FormlyFieldConfig;\n  hideInTabs: boolean;\n  preCreateRecord: (record: TMetadata) => TMetadata;\n  preUpdateRecord: (record: TMetadata) => TMetadata;\n  postprocessRecordEditor: (record: TMetadata) => TMetadata;\n  preprocessRecordEditor: (record: TMetadata) => TMetadata;\n  redirectUrl: (record: RecordData<TMetadata>, action: string) => Observable<string>;\n  deleteMessage: ((pid: string) => string[]) | null;\n  searchFilters: (SearchFilter | SearchFilterSection)[];\n  editorSettings: EditorSettingsConfig;\n}\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nexport * from './pipe/get-record.pipe';\nexport * from './record.routes';\nexport * from './component/autocomplete/search-autocomplete.component';\nexport * from './component/search/record-search-page.component';\nexport * from './component/search/record-search/aggregation/buckets/buckets.component';\nexport * from './component/search/record-search/aggregation/aggregation.component';\nexport * from './component/search/record-search/aggregation/slider/slider.component';\nexport * from './component/search/record-search/aggregation/date-range/date-range.component';\nexport * from './component/search/record-search/aggregation/list-filters/list-filters.component';\nexport * from './model/result-item.interface';\nexport * from './component/search/record-search/menu-sort/menu-sort.component';\nexport * from './component/search/record-search/export-button/export-button.component';\nexport * from './component/search/record-search/record-search.component';\nexport * from './component/search/record-search/search-filters/search-filters.component';\nexport * from './component/search/record-search/search-tabs/search-tabs.component';\nexport * from './component/search/record-search/paginator/paginator.component';\nexport * from './component/search/record-search/record-search-result/record-search-result.component';\nexport * from './component/search/record-search/record-search-result/default-search-result/default-search-result.component';\nexport * from './component/search/store/record-search.store';\nexport * from './component/search/model/aggregations-filter.interface';\nexport * from './component/detail/detail-record.interface';\nexport * from './component/detail/detail-button/record-action-event.interface';\nexport * from './component/detail/detail-button/detail-button.component';\nexport * from './component/detail/detail.component';\nexport * from './component/detail/default-detail/default-detail.component';\nexport * from './service/record/record.service';\nexport * from './service/record-handle-error/record-handle-error.service';\nexport * from './service/api/api.service';\nexport * from './service/record-ui/record-ui.service';\nexport * from './editor/component/save-template-form/save-template-form.component';\nexport * from './editor/component/load-template-form/load-template-form.component';\nexport * from './editor/component/editor/editor.component';\nexport * from './editor/utils/utils';\nexport * from './editor/services/template/templates.service';\nexport * from './editor/services/jsonschema/jsonschema.service';\nexport * from './record-search-utils';\nexport * from './model/record-search.interface';\n","// SPDX-FileCopyrightText: Fondation RERO+\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nexport * from './lib/core';\nexport * from './lib/formly';\nexport * from './lib/model';\nexport * from './lib/translate';\nexport * from './lib/record';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","i2","i1","de","en","fr","it","catchError","switchMap","tap","finalize"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}