@ecodev/natural 66.0.8 → 66.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/package.json +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecodev-natural.mjs","sources":["../../../projects/natural/src/lib/modules/alert/confirm.component.ts","../../../projects/natural/src/lib/modules/alert/confirm.component.html","../../../projects/natural/src/lib/modules/alert/alert.service.ts","../../../projects/natural/src/lib/modules/panels/abstract-panel.ts","../../../projects/natural/src/lib/classes/utility.ts","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.types.ts","../../../projects/natural/src/lib/classes/query-variable-manager-utils.ts","../../../projects/natural/src/lib/classes/query-variable-manager.ts","../../../projects/natural/src/lib/classes/tld.ts","../../../projects/natural/src/lib/classes/validators.ts","../../../projects/natural/src/lib/classes/cumulative-changes.ts","../../../projects/natural/src/lib/classes/abstract-detail.ts","../../../projects/natural/src/lib/classes/abstract-editable-list.ts","../../../projects/natural/src/lib/modules/search/classes/utils.ts","../../../projects/natural/src/lib/modules/search/classes/transformers.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.html","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-ref.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown.service.ts","../../../projects/natural/src/lib/modules/dropdown-components/types.ts","../../../projects/natural/src/lib/modules/dropdown-components/utils.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.html","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.ts","../../../projects/natural/src/lib/modules/search/classes/url.ts","../../../projects/natural/src/lib/modules/common/services/memory-storage.ts","../../../projects/natural/src/lib/services/persistence.service.ts","../../../projects/natural/src/lib/classes/data-source.ts","../../../projects/natural/src/lib/classes/abstract-list.ts","../../../projects/natural/src/lib/classes/abstract-navigable-list.ts","../../../projects/natural/src/lib/classes/apollo-utils.ts","../../../projects/natural/src/lib/classes/rxjs.ts","../../../projects/natural/src/lib/classes/network-activity.service.ts","../../../projects/natural/src/lib/services/debounce.service.ts","../../../projects/natural/src/lib/services/abstract-model.service.ts","../../../projects/natural/src/lib/services/enum.service.ts","../../../projects/natural/src/lib/services/link-mutation.service.ts","../../../projects/natural/src/lib/services/theme.service.ts","../../../projects/natural/src/lib/services/swiss-parsing-date-adapter.service.ts","../../../projects/natural/src/lib/modules/alert/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.directive.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.html","../../../projects/natural/src/lib/modules/columns-picker/public-api.ts","../../../projects/natural/src/lib/modules/common/directives/linkable-tab.directive.ts","../../../projects/natural/src/lib/modules/common/pipes/capitalize.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/ellipsis.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/enum.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/error-message.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/time-ago.pipe.ts","../../../projects/natural/src/lib/modules/common/directives/src-density.directive.ts","../../../projects/natural/src/lib/modules/common/directives/background-density.directive.ts","../../../projects/natural/src/lib/modules/dialog-trigger/dialog-trigger.component.ts","../../../projects/natural/src/lib/modules/common/services/seo.service.ts","../../../projects/natural/src/lib/modules/common/services/seo.provider.ts","../../../projects/natural/src/lib/modules/common/public-api.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.html","../../../projects/natural/src/lib/modules/detail-header/public-api.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/abstract-association-select-component.directive.ts","../../../projects/natural/src/lib/modules/select/abstract-select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.html","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.ts","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.html","../../../projects/natural/src/lib/modules/search/input/input.component.ts","../../../projects/natural/src/lib/modules/search/input/input.component.html","../../../projects/natural/src/lib/modules/search/group/group.component.ts","../../../projects/natural/src/lib/modules/search/group/group.component.html","../../../projects/natural/src/lib/modules/search/search/search.component.ts","../../../projects/natural/src/lib/modules/search/search/search.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/classes/model-node.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-boolean/type-boolean.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/public-api.ts","../../../projects/natural/src/lib/modules/file/utils.ts","../../../projects/natural/src/lib/modules/file/file.service.ts","../../../projects/natural/src/lib/modules/file/abstract-file.ts","../../../projects/natural/src/lib/modules/file/file-drop.directive.ts","../../../projects/natural/src/lib/modules/file/file-select.directive.ts","../../../projects/natural/src/lib/modules/file/component/file.component.ts","../../../projects/natural/src/lib/modules/file/component/file.component.html","../../../projects/natural/src/lib/modules/file/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.html","../../../projects/natural/src/lib/modules/fixed-button/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.html","../../../projects/natural/src/lib/modules/fixed-button-detail/public-api.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.module.ts","../../../projects/natural/src/lib/modules/icon/public-api.ts","../../../projects/natural/src/lib/modules/panels/types.ts","../../../projects/natural/src/lib/modules/panels/panels.module.ts","../../../projects/natural/src/lib/modules/panels/panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/panels.service.ts","../../../projects/natural/src/lib/modules/panels/panels.component.ts","../../../projects/natural/src/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/public-api.ts","../../../projects/natural/src/lib/modules/relations/relations.component.ts","../../../projects/natural/src/lib/modules/relations/relations.component.html","../../../projects/natural/src/lib/modules/relations/public-api.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.html","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.ts","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.html","../../../projects/natural/src/lib/modules/select/public-api.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-stack.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav/sidenav.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.html","../../../projects/natural/src/lib/modules/sidenav/sidenav-content/sidenav-content.component.ts","../../../projects/natural/src/lib/modules/sidenav/public-api.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.html","../../../projects/natural/src/lib/modules/stamp/public-api.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.html","../../../projects/natural/src/lib/modules/table-button/public-api.ts","../../../projects/natural/src/lib/modules/dialog-trigger/public-api.ts","../../../projects/natural/src/lib/modules/avatar/sources/source.ts","../../../projects/natural/src/lib/classes/crypto.ts","../../../projects/natural/src/lib/modules/avatar/sources/gravatar.ts","../../../projects/natural/src/lib/modules/avatar/sources/initials.ts","../../../projects/natural/src/lib/modules/avatar/sources/image.ts","../../../projects/natural/src/lib/modules/avatar/service/avatar.service.ts","../../../projects/natural/src/lib/modules/avatar/component/avatar.component.ts","../../../projects/natural/src/lib/modules/avatar/public-api.ts","../../../projects/natural/src/lib/modules/matomo/matomo.service.ts","../../../projects/natural/src/lib/modules/matomo/public-api.ts","../../../projects/natural/src/lib/modules/logger/error-handler.ts","../../../projects/natural/src/lib/modules/logger/error.module.ts","../../../projects/natural/src/lib/modules/logger/public-api.ts","../../../projects/natural/src/lib/modules/color-schemer/color-schemer.component.ts","../../../projects/natural/src/lib/modules/color-schemer/color-schemer.component.html","../../../projects/natural/src/lib/modules/color-schemer/public-api.ts","../../../projects/natural/src/lib/modules/theme-changer/theme-changer.component.ts","../../../projects/natural/src/lib/modules/theme-changer/theme-changer.component.html","../../../projects/natural/src/lib/modules/theme-changer/public-api.ts","../../../projects/natural/src/lib/directives/http-prefix.directive.ts","../../../projects/natural/src/lib/classes/providers.ts","../../../projects/natural/src/lib/classes/signing.ts","../../../projects/natural/src/public-api.ts","../../../projects/natural/src/ecodev-natural.ts"],"sourcesContent":["import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule} from '@angular/material/dialog';\nimport {MatButton} from '@angular/material/button';\n\nexport type NaturalConfirmData = {\n title: string;\n message: string;\n confirmText: string;\n cancelText: string;\n};\n\n@Component({\n imports: [MatDialogModule, MatButton],\n templateUrl: './confirm.component.html',\n styleUrl: './confirm.component.scss',\n})\nexport class NaturalConfirmComponent {\n public readonly data = inject<NaturalConfirmData>(MAT_DIALOG_DATA);\n}\n","<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button mat-button [mat-dialog-close]=\"false\">{{ data.cancelText }}</button>\n <button mat-stroked-button cdkFocusInitial [mat-dialog-close]=\"true\">{{ data.confirmText }}</button>\n</mat-dialog-actions>\n","import {inject, Injectable} from '@angular/core';\nimport {MatDialog} from '@angular/material/dialog';\nimport {MatSnackBar, MatSnackBarRef, SimpleSnackBar} from '@angular/material/snack-bar';\nimport {Observable} from 'rxjs';\nimport {NaturalConfirmComponent, NaturalConfirmData} from './confirm.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalAlertService {\n private readonly dialog = inject(MatDialog);\n private readonly snackBar = inject(MatSnackBar);\n\n /**\n * Show an informative message in a snack bar\n */\n public info(message: string, duration: number | null = 2500): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, undefined, {\n duration: duration === null ? undefined : duration,\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show an error in a snack bar\n */\n public error(message: string, duration: number | null = 2500, action?: string): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, action, {\n duration: duration === null ? undefined : duration,\n panelClass: ['snackbar-error'],\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show a simple confirmation dialog and returns true if user confirmed it\n */\n public confirm(\n title: string,\n message: string,\n confirmText: string,\n cancelText: string = $localize`Annuler`,\n ): Observable<boolean | undefined> {\n const dialog = this.dialog.open<NaturalConfirmComponent, NaturalConfirmData, boolean>(NaturalConfirmComponent, {\n data: {\n title: title,\n message: message,\n confirmText: confirmText,\n cancelText: cancelText,\n },\n });\n\n return dialog.afterClosed();\n }\n}\n","import {DestroyRef, Directive, HostBinding, HostListener, inject} from '@angular/core';\nimport {NaturalPanelsService} from './panels.service';\nimport {NaturalPanelData} from './types';\nimport {Observable} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n@Directive()\nexport class NaturalAbstractPanel {\n protected readonly destroyRef = inject(DestroyRef);\n /**\n * The data property is the container where the resolved content is stored\n * When loading a component from a panel opening (dialog), receives the data provided by the service\n */\n public data: any = {};\n\n /**\n * Bind isFrontPanel style class on root component\n */\n @HostBinding('class.isFrontPanel') public isFrontPanel = false;\n\n /**\n * Bind isPanel style class on root component\n */\n @HostBinding('class.isPanel') public isPanel = false;\n\n /**\n * Merging of data provided by the very root component (that is in a route context) and inherited data through panels\n * TODO: provide type with available attributes\n */\n public panelData?: NaturalPanelData;\n public panelService?: NaturalPanelsService;\n\n /**\n * Bind click on panels, to allow the selection of those who are behind\n */\n @HostListener('click')\n public clickPanel(): void {\n if (!this.isFrontPanel && this.panelService) {\n this.panelService.goToPanelByComponent(this);\n }\n }\n\n /**\n * Called when panel opens and component is loaded\n * Runs before ngOnInit()\n */\n public initPanel(panelData: NaturalPanelData): void {\n this.panelData = panelData;\n this.isPanel = true;\n\n if (this.panelData?.data) {\n if (this.panelData.data.model instanceof Observable) {\n // Subscribe to model to know when Apollo cache is changed, so we can reflect it into `data.model`\n this.panelData.data.model.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(model => {\n this.data = {\n ...this.data,\n ...this.panelData?.data,\n model: model,\n };\n });\n } else {\n this.data = {\n ...this.data,\n ...this.panelData.data,\n };\n }\n }\n }\n}\n","import {NavigationEnd, NavigationStart, Router} from '@angular/router';\nimport {cloneDeepWith, pickBy} from 'es-toolkit';\nimport {Observable, switchMap, take} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport type {ReadonlyDeep} from 'type-fest';\nimport {Literal} from '../types/types';\nimport {PaginationInput, Sorting, SortingOrder} from './query-variable-manager';\n\n/**\n * Very basic formatting to get only date, without time and ignoring entirely the timezone\n *\n * So something like: \"2021-09-23\"\n */\nexport function formatIsoDate(date: null): null;\nexport function formatIsoDate(date: Date): string;\nexport function formatIsoDate(date: Date | null): string | null;\nexport function formatIsoDate(date: Date | null): string | null {\n if (!date) {\n return null;\n }\n\n const y = date.getFullYear();\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Format a date and time in a way that will preserve the local time zone.\n * This allows the server side to know the day (without time) that was selected on client side.\n *\n * So something like: \"2021-09-23T17:57:16+09:00\"\n */\nexport function formatIsoDateTime(date: Date): string {\n const timezoneOffsetInMinutes = Math.round(date.getTimezoneOffset());\n const timezoneOffsetInHours = -Math.trunc(timezoneOffsetInMinutes / 60); // UTC minus local time\n const sign = timezoneOffsetInHours >= 0 ? '+' : '-';\n const remainderMinutes = -(timezoneOffsetInMinutes % 60);\n\n // It's a bit unfortunate that we need to construct a new Date instance,\n // but we don't want the original Date instance to be modified\n const correctedDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n correctedDate.setHours(date.getHours() + timezoneOffsetInHours);\n\n const iso = correctedDate\n .toISOString()\n .replace(/\\.\\d{3}Z/, '')\n .replace('Z', '');\n\n const hours = Math.abs(timezoneOffsetInHours).toString().padStart(2, '0');\n const minutes = remainderMinutes.toString().padStart(2, '0');\n\n return iso + sign + hours + ':' + minutes;\n}\n\n/**\n * Relations to full objects are converted to their IDs only.\n *\n * So {user: {id: 123}} becomes {user: 123}\n */\nexport function relationsToIds(object: Literal): Literal {\n const newObj: Literal = {};\n Object.keys(object).forEach(key => {\n let value: unknown = object[key];\n\n if (value === null || value === undefined) {\n // noop\n } else if (hasId(value)) {\n value = value.id;\n } else if (Array.isArray(value)) {\n value = value.map((i: unknown) => (hasId(i) ? i.id : i));\n } else if (typeof value === 'object' && !(value instanceof File) && !(value instanceof Date)) {\n value = pickBy(value, (v, k) => k !== '__typename'); // omit(value, ['__typename']) ?\n }\n\n newObj[key] = value;\n });\n\n return newObj;\n}\n\nfunction hasId(value: unknown): value is {id: unknown} {\n return !!value && typeof value === 'object' && 'id' in value && !!value.id;\n}\n\n/**\n * Returns the plural form of the given name\n *\n * This is **not** necessarily valid english grammar. Its only purpose is for internal usage, not for humans.\n *\n * This **MUST** be kept in sync with `\\Ecodev\\Felix\\Api\\Plural:make()`.\n *\n * This is a bit performance-sensitive, so we should keep it fast and only cover cases that we actually need.\n */\nexport function makePlural(name: string): string {\n // Words ending in a y preceded by a vowel form their plurals by adding -s:\n if (/[aeiou]y$/.exec(name)) {\n return name + 's';\n }\n\n const plural = name + 's';\n\n return plural.replace(/ys$/, 'ies').replace(/ss$/, 'ses').replace(/xs$/, 'xes');\n}\n\n/**\n * Returns the string with the first letter as capital\n */\nexport function upperCaseFirstLetter(term: string): string {\n return term.charAt(0).toUpperCase() + term.slice(1);\n}\n\n/**\n * Replace all attributes of first object with the ones provided by the second, but keeps the reference\n */\nexport function replaceObjectKeepingReference(obj: Literal | null, newObj: Literal | null): void {\n if (!obj || !newObj) {\n return;\n }\n\n Object.keys(obj).forEach(key => {\n delete obj[key];\n });\n\n Object.keys(newObj).forEach(key => {\n obj[key] = newObj[key];\n });\n}\n\n/**\n * Get contrasted color for text in the slider thumb\n * @param hexBgColor string in hexadecimals representing the background color\n */\nexport function getForegroundColor(hexBgColor: string): 'black' | 'white' {\n const rgb = hexToRgb(hexBgColor.slice(0, 7)); // splice remove alpha and consider only \"visible\" color at 100% alpha\n const o = Math.round((rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000);\n\n return o > 125 ? 'black' : 'white';\n}\n\nfunction hexToRgb(hex: string): {r: number; g: number; b: number} {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : {\n r: 0,\n g: 0,\n b: 0,\n };\n}\n\n/**\n * Convert RGB color to hexadecimal color\n *\n * ```ts\n * rgbToHex('rgb(255, 00, 255)'); // '#FF00FF'\n * ```\n */\nexport function rgbToHex(rgb: string): string {\n const m = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/.exec(rgb);\n if (!m) {\n return rgb;\n }\n\n return '#' + [m[1], m[2], m[3]].map(x => parseInt(x).toString(16).toUpperCase().padStart(2, '0')).join('');\n}\n\n/**\n * Deep clone given values except for `File` that will be referencing the original value\n */\nexport function cloneDeepButSkipFile<T>(value: T): T {\n return cloneDeepWith(value, v => (isFile(v) ? v : undefined));\n}\n\nexport function isFile(value: unknown): boolean {\n return (\n (typeof File !== 'undefined' && value instanceof File) ||\n (typeof Blob !== 'undefined' && value instanceof Blob) ||\n (typeof FileList !== 'undefined' && value instanceof FileList)\n );\n}\n\n/**\n * During lodash.mergeWith, overrides arrays\n */\nexport function mergeOverrideArray(destValue: unknown, source: unknown): unknown {\n if (Array.isArray(source) || isFile(source)) {\n return source;\n }\n}\n\n/**\n * Copy text to clipboard.\n * Accepts line breaks `\\n` as textarea do.\n */\nexport function copyToClipboard(document: Document, text: string): void {\n const input = document.createElement('textarea');\n document.body.append(input);\n input.value = text;\n input.select();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n document.execCommand('copy');\n document.body.removeChild(input);\n}\n\nexport function deepFreeze<T extends Literal>(o: T): ReadonlyDeep<T> {\n Object.values(o).forEach(v => Object.isFrozen(v) || deepFreeze(v));\n\n return Object.freeze(o) as ReadonlyDeep<T>;\n}\n\n/**\n * Return a valid PaginationInput from whatever is available from data. Invalid properties/types will be dropped.\n */\nexport function validatePagination(data: unknown): PaginationInput | null {\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n\n const pagination: PaginationInput = {};\n\n if ('offset' in data && (data.offset === null || typeof data.offset === 'number')) {\n pagination.offset = data.offset;\n }\n\n if ('pageIndex' in data && (data.pageIndex === null || typeof data.pageIndex === 'number')) {\n pagination.pageIndex = data.pageIndex;\n }\n\n if ('pageSize' in data && (data.pageSize === null || typeof data.pageSize === 'number')) {\n pagination.pageSize = data.pageSize;\n }\n\n return pagination;\n}\n\n/**\n * Return a valid Sortings from whatever is available from data. Invalid properties/types will be dropped.\n */\nexport function validateSorting(data: unknown): Sorting[] | null {\n if (!Array.isArray(data)) {\n return null;\n }\n const result: Sorting[] = [];\n data.forEach(s => {\n const r = validateOneSorting(s);\n if (r) {\n result.push(r);\n }\n });\n\n return result;\n}\n\nfunction validateOneSorting(data: unknown): Sorting | null {\n if (!data || typeof data !== 'object' || !('field' in data)) {\n return null;\n }\n\n const sorting: Sorting = {field: data.field};\n\n if (\n 'order' in data &&\n (data.order === SortingOrder.ASC || data.order === SortingOrder.DESC || data.order === null)\n ) {\n sorting.order = data.order;\n }\n\n if ('nullAsHighest' in data && (data.nullAsHighest === null || typeof data.nullAsHighest === 'boolean')) {\n sorting.nullAsHighest = data.nullAsHighest;\n }\n\n if (\n 'emptyStringAsHighest' in data &&\n (data.emptyStringAsHighest === null || typeof data.emptyStringAsHighest === 'boolean')\n ) {\n sorting.emptyStringAsHighest = data.emptyStringAsHighest;\n }\n\n return sorting;\n}\n\n/**\n * Return valid columns from whatever is available from data. Invalid properties/types will be dropped.\n */\nexport function validateColumns(data: unknown): string[] | null {\n if (typeof data !== 'string') {\n return null;\n }\n\n return data.split(',').filter(string => string);\n}\n\nexport function onHistoryEvent(router: Router): Observable<NavigationEnd> {\n return router.events.pipe(\n filter(e => e instanceof NavigationStart && e.navigationTrigger === 'popstate'),\n switchMap(() =>\n router.events.pipe(\n filter(e => e instanceof NavigationEnd),\n take(1),\n ),\n ),\n );\n}\n","// Basic; loosely typed structure for graphql-doctrine filters\n\nimport {Literal} from '../../../types/types';\n\nexport type Filter = {\n groups?: FilterGroup[] | null;\n};\n\nexport type FilterGroup = {\n // The logic operator to be used to append this group\n groupLogic?: LogicalOperator | null;\n // The logic operator to be used within all conditions in this group\n conditionsLogic?: LogicalOperator | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: FilterGroupCondition[] | null;\n};\n\nexport type FilterGroupJoin = Record<string, JoinOn>;\n\nexport type JoinOn = {\n type?: JoinType | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: FilterGroupCondition[] | null;\n};\n\n// Logical operator to be used in conditions\nexport enum LogicalOperator {\n AND = 'AND',\n OR = 'OR',\n}\n\n// Join types to be used in DQL\nexport enum JoinType {\n innerJoin = 'innerJoin',\n leftJoin = 'leftJoin',\n}\n\nexport type FilterGroupCondition = Record<string, FilterGroupConditionField>;\n\nexport type FilterGroupConditionField = {\n between?: BetweenOperator | null;\n equal?: EqualOperator | null;\n greater?: GreaterOperator | null;\n greaterOrEqual?: GreaterOrEqualOperator | null;\n in?: InOperator | null;\n less?: LessOperator | null;\n lessOrEqual?: LessOrEqualOperator | null;\n like?: LikeOperator | null;\n null?: NullOperator | null;\n\n // For relations\n have?: HaveOperator | null;\n empty?: EmptyOperator | null;\n\n // Allow anything else for custom operators\n [key: string]: Literal | undefined | null;\n};\n\nexport type Scalar = number | string | boolean;\n\nexport type HaveOperator = {\n values: string[];\n not?: boolean | null;\n};\n\nexport type EmptyOperator = {\n not?: boolean | null;\n};\n\nexport type BetweenOperator = {\n from: Scalar;\n to: Scalar;\n not?: boolean | null;\n};\n\nexport type EqualOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type GreaterOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type GreaterOrEqualOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type InOperator = {\n values: Scalar[];\n not?: boolean | null;\n};\n\nexport type LessOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type LessOrEqualOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type LikeOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type NullOperator = {\n not?: boolean | null;\n};\n","import {cloneDeep, groupBy, uniq} from 'es-toolkit';\nimport {LogicalOperator} from '../modules/search/classes/graphql-doctrine.types';\nimport {Literal} from '../types/types';\n\nexport function hasMixedGroupLogic(groups: Literal[]): boolean {\n // Complete lack of definition by fallback on AND operator\n const completedGroups = cloneDeep(groups).map(group => {\n if (!group.groupLogic) {\n group.groupLogic = LogicalOperator.AND;\n }\n\n return group;\n });\n\n const groupLogics = uniq(Object.keys(groupBy(completedGroups.slice(1), group => group.groupLogic)));\n\n return groupLogics.length > 1;\n}\n","import {defaultsDeep, mergeWith} from 'es-toolkit/compat';\nimport {cloneDeep, omit} from 'es-toolkit';\nimport {BehaviorSubject} from 'rxjs';\nimport {Literal} from '../types/types';\nimport {cloneDeepButSkipFile, isFile, mergeOverrideArray} from './utility';\nimport {hasMixedGroupLogic} from './query-variable-manager-utils';\n\nexport type QueryVariables = {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n filter?: any | null;\n pagination?: PaginationInput | null;\n sorting?: Sorting[] | null;\n};\n\nexport type PaginationInput = {\n offset?: number | null;\n pageIndex?: number | null;\n pageSize?: number | null;\n};\n\nexport type Sorting = {\n field: any;\n order?: SortingOrder | null;\n nullAsHighest?: boolean | null;\n emptyStringAsHighest?: boolean | null;\n};\n\nexport enum SortingOrder {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\n/**\n * During lodash merge, concat arrays\n */\nfunction mergeConcatArray(destValue: unknown, source: unknown): unknown {\n if (isFile(source)) {\n return source;\n }\n\n if (Array.isArray(source)) {\n if (Array.isArray(destValue)) {\n return destValue.concat(source);\n } else {\n return source;\n }\n }\n}\n\n/**\n * Filter manager stores a set of channels that contain a variable object and exposes an observable \"variables\" that updates with the result\n * of all channels merged together.\n *\n * A channel is supposed to be used by a given aspect of the GUI (pagination, sorting, search, others ?).\n *\n * ```ts\n * const fm = new QueryVariablesManager();\n * fm.merge('componentA-variables', {a : [1, 2, 3]});\n * ```\n *\n * Variables attributes is a BehaviorSubject. That mean it's not mandatory to subscribe, we can just call getValue or value attributes on\n * it :\n *\n * ```ts\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for 'componentA-variables':\n *\n * ```ts\n * fm.merge('componentA-variables', {a : [1, 2]});\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for new channel:\n *\n * ```ts\n * fm.merge('componentB-variables', {a : [3, 4]});\n * console.log(fm.variables.value); // {a : [1, 2, 3, 4]}\n * ```\n */\nexport class NaturalQueryVariablesManager<T extends QueryVariables = QueryVariables> {\n public readonly variables = new BehaviorSubject<T | undefined>(undefined);\n private readonly channels = new Map<string, Partial<T>>();\n\n public constructor(queryVariablesManager?: NaturalQueryVariablesManager<T>) {\n if (queryVariablesManager) {\n this.channels = queryVariablesManager.getChannelsCopy();\n this.updateVariables();\n }\n }\n\n /**\n * Set or override all the variables that may exist in the given channel\n */\n public set(channelName: string, variables: Partial<T> | null | undefined): void {\n // cloneDeep to change reference and prevent some interactions when merge\n if (variables) {\n this.channels.set(channelName, cloneDeepButSkipFile(variables));\n } else {\n this.channels.delete(channelName);\n }\n this.updateVariables();\n }\n\n /**\n * Return a deep clone of the variables for the given channel name.\n *\n * Avoid returning the same reference to prevent an attribute change, then another channel update that would\n * used this changed attribute without having explicitly asked QueryVariablesManager to update it.\n */\n public get(channelName: string): Partial<T> | undefined {\n return cloneDeepButSkipFile(this.channels.get(channelName));\n }\n\n /**\n * Merge variable into a channel, overriding arrays in same channel / key\n */\n public merge(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n mergeWith(variables, cloneDeep(newVariables), mergeOverrideArray); // merge preserves references, cloneDeep prevent that\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n /**\n * Apply default values to a channel\n * Note : lodash defaults only defines values on destinations keys that are undefined\n */\n public defaults(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n defaultsDeep(variables, newVariables);\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n private getChannelsCopy(): Map<string, Partial<T>> {\n return new Map<string, Partial<T>>(this.channels);\n }\n\n /**\n * Merge channels in a single object\n * Arrays are concatenated\n * Filter groups are combined smartly (see mergeGroupList)\n */\n private updateVariables(): void {\n const merged: T = {} as T;\n\n this.channels.forEach(channelVariables => {\n if (channelVariables.filter) {\n // Merge filter's groups first\n const groups = this.mergeGroupList(\n merged.filter?.groups ? merged.filter.groups : [],\n channelVariables.filter.groups || [],\n );\n\n // Merge filter key (that contain groups)\n if (groups?.length) {\n if (merged.filter) {\n merged.filter.groups = groups;\n } else {\n merged.filter = {groups: groups};\n }\n } else {\n mergeWith(merged, {filter: channelVariables.filter}, mergeConcatArray);\n }\n }\n\n // Merge other attributes than filter\n mergeWith(merged, omit(channelVariables, ['filter']), mergeConcatArray);\n });\n\n this.variables.next(merged);\n }\n\n /**\n * Cross merge two filters\n * Only accepts groups with same groupLogic (ignores the first one, because there is no groupLogic in this one)\n * @throws In case two non-empty lists of groups are given and at one of them mix groupLogic value, throws an error\n */\n private mergeGroupList(groupsA: Literal[], groupsB: Literal[]): Literal {\n if (groupsA.length === 0 && groupsB.length === 0) {\n return []; // empty listings, return empty lists\n }\n\n if (groupsA.length === 0 && groupsB.length > 0) {\n return groupsB; // One list is empty, return the one that is not\n }\n\n if (groupsB.length === 0 && groupsA.length > 0) {\n return groupsA; // One list is empty, return the one that is not\n }\n\n const groups: Literal[] = [];\n\n if (hasMixedGroupLogic(groupsA) || hasMixedGroupLogic(groupsB)) {\n throw Error('QueryVariables groups contain mixed group logics');\n }\n\n groupsA.forEach(groupA => {\n groupsB.forEach(groupB => {\n groups.push(mergeWith(cloneDeep(groupA), groupB, mergeConcatArray));\n });\n });\n\n return groups;\n }\n}\n","/**\n * Array of valid top-level-domains\n * IanaVersion 2020033100\n *\n * This should ideally be kept in sync with \\Laminas\\Validator\\Hostname\n *\n * See ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain\n * See http://www.iana.org/domains/root/db/ Official list of supported TLDs\n */\nexport const validTlds: readonly string[] = [\n 'aaa',\n 'aarp',\n 'abb',\n 'abbott',\n 'abbvie',\n 'abc',\n 'able',\n 'abogado',\n 'abudhabi',\n 'ac',\n 'academy',\n 'accenture',\n 'accountant',\n 'accountants',\n 'aco',\n 'actor',\n 'ad',\n 'ads',\n 'adult',\n 'ae',\n 'aeg',\n 'aero',\n 'aetna',\n 'af',\n 'afl',\n 'africa',\n 'ag',\n 'agakhan',\n 'agency',\n 'ai',\n 'aig',\n 'airbus',\n 'airforce',\n 'airtel',\n 'akdn',\n 'al',\n 'alibaba',\n 'alipay',\n 'allfinanz',\n 'allstate',\n 'ally',\n 'alsace',\n 'alstom',\n 'am',\n 'amazon',\n 'americanexpress',\n 'americanfamily',\n 'amex',\n 'amfam',\n 'amica',\n 'amsterdam',\n 'analytics',\n 'android',\n 'anquan',\n 'anz',\n 'ao',\n 'aol',\n 'apartments',\n 'app',\n 'apple',\n 'aq',\n 'aquarelle',\n 'ar',\n 'arab',\n 'aramco',\n 'archi',\n 'army',\n 'arpa',\n 'art',\n 'arte',\n 'as',\n 'asda',\n 'asia',\n 'associates',\n 'at',\n 'athleta',\n 'attorney',\n 'au',\n 'auction',\n 'audi',\n 'audible',\n 'audio',\n 'auspost',\n 'author',\n 'auto',\n 'autos',\n 'aw',\n 'aws',\n 'ax',\n 'axa',\n 'az',\n 'azure',\n 'ba',\n 'baby',\n 'baidu',\n 'banamex',\n 'band',\n 'bank',\n 'bar',\n 'barcelona',\n 'barclaycard',\n 'barclays',\n 'barefoot',\n 'bargains',\n 'baseball',\n 'basketball',\n 'bauhaus',\n 'bayern',\n 'bb',\n 'bbc',\n 'bbt',\n 'bbva',\n 'bcg',\n 'bcn',\n 'bd',\n 'be',\n 'beats',\n 'beauty',\n 'beer',\n 'bentley',\n 'berlin',\n 'best',\n 'bestbuy',\n 'bet',\n 'bf',\n 'bg',\n 'bh',\n 'bharti',\n 'bi',\n 'bible',\n 'bid',\n 'bike',\n 'bing',\n 'bingo',\n 'bio',\n 'biz',\n 'bj',\n 'black',\n 'blackfriday',\n 'blockbuster',\n 'blog',\n 'bloomberg',\n 'blue',\n 'bm',\n 'bms',\n 'bmw',\n 'bn',\n 'bnpparibas',\n 'bo',\n 'boats',\n 'boehringer',\n 'bofa',\n 'bom',\n 'bond',\n 'boo',\n 'book',\n 'booking',\n 'bosch',\n 'bostik',\n 'boston',\n 'bot',\n 'boutique',\n 'box',\n 'br',\n 'bradesco',\n 'bridgestone',\n 'broadway',\n 'broker',\n 'brother',\n 'brussels',\n 'bs',\n 'bt',\n 'build',\n 'builders',\n 'business',\n 'buy',\n 'buzz',\n 'bv',\n 'bw',\n 'by',\n 'bz',\n 'bzh',\n 'ca',\n 'cab',\n 'cafe',\n 'cal',\n 'call',\n 'calvinklein',\n 'cam',\n 'camera',\n 'camp',\n 'canon',\n 'capetown',\n 'capital',\n 'capitalone',\n 'car',\n 'caravan',\n 'cards',\n 'care',\n 'career',\n 'careers',\n 'cars',\n 'casa',\n 'case',\n 'cash',\n 'casino',\n 'cat',\n 'catering',\n 'catholic',\n 'cba',\n 'cbn',\n 'cbre',\n 'cc',\n 'cd',\n 'center',\n 'ceo',\n 'cern',\n 'cf',\n 'cfa',\n 'cfd',\n 'cg',\n 'ch',\n 'chanel',\n 'channel',\n 'charity',\n 'chase',\n 'chat',\n 'cheap',\n 'chintai',\n 'christmas',\n 'chrome',\n 'church',\n 'ci',\n 'cipriani',\n 'circle',\n 'cisco',\n 'citadel',\n 'citi',\n 'citic',\n 'city',\n 'ck',\n 'cl',\n 'claims',\n 'cleaning',\n 'click',\n 'clinic',\n 'clinique',\n 'clothing',\n 'cloud',\n 'club',\n 'clubmed',\n 'cm',\n 'cn',\n 'co',\n 'coach',\n 'codes',\n 'coffee',\n 'college',\n 'cologne',\n 'com',\n 'commbank',\n 'community',\n 'company',\n 'compare',\n 'computer',\n 'comsec',\n 'condos',\n 'construction',\n 'consulting',\n 'contact',\n 'contractors',\n 'cooking',\n 'cool',\n 'coop',\n 'corsica',\n 'country',\n 'coupon',\n 'coupons',\n 'courses',\n 'cpa',\n 'cr',\n 'credit',\n 'creditcard',\n 'creditunion',\n 'cricket',\n 'crown',\n 'crs',\n 'cruise',\n 'cruises',\n 'cu',\n 'cuisinella',\n 'cv',\n 'cw',\n 'cx',\n 'cy',\n 'cymru',\n 'cyou',\n 'cz',\n 'dabur',\n 'dad',\n 'dance',\n 'data',\n 'date',\n 'dating',\n 'datsun',\n 'day',\n 'dclk',\n 'dds',\n 'de',\n 'deal',\n 'dealer',\n 'deals',\n 'degree',\n 'delivery',\n 'dell',\n 'deloitte',\n 'delta',\n 'democrat',\n 'dental',\n 'dentist',\n 'desi',\n 'design',\n 'dev',\n 'dhl',\n 'diamonds',\n 'diet',\n 'digital',\n 'direct',\n 'directory',\n 'discount',\n 'discover',\n 'dish',\n 'diy',\n 'dj',\n 'dk',\n 'dm',\n 'dnp',\n 'do',\n 'docs',\n 'doctor',\n 'dog',\n 'domains',\n 'dot',\n 'download',\n 'drive',\n 'dtv',\n 'dubai',\n 'dunlop',\n 'dupont',\n 'durban',\n 'dvag',\n 'dvr',\n 'dz',\n 'earth',\n 'eat',\n 'ec',\n 'eco',\n 'edeka',\n 'edu',\n 'education',\n 'ee',\n 'eg',\n 'email',\n 'emerck',\n 'energy',\n 'engineer',\n 'engineering',\n 'enterprises',\n 'epson',\n 'equipment',\n 'er',\n 'ericsson',\n 'erni',\n 'es',\n 'esq',\n 'estate',\n 'et',\n 'eu',\n 'eurovision',\n 'eus',\n 'events',\n 'exchange',\n 'expert',\n 'exposed',\n 'express',\n 'extraspace',\n 'fage',\n 'fail',\n 'fairwinds',\n 'faith',\n 'family',\n 'fan',\n 'fans',\n 'farm',\n 'farmers',\n 'fashion',\n 'fast',\n 'fedex',\n 'feedback',\n 'ferrari',\n 'ferrero',\n 'fi',\n 'fidelity',\n 'fido',\n 'film',\n 'final',\n 'finance',\n 'financial',\n 'fire',\n 'firestone',\n 'firmdale',\n 'fish',\n 'fishing',\n 'fit',\n 'fitness',\n 'fj',\n 'fk',\n 'flickr',\n 'flights',\n 'flir',\n 'florist',\n 'flowers',\n 'fly',\n 'fm',\n 'fo',\n 'foo',\n 'food',\n 'football',\n 'ford',\n 'forex',\n 'forsale',\n 'forum',\n 'foundation',\n 'fox',\n 'fr',\n 'free',\n 'fresenius',\n 'frl',\n 'frogans',\n 'frontier',\n 'ftr',\n 'fujitsu',\n 'fun',\n 'fund',\n 'furniture',\n 'futbol',\n 'fyi',\n 'ga',\n 'gal',\n 'gallery',\n 'gallo',\n 'gallup',\n 'game',\n 'games',\n 'gap',\n 'garden',\n 'gay',\n 'gb',\n 'gbiz',\n 'gd',\n 'gdn',\n 'ge',\n 'gea',\n 'gent',\n 'genting',\n 'george',\n 'gf',\n 'gg',\n 'ggee',\n 'gh',\n 'gi',\n 'gift',\n 'gifts',\n 'gives',\n 'giving',\n 'gl',\n 'glass',\n 'gle',\n 'global',\n 'globo',\n 'gm',\n 'gmail',\n 'gmbh',\n 'gmo',\n 'gmx',\n 'gn',\n 'godaddy',\n 'gold',\n 'goldpoint',\n 'golf',\n 'goo',\n 'goodyear',\n 'goog',\n 'google',\n 'gop',\n 'got',\n 'gov',\n 'gp',\n 'gq',\n 'gr',\n 'grainger',\n 'graphics',\n 'gratis',\n 'green',\n 'gripe',\n 'grocery',\n 'group',\n 'gs',\n 'gt',\n 'gu',\n 'gucci',\n 'guge',\n 'guide',\n 'guitars',\n 'guru',\n 'gw',\n 'gy',\n 'hair',\n 'hamburg',\n 'hangout',\n 'haus',\n 'hbo',\n 'hdfc',\n 'hdfcbank',\n 'health',\n 'healthcare',\n 'help',\n 'helsinki',\n 'here',\n 'hermes',\n 'hiphop',\n 'hisamitsu',\n 'hitachi',\n 'hiv',\n 'hk',\n 'hkt',\n 'hm',\n 'hn',\n 'hockey',\n 'holdings',\n 'holiday',\n 'homedepot',\n 'homegoods',\n 'homes',\n 'homesense',\n 'honda',\n 'horse',\n 'hospital',\n 'host',\n 'hosting',\n 'hot',\n 'hotels',\n 'hotmail',\n 'house',\n 'how',\n 'hr',\n 'hsbc',\n 'ht',\n 'hu',\n 'hughes',\n 'hyatt',\n 'hyundai',\n 'ibm',\n 'icbc',\n 'ice',\n 'icu',\n 'id',\n 'ie',\n 'ieee',\n 'ifm',\n 'ikano',\n 'il',\n 'im',\n 'imamat',\n 'imdb',\n 'immo',\n 'immobilien',\n 'in',\n 'inc',\n 'industries',\n 'infiniti',\n 'info',\n 'ing',\n 'ink',\n 'institute',\n 'insurance',\n 'insure',\n 'int',\n 'international',\n 'intuit',\n 'investments',\n 'io',\n 'ipiranga',\n 'iq',\n 'ir',\n 'irish',\n 'is',\n 'ismaili',\n 'ist',\n 'istanbul',\n 'it',\n 'itau',\n 'itv',\n 'jaguar',\n 'java',\n 'jcb',\n 'je',\n 'jeep',\n 'jetzt',\n 'jewelry',\n 'jio',\n 'jll',\n 'jm',\n 'jmp',\n 'jnj',\n 'jo',\n 'jobs',\n 'joburg',\n 'jot',\n 'joy',\n 'jp',\n 'jpmorgan',\n 'jprs',\n 'juegos',\n 'juniper',\n 'kaufen',\n 'kddi',\n 'ke',\n 'kerryhotels',\n 'kerrylogistics',\n 'kerryproperties',\n 'kfh',\n 'kg',\n 'kh',\n 'ki',\n 'kia',\n 'kids',\n 'kim',\n 'kindle',\n 'kitchen',\n 'kiwi',\n 'km',\n 'kn',\n 'koeln',\n 'komatsu',\n 'kosher',\n 'kp',\n 'kpmg',\n 'kpn',\n 'kr',\n 'krd',\n 'kred',\n 'kuokgroup',\n 'kw',\n 'ky',\n 'kyoto',\n 'kz',\n 'la',\n 'lacaixa',\n 'lamborghini',\n 'lamer',\n 'lancaster',\n 'land',\n 'landrover',\n 'lanxess',\n 'lasalle',\n 'lat',\n 'latino',\n 'latrobe',\n 'law',\n 'lawyer',\n 'lb',\n 'lc',\n 'lds',\n 'lease',\n 'leclerc',\n 'lefrak',\n 'legal',\n 'lego',\n 'lexus',\n 'lgbt',\n 'li',\n 'lidl',\n 'life',\n 'lifeinsurance',\n 'lifestyle',\n 'lighting',\n 'like',\n 'lilly',\n 'limited',\n 'limo',\n 'lincoln',\n 'link',\n 'lipsy',\n 'live',\n 'living',\n 'lk',\n 'llc',\n 'llp',\n 'loan',\n 'loans',\n 'locker',\n 'locus',\n 'lol',\n 'london',\n 'lotte',\n 'lotto',\n 'love',\n 'lpl',\n 'lplfinancial',\n 'lr',\n 'ls',\n 'lt',\n 'ltd',\n 'ltda',\n 'lu',\n 'lundbeck',\n 'luxe',\n 'luxury',\n 'lv',\n 'ly',\n 'ma',\n 'madrid',\n 'maif',\n 'maison',\n 'makeup',\n 'man',\n 'management',\n 'mango',\n 'map',\n 'market',\n 'marketing',\n 'markets',\n 'marriott',\n 'marshalls',\n 'mattel',\n 'mba',\n 'mc',\n 'mckinsey',\n 'md',\n 'me',\n 'med',\n 'media',\n 'meet',\n 'melbourne',\n 'meme',\n 'memorial',\n 'men',\n 'menu',\n 'merckmsd',\n 'mg',\n 'mh',\n 'miami',\n 'microsoft',\n 'mil',\n 'mini',\n 'mint',\n 'mit',\n 'mitsubishi',\n 'mk',\n 'ml',\n 'mlb',\n 'mls',\n 'mm',\n 'mma',\n 'mn',\n 'mo',\n 'mobi',\n 'mobile',\n 'moda',\n 'moe',\n 'moi',\n 'mom',\n 'monash',\n 'money',\n 'monster',\n 'mormon',\n 'mortgage',\n 'moscow',\n 'moto',\n 'motorcycles',\n 'mov',\n 'movie',\n 'mp',\n 'mq',\n 'mr',\n 'ms',\n 'msd',\n 'mt',\n 'mtn',\n 'mtr',\n 'mu',\n 'museum',\n 'music',\n 'mv',\n 'mw',\n 'mx',\n 'my',\n 'mz',\n 'na',\n 'nab',\n 'nagoya',\n 'name',\n 'navy',\n 'nba',\n 'nc',\n 'ne',\n 'nec',\n 'net',\n 'netbank',\n 'netflix',\n 'network',\n 'neustar',\n 'new',\n 'news',\n 'next',\n 'nextdirect',\n 'nexus',\n 'nf',\n 'nfl',\n 'ng',\n 'ngo',\n 'nhk',\n 'ni',\n 'nico',\n 'nike',\n 'nikon',\n 'ninja',\n 'nissan',\n 'nissay',\n 'nl',\n 'no',\n 'nokia',\n 'norton',\n 'now',\n 'nowruz',\n 'nowtv',\n 'np',\n 'nr',\n 'nra',\n 'nrw',\n 'ntt',\n 'nu',\n 'nyc',\n 'nz',\n 'obi',\n 'observer',\n 'office',\n 'okinawa',\n 'olayan',\n 'olayangroup',\n 'ollo',\n 'om',\n 'omega',\n 'one',\n 'ong',\n 'onl',\n 'online',\n 'ooo',\n 'open',\n 'oracle',\n 'orange',\n 'org',\n 'organic',\n 'origins',\n 'osaka',\n 'otsuka',\n 'ott',\n 'ovh',\n 'pa',\n 'page',\n 'panasonic',\n 'paris',\n 'pars',\n 'partners',\n 'parts',\n 'party',\n 'pay',\n 'pccw',\n 'pe',\n 'pet',\n 'pf',\n 'pfizer',\n 'pg',\n 'ph',\n 'pharmacy',\n 'phd',\n 'philips',\n 'phone',\n 'photo',\n 'photography',\n 'photos',\n 'physio',\n 'pics',\n 'pictet',\n 'pictures',\n 'pid',\n 'pin',\n 'ping',\n 'pink',\n 'pioneer',\n 'pizza',\n 'pk',\n 'pl',\n 'place',\n 'play',\n 'playstation',\n 'plumbing',\n 'plus',\n 'pm',\n 'pn',\n 'pnc',\n 'pohl',\n 'poker',\n 'politie',\n 'porn',\n 'post',\n 'pr',\n 'pramerica',\n 'praxi',\n 'press',\n 'prime',\n 'pro',\n 'prod',\n 'productions',\n 'prof',\n 'progressive',\n 'promo',\n 'properties',\n 'property',\n 'protection',\n 'pru',\n 'prudential',\n 'ps',\n 'pt',\n 'pub',\n 'pw',\n 'pwc',\n 'py',\n 'qa',\n 'qpon',\n 'quebec',\n 'quest',\n 'racing',\n 'radio',\n 're',\n 'read',\n 'realestate',\n 'realtor',\n 'realty',\n 'recipes',\n 'red',\n 'redstone',\n 'redumbrella',\n 'rehab',\n 'reise',\n 'reisen',\n 'reit',\n 'reliance',\n 'ren',\n 'rent',\n 'rentals',\n 'repair',\n 'report',\n 'republican',\n 'rest',\n 'restaurant',\n 'review',\n 'reviews',\n 'rexroth',\n 'rich',\n 'richardli',\n 'ricoh',\n 'ril',\n 'rio',\n 'rip',\n 'ro',\n 'rocks',\n 'rodeo',\n 'rogers',\n 'room',\n 'rs',\n 'rsvp',\n 'ru',\n 'rugby',\n 'ruhr',\n 'run',\n 'rw',\n 'rwe',\n 'ryukyu',\n 'sa',\n 'saarland',\n 'safe',\n 'safety',\n 'sakura',\n 'sale',\n 'salon',\n 'samsclub',\n 'samsung',\n 'sandvik',\n 'sandvikcoromant',\n 'sanofi',\n 'sap',\n 'sarl',\n 'sas',\n 'save',\n 'saxo',\n 'sb',\n 'sbi',\n 'sbs',\n 'sc',\n 'scb',\n 'schaeffler',\n 'schmidt',\n 'scholarships',\n 'school',\n 'schule',\n 'schwarz',\n 'science',\n 'scot',\n 'sd',\n 'se',\n 'search',\n 'seat',\n 'secure',\n 'security',\n 'seek',\n 'select',\n 'sener',\n 'services',\n 'seven',\n 'sew',\n 'sex',\n 'sexy',\n 'sfr',\n 'sg',\n 'sh',\n 'shangrila',\n 'sharp',\n 'shell',\n 'shia',\n 'shiksha',\n 'shoes',\n 'shop',\n 'shopping',\n 'shouji',\n 'show',\n 'si',\n 'silk',\n 'sina',\n 'singles',\n 'site',\n 'sj',\n 'sk',\n 'ski',\n 'skin',\n 'sky',\n 'skype',\n 'sl',\n 'sling',\n 'sm',\n 'smart',\n 'smile',\n 'sn',\n 'sncf',\n 'so',\n 'soccer',\n 'social',\n 'softbank',\n 'software',\n 'sohu',\n 'solar',\n 'solutions',\n 'song',\n 'sony',\n 'soy',\n 'spa',\n 'space',\n 'sport',\n 'spot',\n 'sr',\n 'srl',\n 'ss',\n 'st',\n 'stada',\n 'staples',\n 'star',\n 'statebank',\n 'statefarm',\n 'stc',\n 'stcgroup',\n 'stockholm',\n 'storage',\n 'store',\n 'stream',\n 'studio',\n 'study',\n 'style',\n 'su',\n 'sucks',\n 'supplies',\n 'supply',\n 'support',\n 'surf',\n 'surgery',\n 'suzuki',\n 'sv',\n 'swatch',\n 'swiss',\n 'sx',\n 'sy',\n 'sydney',\n 'systems',\n 'sz',\n 'tab',\n 'taipei',\n 'talk',\n 'taobao',\n 'target',\n 'tatamotors',\n 'tatar',\n 'tattoo',\n 'tax',\n 'taxi',\n 'tc',\n 'tci',\n 'td',\n 'tdk',\n 'team',\n 'tech',\n 'technology',\n 'tel',\n 'temasek',\n 'tennis',\n 'teva',\n 'tf',\n 'tg',\n 'th',\n 'thd',\n 'theater',\n 'theatre',\n 'tiaa',\n 'tickets',\n 'tienda',\n 'tips',\n 'tires',\n 'tirol',\n 'tj',\n 'tjmaxx',\n 'tjx',\n 'tk',\n 'tkmaxx',\n 'tl',\n 'tm',\n 'tmall',\n 'tn',\n 'to',\n 'today',\n 'tokyo',\n 'tools',\n 'top',\n 'toray',\n 'toshiba',\n 'total',\n 'tours',\n 'town',\n 'toyota',\n 'toys',\n 'tr',\n 'trade',\n 'trading',\n 'training',\n 'travel',\n 'travelers',\n 'travelersinsurance',\n 'trust',\n 'trv',\n 'tt',\n 'tube',\n 'tui',\n 'tunes',\n 'tushu',\n 'tv',\n 'tvs',\n 'tw',\n 'tz',\n 'ua',\n 'ubank',\n 'ubs',\n 'ug',\n 'uk',\n 'unicom',\n 'university',\n 'uno',\n 'uol',\n 'ups',\n 'us',\n 'uy',\n 'uz',\n 'va',\n 'vacations',\n 'vana',\n 'vanguard',\n 'vc',\n 've',\n 'vegas',\n 'ventures',\n 'verisign',\n 'versicherung',\n 'vet',\n 'vg',\n 'vi',\n 'viajes',\n 'video',\n 'vig',\n 'viking',\n 'villas',\n 'vin',\n 'vip',\n 'virgin',\n 'visa',\n 'vision',\n 'viva',\n 'vivo',\n 'vlaanderen',\n 'vn',\n 'vodka',\n 'volvo',\n 'vote',\n 'voting',\n 'voto',\n 'voyage',\n 'vu',\n 'wales',\n 'walmart',\n 'walter',\n 'wang',\n 'wanggou',\n 'watch',\n 'watches',\n 'weather',\n 'weatherchannel',\n 'webcam',\n 'weber',\n 'website',\n 'wed',\n 'wedding',\n 'weibo',\n 'weir',\n 'wf',\n 'whoswho',\n 'wien',\n 'wiki',\n 'williamhill',\n 'win',\n 'windows',\n 'wine',\n 'winners',\n 'wme',\n 'wolterskluwer',\n 'woodside',\n 'work',\n 'works',\n 'world',\n 'wow',\n 'ws',\n 'wtc',\n 'wtf',\n 'xbox',\n 'xerox',\n 'xihuan',\n 'xin',\n 'कॉम',\n 'セール',\n '佛山',\n 'ಭಾರತ',\n '慈善',\n '集团',\n '在线',\n '한국',\n 'ଭାରତ',\n '点看',\n 'คอม',\n 'ভাৰত',\n 'ভারত',\n '八卦',\n 'ישראל',\n 'موقع',\n 'বাংলা',\n '公益',\n '公司',\n '香格里拉',\n '网站',\n '移动',\n '我爱你',\n 'москва',\n 'қаз',\n 'католик',\n 'онлайн',\n 'сайт',\n '联通',\n 'срб',\n 'бг',\n 'бел',\n 'קום',\n '时尚',\n '微博',\n '淡马锡',\n 'ファッション',\n 'орг',\n 'नेट',\n 'ストア',\n 'アマゾン',\n '삼성',\n 'சிங்கப்பூர்',\n '商标',\n '商店',\n '商城',\n 'дети',\n 'мкд',\n 'ею',\n 'ポイント',\n '新闻',\n '家電',\n 'كوم',\n '中文网',\n '中信',\n '中国',\n '中國',\n '娱乐',\n '谷歌',\n 'భారత్',\n 'ලංකා',\n '電訊盈科',\n '购物',\n 'クラウド',\n 'ભારત',\n '通販',\n 'भारतम्',\n 'भारत',\n 'भारोत',\n '网店',\n 'संगठन',\n '餐厅',\n '网络',\n 'ком',\n 'укр',\n '香港',\n '亚马逊',\n '食品',\n '飞利浦',\n '台湾',\n '台灣',\n '手机',\n 'мон',\n 'الجزائر',\n 'عمان',\n 'ارامكو',\n 'ایران',\n 'العليان',\n 'امارات',\n 'بازار',\n 'موريتانيا',\n 'پاکستان',\n 'الاردن',\n 'بارت',\n 'بھارت',\n 'المغرب',\n 'ابوظبي',\n 'البحرين',\n 'السعودية',\n 'ڀارت',\n 'كاثوليك',\n 'سودان',\n 'همراه',\n 'عراق',\n 'مليسيا',\n '澳門',\n '닷컴',\n '政府',\n 'شبكة',\n 'بيتك',\n 'عرب',\n 'გე',\n '机构',\n '组织机构',\n '健康',\n 'ไทย',\n 'سورية',\n '招聘',\n 'рус',\n 'рф',\n 'تونس',\n '大拿',\n 'ລາວ',\n 'みんな',\n 'グーグル',\n 'ευ',\n 'ελ',\n '世界',\n '書籍',\n 'ഭാരതം',\n 'ਭਾਰਤ',\n '网址',\n '닷넷',\n 'コム',\n '天主教',\n '游戏',\n 'vermögensberater',\n 'vermögensberatung',\n '企业',\n '信息',\n '嘉里大酒店',\n '嘉里',\n 'مصر',\n 'قطر',\n '广东',\n 'இலங்கை',\n 'இந்தியா',\n 'հայ',\n '新加坡',\n 'فلسطين',\n '政务',\n 'xxx',\n 'xyz',\n 'yachts',\n 'yahoo',\n 'yamaxun',\n 'yandex',\n 'ye',\n 'yodobashi',\n 'yoga',\n 'yokohama',\n 'you',\n 'youtube',\n 'yt',\n 'yun',\n 'za',\n 'zappos',\n 'zara',\n 'zero',\n 'zip',\n 'zm',\n 'zone',\n 'zuerich',\n 'zw',\n];\n","import {\n AbstractControl,\n AsyncValidatorFn,\n FormArray,\n FormControlStatus,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {Observable, of, timer} from 'rxjs';\nimport {filter, first, map, switchMap} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {validTlds} from './tld';\nimport {FilterGroupCondition} from '../modules/search/classes/graphql-doctrine.types';\nimport {UntypedModelService} from '../types/types';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * Returns an async validator function that checks that the form control value is unique\n */\nexport function unique(\n fieldName: string,\n excludedId: string | null | undefined,\n modelService: UntypedModelService,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n const condition: FilterGroupCondition = {};\n condition[fieldName] = {equal: {value: control.value}};\n\n if (excludedId) {\n condition.id = {equal: {value: excludedId, not: true}};\n }\n\n const variables: QueryVariables = {\n pagination: {pageIndex: 0, pageSize: 0},\n filter: {groups: [{conditions: [condition]}]},\n };\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n\n return timer(500).pipe(\n switchMap(() =>\n modelService.count(qvm).pipe(\n first(),\n map(count => (count > 0 ? {duplicateValue: count} : null)),\n ),\n ),\n );\n };\n}\n\n/**\n * Returns an async validator function that checks that the form control value is available\n *\n * Similar to `unique` validator, but allows to use a custom query for when the client does\n * not have permissions for `modelService.count()`.\n */\nexport function available(\n getAvailableQuery: (value: string, excludedId: string | null) => Observable<boolean>,\n excludedId: string | null = null,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n return timer(500).pipe(\n switchMap(() =>\n getAvailableQuery(control.value, excludedId).pipe(\n map(isAvailable => (isAvailable ? null : {available: true})),\n ),\n ),\n );\n };\n}\n\n/**\n * Return all errors recursively for the given Form or control\n */\nexport function collectErrors(control: AbstractControl<unknown>): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n if (control instanceof FormGroup || control instanceof FormArray) {\n errors = Object.entries(control.controls).reduce((acc: ValidationErrors | null, [key, childControl]) => {\n const childErrors = collectErrors(childControl);\n if (childErrors) {\n acc = {...acc, [key]: childErrors};\n }\n return acc;\n }, null);\n }\n\n if (!errors) {\n errors = control.errors;\n }\n\n return errors;\n}\n\n/**\n * Force validation of all form controls recursively.\n *\n * Recursively mark descending form tree as dirty and touched in order to show all invalid fields on demand.\n * Typically used when creating a new object and user clicked on create button but several fields were not\n * touched and are invalid.\n */\nexport function validateAllFormControls(control: AbstractControl<unknown>): void {\n control.markAllAsDirty();\n control.markAllAsTouched();\n}\n\nfunction isValid(status: FormControlStatus): status is 'VALID' {\n return status === 'VALID';\n}\n\n/**\n * Emits exactly 0 or 1 time:\n *\n * - if the form is `VALID`, emits immediately\n * - if the form is `PENDING` emits if it changes from `PENDING` to `VALID`\n * - any other cases will **never** emit\n */\nexport function ifValid(control: AbstractControl): Observable<'VALID'> {\n const observable = control.pending ? control.statusChanges.pipe(first()) : of(control.status);\n\n return observable.pipe(filter(isValid));\n}\n\n// This is an approximation of RFC_5322 where the hostname:\n//\n// - is too strict because it rejects IP address\n// - is too lax because it accepts pretty much anything else\n//\n// but the TLD will be validated against a whitelist so that should make the whole thing acceptable\nconst RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[^@ ]+\\.[^@]+$/u;\n\n/**\n * Validate an email address according to RFC, and also that it is publicly deliverable (not \"root@localhost\" or \"root@127.0.0.1\")\n *\n * This is meant to replace **all** usages of Angular too permissive `Validators.email`\n */\nexport function deliverableEmail(control: AbstractControl): ValidationErrors | null {\n // don't validate empty values to allow optional controls\n const value = control.value;\n if (!value) {\n return null;\n }\n\n const error = {email: true};\n if (value.length > 254) {\n return error;\n }\n\n if (!RFC_5322.test(value)) {\n return error;\n }\n\n const tld = value.split('.').pop();\n if (!validTlds.includes(tld)) {\n return error;\n }\n\n return null;\n}\n\nconst urlRegexp = /^https?:\\/\\/(?:[^.\\s]+\\.)+[^.\\s]+$/;\nexport const urlPattern = urlRegexp.toString();\n\n/**\n * Naive URL validator for \"normal\" web links, that is a bit too permissive\n *\n * - It enforces:\n * - http/https protocol\n * - one domain\n * - one tld\n * - It allows:\n * - any number of subdomains\n * - any parameters\n * - any fragments\n * - any characters for any parts (does not conform to rfc1738)\n */\nexport const url = Validators.pattern(urlRegexp);\n\n/**\n * Validates that the value is an integer (non-float)\n */\nexport function integer(control: AbstractControl): ValidationErrors | null {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n return Number.isInteger(parseFloat(control.value)) ? null : {integer: true};\n}\n\n/**\n * Validate that the value is a decimal number with up to `scale` digits\n *\n * The error contains the expected scale, so that the error message can explain\n * it to the end-user.\n */\nexport function decimal(scale: number): ValidatorFn {\n const regExp = new RegExp(`^-?\\\\d+(\\\\.\\\\d{0,${scale}})?$`);\n return control => {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const value = '' + control.value;\n if (value.match(regExp)) {\n return null;\n }\n\n return {decimal: scale};\n };\n}\n\n/**\n * For internal use to avoid re-creating regexp on each call of `money`\n */\nconst twoDecimals = decimal(2);\n\n/**\n * Validate that the value is an amount of money, meaning a number with at most 2 decimals\n */\nexport function money(control: AbstractControl): ValidationErrors | null {\n return twoDecimals(control) ? {money: true} : null;\n}\n\n/**\n * Validate that the number is strictly greater than given one.\n *\n * `Validators.min()` is \"greater than or equal\", but this one is strictly\n * \"greater than\".\n *\n * **SHOULD NOT USE IT**, instead consider using Angular's native `Validators.min()`.\n * Because you should also apply `[attr.min]=\"123\"` in the template to have the browser\n * help the user. And that attribute spec defines that it is \"greater or equal\", which\n * contradicts this validator. So we cannot use this validator and have the best UX.\n */\nexport function greaterThan(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value <= min ? {greaterThan: {greaterThan: min, actualValue: control.value}} : null;\n };\n}\n\n/**\n * Validate a 32 bits MiFare hexadecimal CSN\n */\nexport function nfcCardHex(control: AbstractControl): ValidationErrors | null {\n const value = control.value || '';\n if (value && !value.match(/^[0-9A-F]{2}:?[0-9A-F]{2}:?[0-9A-F]{2}:?[0-9A-F]{2}$/i)) {\n return {\n nfcCardHex: $localize`Doit être au format hexadécimal (A1:B2:C3:D4 ou A1B2C3D4)`,\n };\n }\n\n return null;\n}\n\nconst invalidTime: ValidationErrors = {\n time: `L'heure doit être au format \"14h35\", \"14:35\" ou \"14h\".`,\n};\n\n// This pattern should be kept in sync with `\\Ecodev\\Felix\\Api\\Scalar\\TimeType::parseValue()`\nconst timePattern = /^(?<hour>\\d{1,2})(([h:]$)|([h:](?<minute>\\d{1,2}))?$)/;\n\n/**\n * Validate a time similar to \"14h35\", \"14:35\" or \"14h\".\n */\nexport function time(control: AbstractControl): ValidationErrors | null {\n const value = control.value || '';\n if (!value) {\n return null;\n } else if (typeof value !== 'string') {\n return invalidTime;\n }\n\n const match = timePattern.exec(value.trim());\n if (match?.groups && parseFloat(match.groups.hour) <= 24 && parseFloat(match.groups.minute ?? '0') <= 60) {\n return null;\n }\n\n return invalidTime;\n}\n","import {isEqual} from 'es-toolkit';\nimport {Literal} from '../types/types';\nimport {cloneDeepButSkipFile} from './utility';\n\n/**\n * Cumulate all changes made to an object over time\n */\nexport class CumulativeChanges<T extends Literal> {\n private original: T = {} as T;\n private diff: Partial<T> = {};\n\n /**\n * Initialize the original values, should be called exactly one time per instance\n */\n public initialize(originalValues: Readonly<T>): void {\n this.original = cloneDeepButSkipFile(originalValues);\n this.diff = {};\n }\n\n /**\n * Returns a literal that contains only the keys whose values have been changed by this call or any previous calls.\n *\n * Eg:\n *\n * ```ts\n * changes.initialize({a: 1, b: 2});\n * changes.differences({a: 1, b: 3}); // => {b: 3}\n * ```\n */\n public differences(newValues: Readonly<T>): Partial<T> | null {\n Object.keys(newValues).forEach(key => {\n const newValue = newValues[key];\n if (\n key in this.diff ||\n (newValue !== undefined && (!(key in this.original) || !isEqual(this.original[key], newValue)))\n ) {\n (this.diff as any)[key] = newValue;\n }\n });\n\n return Object.keys(this.diff).length ? this.diff : null;\n }\n\n /**\n * Commit the given new values, so they are not treated as differences anymore.\n */\n public commit(newValues: Readonly<T>): void {\n this.original = {\n ...this.original,\n ...cloneDeepButSkipFile(newValues),\n };\n\n Object.keys(newValues).forEach(key => {\n if (key in this.diff && isEqual(this.diff[key], newValues[key])) {\n delete this.diff[key];\n }\n });\n }\n}\n","import {Directive, inject, OnInit} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {ActivatedRoute, type NavigationExtras, Router} from '@angular/router';\nimport {kebabCase} from 'es-toolkit';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {NaturalAbstractModelService, WithId} from '../services/abstract-model.service';\nimport {ExtractResolve, ExtractTcreate, ExtractTone, ExtractTupdate, Literal} from '../types/types';\nimport {EMPTY, endWith, finalize, last, Observable, switchMap, tap} from 'rxjs';\nimport {ifValid, validateAllFormControls} from './validators';\nimport {PaginatedData} from './data-source';\nimport {QueryVariables} from './query-variable-manager';\nimport {CumulativeChanges} from './cumulative-changes';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {NaturalDialogTriggerProvidedData} from '../modules/dialog-trigger/dialog-trigger.component';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * `Data` contains in `model` either the model fetched from DB or default values (without ID). And besides `model`,\n * any other extra keys defined by Extra.\n */\ntype Data<TService, Extra> = {model: {id?: string} & ExtractResolve<TService>} & Extra;\n\nfunction isNaturalDialogTriggerProvidedData(\n dialogData: unknown,\n): dialogData is NaturalDialogTriggerProvidedData<never> {\n return (\n !!dialogData &&\n typeof dialogData === 'object' &&\n 'activatedRoute' in dialogData &&\n dialogData.activatedRoute instanceof ActivatedRoute\n );\n}\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractDetail<\n TService extends NaturalAbstractModelService<\n {id: string},\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n unknown,\n any\n >,\n ExtraResolve extends Literal = Record<never, never>,\n >\n extends NaturalAbstractPanel\n implements OnInit\n{\n /**\n * Data retrieved by the server via route resolvers.\n *\n * The key `model` is special. It is readonly and represents the model being updated\n * as it exists on server. The value is kept up to date when Apollo mutates it on server.\n *\n * The only time when `model` is not readonly is during creation. Only then can we modify the model values directly.\n *\n * Other keys, if present, are whatever is returned from route resolvers as-is.\n */\n public override data: Data<TService, ExtraResolve>;\n\n /**\n * Form that manages the data from the controller\n */\n public form: UntypedFormGroup = new UntypedFormGroup({});\n\n /**\n * Show / hides the bottom fab button (mostly to hide it when we are on other tabs where semantic of button can conflict with ...\n * semantic of data on other tab, like relations that list other objects)\n */\n public showFabButton = true;\n\n protected readonly alertService = inject(NaturalAlertService);\n\n protected readonly router = inject(Router);\n\n protected readonly route = inject(ActivatedRoute);\n\n private readonly _dialogData: unknown = inject(MAT_DIALOG_DATA, {optional: true});\n\n /**\n * Once set, this must not change anymore, especially not right after the creation mutation,\n * so the form does not switch from creation mode to update mode without an actual reload of\n * model from DB (by navigating to update page).\n */\n private _isUpdatePage = false;\n private readonly changes = new CumulativeChanges<typeof this.form.getRawValue>();\n\n public constructor(\n // eslint-disable-next-line @angular-eslint/prefer-inject\n protected readonly key: string,\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public readonly service: TService,\n ) {\n super();\n\n this.data = {\n model: this.service.getDefaultForServer(),\n } as Data<TService, ExtraResolve>;\n }\n\n /**\n * You probably should not override this method. Instead, consider overriding `initForm()`.\n */\n public ngOnInit(): void {\n if (this.isPanel) {\n this.initForm();\n } else {\n const route = isNaturalDialogTriggerProvidedData(this._dialogData)\n ? this._dialogData.activatedRoute\n : this.route;\n this.#subscribeToModelFromResolvedData(route);\n }\n }\n\n public changeTab(index: number): void {\n this.showFabButton = index === 0;\n }\n\n #subscribeToModelFromResolvedData(route: ActivatedRoute): void {\n let previousId = -1;\n route.data\n .pipe(\n switchMap(data => {\n if (!(data.model instanceof Observable)) {\n throw new Error(\n 'Resolved data must include the key `model`, and it must be an observable (usually one from Apollo).',\n );\n }\n\n // Subscribe to model to know when Apollo cache is changed, so we can reflect it into `data.model`\n return data.model.pipe(\n tap((model: ExtractResolve<TService>) => {\n this.data = {\n ...data,\n model: model,\n } as Data<TService, ExtraResolve>;\n\n if (previousId !== model.id) {\n previousId = model.id;\n this.initForm();\n }\n }),\n );\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n /**\n * Returns whether `data.model` was fetched from DB, so we are on an update page, or if it is a new object\n * with (only) default values, so we are on a creation page.\n *\n * This should be used instead of checking `data.model.id` directly, in order to type guard and get proper typing\n */\n protected isUpdatePage(): this is {data: {model: ExtractTone<TService>}} {\n return this._isUpdatePage;\n }\n\n /**\n * Update the object on the server with the values from the form fields that were modified since\n * the initialization, or since the previous successful update.\n *\n * Form fields that are never modified are **not** sent to the server, unless if you specify `submitAllFields`.\n */\n public update(now = false, submitAllFields = false): void {\n if (!this.isUpdatePage()) {\n return;\n }\n\n validateAllFormControls(this.form);\n\n ifValid(this.form).subscribe(() => {\n const newValues = this.form.getRawValue();\n if (submitAllFields) {\n this.changes.initialize({});\n }\n\n const toSubmit = {\n id: this.data.model.id,\n ...this.changes.differences(newValues),\n };\n\n const update = now ? this.service.updateNow(toSubmit) : this.service.update(toSubmit);\n update.subscribe(model => {\n this.changes.commit(newValues);\n this.alertService.info($localize`Mis à jour`);\n this.postUpdate(model);\n });\n });\n }\n\n public create(redirect = true): void {\n validateAllFormControls(this.form);\n\n if (!this.form.valid) {\n return;\n }\n\n const newValues = this.form.getRawValue();\n this.form.disable();\n\n this.service\n .create(newValues)\n .pipe(\n switchMap(model => {\n this.alertService.info($localize`Créé`);\n\n return this.postCreate(model).pipe(endWith(model), last());\n }),\n switchMap((model: WithId<object>) => {\n if (redirect) {\n if (this.isPanel) {\n const oldUrl = this.router.url;\n const nextUrl: string = this.panelData?.config.params.nextRoute;\n const newUrl = oldUrl.replace('/new', '/' + model.id) + (nextUrl ? '/' + nextUrl : '');\n return this.router.navigateByUrl(newUrl); // replace /new by /123\n } else {\n const queryParams = this.route.snapshot.queryParams;\n return this.router.navigate(['..', model.id], {relativeTo: this.route, queryParams});\n }\n }\n\n return EMPTY;\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n /**\n * `confirmer` can be used to open a custom dialog, or anything else, to confirm the deletion, instead of the standard dialog\n */\n public delete(\n redirectionRoute?:\n | unknown[]\n | {\n commands: unknown[];\n extras: NavigationExtras;\n },\n confirmer?: Observable<boolean | undefined>,\n ): void {\n this.form.disable();\n\n (\n confirmer ??\n this.alertService.confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement cet élément ?`,\n $localize`Supprimer définitivement`,\n )\n )\n .pipe(\n switchMap(confirmed => {\n if (!confirmed || !this.isUpdatePage()) {\n return EMPTY;\n }\n\n this.preDelete(this.data.model);\n\n return this.service.delete([this.data.model]).pipe(\n switchMap(() => {\n this.alertService.info($localize`Supprimé`);\n\n if (this.isPanel) {\n this.panelService?.goToPenultimatePanel();\n\n return EMPTY;\n } else {\n let commands: unknown[] = ['../../' + kebabCase(this.key)];\n let extras: NavigationExtras = {relativeTo: this.route};\n\n if (redirectionRoute && 'extras' in redirectionRoute) {\n commands = redirectionRoute.commands;\n extras = {...extras, ...redirectionRoute.extras};\n } else if (redirectionRoute) {\n commands = redirectionRoute;\n }\n\n return this.router.navigate(commands, extras);\n }\n }),\n );\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postUpdate(model: ExtractTupdate<TService>): void {\n // noop\n }\n\n /**\n * Returns an observable that will be subscribed to immediately and the\n * redirect navigation will only happen after the observable completes.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postCreate(model: ExtractTcreate<TService>): Observable<unknown> {\n return EMPTY;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected preDelete(model: ExtractTone<TService>): void {\n // noop\n }\n\n /**\n * Initialize the form whenever it is needed.\n *\n * You should override this method, and not `ngOnInit()` if you need to customize the form. Because this will\n * correctly be called more than one time per component instance if needed, when the route changes. But `ngOnInit()`\n * will incorrectly be called exactly 1 time per component instance, even if the object changes via route navigation.\n */\n protected initForm(): void {\n this._isUpdatePage = !!this.data.model.id;\n this.form = this.service.getFormGroup(this.data.model);\n this.changes.initialize(this.form.getRawValue());\n }\n}\n","import {AbstractControl, UntypedFormArray, UntypedFormGroup} from '@angular/forms';\nimport {MatTableDataSource} from '@angular/material/table';\nimport {merge} from 'es-toolkit';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {validateAllFormControls} from './validators';\nimport {Directive} from '@angular/core';\nimport {PaginatedData} from './data-source';\n\n/**\n * This class helps managing non-paginated rows of items that can be edited in-place, typically in a <mat-table>.\n * But it does **not** mutate anything to persist the edits on the server. It is up to the consuming component to implement\n * custom mutation mechanism.\n *\n * To access data of this component from a parent component, use:\n *\n * ```ts\n * private readonly cmp = viewChildren(ComponentType);\n *\n * this.cmp.getItems();\n * ```\n *\n * To add empty line, call:\n *\n * ```\n * this.cmp.addEmpty();\n * ```\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractEditableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // The Literal here is a bit too loose. Ideally we would like to express\n // \"it must be a union and one of the type in the union must be ExtractTallOne<TService>\"\n T extends Literal = ExtractTallOne<TService>,\n> {\n public readonly form: UntypedFormGroup;\n public readonly formArray = new UntypedFormArray([]);\n public readonly variablesManager = new NaturalQueryVariablesManager<ExtractVall<TService>>();\n public readonly dataSource = new MatTableDataSource<AbstractControl>();\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public constructor(protected readonly service: TService) {\n // Create a form group with a line attributes that contain an array of formGroups (one by line = one by model)\n this.form = new UntypedFormGroup({rows: this.formArray});\n this.dataSource.data = this.formArray.controls;\n this.variablesManager.set('pagination', {pagination: {pageSize: 999, pageIndex: 0}} as ExtractVall<TService>);\n }\n\n /**\n * Set the list of items (overwriting what may have existed)\n */\n public setItems(items: readonly T[]): void {\n this.formArray.clear(); // reset list\n this.addItems(items);\n }\n\n /**\n * Add given items to the list\n * Reproduces the model data loading the same way as it would be on a detail page (via AbstractDetail controller) but without resolving\n */\n public addItems(items: readonly T[]): void {\n items.forEach(item => {\n const completedItem = merge(this.service.getDefaultForServer(), item);\n const lineFormGroup = this.service.getFormGroup(completedItem);\n this.formArray.push(lineFormGroup);\n });\n\n this.dataSource.data = this.formArray.controls;\n }\n\n public removeAt(index: number): void {\n this.formArray.removeAt(index);\n this.dataSource.data = this.formArray.controls;\n }\n\n /**\n * Add empty item at the end of the list\n */\n public addEmpty(): void {\n this.addItems([{} as T]);\n }\n\n /**\n * Return a list of models without any treatment.\n *\n * To mutate models, it would be required to map them using :\n * - AbstractModelService.getInput()\n * - AbstractModelService.getPartialVariablesForCreation()\n * - AbstractModelService.getPartialVariablesForUpdate()\n * - some other required treatment.\n *\n * TODO return type is incorrect and should be closer to `Partial<T>[]` or an even looser type, because we don't really know what fields exists in the form. When we fix this, we should also remove type coercing in unit tests.\n */\n public getItems(): T[] {\n return this.formArray.getRawValue();\n }\n\n /**\n * Force the form validation.\n *\n * The valid state can then be read via `this.form.valid`\n */\n public validateForm(): void {\n validateAllFormControls(this.form);\n }\n}\n","import {Facet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection} from '../types/values';\n\n/**\n * Lookup a facet by its `name` and then by its `field`, or return null if not found\n */\nexport function getFacetFromSelection(\n facets: NaturalSearchFacets | null,\n selection: NaturalSearchSelection,\n): Facet | null {\n if (!facets) {\n return null;\n }\n\n return (\n facets.find(facet => facet.name != null && facet.name === selection.name) ||\n facets.find(facet => facet.field === selection.field) ||\n null\n );\n}\n\n/**\n * Deep clone a literal via JSON serializing/unserializing\n *\n * It will **not** work with:\n *\n * - functions (will be removed)\n * - `undefined` (will be removed)\n * - cyclic references (will crash)\n * - objects (will be converted to `{}`)\n */\nexport function deepClone<T>(obj: T extends undefined ? never : T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n","import {NaturalSearchSelection} from '../types/values';\nimport {formatIsoDate} from '../../../classes/utility';\n\n/**\n * Wrap the searched value by `%` SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: '%foo%'}}}\n */\nexport function wrapLike(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = '%' + selection.condition.like.value + '%';\n }\n\n return selection;\n}\n\n/**\n * Search by prefix using `%' SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo%'}}}\n */\nexport function wrapPrefix(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = selection.condition.like.value + '%';\n }\n\n return selection;\n}\n\n/**\n * Search by suffix using `%' SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: '%foo'}}}\n */\nexport function wrapSuffix(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = '%' + selection.condition.like.value;\n }\n\n return selection;\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * attribute \"field\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {myFieldName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByField(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'field');\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * attribute \"name\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {myConfigName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByName(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'name');\n}\n\nfunction replaceOperatorByAttribute(\n selection: NaturalSearchSelection,\n attribute: 'name' | 'field',\n): NaturalSearchSelection {\n const oldOperator = Object.keys(selection.condition)[0];\n\n const attributeValue = selection[attribute];\n if (!attributeValue) {\n throw new Error('Attribute cannot be empty. Most likely the configuration was wrong');\n }\n\n selection.condition[attributeValue] = selection.condition[oldOperator];\n delete selection.condition[oldOperator];\n\n return selection;\n}\n\n/**\n * Replace `\"today\"` and `\"tomorrow\"` by their real value right now.\n *\n * This transformer is applied automatically and should **not** be part\n * of Natural public API.\n *\n * So:\n *\n * {field: 'myFieldName', condition: {greater: {value: 'today'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {greater: {value: '2023-01-03'}}}\n */\nexport function replaceToday(selection: NaturalSearchSelection): NaturalSearchSelection {\n const date = new Date();\n const today = formatIsoDate(date);\n\n date.setDate(date.getDate() + 1);\n const tomorrow = formatIsoDate(date);\n\n // Transparently adapt exclusive/inclusive ranges for special \"today\" value.\n // Ideally this should be done in `TypeDateComponent`, like it is done for real date values. But unfortunately I\n // could not find a reasonable way to do that while still being able to reload a coherent GUI without showing\n // \"Demain\" somewhere in the GUI. And that is something we want to avoid, we only want to show either \"Aujourd'hui\"\n // or a real date. Otherwise, the human would start thinking with \"Demain\", and it would then need to be properly\n // supported which over/complexify the code, the GUI and the workflow.\n const condition = selection.condition;\n if (Object.keys(condition).length === 1) {\n if (condition.lessOrEqual?.value === 'today') {\n delete condition.lessOrEqual;\n condition.less = {value: 'tomorrow'};\n } else if (condition.greater?.value === 'today') {\n delete condition.greater;\n condition.greaterOrEqual = {value: 'tomorrow'};\n }\n }\n\n for (const key in condition) {\n const operator = condition[key];\n if (operator && 'value' in operator) {\n if (operator.value === 'today') {\n operator.value = today;\n } else if (operator.value === 'tomorrow') {\n operator.value = tomorrow;\n }\n }\n }\n\n return selection;\n}\n","import {ConfigurableFocusTrapFactory, FocusTrap} from '@angular/cdk/a11y';\nimport {BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal} from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n inject,\n InjectionToken,\n OnDestroy,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {MatButton} from '@angular/material/button';\n\nexport function throwMatDialogContentAlreadyAttachedError(): void {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n\nexport type NaturalDropdownContainerData = {\n showValidateButton: boolean;\n};\n\nexport const NATURAL_DROPDOWN_CONTAINER_DATA = new InjectionToken<NaturalDropdownContainerData>(\n 'NaturalDropdownContainerData',\n);\n\n/** Name of the enter animation `@keyframes`. */\nconst ENTER_ANIMATION = '_mat-menu-enter';\n\n/** Name of the exit animation `@keyframes`. */\nconst EXIT_ANIMATION = '_mat-menu-exit';\n\n@Component({\n imports: [CdkPortalOutlet, MatButton],\n templateUrl: './dropdown-container.component.html',\n styleUrl: './dropdown-container.component.scss',\n // eslint-disable-next-line @angular-eslint/use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n})\nexport class NaturalDropdownContainerComponent extends BasePortalOutlet implements OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n public readonly data = inject(NATURAL_DROPDOWN_CONTAINER_DATA);\n\n public readonly portalOutlet = viewChild.required(CdkPortalOutlet);\n\n public readonly closed = new Subject<void>();\n\n /** Current state of the panel animation. */\n protected panelAnimationState: 'void' | 'enter' = 'enter';\n\n private focusTrap: FocusTrap | null = null;\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n public ngOnDestroy(): void {\n this.closed.complete();\n }\n\n public close(): void {\n this.panelAnimationState = 'void';\n }\n\n public attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n return this.portalOutlet().attachTemplatePortal(portal);\n }\n\n public attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n const portalOutlet = this.portalOutlet();\n if (portalOutlet.hasAttached()) {\n throwMatDialogContentAlreadyAttachedError();\n }\n\n return portalOutlet.attachComponentPortal(portal);\n }\n\n /** Callback that is invoked when the panel animation completes. */\n protected onAnimationDone(state: string): void {\n const isExit = state === EXIT_ANIMATION;\n\n if (isExit || state === ENTER_ANIMATION) {\n if (isExit) {\n this.restoreFocus();\n this.closed.next();\n } else {\n this.trapFocus();\n }\n }\n }\n\n private trapFocus(): void {\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);\n }\n\n this.focusTrap.focusInitialElementWhenReady();\n }\n\n /** Restores focus to the element that was focused before the dialog opened. */\n private restoreFocus(): void {\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n }\n}\n","<div\n class=\"natural-dropdown-container\"\n role=\"menu\"\n tabindex=\"-1\"\n [class.mat-menu-panel-exit-animation]=\"panelAnimationState === 'void'\"\n (animationend)=\"onAnimationDone($event.animationName)\"\n (animationcancel)=\"onAnimationDone($event.animationName)\"\n>\n <div class=\"natural-dropdown-container-content\">\n <ng-template cdkPortalOutlet />\n </div>\n\n @if (data.showValidateButton) {\n <div class=\"natural-dropdown-validate-button\">\n <button color=\"primary\" matButton=\"filled\" i18n (click)=\"close()\">Valider</button>\n </div>\n }\n</div>\n","import {Subject} from 'rxjs';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownResult} from '../types/values';\nimport {NaturalDropdownContainerComponent} from './dropdown-container.component';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, Injector, StaticProvider} from '@angular/core';\n\nexport class NaturalDropdownRef {\n public readonly componentInstance: DropdownComponent;\n public readonly closed = new Subject<DropdownResult | undefined>();\n\n public constructor(\n private readonly dropdownContainer: NaturalDropdownContainerComponent,\n component: ComponentType<DropdownComponent>,\n customProviders: StaticProvider[],\n parentInjector: Injector,\n containerRef: ComponentRef<NaturalDropdownContainerComponent>,\n ) {\n // Customize injector to allow data and dropdown reference injection in component\n customProviders.push({provide: NaturalDropdownRef, useValue: this});\n const customInjector = Injector.create({providers: customProviders, parent: parentInjector});\n\n // Content (type component given in configuration)\n const componentPortal = new ComponentPortal(component, undefined, customInjector);\n const contentRef = containerRef.instance.attachComponentPortal(componentPortal);\n\n this.componentInstance = contentRef.instance;\n }\n\n public close(result?: DropdownResult): void {\n this.closed.next(result);\n this.closed.complete();\n this.dropdownContainer.close();\n }\n}\n","import {\n createFlexibleConnectedPositionStrategy,\n createOverlayRef,\n FlexibleConnectedPositionStrategy,\n OverlayConfig,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, ElementRef, inject, Injectable, InjectionToken, Injector, StaticProvider} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {\n NATURAL_DROPDOWN_CONTAINER_DATA,\n NaturalDropdownContainerComponent,\n NaturalDropdownContainerData,\n} from './dropdown-container.component';\nimport {NaturalDropdownRef} from './dropdown-ref';\nimport {DropdownComponent} from '../types/dropdown-component';\n\nexport type NaturalDropdownData<C = any> = {\n condition: FilterGroupConditionField | null;\n configuration: C;\n title?: string;\n};\n\nexport const NATURAL_DROPDOWN_DATA = new InjectionToken<NaturalDropdownData>('NaturalDropdownData');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDropdownService {\n private readonly injector = inject(Injector);\n\n public open(\n component: ComponentType<DropdownComponent>,\n connectedElement: ElementRef<HTMLElement>,\n customProviders: StaticProvider[],\n showValidateButton: boolean,\n ): NaturalDropdownRef {\n // Container data\n const containerData: NaturalDropdownContainerData = {\n showValidateButton: showValidateButton,\n };\n\n const injectionTokens: StaticProvider[] = [\n {\n provide: NATURAL_DROPDOWN_CONTAINER_DATA,\n useValue: containerData,\n },\n ];\n\n const containerInjector = Injector.create({providers: injectionTokens, parent: this.injector});\n\n // Container\n const overlayRef = createOverlayRef(this.injector, this.getOverlayConfig(connectedElement));\n const containerPortal = new ComponentPortal(NaturalDropdownContainerComponent, undefined, containerInjector);\n const containerRef: ComponentRef<NaturalDropdownContainerComponent> = overlayRef.attach(containerPortal);\n\n const dropdownContainer = containerRef.instance;\n const dropdownRef = new NaturalDropdownRef(\n dropdownContainer,\n component,\n customProviders,\n this.injector,\n containerRef,\n );\n\n const close = (): void => {\n if (dropdownRef.componentInstance.isValid() && dropdownRef.componentInstance.isDirty()) {\n dropdownRef.close({\n condition: dropdownRef.componentInstance.getCondition(),\n });\n } else {\n dropdownRef.close();\n }\n };\n\n // When parent closes, remove overlay from dom and update \"return\" valu\n dropdownContainer.closed.subscribe(() => {\n overlayRef.dispose();\n close();\n });\n\n // When click on backdrop, validate result.. ?\n overlayRef\n .backdropClick()\n .pipe(takeUntil(dropdownContainer.closed))\n .subscribe(() => dropdownContainer.close());\n\n return dropdownRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n */\n private getOverlayConfig(element: ElementRef<HTMLElement>): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this.getPosition(element),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n }\n\n private getPosition(element: ElementRef<HTMLElement>): FlexibleConnectedPositionStrategy {\n return createFlexibleConnectedPositionStrategy(this.injector, element)\n .withFlexibleDimensions(true)\n .withViewportMargin(30)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 10,\n },\n ]);\n }\n}\n","import {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\n\ntype PossibleNullableOperatorKeys = 'any' | 'none';\n\ntype PossibleNullableOperator = {\n key: PossibleNullableOperatorKeys;\n label: string;\n};\n\nconst possibleNullableOperators: readonly PossibleNullableOperator[] = [\n {\n key: 'any',\n label: $localize`avec`,\n },\n {\n key: 'none',\n label: $localize`sans`,\n },\n] as const;\n\nexport type PossibleComparableOperatorKeys =\n | keyof Pick<FilterGroupConditionField, 'less' | 'lessOrEqual' | 'equal' | 'greaterOrEqual' | 'greater'>\n | PossibleNullableOperatorKeys;\n\nexport type PossibleComparableOperator = {\n key: PossibleComparableOperatorKeys;\n label: string;\n};\n\nexport const possibleComparableOperators: readonly PossibleComparableOperator[] = [\n {\n key: 'less',\n label: '<',\n },\n {\n key: 'lessOrEqual',\n label: '≤',\n },\n {\n key: 'equal',\n label: '=',\n },\n {\n key: 'greaterOrEqual',\n label: '≥',\n },\n {\n key: 'greater',\n label: '>',\n },\n] as const;\n\nexport const possibleNullComparableOperators: readonly PossibleComparableOperator[] = [\n ...possibleComparableOperators,\n ...possibleNullableOperators,\n] as const;\n\nexport type PossibleDiscreteOperatorKeys = 'is' | 'isnot' | PossibleNullableOperatorKeys;\n\nexport type PossibleDiscreteOperator = {\n key: PossibleDiscreteOperatorKeys;\n label: string;\n};\n\nexport const possibleDiscreteOperators: readonly PossibleDiscreteOperator[] = [\n {\n key: 'is',\n label: $localize`est`,\n },\n {\n key: 'isnot',\n label: $localize`n'est pas`,\n },\n ...possibleNullableOperators,\n] as const;\n","import {DateAdapter} from '@angular/material/core';\nimport {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * Get only date, without time and ignoring entirely the timezone\n */\nexport function serialize<D>(dateAdapter: DateAdapter<D>, value: D | null): string {\n if (!value) {\n return '';\n }\n\n const y = dateAdapter.getYear(value);\n const m = dateAdapter.getMonth(value) + 1;\n const d = dateAdapter.getDate(value);\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Min date validator\n */\nexport function dateMin<D>(dateAdapter: DateAdapter<D>, min: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, min) < 0) {\n return {min: true};\n }\n\n return null;\n };\n}\n\n/**\n * Max date validator\n */\nexport function dateMax<D>(dateAdapter: DateAdapter<D>, max: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, max) > 0) {\n return {max: true};\n }\n\n return null;\n };\n}\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn, Validators} from '@angular/forms';\nimport {DateAdapter, MAT_DATE_FORMATS, MatOption} from '@angular/material/core';\nimport {BehaviorSubject, merge, startWith} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {\n type PossibleComparableOperator,\n PossibleComparableOperatorKeys,\n possibleComparableOperators,\n possibleNullComparableOperators,\n} from '../types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatCheckbox} from '@angular/material/checkbox';\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle} from '@angular/material/datepicker';\nimport {MatInput} from '@angular/material/input';\nimport {MatSelect} from '@angular/material/select';\nimport {MatError, MatFormField, MatLabel, MatSuffix} from '@angular/material/form-field';\n\nexport type TypeDateConfiguration<D = Date> = {\n min?: D | null;\n max?: D | null;\n /**\n * If true, two extra choices, \"avec\" and \"sans\", will be shown to filter by the (in-)existence of a value\n */\n nullable?: boolean;\n};\n\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatError,\n MatSuffix,\n MatSelect,\n MatOption,\n MatInput,\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatCheckbox,\n ],\n templateUrl: './type-date.component.html',\n styleUrl: './type-date.component.scss',\n})\nexport class TypeDateComponent<D = any> implements DropdownComponent {\n private dateAdapter = inject<DateAdapter<D>>(DateAdapter);\n private dateFormats = inject(MAT_DATE_FORMATS);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateConfiguration<D>>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOperatorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl<D | null>(null);\n public readonly todayCtrl = new FormControl(false);\n public requireValueCtrl = false;\n public readonly operators: readonly PossibleComparableOperator[];\n\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n today: this.todayCtrl,\n });\n\n private readonly defaults: Required<TypeDateConfiguration<D>> = {\n min: null,\n max: null,\n nullable: false,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeDateConfiguration<D>>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n this.operators = this.configuration.nullable ? possibleNullComparableOperators : possibleComparableOperators;\n\n this.todayCtrl.valueChanges.pipe(takeUntilDestroyed()).subscribe(isToday => {\n if (isToday) {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.valueCtrl.disable();\n } else {\n this.valueCtrl.enable();\n }\n });\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges, this.todayCtrl.valueChanges)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.renderedValue.next(this.getRenderedValue()));\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n let operator = this.operatorCtrl.value;\n if (operator === 'any') {\n return {null: {not: true}};\n } else if (operator === 'none') {\n return {null: {not: false}};\n } else if (!this.valueCtrl.value) {\n return {};\n }\n\n let date: string;\n let dayAfter: string;\n\n if (this.todayCtrl.value) {\n date = 'today';\n dayAfter = 'tomorrow';\n } else {\n date = serialize(this.dateAdapter, this.valueCtrl.value);\n dayAfter = serialize(this.dateAdapter, this.getDayAfter(this.valueCtrl.value));\n }\n\n if (operator === 'equal') {\n return {\n greaterOrEqual: {value: date},\n less: {value: dayAfter},\n };\n } else {\n // Transparently adapt exclusive/inclusive ranges\n if (date !== 'today') {\n if (operator === 'greater') {\n operator = 'greaterOrEqual';\n date = dayAfter;\n } else if (operator === 'lessOrEqual') {\n operator = 'less';\n date = dayAfter;\n }\n }\n\n return {[operator]: {value: date}};\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n // Special case for '='\n if (condition.greaterOrEqual && condition.less) {\n this.operatorCtrl.setValue('equal');\n this.setTodayOrDate(condition.greaterOrEqual.value);\n\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n this.setTodayOrDate(condition[operatorKey]?.value);\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleComparableOperatorKeys {\n if (condition.null?.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n } else {\n return this.operators.find(operator => condition[operator.key])?.key ?? 'equal';\n }\n }\n\n private setTodayOrDate(value: Scalar): void {\n if (value === 'today') {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.todayCtrl.setValue(true);\n } else {\n this.valueCtrl.setValue(this.dateAdapter.deserialize(value));\n this.todayCtrl.setValue(false);\n }\n }\n\n private initValidators(): void {\n const blacklist: PossibleComparableOperatorKeys[] = ['any', 'none'];\n this.requireValueCtrl = !blacklist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n if (this.configuration.min) {\n validators.push(dateMin(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax(this.dateAdapter, this.configuration.max));\n }\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private getDayAfter(date: D): D {\n return this.dateAdapter.addCalendarDays(this.dateAdapter.clone(date), 1);\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n\n let value = '';\n if (this.todayCtrl.value) {\n value = $localize`Aujourd'hui`;\n } else if (this.valueCtrl.value) {\n value = this.dateAdapter.format(this.valueCtrl.value, this.dateFormats.display.dateInput);\n }\n\n if (operator && ['any', 'none'].includes(operator.key)) {\n return operator.label;\n } else if (operator && value) {\n return operator.label + ' ' + value;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\" [class.nullable]=\"configuration.nullable\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (requireValueCtrl) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n>Date</mat-label>\n <input\n matInput\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"value\" />\n <mat-datepicker #value />\n @if (valueCtrl.hasError('min')) {\n <mat-error>< {{ configuration.min }}</mat-error>\n }\n @if (valueCtrl.hasError('max')) {\n <mat-error>> {{ configuration.max }}</mat-error>\n }\n @if (valueCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n </mat-form-field>\n\n <mat-checkbox i18n [formControl]=\"todayCtrl\">Aujourd'hui</mat-checkbox>\n }\n</form>\n","import {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection, NaturalSearchSelections} from '../types/values';\nimport {\n Filter,\n FilterGroup,\n FilterGroupCondition,\n FilterGroupConditionField,\n JoinOn,\n LogicalOperator,\n} from './graphql-doctrine.types';\nimport {deepClone, getFacetFromSelection} from './utils';\nimport {replaceToday} from './transformers';\nimport {TypeDateComponent, TypeDateConfiguration} from '../../dropdown-components/type-date/type-date.component';\n\nexport function toGraphQLDoctrineFilter(\n facets: NaturalSearchFacets | null,\n selections: NaturalSearchSelections | null,\n): Filter {\n selections = deepClone(selections);\n\n const filter: Filter = {};\n if (!selections || selections.length === 0) {\n selections = [[]];\n }\n\n for (const groupSelections of selections) {\n const group: FilterGroup = {};\n const neededInversedFlags = facets ? facets.filter(isInvertedFlag) : [];\n\n for (const selection of groupSelections) {\n const facet = getFacetFromSelection(facets, selection);\n const transformedSelection = transformSelection(facet, selection);\n\n // Skip inverted flag and remove it from needed inverted flags\n if (isInvertedFlag(facet)) {\n neededInversedFlags.splice(neededInversedFlags.indexOf(facet), 1);\n } else {\n applyJoinAndCondition(group, transformedSelection);\n }\n }\n\n for (const facet of neededInversedFlags) {\n const transformedSelection = transformSelection(facet, {\n field: facet.field,\n name: facet.name,\n condition: deepClone(facet.condition),\n });\n applyJoinAndCondition(group, transformedSelection);\n }\n\n addGroupToFilter(filter, group);\n }\n\n return filter;\n}\n\nfunction applyJoinAndCondition(group: FilterGroup, selection: NaturalSearchSelection): void {\n // Apply join, then apply operator on that join, if field name has a '.'\n const [joinedRelation, joinedField] = selection.field.split('.');\n let container;\n let wrappedCondition;\n if (joinedField) {\n container = addJoinToGroup(group, joinedRelation);\n wrappedCondition = wrapWithFieldName(joinedField, selection.condition);\n } else {\n container = group;\n wrappedCondition = wrapWithFieldName(selection.field, selection.condition);\n }\n\n addConditionToContainer(container, wrappedCondition);\n}\n\n/**\n * Only add join if it does not already exists\n */\nfunction addJoinToGroup(group: FilterGroup, joinedRelation: string): JoinOn {\n if (!group.joins) {\n group.joins = {};\n }\n\n if (!group.joins[joinedRelation]) {\n group.joins[joinedRelation] = {};\n }\n\n return group.joins[joinedRelation];\n}\n\n/**\n * Only add condition to group or join if it's valid\n */\nfunction addConditionToContainer(container: FilterGroup | JoinOn, condition: FilterGroupCondition): void {\n if (!condition) {\n return;\n }\n\n if (!container.conditions) {\n container.conditions = [];\n }\n\n container.conditions.push(condition);\n}\n\n/**\n * Only add the group if there is something meaningful\n */\nfunction addGroupToFilter(filter: Filter, group: FilterGroup): void {\n if (group.conditions || group.joins) {\n if (!filter.groups) {\n filter.groups = [];\n }\n\n filter.groups.push(group);\n\n if (filter.groups.length > 1) {\n group.groupLogic = LogicalOperator.OR;\n }\n }\n}\n\nfunction wrapWithFieldName(field: string, condition: FilterGroupConditionField): FilterGroupCondition {\n const result: FilterGroupCondition = {};\n\n // We assume a custom operator \"search\"\n if (field === 'search' && condition.like) {\n return {custom: {search: {value: condition.like.value}}};\n } else {\n result[field] = condition;\n }\n\n return result;\n}\n\nfunction transformSelection(facet: Facet | null, selection: NaturalSearchSelection): NaturalSearchSelection {\n const newSelection = facet?.transform ? facet.transform(selection) : selection;\n\n return isDateFacet(facet) ? replaceToday(newSelection) : selection;\n}\n\nfunction isInvertedFlag(facet: Facet | null): facet is FlagFacet<FilterGroupConditionField> {\n return (!!facet && 'inversed' in facet && facet.inversed) || false;\n}\n\nfunction isDateFacet(facet: Facet | null): facet is DropdownFacet<TypeDateConfiguration> {\n return !!facet && 'component' in facet && facet.component === TypeDateComponent;\n}\n","import {NaturalSearchSelections} from '../types/values';\nimport {deepClone} from './utils';\nimport {Literal} from '../../../types/types';\nimport {Params} from '@angular/router';\n\n/**\n * Returns a string representation of the selection that can be used in URL.\n *\n * The string can be parsed back with `fromUrl()`\n */\nexport function toUrl(selections: NaturalSearchSelections | null): string | null {\n if (!selections?.length) {\n return null;\n }\n\n const s = deepClone(selections);\n for (const a of s) {\n for (const b of a) {\n (b as Literal).f = b.field;\n (b as Literal).c = b.condition;\n\n delete (b as Literal).field;\n delete (b as Literal).condition;\n }\n }\n\n const result = JSON.stringify(s);\n\n return result === '[[]]' ? null : result;\n}\n\n/**\n * Parse a string, probably coming from URL, into a selection\n */\nexport function fromUrl(selections: string | null): NaturalSearchSelections {\n if (!selections?.length) {\n return [[]];\n }\n\n const result = JSON.parse(selections) as NaturalSearchSelections;\n\n for (const a of result) {\n for (const b of a) {\n b.field = (b as Literal).f;\n b.condition = (b as Literal).c;\n\n delete (b as Literal).f;\n delete (b as Literal).c;\n }\n }\n\n if (result.length === 0) {\n result.push([]);\n }\n\n return result;\n}\n\n/**\n * Transform a search selection to navigation parameters to be used in URL.\n *\n * This is typically useful to craft URL to pre-filtered lists.\n */\nexport function toNavigationParameters(selections: NaturalSearchSelections): Params {\n const value = toUrl(selections);\n\n return value ? {ns: JSON.stringify(value)} : {};\n}\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const SESSION_STORAGE = new InjectionToken<NaturalStorage>(\n 'Session storage that can be shimed when running on server or in tests',\n);\n\nexport const LOCAL_STORAGE = new InjectionToken<NaturalStorage>(\n 'Local storage that can be shimed when running on server or in tests',\n);\n\n/**\n * Normal `Storage` type, but without array access\n */\nexport type NaturalStorage = Pick<Storage, 'length' | 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem'>;\n\n/**\n * Memory storage to keep store volatile things in memory\n *\n * Should be used to shim sessionStorage when running on server or in our tests\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMemoryStorage implements NaturalStorage {\n private readonly data = new Map<string, string>();\n\n public get length(): number {\n return this.data.size;\n }\n\n public clear(): void {\n this.data.clear();\n }\n\n public getItem(key: string): string | null {\n const value = this.data.get(key);\n return value === undefined ? null : value;\n }\n\n public key(index: number): string | null {\n let i = 0;\n for (const key of this.data.keys()) {\n if (i++ === index) {\n return key;\n }\n }\n\n return null;\n }\n\n public removeItem(key: string): void {\n this.data.delete(key);\n }\n\n public setItem(key: string, value: string): void {\n this.data.set(key, value);\n }\n}\n\nexport function sessionStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof sessionStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return sessionStorage;\n }\n } catch (e) {\n // nothing do to\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `sessionStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `sessionStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const sessionStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: SESSION_STORAGE,\n useFactory: sessionStorageFactory,\n};\n\n/**\n * Provide in-memory session storage to be used only in tests or SSR\n */\nexport const memorySessionStorageProvider: Provider = {\n provide: SESSION_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n\nexport function localStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof localStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return localStorage;\n }\n } catch (e) {\n // Do nothing\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `localStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `localStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const localStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: LOCAL_STORAGE,\n useFactory: localStorageFactory,\n};\n\n/**\n * Provide in-memory local storage to be used only in tests or SSR\n */\nexport const memoryLocalStorageProvider: Provider = {\n provide: LOCAL_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n","import {inject, Injectable, InjectionToken} from '@angular/core';\nimport {ActivatedRoute, NavigationExtras, Router} from '@angular/router';\nimport {clone} from 'es-toolkit';\nimport {SESSION_STORAGE} from '../modules/common/services/memory-storage';\n\n/**\n * Validator for persisted values retrieved from NaturalPersistenceService. If returns false, the persisted value\n * will be ignored, and instead `null` will be returned.\n *\n * `storageKey` is only given if the value is coming from session storage (and not from URL).\n */\nexport type PersistenceValidator = (key: string, storageKey: string | null, value: unknown) => boolean;\n\nexport const NATURAL_PERSISTENCE_VALIDATOR = new InjectionToken<PersistenceValidator>(\n 'Validator for persisted value retrieved from NaturalPersistenceService. If returns false, the persisted value will never be returned.',\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPersistenceService {\n private readonly router = inject(Router);\n private readonly sessionStorage = inject(SESSION_STORAGE);\n private readonly isValid = inject(NATURAL_PERSISTENCE_VALIDATOR, {optional: true}) ?? (() => true); // By default, anything is valid\n\n /**\n * Persist in url and local storage the given value with the given key.\n * When stored in storage, we need more \"key\" to identify the controller.\n */\n public persist(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n storageKey: string,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n this.persistInStorage(key, value, storageKey);\n return this.persistInUrl(key, value, route, navigationExtras);\n }\n\n /**\n * Return object with persisted data in url or in session storage\n * Url has priority over session storage because of url sharing. When url is provided, session storage is ignored.\n * Url and storage are synced when arriving in a component :\n * - When loading with url parameters, storage is updated to stay synced\n * - When loading without url, but with storage data, the url is updated\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public get(key: string, route: ActivatedRoute, storageKey: string): any | null {\n // From url\n let params = this.getFromUrl(key, route);\n if (!this.isFalseyValue(params)) {\n this.persistInStorage(key, params, storageKey);\n return params;\n }\n\n // From storage\n params = this.getFromStorage(key, storageKey);\n if (!this.isFalseyValue(params)) {\n this.persistInUrl(key, params, route);\n return params;\n }\n\n return null;\n }\n\n /**\n * Get given key from the url parameters\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public getFromUrl(key: string, route: ActivatedRoute): any | null {\n const value = route.snapshot.paramMap.get(key);\n\n return this.deserialize(key, null, value);\n }\n\n /**\n * Add/override given pair key-value in the url\n * Always JSON.stringify() the given value\n * If the value is falsey, the pair key-value is removed from the url.\n */\n public persistInUrl(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n const params = clone(route.snapshot.url[route.snapshot.url.length - 1].parameters);\n\n if (this.isFalseyValue(value)) {\n delete params[key];\n } else {\n params[key] = JSON.stringify(value);\n }\n\n navigationExtras = Object.assign(navigationExtras || {}, {relativeTo: route});\n\n return this.router.navigate(['.', params], navigationExtras);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public getFromStorage(key: string, storageKey: string): any | null {\n const value = this.sessionStorage.getItem(this.getStorageKey(key, storageKey));\n\n return this.deserialize(key, storageKey, value);\n }\n\n /**\n * Store value in session storage.\n * If value is falsy, the entry is removed\n */\n public persistInStorage(key: string, value: unknown, storageKey: string): void {\n if (this.isFalseyValue(value)) {\n this.sessionStorage.removeItem(this.getStorageKey(key, storageKey));\n } else {\n this.sessionStorage.setItem(this.getStorageKey(key, storageKey), JSON.stringify(value));\n }\n }\n\n private getStorageKey(key: string, storageKey: string): string {\n return storageKey + '-' + key;\n }\n\n // Returns if the given value is falsey\n // Falsey values are : null, undefined and empty string.\n // This cause usually the parameter to be removed from url/storage instead of being stored with no value. Url would be polluted.\n private isFalseyValue(value: unknown): boolean {\n return value == null || value === ''; // == means null or undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n private deserialize(key: string, storageKey: string | null, value: string | null): unknown | null {\n if (!value) {\n return null;\n }\n\n let result = null;\n try {\n result = JSON.parse(value);\n } catch (e) {\n // noop\n }\n\n return this.isValid(key, storageKey, result) ? result : null;\n }\n}\n","import {DataSource} from '@angular/cdk/collections';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {Literal} from '../types/types';\n\nexport type PaginatedData<T> = {\n readonly items: readonly T[];\n readonly offset?: number | null;\n readonly pageSize: number;\n readonly pageIndex: number;\n readonly length: number;\n};\n\n/**\n * A NaturalDataSource will connect immediately, in order to know as soon as possible if\n * we need to show a template at all (as seen in my-ichtus)\n *\n * It also allow some extra data manipulation\n */\nexport class NaturalDataSource<T extends PaginatedData<Literal> = PaginatedData<Literal>> extends DataSource<\n T['items'][0]\n> {\n private readonly ngUnsubscribe = new Subject<void>();\n\n private readonly internalData: BehaviorSubject<T | null>;\n\n public constructor(value: Observable<T> | T) {\n super();\n\n if (value instanceof Observable) {\n this.internalData = new BehaviorSubject<T | null>(null);\n value.pipe(takeUntil(this.ngUnsubscribe)).subscribe(res => (this.data = res));\n } else {\n this.internalData = new BehaviorSubject<T | null>(value);\n }\n }\n\n public get internalDataObservable(): Observable<T | null> {\n return this.internalData;\n }\n\n /**\n * Array of data that should be rendered by the table, where each object represents one row.\n */\n public get data(): T | null {\n return this.internalData.value;\n }\n\n public set data(data: T | null) {\n this.internalData.next(data);\n }\n\n public connect(): Observable<T['items']> {\n return this.internalData.pipe(\n takeUntil(this.ngUnsubscribe),\n map(data => (data ? data.items : [])),\n );\n }\n\n public disconnect(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n\n public push(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n fullList.push(item);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n\n public pop(): T['items'][0] | undefined {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n const removedElement = fullList.pop();\n this.data = {...this.data, items: fullList, length: fullList.length};\n\n return removedElement;\n }\n\n public remove(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const index = this.data.items.indexOf(item);\n if (index > -1) {\n const fullList = [...this.data.items];\n fullList.splice(index, 1);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n }\n}\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {Directive, inject, Input, OnInit} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {PageEvent} from '@angular/material/paginator';\nimport {Sort} from '@angular/material/sort';\nimport {ActivatedRoute, Data, NavigationExtras, Router} from '@angular/router';\nimport {defaults, isEmpty, pick} from 'es-toolkit/compat';\nimport {isEqual} from 'es-toolkit';\nimport {Observable, Subject} from 'rxjs';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {AvailableColumn} from '../modules/columns-picker/types';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {toGraphQLDoctrineFilter} from '../modules/search/classes/graphql-doctrine';\nimport {fromUrl, toUrl} from '../modules/search/classes/url';\nimport {NaturalSearchFacets} from '../modules/search/types/facet';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalPersistenceService} from '../services/persistence.service';\nimport {ExtractTall, ExtractVall, Literal} from '../types/types';\nimport {NavigableItem} from './abstract-navigable-list';\nimport {NaturalDataSource, PaginatedData} from './data-source';\nimport {\n NaturalQueryVariablesManager,\n PaginationInput,\n QueryVariables,\n Sorting,\n SortingOrder,\n} from './query-variable-manager';\nimport {onHistoryEvent, validateColumns, validatePagination, validateSorting} from './utility';\n\ntype MaybeNavigable = Literal | NavigableItem<Literal>;\n\nfunction unwrapNavigable(item: MaybeNavigable): Literal {\n if ('item' in item && 'hasNavigation' in item) {\n return item.item;\n }\n\n return item;\n}\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * Components inheriting from this class can be used as standalone with input attributes.\n *\n * Usage :\n *\n * ```html\n * <natural-my-listing [forcedVariables]=\"{filter:...}\" [selectedColumns]=\"['col1']\" [persistSearch]=\"false\">\n * ```\n */\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // In most case this should not be specified by inheriting classes.\n // It should only be specified to override default if the service items are\n // mapped to a different structure like in NaturalAbstractNavigableList\n Tall extends PaginatedData<MaybeNavigable> = ExtractTall<TService>,\n >\n extends NaturalAbstractPanel\n implements OnInit\n{\n /**\n * Whether search should be loaded from url/storage and persisted in it too.\n */\n @Input() public persistSearch = true;\n\n /**\n * List of columns that are available to the end-user to select from, via `<natural-columns-picker>`\n */\n @Input() public availableColumns: AvailableColumn[] = [];\n\n /**\n * Columns list after interaction with `<natural-columns-picker>`\n */\n public columnsForTable: string[] = [];\n\n /**\n * The default column selection that automatically happened after `<natural-columns-picker>` initialization\n */\n private defaultSelectedColumns: string[] | null = null;\n\n /**\n * Visible (checked) columns\n *\n * Instead of using this, you should consider correctly configuring `AvailableColumn.checked`.\n */\n @Input() public selectedColumns?: string[];\n\n /**\n * Source of the list\n */\n public dataSource: NaturalDataSource<Tall> | undefined;\n\n /**\n * Selection for bulk actions\n */\n public readonly selection = new SelectionModel<ExtractTall<TService>['items'][0]>(true, []);\n\n /**\n * Next executed action from bulk menu\n */\n public bulkActionSelected: string | null = null;\n\n /**\n * Centralisation of query variables\n */\n public variablesManager: NaturalQueryVariablesManager<ExtractVall<TService>> = new NaturalQueryVariablesManager<\n ExtractVall<TService>\n >();\n\n /**\n * Configuration for natural-search facets\n */\n public naturalSearchFacets: NaturalSearchFacets = [];\n\n /**\n * Result of a search (can be provided as input for initialisation)\n */\n public naturalSearchSelections: NaturalSearchSelections = [[]];\n\n /**\n * Data attribute provided by activated route snapshot\n */\n public routeData?: Data;\n\n /**\n * List of page sizes\n */\n public readonly pageSizeOptions = [5, 25, 50, 100, 200];\n\n /**\n * Initial pagination setup\n */\n protected defaultPagination: Required<PaginationInput> = {\n offset: null,\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Initial sorting\n */\n protected defaultSorting?: Sorting[];\n\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly alertService = inject(NaturalAlertService);\n protected readonly persistenceService = inject(NaturalPersistenceService);\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public constructor(public readonly service: TService) {\n super();\n }\n\n /**\n * Variables that are always forced on a list, in addition to whatever the end-user might select\n */\n @Input()\n public set forcedVariables(variables: QueryVariables | null | undefined) {\n if (variables) {\n this.applyForcedVariables(variables);\n }\n }\n\n /**\n * If change, check DocumentsComponent that overrides this function without calling super.ngOnInit().\n */\n public ngOnInit(): void {\n this.routeData = this.route.snapshot.data;\n\n this.initFromRoute();\n this.initFromPersisted();\n\n this.variablesManager.defaults('pagination', {pagination: this.defaultPagination} as ExtractVall<TService>);\n this.variablesManager.defaults('sorting', {sorting: this.defaultSorting} as ExtractVall<TService>);\n\n this.dataSource = new NaturalDataSource<Tall>(this.getDataObservable());\n this.selection.clear();\n\n this.handleHistoryNavigation();\n }\n\n protected handleHistoryNavigation(): void {\n onHistoryEvent(this.router)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const selections = fromUrl(this.persistenceService.getFromUrl('ns', this.route));\n this.naturalSearchSelections = selections;\n this.search(selections);\n });\n }\n\n /**\n * Persist search and then launch whatever is required to refresh the list\n */\n public search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // Reset page index to restart the pagination (preserve pageSize)\n\n if (resetPagination) {\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n }\n\n // Persist if activated\n // Two parallel navigations conflict. We first persist the search, then the pagination\n if (this.persistSearch && !this.isPanel) {\n const promise = this.persistenceService.persist(\n 'ns',\n toUrl(naturalSearchSelections),\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise, navigationExtras);\n }\n\n this.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n /**\n * Change sorting variables for query and persist the new value in url and local storage\n * The default value is not persisted\n * @param sortingEvents List of material sorting events\n */\n public sorting(sortingEvents: (Sort & Partial<Pick<Sorting, 'nullAsHighest' | 'emptyStringAsHighest'>>)[]): void {\n // Reset page index to restart the pagination (preserve pageSize)\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n\n // Preserve only sorting events with direction and convert into natural/graphql Sorting type\n let sorting: Sorting[] = sortingEvents\n .filter(e => !!e.direction)\n .map(sortingEvent => {\n const s: Sorting = {\n field: sortingEvent.active,\n };\n\n if (sortingEvent.direction === 'asc') {\n s.order = SortingOrder.ASC;\n } else if (sortingEvent.direction === 'desc') {\n s.order = SortingOrder.DESC;\n }\n\n if ('nullAsHighest' in sortingEvent) {\n s.nullAsHighest = sortingEvent.nullAsHighest;\n }\n\n if ('emptyStringAsHighest' in sortingEvent) {\n s.emptyStringAsHighest = sortingEvent.emptyStringAsHighest;\n }\n\n return s;\n });\n\n // Empty sorting fallbacks on default\n if (sorting.length === 0 && this.defaultSorting) {\n sorting = this.defaultSorting;\n }\n\n // Set sorting as search variable\n this.variablesManager.set('sorting', {sorting: sorting} as ExtractVall<TService>);\n\n if (this.persistSearch && !this.isPanel) {\n // If sorting is equal to default sorting, nullify it to remove from persistence (url and session storage)\n const promise = this.persistenceService.persist(\n 'so',\n isEqual(sorting, this.defaultSorting) ? null : sorting,\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise);\n }\n }\n\n /**\n * Return current pagination, either the user defined one, or the default one\n */\n protected getPagination(): PaginationInput {\n const paginationChannel: Partial<ExtractVall<TService>> | undefined = this.variablesManager.get('pagination');\n\n if (paginationChannel?.pagination) {\n // The cast should not be necessary because Typescript correctly narrow down the type to `PaginationInput`\n // but somehow still get confused when returning it\n return paginationChannel.pagination;\n }\n\n return this.defaultPagination;\n }\n\n /**\n * Change pagination variables for query and persist in url and local storage the new value\n * The default value not persisted\n *\n * @param event Natural or Paginator PageEvent\n * @param defer Promise (usually a route promise) that defers the redirection from this call to prevent route navigation collision\n * @param navigationExtras Angular router navigation options. Is relevant only if persistSearch is true\n */\n public pagination(\n event: PaginationInput | PageEvent,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n let pagination: PaginationInput = this.defaultPagination;\n let forPersistence: PaginationInput | null = null;\n\n // Convert to natural/graphql format, adding missing attributes\n let naturalEvent: PaginationInput = pick(event, Object.keys(this.defaultPagination)); // object with only PaginationInput attributes\n naturalEvent = defaults(naturalEvent, this.defaultPagination); // Default with controller values\n\n if (!isEqual(naturalEvent, this.defaultPagination)) {\n pagination = forPersistence = naturalEvent;\n }\n\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n\n this.persistPagination(forPersistence, defer, navigationExtras);\n }\n\n protected persistPagination(\n pagination: PaginationInput | null,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n if (this.persistSearch && !this.isPanel) {\n // Declare persist function\n const persist = (value: PaginationInput | null): Promise<boolean> =>\n this.persistenceService.persist('pa', value, this.route, this.getStorageKey(), navigationExtras);\n\n // Call function directly or when promise is resolved\n if (defer) {\n defer.then(() => persist(pagination));\n } else {\n persist(pagination);\n }\n }\n }\n\n /**\n * Selects all rows if they are not all selected; otherwise clear selection\n */\n public masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n this.selection.select(unwrapped);\n }\n });\n }\n }\n\n /**\n * Whether the number of selected elements matches the total number of rows\n */\n public isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n let numRows = 0;\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n numRows++;\n }\n });\n\n return numSelected === numRows;\n }\n\n /**\n * Called when a bulk action is selected\n */\n public bulkAction(): void {\n if (!this.bulkActionSelected) {\n throw new Error('Trying to execute a bulk action without selecting one');\n }\n\n if (!(this.bulkActionSelected in this)) {\n throw new Error('Trying to execute a bulk action that does not exist: ' + this.bulkActionSelected);\n }\n\n (this as any)[this.bulkActionSelected]();\n }\n\n /**\n * In non-panel context, header is always visible.\n * In panel context, header is hidden when no results.\n */\n public showHeader(): boolean {\n return !this.isPanel || (this.isPanel && this.showTable());\n }\n\n /**\n * Search is visible in most cases, but hidden on a panel\n */\n public showSearch(): boolean {\n return !this.isPanel;\n }\n\n /**\n * Table should be shown only when there is data\n */\n public showTable(): boolean {\n return !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length > 0;\n }\n\n /**\n * No results is shown when there is no items, but only in non-panel context only.\n * In panels we want discrete mode, there is no search and no \"no-results\"\n */\n public showNoResults(): boolean {\n return !this.isPanel && !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length === 0;\n }\n\n /**\n * Initialize from route.\n *\n * Uses data provided by router such as:\n *\n * - `route.data.forcedVariables`\n * - `route.data.availableColumns`\n * - `route.data.selectedColumns`\n */\n protected initFromRoute(): void {\n // Variables\n if (this.route.snapshot.data.forcedVariables) {\n this.applyForcedVariables(this.route.snapshot.data.forcedVariables);\n }\n\n // Available columns\n if (this.route.snapshot.data.availableColumns) {\n this.availableColumns = this.route.snapshot.data.availableColumns;\n }\n\n // Columns\n if (this.route.snapshot.data.selectedColumns) {\n this.selectedColumns = this.route.snapshot.data.selectedColumns;\n }\n }\n\n protected getDataObservable(): Observable<Tall> {\n // Here the casting is a bit unfortunate but required because NaturalAbstractNavigableList\n // breaks the data structure convention (by wrapping items in a structure). Ideally we should remove\n // the casting and resolve things in a better way, but that's too much work for now\n return this.service\n .watchAll(this.variablesManager as unknown as any)\n .pipe(takeUntilDestroyed(this.destroyRef)) as unknown as Observable<Tall>;\n }\n\n protected initFromPersisted(): void {\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n const storageKey = this.getStorageKey();\n\n // Pagination : pa\n const pagination = validatePagination(this.persistenceService.get('pa', this.route, storageKey));\n if (pagination) {\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n }\n\n // Sorting : so\n const sorting = validateSorting(this.persistenceService.get('so', this.route, storageKey));\n if (sorting) {\n this.variablesManager.set('sorting', {sorting} as ExtractVall<TService>);\n }\n\n // Columns\n const persistedColumns = validateColumns(this.persistenceService.get('col', this.route, storageKey));\n if (persistedColumns) {\n this.selectedColumns = persistedColumns;\n }\n\n // Natural search : ns\n this.naturalSearchSelections = fromUrl(this.persistenceService.get('ns', this.route, storageKey));\n this.translateSearchAndRefreshList(this.naturalSearchSelections, true);\n }\n\n protected translateSearchAndRefreshList(\n naturalSearchSelections: NaturalSearchSelections,\n ignoreEmptyFilter = false,\n ): void {\n const filter = toGraphQLDoctrineFilter(this.naturalSearchFacets, naturalSearchSelections);\n\n if (ignoreEmptyFilter && isEmpty(filter)) {\n return;\n }\n\n this.variablesManager.set('natural-search', {filter} as ExtractVall<TService>);\n }\n\n /**\n * Return current url excluding last route parameters;\n */\n protected getStorageKey(): string {\n const urlTree = this.router.parseUrl(this.router.url);\n urlTree.root.children.primary.segments[urlTree.root.children.primary.segments.length - 1].parameters = {};\n return urlTree.toString();\n }\n\n protected bulkdDeleteConfirmation(): Observable<boolean | undefined> {\n return this.alertService.confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement les éléments sélectionnés ?`,\n $localize`Supprimer définitivement`,\n );\n }\n\n /**\n * Delete multiple items at once\n */\n protected bulkDelete(): Observable<void> {\n const subject = new Subject<void>();\n this.bulkdDeleteConfirmation().subscribe(confirmed => {\n this.bulkActionSelected = null;\n if (confirmed) {\n // Assume that our objects have ID. This is true in almost all cases. But if\n // it is not, like AttributeReportComponent, then the inheriting class must\n // never call this method.\n const selection = this.selection.selected as {id: string}[];\n\n this.service.delete(selection).subscribe(() => {\n this.selection.clear();\n this.alertService.info($localize`Supprimé`);\n subject.next();\n subject.complete();\n });\n }\n });\n\n return subject;\n }\n\n private applyForcedVariables(variables: QueryVariables): void {\n if (variables.filter) {\n this.variablesManager.set('forced-filter', {filter: variables.filter} as ExtractVall<TService>);\n }\n\n if (variables.pagination) {\n this.variablesManager.set('pagination', {pagination: variables.pagination} as ExtractVall<TService>);\n }\n\n if (variables.sorting) {\n this.variablesManager.set('sorting', {sorting: variables.sorting} as ExtractVall<TService>);\n }\n }\n\n public selectColumns(columns: string[]): void {\n this.columnsForTable = columns;\n\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n // The first selection we receive is the default one made by `<natural-columns-picker>`\n if (!this.defaultSelectedColumns) {\n this.defaultSelectedColumns = columns;\n } else {\n // Persist only if wanted columns are different from default selection\n const value = isEqual(this.defaultSelectedColumns, columns) ? null : columns.join(',');\n this.persistenceService.persist('col', value, this.route, this.getStorageKey());\n }\n }\n}\n","import {Directive, input, OnInit} from '@angular/core';\nimport {NavigationExtras, RouterLink} from '@angular/router';\nimport {map} from 'rxjs/operators';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalAbstractList} from './abstract-list';\nimport {PaginatedData} from './data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTall, ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {first, Observable} from 'rxjs';\nimport {FilterGroupCondition} from '../modules/search/classes/graphql-doctrine.types';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\ntype BreadcrumbItem = {\n id: string;\n name: string;\n} & Literal;\n\nexport type NavigableItem<T> = {\n item: T;\n hasNavigation: boolean;\n};\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractNavigableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<{id: string}>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends NaturalAbstractList<TService, PaginatedData<NavigableItem<ExtractTall<TService>['items'][0]>>>\n implements OnInit\n{\n /**\n * Name of filter for child items to access ancestor item\n */\n public readonly ancestorRelationName = input('parent');\n\n private oldAncertorId: string | null = null;\n\n public breadcrumbs: BreadcrumbItem[] = [];\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public constructor(service: TService) {\n super(service);\n }\n\n public override ngOnInit(): void {\n // In fact, \"na\" and \"ns\" key may exist at the same time in url (but shouldn't).\n // When this happens, on page reload, search is priority.\n // \"na\" is a trailing param, and should be considered only when there is no search\n this.route.params.subscribe(params => {\n // \"ns\" stands for natural-search to be shorter in url\n if (params.ns) {\n return;\n }\n\n let navigationConditionValue: FilterGroupCondition | null = null;\n\n // \"na\" stands for \"navigation\" (relation) in url\n if (params.na) {\n navigationConditionValue = {have: {values: [params.na]}};\n this.service.getOne(params.na).subscribe(\n // TODO casting should disappear and instead this class should enforce\n // the service to support Tone with a new generic\n (ancestor: BreadcrumbItem) => (this.breadcrumbs = this.getBreadcrumb(ancestor)),\n );\n\n const hasAncestorChanged = params.na !== this.oldAncertorId;\n this.oldAncertorId = params.na;\n this.clearSearch(hasAncestorChanged);\n } else {\n navigationConditionValue = {empty: {}};\n this.breadcrumbs = [];\n }\n\n const condition: Literal = {};\n condition[this.ancestorRelationName()] = navigationConditionValue;\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n // todo : check why without \"as Vall\" it errors. Vall is supposed to be QueryVariables, and filter too.\n this.variablesManager.set('navigation', variables as ExtractVall<TService>);\n });\n\n super.ngOnInit();\n }\n\n protected override getDataObservable(): Observable<PaginatedData<NavigableItem<ExtractTallOne<TService>>>> {\n return this.service.watchAll(this.variablesManager as unknown as any).pipe(\n takeUntilDestroyed(this.destroyRef),\n map(result => {\n // On each data arriving, we query children count to show/hide chevron\n const navigableItems: NavigableItem<ExtractTallOne<TService>>[] = result.items.map(item => {\n const navigableItem: NavigableItem<ExtractTallOne<TService>> = {\n item: item as ExtractTallOne<TService>,\n hasNavigation: false,\n };\n\n const condition: Literal = {};\n condition[this.ancestorRelationName()] = {have: {values: [item.id]}};\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n this.service\n .count(qvm)\n .pipe(first())\n .subscribe(count => (navigableItem.hasNavigation = count > 0));\n\n return navigableItem;\n });\n\n const navigableResult: PaginatedData<NavigableItem<ExtractTallOne<TService>>> = {\n ...result,\n items: navigableItems,\n };\n\n return navigableResult;\n }),\n );\n }\n\n protected override translateSearchAndRefreshList(naturalSearchSelections: NaturalSearchSelections): void {\n // Clear navigation filter if there is a search\n if (naturalSearchSelections.some(s => s.length)) {\n this.variablesManager.set('navigation', null);\n this.breadcrumbs = [];\n }\n\n super.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n public clearSearch(resetPagination = true): void {\n this.naturalSearchSelections = [[]];\n super.search([[]], undefined, resetPagination);\n this.persistenceService.persistInStorage('ns', null, this.getStorageKey());\n }\n\n public override search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // na stands for navigation\n this.persistenceService.persistInUrl('na', null, this.route).then(() => {\n super.search(naturalSearchSelections, navigationExtras, resetPagination);\n });\n }\n\n /**\n * Return an array for router link usage\n */\n public getChildLink(ancestor: {id: string} | null): RouterLink['routerLink'] {\n if (ancestor?.id) {\n return ['.', {na: ancestor.id}];\n } else {\n return ['.', {}];\n }\n }\n\n /**\n * Depth is limited by queries\n * @param item with an ancestor relation (must match ancestorRelationName attribute)\n */\n protected getBreadcrumb(item: BreadcrumbItem): BreadcrumbItem[] {\n const ancestor = item[this.ancestorRelationName()];\n if (ancestor) {\n return this.getBreadcrumb(ancestor).concat([item]);\n }\n\n return [item];\n }\n}\n","import {ApolloLink, DocumentNode} from '@apollo/client/core';\nimport {formatIsoDateTime, isFile} from './utility';\nimport {HttpBatchLink, HttpLink, Options} from 'apollo-angular/http';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport extractFiles from 'extract-files/extractFiles.mjs';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport isExtractableFile from 'extract-files/isExtractableFile.mjs';\nimport {Kind, OperationTypeNode} from 'graphql/language';\n\n/**\n * Detect if the given variables have a file to be uploaded or not, and\n * also convert date to be serialized with their timezone.\n */\nexport function hasFilesAndProcessDate(variables: unknown): boolean {\n let fileFound = false;\n if (!variables || typeof variables !== 'object') {\n return false;\n }\n\n Object.values(variables).forEach(value => {\n if (value instanceof Date) {\n // Replace native toJSON() function by our own implementation\n value.toJSON = () => formatIsoDateTime(value);\n }\n\n if (isFile(value)) {\n fileFound = true;\n }\n\n if (hasFilesAndProcessDate(value)) {\n fileFound = true;\n }\n });\n\n return fileFound;\n}\n\n/**\n * Whether the given GraphQL document contains at least one mutation\n */\nexport function isMutation(query: DocumentNode): boolean {\n return query.definitions.some(\n definition =>\n definition.kind === Kind.OPERATION_DEFINITION && definition.operation === OperationTypeNode.MUTATION,\n );\n}\n\nexport const naturalExtractFiles: NonNullable<Options['extractFiles']> = body => extractFiles(body, isExtractableFile);\n\n/**\n * Create an Apollo link that supports batched queries and file uploads.\n *\n * File uploads and mutations are never batched.\n */\nexport function createHttpLink(httpLink: HttpLink, httpBatchLink: HttpBatchLink, options: Options): ApolloLink {\n // If the query has no file, batch it, otherwise upload only that query\n return ApolloLink.split(\n operation => hasFilesAndProcessDate(operation.variables) || isMutation(operation.query),\n httpLink.create({\n ...options,\n useMultipart: true,\n extractFiles: naturalExtractFiles,\n }),\n httpBatchLink.create(options),\n );\n}\n","import {map, MonoTypeOperatorFunction, Observable, take, takeUntil, tap, timer} from 'rxjs';\nimport {DestroyRef} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Behave like setTimeout(), but with a mandatory cancel mechanism.\n *\n * This is typically useful to replace setTimeout() in components where the callback\n * would crash if executed after the component destruction. That can easily happen\n * when the user navigates quickly between pages.\n *\n * Typical usage in a component would be:\n *\n * ```ts\n * cancellableTimeout(inject(DestroyRef)).subscribe(myCallback);\n * ```\n *\n * or\n *\n * ```ts\n * cancellableTimeout(this.ngUnsubscribe).subscribe(myCallback);\n * ```\n *\n * Instead of the more error-prone:\n *\n * ```ts\n * public foo(): void {\n * this.timeout = setTimeout(myCallBack);\n * }\n *\n * public ngOnDestroy(): void {\n * if (this.timeout) {\n * clearTimeout(this.timeout);\n * this.timeout = null;\n * }\n * }\n * ```\n */\nexport function cancellableTimeout(canceller: Observable<unknown> | DestroyRef, milliSeconds = 0): Observable<void> {\n return timer(milliSeconds).pipe(\n take(1),\n canceller instanceof DestroyRef ? takeUntilDestroyed(canceller) : takeUntil(canceller),\n map(() => undefined),\n );\n}\n\n/**\n * For debugging purpose only, will dump in console everything that happen to\n * the observable\n */\nexport function debug<T>(debugName: string): MonoTypeOperatorFunction<T> {\n return tap<T>({\n subscribe: () => console.log('SUBSCRIBE', debugName),\n unsubscribe: () => console.log('UNSUBSCRIBE', debugName),\n next: value => console.log('NEXT', debugName, value),\n error: error => console.log('ERROR', debugName, error),\n complete: () => console.log('COMPLETE', debugName),\n });\n}\n","import {inject, Injectable, PLATFORM_ID, signal} from '@angular/core';\nimport {GraphQLFormattedError} from 'graphql';\nimport {HttpInterceptorFn} from '@angular/common/http';\nimport {finalize} from 'rxjs';\nimport {isPlatformBrowser} from '@angular/common';\n\ntype ProgressBar = {\n start: () => void;\n complete: () => void;\n};\n\n/**\n * Intercept HTTP request from Angular to show them as activity\n */\nexport const activityInterceptor: HttpInterceptorFn = (req, next) => {\n const networkActivityService = inject(NetworkActivityService);\n networkActivityService.increase();\n\n return next(req).pipe(finalize(() => networkActivityService.decrease()));\n};\n\n/**\n * Singleton to track pending XHR and XHR errors in the whole application.\n *\n * You must:\n *\n * - start the tracking by calling `setProgressRef()`\n * - provide the HTTP interceptor `activityInterceptor`\n *\n * The tracking will be entirely disabled for SSR.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NetworkActivityService {\n private progress: ProgressBar | null = null;\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /**\n * Count pending requests\n */\n private pending = 0;\n\n private readonly writableErrors = signal<GraphQLFormattedError[]>([]);\n\n /**\n * GraphQL errors that happened recently\n */\n public readonly errors = this.writableErrors.asReadonly();\n\n public setProgressRef(progressBar: ProgressBar): void {\n this.progress = progressBar;\n }\n\n /**\n * Notify an XHR started\n */\n public increase(): void {\n if (!this.isBrowser) {\n return;\n }\n\n if (this.pending === 0) {\n this.progress?.start();\n }\n\n this.pending++;\n }\n\n /**\n * Notify an XHR ended (even if unsuccessful)\n */\n public decrease(): void {\n if (!this.isBrowser) {\n return;\n }\n\n this.pending--;\n if (this.pending < 0) {\n this.pending = 0;\n }\n\n // Mark progress a completed, after waiting 20ms in case a refetchQueries would be used\n if (this.pending === 0) {\n setTimeout(() => {\n if (this.pending === 0) {\n this.progress?.complete();\n }\n }, 20);\n }\n }\n\n /**\n * Add new GraphQL errors\n */\n public addErrors(errors: readonly GraphQLFormattedError[]): void {\n if (errors.length) {\n this.writableErrors.update(previous => [...previous, ...errors]);\n }\n }\n\n /**\n * Clear all GraphQL errors\n */\n public clearErrors(): void {\n this.writableErrors.set([]);\n }\n}\n","import {\n catchError,\n debounceTime,\n EMPTY,\n forkJoin,\n map,\n mergeMap,\n Observable,\n of,\n raceWith,\n ReplaySubject,\n shareReplay,\n Subject,\n take,\n} from 'rxjs';\nimport {Injectable} from '@angular/core';\nimport {UntypedModelService} from '../types/types';\n\ntype Debounced<T extends UntypedModelService> = {\n object: Parameters<T['updateNow']>[0];\n modelService: T;\n debouncer: Subject<void>;\n canceller: Subject<void>;\n flusher: Subject<void>;\n result: ReturnType<T['updateNow']>;\n};\n\n/**\n * Debounce subscriptions to update mutations, with the possibility to cancel one, flush one, or flush all of them.\n *\n * `modelService` is also used to separate objects by their types. So User with ID 1 is not confused with Product with ID 1.\n *\n * `id` must be the ID of the object that will be updated.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDebounceService {\n /**\n * Stores the debounced update function\n */\n private readonly allDebouncedUpdateCache = new Map<\n UntypedModelService,\n Map<string, Debounced<UntypedModelService>>\n >();\n\n /**\n * Debounce the `modelService.updateNow()` mutation for a short time. If called multiple times with the same\n * modelService and id, it will postpone the subscription to the mutation.\n *\n * All input variables for the same object (same service and ID) will be cumulated over time. So it is possible\n * to update `field1`, then `field2`, and they will be batched into a single XHR including `field1` and `field2`.\n *\n * But it will always keep the same debouncing timeline.\n */\n public debounce<T extends UntypedModelService>(\n modelService: UntypedModelService,\n id: string,\n object: Parameters<T['updateNow']>[0],\n ): ReturnType<T['updateNow']> {\n const debouncedUpdateCache = this.getMap(modelService);\n let debounced = debouncedUpdateCache.get(id) as Debounced<T> | undefined;\n\n if (debounced) {\n debounced.object = {\n ...debounced.object,\n ...object,\n };\n } else {\n const debouncer = new ReplaySubject<void>(1);\n let wasCancelled = false;\n const canceller = new Subject<void>();\n canceller.subscribe(() => {\n wasCancelled = true;\n debouncer.complete();\n canceller.complete();\n this.delete(modelService, id);\n });\n\n const flusher = new Subject<void>();\n\n debounced = {\n object,\n debouncer,\n canceller,\n flusher,\n modelService: modelService as T,\n result: debouncer.pipe(\n debounceTime(2000), // Wait 2 seconds...\n raceWith(flusher), // ...unless flusher is triggered\n take(1),\n mergeMap(() => {\n this.delete(modelService, id);\n\n if (wasCancelled || !debounced) {\n return EMPTY;\n }\n\n return modelService.updateNow(debounced.object);\n }),\n shareReplay(), // All attempts to update will share the exact same single result from API\n ) as ReturnType<T['updateNow']>,\n };\n\n debouncedUpdateCache.set(id, debounced);\n }\n\n // Notify our debounced update each time we ask to update\n debounced.debouncer.next();\n\n // Return and observable that is updated when mutation is done\n return debounced.result;\n }\n\n public cancelOne(modelService: UntypedModelService, id: string): void {\n const debounced = this.allDebouncedUpdateCache.get(modelService)?.get(id);\n debounced?.canceller.next();\n }\n\n /**\n * Immediately execute the pending update, if any.\n *\n * It should typically be called before resolving the object, to mutate it before re-fetching it from server.\n *\n * The returned observable will complete when the update completes, even if it errors.\n */\n public flushOne(modelService: UntypedModelService, id: string): Observable<void> {\n const debounced = this.allDebouncedUpdateCache.get(modelService)?.get(id);\n\n return this.internalFlush(debounced ? [debounced] : []);\n }\n\n /**\n * Immediately execute all pending updates.\n *\n * It should typically be called before login out.\n *\n * The returned observable will complete when all updates complete, even if some of them error.\n */\n public flush(): Observable<void> {\n const all: Debounced<UntypedModelService>[] = [];\n this.allDebouncedUpdateCache.forEach(map => map.forEach(debounced => all.push(debounced)));\n\n return this.internalFlush(all);\n }\n\n private internalFlush(debounceds: Debounced<UntypedModelService>[]): Observable<void> {\n const all: Observable<unknown>[] = [];\n const allFlusher: Subject<void>[] = [];\n\n debounceds.forEach(debounced => {\n all.push(debounced.result.pipe(catchError(() => of(undefined))));\n allFlusher.push(debounced.flusher);\n });\n\n if (!all.length) {\n all.push(of(undefined));\n }\n\n return new Observable(subscriber => {\n const subscription = forkJoin(all)\n .pipe(map(() => undefined))\n .subscribe(subscriber);\n\n // Flush only after subscription process is finished\n allFlusher.forEach(flusher => flusher.next());\n\n return subscription;\n });\n }\n\n /**\n * Count of pending updates\n */\n public get count(): number {\n let count = 0;\n this.allDebouncedUpdateCache.forEach(map => (count += map.size));\n\n return count;\n }\n\n private getMap<T extends UntypedModelService>(modelService: T): Map<string, Debounced<T>> {\n let debouncedUpdateCache = this.allDebouncedUpdateCache.get(modelService);\n if (!debouncedUpdateCache) {\n debouncedUpdateCache = new Map<string, Debounced<UntypedModelService>>();\n this.allDebouncedUpdateCache.set(modelService, debouncedUpdateCache);\n }\n\n return debouncedUpdateCache as Map<string, Debounced<T>>;\n }\n\n private delete(modelService: UntypedModelService, id: string): void {\n const map = this.allDebouncedUpdateCache.get(modelService);\n if (!map) {\n return;\n }\n\n map.delete(id);\n\n if (!map.size) {\n this.allDebouncedUpdateCache.delete(modelService);\n }\n }\n}\n","import {Apollo, gql, MutationResult} from 'apollo-angular';\nimport {FetchResult, NetworkStatus, WatchQueryFetchPolicy} from '@apollo/client/core';\nimport {AbstractControl, AsyncValidatorFn, UntypedFormControl, UntypedFormGroup, ValidatorFn} from '@angular/forms';\nimport {DocumentNode} from 'graphql';\nimport {merge, pick} from 'es-toolkit';\nimport {defaults} from 'es-toolkit/compat';\nimport {catchError, combineLatest, EMPTY, first, from, Observable, of, OperatorFunction} from 'rxjs';\nimport {debounceTime, filter, map, shareReplay, startWith, switchMap, takeWhile, tap} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../classes/query-variable-manager';\nimport {Literal} from '../types/types';\nimport {makePlural, relationsToIds, upperCaseFirstLetter} from '../classes/utility';\nimport {PaginatedData} from '../classes/data-source';\nimport {NaturalDebounceService} from './debounce.service';\nimport {ApolloQueryResult} from '@apollo/client/core/types';\nimport {deepClone} from '../modules/search/classes/utils';\nimport {inject} from '@angular/core';\n\nexport type FormValidators = Record<string, ValidatorFn[]>;\n\nexport type FormAsyncValidators = Record<string, AsyncValidatorFn[]>;\n\nexport type VariablesWithInput = {\n input: Literal;\n};\n\nexport type FormControls = Record<string, AbstractControl>;\n\nexport type WithId<T> = {id: string} & T;\n\nexport abstract class NaturalAbstractModelService<\n Tone,\n Vone extends {id: string},\n Tall extends PaginatedData<Literal>,\n Vall extends QueryVariables,\n Tcreate,\n Vcreate extends VariablesWithInput,\n Tupdate,\n Vupdate extends {id: string; input: Literal},\n Tdelete,\n Vdelete extends {ids: string[]},\n> {\n /**\n * Store the creation mutations that are pending\n */\n private readonly creatingCache = new Map<Vcreate['input'] | WithId<Vupdate['input']>, Observable<Tcreate>>();\n protected readonly apollo = inject(Apollo);\n protected readonly naturalDebounceService = inject(NaturalDebounceService);\n private readonly plural: string;\n\n /**\n *\n * @param name service and single object query name (eg. userForFront or user).\n * @param oneQuery GraphQL query to fetch a single object from ID (eg. userForCrudQuery).\n * @param allQuery GraphQL query to fetch a filtered list of objects (eg. usersForCrudQuery).\n * @param createMutation GraphQL mutation to create an object.\n * @param updateMutation GraphQL mutation to update an object.\n * @param deleteMutation GraphQL mutation to delete a list of objects.\n * @param plural list query name (eg. usersForFront or users).\n * @param createName create object mutation name (eg. createUser).\n * @param updateName update object mutation name (eg. updateUser).\n * @param deleteName delete object mutation name (eg. deleteUsers).\n */\n public constructor(\n protected readonly name: string,\n protected readonly oneQuery: DocumentNode | null,\n protected readonly allQuery: DocumentNode | null,\n protected readonly createMutation: DocumentNode | null,\n protected readonly updateMutation: DocumentNode | null,\n protected readonly deleteMutation: DocumentNode | null,\n plural: string | null = null,\n private readonly createName: string | null = null,\n private readonly updateName: string | null = null,\n private readonly deleteName: string | null = null,\n ) {\n this.plural = plural ?? makePlural(this.name);\n }\n\n /**\n * List of individual fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormValidators(model?: Literal): FormValidators {\n return {};\n }\n\n /**\n * List of individual async fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormAsyncValidators(model?: Literal): FormAsyncValidators {\n return {};\n }\n\n /**\n * List of grouped fields validators (like password + confirm password)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupValidators(model?: Literal): ValidatorFn[] {\n return [];\n }\n\n /**\n * List of async group fields validators (like unique constraint on multiple columns)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupAsyncValidators(model?: Literal): AsyncValidatorFn[] {\n return [];\n }\n\n public getFormConfig(model: Literal): FormControls {\n const values = {...this.getDefaultForServer(), ...this.getFormExtraFieldDefaultValues()};\n const validators = this.getFormValidators(model);\n const asyncValidators = this.getFormAsyncValidators(model);\n const controls: FormControls = {};\n const disabled = model.permissions ? !model.permissions.update : false;\n\n if (model.id) {\n controls.id = new UntypedFormControl({value: model.id, disabled: true});\n }\n\n // Configure form for each field of model\n for (const key of Object.keys(values)) {\n const value = model[key] !== undefined ? model[key] : values[key];\n const formState = {\n value: value,\n disabled: disabled,\n };\n const validator = typeof validators[key] !== 'undefined' ? validators[key] : null;\n const asyncValidator = typeof asyncValidators[key] !== 'undefined' ? asyncValidators[key] : null;\n\n controls[key] = new UntypedFormControl(formState, validator, asyncValidator);\n }\n\n // Configure form for extra validators that are not on a specific field\n for (const key of Object.keys(validators)) {\n if (!controls[key]) {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, validators[key]);\n }\n }\n\n for (const key of Object.keys(asyncValidators)) {\n if (controls[key] && asyncValidators[key]) {\n controls[key].setAsyncValidators(asyncValidators[key]);\n } else {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, null, asyncValidators[key]);\n }\n }\n\n return controls;\n }\n\n /**\n * Create the final FormGroup for the object, including all validators\n *\n * This method should **not** be overridden, but instead `getFormConfig`,\n * `getFormGroupValidators`, `getFormGroupAsyncValidators` might be.\n */\n public getFormGroup(model: Literal): UntypedFormGroup {\n const formConfig = this.getFormConfig(deepClone(model));\n return new UntypedFormGroup(formConfig, {\n validators: this.getFormGroupValidators(model),\n asyncValidators: this.getFormGroupAsyncValidators(model),\n });\n }\n\n /**\n * Get a single object\n *\n * If available it will emit object from cache immediately, then it\n * will **always** fetch from network and then the observable will be completed.\n *\n * You must subscribe to start getting results (and fetch from network).\n */\n public getOne(id: string): Observable<Tone> {\n return this.prepareOneQuery(id, 'cache-and-network').pipe(\n takeWhile(result => result.networkStatus !== NetworkStatus.ready, true),\n map(result => (result.data as Literal)[this.name]),\n );\n }\n\n /**\n * Watch a single object\n *\n * If available it will emit object from cache immediately, then it\n * will **always** fetch from network, and then keep watching the cache forever.\n *\n * You must subscribe to start getting results (and fetch from network).\n *\n * You **MUST** unsubscribe.\n */\n public watchOne(id: string, fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network'): Observable<Tone> {\n return this.prepareOneQuery(id, fetchPolicy).pipe(map(result => (result.data as Literal)[this.name]));\n }\n\n private prepareOneQuery(id: string, fetchPolicy: WatchQueryFetchPolicy): Observable<ApolloQueryResult<unknown>> {\n this.throwIfObservable(id);\n this.throwIfNotQuery(this.oneQuery);\n\n return this.getVariablesForOne(id).pipe(\n switchMap(variables => {\n this.throwIfNotQuery(this.oneQuery);\n\n return this.apollo.watchQuery<unknown, Vone>({\n query: this.oneQuery,\n variables: variables,\n fetchPolicy: fetchPolicy,\n nextFetchPolicy: 'cache-only',\n }).valueChanges;\n }),\n filter(result => !!result.data),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * It will **always** fetch from network and then the observable will be completed.\n * No cache is ever used, so it's slow but correct.\n */\n public getAll(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return this.getPartialVariablesForAll().pipe(\n first(),\n switchMap(partialVariables => {\n this.throwIfNotQuery(this.allQuery);\n\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n this.mapAll(),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * Every time the observable variables change, and they are not undefined,\n * it will return result from cache, then it will **always** fetch from network,\n * and then keep watching the cache forever.\n *\n * You must subscribe to start getting results (and fetch from network).\n *\n * You **MUST** unsubscribe.\n */\n public watchAll(\n queryVariablesManager: NaturalQueryVariablesManager<Vall>,\n fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network',\n ): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return combineLatest({\n variables: queryVariablesManager.variables.pipe(\n // Ignore very fast variable changes\n debounceTime(20),\n // Wait for variables to be defined to prevent duplicate query: with and without variables\n // Null is accepted value for \"no variables\"\n filter(variables => typeof variables !== 'undefined'),\n ),\n partialVariables: this.getPartialVariablesForAll(),\n }).pipe(\n switchMap(result => {\n // Apply partial variables from service\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', result.partialVariables);\n\n this.throwIfNotQuery(this.allQuery);\n\n return this.apollo\n .watchQuery<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: fetchPolicy,\n })\n .valueChanges.pipe(\n catchError(() => EMPTY),\n filter(r => !!r.data),\n this.mapAll(),\n );\n }),\n );\n }\n\n /**\n * This functions allow to quickly create or update objects.\n *\n * Manages a \"creation is pending\" status, and update when creation is ready.\n * Uses regular update/updateNow and create methods.\n * Used mainly when editing multiple objects in same controller (like in editable arrays)\n */\n public createOrUpdate(\n object: Vcreate['input'] | WithId<Vupdate['input']>,\n now = false,\n ): Observable<Tcreate | Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n this.throwIfNotQuery(this.updateMutation);\n\n // If creation is pending, listen to creation observable and when ready, fire update\n const pendingCreation = this.creatingCache.get(object);\n if (pendingCreation) {\n return pendingCreation.pipe(\n switchMap(created => {\n return this.update({\n id: (created as WithId<Tcreate>).id,\n ...(object as Vcreate['input']),\n });\n }),\n );\n }\n\n // If object has Id, just save it\n if ('id' in object && object.id) {\n if (now) {\n // used mainly for tests, because lodash debounced used in update() does not work fine with fakeAsync and tick()\n return this.updateNow(object as WithId<Vupdate['input']>);\n } else {\n return this.update(object as WithId<Vupdate['input']>);\n }\n }\n\n // If object was not saving, and has no ID, create it\n const creation = this.create(object).pipe(\n tap(() => {\n this.creatingCache.delete(object); // remove from cache\n }),\n );\n\n // stores creating observable in a cache replayable version of the observable,\n // so several update() can subscribe to the same creation\n this.creatingCache.set(object, creation.pipe(shareReplay()));\n\n return creation;\n }\n\n /**\n * Create an object in DB and then refetch the list of objects\n */\n public create(object: Vcreate['input']): Observable<Tcreate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n\n const variables = merge(\n {input: this.getInput(object, true)},\n this.getPartialVariablesForCreation(object),\n ) as Vcreate;\n\n return this.apollo\n .mutate<Tcreate, Vcreate>({\n mutation: this.createMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n return this.mapCreation(result);\n }),\n );\n }\n\n /**\n * Update an object, after a short debounce\n */\n public update(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n // Keep a single instance of the debounced update function\n const id = object.id;\n\n return this.naturalDebounceService.debounce(this, id, object);\n }\n\n /**\n * Update an object immediately when subscribing\n */\n public updateNow(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n const variables = merge(\n {\n id: object.id,\n input: this.getInput(object, false),\n },\n this.getPartialVariablesForUpdate(object),\n ) as Vupdate;\n\n return this.apollo\n .mutate<Tupdate, Vupdate>({\n mutation: this.updateMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n return this.mapUpdate(result);\n }),\n );\n }\n\n /**\n * Delete objects and then refetch the list of objects\n */\n public delete(objects: {id: string}[]): Observable<Tdelete> {\n this.throwIfObservable(objects);\n this.throwIfNotQuery(this.deleteMutation);\n\n const ids = objects.map(o => {\n // Cancel pending update\n this.naturalDebounceService.cancelOne(this, o.id);\n\n return o.id;\n });\n const variables = merge(\n {\n ids: ids,\n },\n this.getPartialVariablesForDelete(objects),\n ) as Vdelete;\n\n return this.apollo\n .mutate<Tdelete, Vdelete>({\n mutation: this.deleteMutation,\n variables: variables,\n })\n .pipe(\n // Delay the observable until Apollo refetch is completed\n switchMap(result => {\n const mappedResult = this.mapDelete(result);\n\n return from(this.apollo.client.reFetchObservableQueries()).pipe(map(() => mappedResult));\n }),\n );\n }\n\n /**\n * If the id is provided, resolves an observable model. The observable model will only be emitted after we are sure\n * that Apollo cache is fresh and warm. Then the component can subscribe to the observable model to get the model\n * immediately from Apollo cache and any subsequents future mutations that may happen to Apollo cache.\n *\n * Without id, returns default values, in order to show a creation form.\n */\n public resolve(id: string | undefined): Observable<Observable<Tone | Vcreate['input']>> {\n if (id) {\n const onlyNetwork = this.watchOne(id, 'network-only').pipe(first());\n const onlyCache = this.watchOne(id, 'cache-first');\n\n // In theory, we can rely on Apollo Cache to return a result instantly. It is very fast indeed,\n // but it is still asynchronous, so there may be a very short time when we don't have the model\n // available. To fix that, we can rely on RxJS, which is able to emit synchronously the value we just\n // got from server. Once Apollo Client moves to RxJS (https://github.com/apollographql/apollo-feature-requests/issues/375),\n // we could try to remove `startWith()`.\n return onlyNetwork.pipe(map(firstValue => onlyCache.pipe(startWith(firstValue))));\n } else {\n return of(of(this.getDefaultForServer()));\n }\n }\n\n /**\n * Return an object that match the GraphQL input type.\n * It creates an object with manually filled data and add uncompleted data (like required attributes that can be empty strings)\n */\n public getInput(object: Literal, forCreation: boolean): Vcreate['input'] | Vupdate['input'] {\n // Convert relations to their IDs for mutation\n object = relationsToIds(object);\n\n // Pick only attributes that we can find in the empty object\n // In other words, prevent to select data that has unwanted attributes\n const emptyObject = this.getDefaultForServer();\n let input = pick(object, Object.keys(emptyObject));\n\n // Complete a potentially uncompleted object with default values\n if (forCreation) {\n input = defaults(input, emptyObject);\n }\n\n return input;\n }\n\n /**\n * Return the number of objects matching the query. It may never complete.\n *\n * This is used for the unique validator\n */\n public count(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<number> {\n const queryName = 'Count' + upperCaseFirstLetter(this.plural);\n const filterType = upperCaseFirstLetter(this.name) + 'Filter';\n\n const query = gql`\n query ${queryName} ($filter: ${filterType}) {\n count: ${this.plural} (filter: $filter, pagination: {pageSize: 0, pageIndex: 0}) {\n length\n }\n }`;\n\n return this.getPartialVariablesForAll().pipe(\n switchMap(partialVariables => {\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<{count: {length: number}}, Vall>({\n query: query,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n map(result => result.data.count.length),\n );\n }\n\n /**\n * Return empty object with some default values from server perspective\n *\n * This is typically useful when showing a form for creation\n */\n public getDefaultForServer(): Vcreate['input'] {\n return {};\n }\n\n /**\n * You probably **should not** use this.\n *\n * If you are trying to *call* this method, instead you probably want to call `getDefaultForServer()` to get default\n * values for a model, or `getFormConfig()` to get a configured form that includes extra form fields.\n *\n * If you are trying to *override* this method, instead you probably want to override `getDefaultForServer()`.\n *\n * The only and **very rare** reason to override this method is if the client needs extra form fields that cannot be\n * accepted by the server (not part of `XXXInput` type) and that are strictly for the client form needs. In that case,\n * then you can return default values for those extra form fields, and the form returned by `getFormConfig()` will\n * include those extra fields.\n */\n protected getFormExtraFieldDefaultValues(): Literal {\n return {};\n }\n\n /**\n * This is used to extract only the array of fetched objects out of the entire fetched data\n */\n protected mapAll(): OperatorFunction<FetchResult<unknown>, Tall> {\n return map(result => (result.data as any)[this.plural]); // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the created object out of the entire fetched data\n */\n protected mapCreation(result: MutationResult<unknown>): Tcreate {\n const name = this.createName ?? 'create' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the updated object out of the entire fetched data\n */\n protected mapUpdate(result: MutationResult<unknown>): Tupdate {\n const name = this.updateName ?? 'update' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only flag when deleting an object\n */\n protected mapDelete(result: MutationResult<unknown>): Tdelete {\n const name = this.deleteName ?? 'delete' + upperCaseFirstLetter(this.plural);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * Returns additional variables to be used when getting a single object\n *\n * This is typically a site or state ID, and is needed to get appropriate access rights\n */\n protected getPartialVariablesForOne(): Observable<Partial<Vone>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when getting multiple objects\n *\n * This is typically a site or state ID, but it could be something else to further filter the query\n */\n public getPartialVariablesForAll(): Observable<Partial<Vall>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when creating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForCreation(object: Literal): Partial<Vcreate> {\n return {};\n }\n\n /**\n * Returns additional variables to be used when updating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForUpdate(object: Literal): Partial<Vupdate> {\n return {};\n }\n\n /**\n * Return additional variables to be used when deleting an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForDelete(objects: Literal[]): Partial<Vdelete> {\n return {};\n }\n\n /**\n * Throw exception to prevent executing queries with invalid variables\n */\n protected throwIfObservable(value: unknown): void {\n if (value instanceof Observable) {\n throw new Error(\n 'Cannot use Observable as variables. Instead you should use .subscribe() to call the method with a real value',\n );\n }\n }\n\n /**\n * Merge given ID with additional partial variables if there is any\n */\n private getVariablesForOne(id: string): Observable<Vone> {\n return this.getPartialVariablesForOne().pipe(\n map(partialVariables => merge({id: id} as Vone, partialVariables)),\n );\n }\n\n /**\n * Throw exception to prevent executing null queries\n */\n private throwIfNotQuery(query: DocumentNode | null): asserts query {\n if (!query) {\n throw new Error('GraphQL query for this method was not configured in this service constructor');\n }\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {inject, Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nconst enumTypeQuery = gql`\n query EnumType($name: String!) {\n __type(name: $name) {\n __typename\n enumValues {\n name\n description\n }\n }\n }\n`;\n\ntype EnumType = {\n __type: null | {\n __typename: string;\n enumValues:\n | null\n | {\n name: string;\n description: null | string;\n }[];\n };\n};\n\nexport type IEnum = {\n value: string;\n name: string;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalEnumService {\n private readonly apollo = inject(Apollo);\n\n /**\n * Return a list of observable enumerables considering the given name\n */\n public get(name: string): Observable<IEnum[]> {\n // Load possible action statuses\n return this.apollo\n .query<EnumType>({\n query: enumTypeQuery,\n variables: {name: name},\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(result => {\n const values: IEnum[] = [];\n if (result.data.__type?.enumValues) {\n for (const enumValue of result.data.__type.enumValues) {\n values.push({\n value: enumValue.name,\n name: enumValue.description || '',\n });\n }\n }\n\n return values;\n }),\n );\n }\n\n /**\n * Returns the enum user-friendly name, instead of its value.\n */\n public getValueName(value: string, enumName: string): Observable<string> {\n return this.get(enumName).pipe(\n map(values => {\n for (const v of values) {\n if (v.value === value) {\n return v.name;\n }\n }\n\n return '';\n }),\n );\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {FetchResult} from '@apollo/client/core';\nimport {inject, Injectable} from '@angular/core';\nimport {clone} from 'es-toolkit';\nimport {forkJoin, Observable, of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {Literal} from '../types/types';\nimport {upperCaseFirstLetter} from '../classes/utility';\n\n/**\n * Query to get list of mutations\n */\nconst queriesQuery = gql`\n query Mutations {\n __type(name: \"Mutation\") {\n fields {\n name\n args {\n name\n type {\n ofType {\n name\n }\n }\n }\n }\n }\n }\n`;\n\ntype IntrospectedArg = {\n name: string;\n type: {\n ofType: null | {\n name: null | string;\n };\n };\n};\n\ntype IntrospectedMutations = {\n __type: null | {\n fields:\n | null\n | {\n name: string;\n args: IntrospectedArg[];\n }[];\n };\n};\n\nexport type LinkableObject = {\n id: string;\n __typename: string;\n};\n\ntype MutationArg = {\n name: string;\n type: string;\n};\n\ntype Mutation = {\n name: string;\n arg1: MutationArg;\n arg2: MutationArg;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalLinkMutationService {\n private readonly apollo = inject(Apollo);\n\n /**\n * Receives the list of available mutations\n */\n private allMutations?: Mutation[];\n\n /**\n * Link two objects together\n */\n public link(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>> {\n // clone prevents to affect the original reference\n const clonedVariables = clone(variables);\n\n return this.getMutation('link', obj1, obj2, otherName, clonedVariables).pipe(\n switchMap(mutation => this.execute(mutation)),\n );\n }\n\n /**\n * Link many objects\n */\n public linkMany(\n obj1: LinkableObject,\n objects: LinkableObject[],\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>[]> {\n return forkJoin(objects.map(obj2 => this.link(obj1, obj2, otherName, variables)));\n }\n\n /**\n * Unlink two objects\n */\n public unlink(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n ): Observable<FetchResult<{id: string}>> {\n return this.getMutation('unlink', obj1, obj2, otherName).pipe(switchMap(mutation => this.execute(mutation)));\n }\n\n /**\n * Return the list of all available mutation names\n */\n private getAllMutationNames(): Observable<Mutation[]> {\n if (this.allMutations) {\n return of(this.allMutations);\n }\n\n const mapArg = (arg: IntrospectedArg): MutationArg => {\n return {\n name: arg.name,\n type: arg.type?.ofType?.name?.replace(/ID$/, '') || 'should-never-happen',\n };\n };\n\n return this.apollo\n .query<IntrospectedMutations>({\n query: queriesQuery,\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(({data}) => {\n if (data.__type?.fields) {\n this.allMutations = data.__type.fields\n .filter(v => /^(link|unlink)/.exec(v.name))\n .map(v => {\n return {\n name: v.name,\n arg1: mapArg(v.args[0]),\n arg2: mapArg(v.args[1]),\n };\n });\n } else {\n this.allMutations = [];\n }\n\n return this.allMutations;\n }),\n );\n }\n\n /**\n * Generate mutation using patterns and replacing variables\n */\n private getMutation(\n action: string,\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null,\n variables: Literal = {},\n ): Observable<string> {\n otherName = otherName ? upperCaseFirstLetter(otherName) : otherName;\n const mutationName = action + obj1.__typename + (otherName || obj2.__typename);\n const reversedMutationName = action + obj2.__typename + (otherName || obj1.__typename);\n\n return this.getAllMutationNames().pipe(\n map(allMutationNames => {\n const mutation =\n allMutationNames.find(mut => mut.name === mutationName) ||\n allMutationNames.find(mut => mut.name === reversedMutationName);\n\n if (mutation) {\n return this.buildTemplate(mutation, obj1, obj2, variables);\n }\n\n throw TypeError('API does not allow to ' + action + ' ' + obj1.__typename + ' and ' + obj2.__typename);\n }),\n );\n }\n\n /**\n * Execute mutation\n */\n private execute(mutation: string): Observable<FetchResult<{id: string}>> {\n return this.apollo\n .mutate<{id: string}>({\n mutation: gql(mutation),\n })\n .pipe(\n map(r => {\n this.apollo.client.reFetchObservableQueries();\n return r;\n }),\n );\n }\n\n /**\n * Build the actual mutation string\n */\n private buildTemplate(\n mutation: Mutation,\n obj1: LinkableObject,\n obj2: LinkableObject,\n variables: Literal = {},\n ): string {\n let name1;\n let name2;\n if (obj1.__typename === mutation.arg1.type) {\n name1 = mutation.arg1.name;\n name2 = mutation.arg2.name;\n } else {\n name1 = mutation.arg2.name;\n name2 = mutation.arg1.name;\n }\n variables[name1] = obj1.id;\n variables[name2] = obj2.id;\n\n let serializedVariables = '';\n for (const key of Object.keys(variables)) {\n serializedVariables += key + ': ' + JSON.stringify(variables[key]) + ' ';\n }\n\n return `mutation linkAndUnlink {\n ${mutation.name}(${serializedVariables}) {\n id\n }\n }`;\n }\n}\n","import {isPlatformBrowser} from '@angular/common';\nimport {\n computed,\n DOCUMENT,\n effect,\n EnvironmentProviders,\n inject,\n Injectable,\n InjectionToken,\n PLATFORM_ID,\n provideAppInitializer,\n Provider,\n signal,\n} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {fromEvent, map, of} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {LOCAL_STORAGE} from '../modules/common/services/memory-storage';\n\ntype AllThemes = [string, ...string[]];\nexport const NATURAL_THEMES_CONFIG = new InjectionToken<AllThemes>('Configuration for Natural Theme');\n\nexport function provideThemes(config: AllThemes): (EnvironmentProviders | Provider)[] {\n return [\n {\n provide: NATURAL_THEMES_CONFIG,\n useValue: config,\n },\n provideAppInitializer(() => {\n inject(NaturalThemeService);\n }),\n ];\n}\n\nexport enum ColorScheme {\n Light = 'light',\n Dark = 'dark',\n Auto = 'auto',\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalThemeService {\n private readonly allThemes = inject(NATURAL_THEMES_CONFIG);\n private readonly storage = inject(LOCAL_STORAGE);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly document = inject(DOCUMENT);\n\n private readonly isDarkSystem = toSignal(\n isPlatformBrowser(this.platformId)\n ? fromEvent<MediaQueryListEvent>(\n this.document.defaultView!.matchMedia('(prefers-color-scheme: dark)'),\n 'change',\n ).pipe(\n startWith(this.document.defaultView!.matchMedia('(prefers-color-scheme: dark)')),\n map(e => e.matches),\n )\n : of(false),\n {initialValue: false},\n );\n\n private readonly isDark = computed(() => {\n return (\n this.colorScheme() === ColorScheme.Dark || (this.colorScheme() === ColorScheme.Auto && this.isDarkSystem())\n );\n });\n\n private readonly _theme = signal<string>(this.allThemes[0]);\n\n /**\n * Currently selected theme. Use `setTheme()` to select a different theme.\n */\n public readonly theme = this._theme.asReadonly();\n\n private readonly _colorScheme = signal<ColorScheme>(ColorScheme.Auto);\n\n /**\n * Currently selected color scheme. Use `setColorScheme()` to select a different scheme.\n */\n public readonly colorScheme = this._colorScheme.asReadonly();\n\n public constructor() {\n effect(() => {\n this.document.documentElement.setAttribute('data-is-dark', this.isDark() ? 'true' : 'false');\n });\n\n const storedScheme = this.storage.getItem('color-scheme') as ColorScheme | null;\n const isValidScheme = storedScheme && Object.values(ColorScheme).includes(storedScheme);\n this._colorScheme.set(isValidScheme ? storedScheme : ColorScheme.Auto);\n }\n\n /**\n * Set theme in memory, local storage and dom\n */\n public setTheme(theme: string): void {\n if (!this.allThemes.includes(theme)) {\n throw new Error(\n `Expecting one of the configured themes: ${this.allThemes.map(t => `'${t}'`).join(', ')}. But got invalid: '${theme}'`,\n );\n }\n\n this._theme.set(theme);\n this.document.documentElement.setAttribute('data-theme', theme);\n }\n\n /**\n * Set dark/light/auto\n */\n public setColorScheme(scheme: ColorScheme, persistInStorage = true): void {\n this._colorScheme.set(scheme); // memory\n this.document.documentElement.setAttribute('data-color-scheme', scheme); // dom\n\n if (persistInStorage) {\n this.storage.setItem('color-scheme', this.colorScheme()); // storage\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NativeDateAdapter} from '@angular/material/core';\n\nconst patterns: readonly RegExp[] = [\n /^(?<day>\\d{1,2})\\.(?<month>\\d{1,2})\\.(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})-(?<month>\\d{1,2})-(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\/(?<month>\\d{1,2})\\/(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\\\(?<month>\\d{1,2})\\\\(?<year>\\d{4}|\\d{2})$/,\n // strict ISO format\n /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$/,\n];\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSwissParsingDateAdapter extends NativeDateAdapter {\n /**\n * Parse commonly accepted swiss format, such as:\n *\n * - 24.12.2018\n * - 1.4.18\n * - 2018-12-24\n */\n public override parse(value: unknown): Date | null {\n if (typeof value === 'number') {\n return new Date(value);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n for (const pattern of patterns) {\n const m = trimmed.match(pattern);\n if (m?.groups) {\n const year = +m.groups.year;\n const month = +m.groups.month;\n const day = +m.groups.day;\n\n return this.createDateIfValid(year, month, day);\n }\n }\n }\n\n return null;\n }\n\n private createDateIfValid(year: number, month: number, date: number): Date | null {\n // Assume year 2000 if only two digits\n if (year < 100) {\n year += 2000;\n }\n\n month = month - 1;\n if (month >= 0 && month <= 11 && date >= 1 && date <= 31) {\n return this.createDate(year, month, date);\n }\n\n return null;\n }\n\n public override getFirstDayOfWeek(): number {\n // Always starts on Monday, even though it is not true for Canada, U.S., Mexico and many more\n // Also see https://github.com/tc39/ecma402/issues/6\n return 1;\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './alert.service';\nexport * from './confirm.component';\n","import {computed, Directive, effect, inject, InjectionToken, input} from '@angular/core';\nimport {MatIcon, MatIconRegistry} from '@angular/material/icon';\nimport {DomSanitizer} from '@angular/platform-browser';\n\ntype NaturalIconType = {\n name: string;\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n};\n\nexport type NaturalIconConfig = {\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n};\n\nexport type NaturalIconsConfig = Record<string, NaturalIconConfig>;\n\nexport const NATURAL_ICONS_CONFIG = new InjectionToken<NaturalIconsConfig>('Configuration for Natural Icons');\n\nconst naturalRegistered: unique symbol = Symbol('Natural icon registered');\n\n/**\n * Allows to use `<mat-icon>` without knowing where an icon comes from (SVG or font) or with aliases for Material font.\n *\n * SVG icons and Material font aliases must be configured ahead of time, via `NATURAL_ICONS_CONFIG`.\n *\n * It also make it easy to give a specific size to the icon via `[size]`.\n *\n * Usage:\n *\n * ```html\n * <mat-icon naturalIcon=\"search\"></mat-icon>\n * <mat-icon naturalIcon=\"my-svg-icon-name\"></mat-icon>\n * <mat-icon naturalIcon=\"my-alias-for-search\"></mat-icon>\n * <mat-icon naturalIcon=\"search\" [size]=\"150\"></mat-icon>\n * ```\n */\n@Directive({\n selector: 'mat-icon[naturalIcon]',\n host: {\n '[style.font-size.px]': 'size()',\n '[style.min-height.px]': 'size()',\n '[style.min-width.px]': 'size()',\n '[class]': 'icon().class',\n },\n})\nexport class NaturalIconDirective {\n private readonly matIconRegistry = inject(MatIconRegistry);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly config = inject(NATURAL_ICONS_CONFIG, {optional: true});\n private readonly matIconComponent = inject(MatIcon, {host: true, self: true});\n\n public readonly naturalIcon = input.required<string>();\n public readonly size = input<number | undefined | null>(undefined);\n\n protected readonly icon = computed<NaturalIconType>(() => {\n const value = this.naturalIcon();\n return {\n name: value,\n ...(this.config?.[value] ?? {font: value}),\n };\n });\n\n public constructor() {\n const config = this.config;\n\n this.registerIcons(config ?? {});\n\n effect(() => {\n this.matIconComponent.fontIcon = undefined!;\n this.matIconComponent.svgIcon = undefined!;\n\n const icon = this.icon();\n if (icon.font) {\n this.matIconComponent.fontIcon = icon.font;\n } else if (icon.svg) {\n this.matIconComponent.svgIcon = icon.name;\n }\n });\n }\n\n private registerIcons(config: NaturalIconsConfig): void {\n // Ensure that this specific instance of registry has our our icons\n // exactly once, not less and not more\n const registry = this.matIconRegistry as any;\n if (registry[naturalRegistered]) {\n return;\n }\n registry[naturalRegistered] = true;\n\n for (const key of Object.keys(config)) {\n const svg = config[key].svg;\n if (svg) {\n this.matIconRegistry.addSvgIcon(key, this.domSanitizer.bypassSecurityTrustResourceUrl(svg));\n }\n }\n }\n}\n","import {Component, DestroyRef, inject, Input, input, OnChanges, output, SimpleChanges} from '@angular/core';\nimport {NatPalette} from '../../types/types';\nimport {AvailableColumn, Button} from './types';\nimport {cancellableTimeout} from '../../classes/rxjs';\nimport {map} from 'rxjs';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {FormsModule} from '@angular/forms';\nimport {MatCheckbox} from '@angular/material/checkbox';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {MatIconButton} from '@angular/material/button';\nimport {AsyncPipe} from '@angular/common';\nimport {MatTooltip} from '@angular/material/tooltip';\n\n@Component({\n selector: 'natural-columns-picker',\n imports: [\n AsyncPipe,\n FormsModule,\n MatCheckbox,\n MatIcon,\n MatIconButton,\n MatMenu,\n MatMenuContent,\n MatMenuItem,\n MatMenuTrigger,\n MatTooltip,\n NaturalIconDirective,\n ],\n templateUrl: './columns-picker.component.html',\n styleUrl: './columns-picker.component.scss',\n})\nexport class NaturalColumnsPickerComponent implements OnChanges {\n private readonly destroyRef = inject(DestroyRef);\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n private _selections?: string[];\n private _availableColumns: Required<AvailableColumn>[] = [];\n\n public readonly buttons = input<readonly Readonly<Button>[] | null>([]);\n\n /**\n * Set all the columns that are available.\n */\n @Input()\n public set availableColumns(columns: readonly Readonly<AvailableColumn>[] | undefined) {\n this._availableColumns =\n columns?.map(column => {\n return {\n checked: true,\n hidden: false,\n ...column,\n };\n }) ?? [];\n }\n\n /**\n * Set the columns that we would like to select but might be unavailable.\n *\n * If a column is unavailable it will be ignored silently. To know what columns were actually applied\n * you should use `selectionChange`.\n *\n * It is often set once on component initialization, but it can also be set again later in the lifespan of the component.\n */\n @Input()\n public set selections(columns: string[] | undefined) {\n this._selections = columns;\n\n if (!columns || !this._availableColumns.length) {\n return;\n }\n\n this._availableColumns.forEach(col => {\n col.checked = columns.includes(col.id);\n });\n }\n\n /**\n * Emit a list of valid and selected column keys whenever the selection changes\n */\n public readonly selectionChange = output<string[]>();\n\n /**\n * Displayed options in the dropdown menu\n */\n public displayedColumns: Required<AvailableColumn>[] = [];\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n private initColumns(): void {\n this._availableColumns?.forEach(col => {\n col.checked = this._selections?.length ? this._selections.includes(col.id) : col.checked;\n });\n\n // Show options only for columns that are not hidden\n this.displayedColumns = this._availableColumns.filter(col => !col.hidden) ?? [];\n }\n\n public updateColumns(): void {\n const selectedColumns = this._availableColumns.filter(col => col.checked).map(col => col.id);\n this.selectionChange.emit(selectedColumns);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Unfortunately need a timeout to avoid an ExpressionChangedAfterItHasBeenCheckedError on /state/4989/process\n cancellableTimeout(this.destroyRef).subscribe(() => {\n if (changes.availableColumns) {\n this.initColumns();\n this.updateColumns();\n } else if (changes.selections) {\n this.updateColumns();\n }\n });\n }\n\n public defaultTrue(value: boolean | undefined): boolean {\n return value ?? true;\n }\n\n public color(button: Button): NatPalette | null {\n return button.checked ? 'primary' : null;\n }\n\n public useCheckbox(button: Button): boolean {\n return 'checked' in button;\n }\n\n public needMargin(button: Button | null = null): string {\n return this.buttons()?.some(this.useCheckbox) && (!button || !this.useCheckbox(button))\n ? 'align-with-checkbox'\n : '';\n }\n\n public someVisibleButtons(): boolean {\n const visibleButtons = this.buttons()?.reduce((sum, button) => (this.defaultTrue(button.show) ? 1 : 0), 0) ?? 0;\n\n return visibleButtons > 0;\n }\n\n protected menuItemClicked($event: MouseEvent, column: Required<AvailableColumn>): void {\n $event.stopPropagation(); // Prevent closing menu\n\n // Change checked value if we clicked anywhere inside the menuItem which is not the mat-checkbox\n column.checked = !column.checked;\n this.updateColumns();\n }\n\n protected checkboxClicked($event: MouseEvent, column: Required<AvailableColumn>): void {\n $event.stopPropagation(); // Prevent bubbling to `menuItemClicked()`, and prevent closing menu\n\n // Also change checked value if we clicked the small area which is inside the mat-checkbox but outside the label\n if ($event.target instanceof HTMLDivElement) {\n column.checked = !column.checked;\n this.updateColumns();\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/cyclomatic-complexity -->\n<div>\n @if ((isMobile | async) && someVisibleButtons()) {\n <button matIconButton [matMenuTriggerFor]=\"mobileMenu\">\n <mat-icon naturalIcon=\"more_vert\" />\n </button>\n <mat-menu #mobileMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (button of buttons(); track button) {\n @if (defaultTrue(button.show)) {\n @if (button.href) {\n <a\n mat-menu-item\n [href]=\"button.href\"\n [disabled]=\"button.disabled\"\n [class]=\"needMargin(button)\"\n (click)=\"button.click?.(button, $event)\"\n >\n @if (useCheckbox(button)) {\n <mat-checkbox [checked]=\"button.checked\" />\n }\n {{ button.label }}\n </a>\n } @else if (button.buttons) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n [class]=\"needMargin(button)\"\n (click)=\"button.click?.(button, $event)\"\n >\n @if (useCheckbox(button)) {\n <mat-checkbox [checked]=\"button.checked\" />\n }\n {{ button.label }}\n </button>\n <mat-menu #subMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (subButton of button.buttons; track subButton) {\n <a\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n }\n </ng-template>\n </mat-menu>\n } @else {\n <button\n mat-menu-item\n [disabled]=\"button.disabled\"\n [class]=\"needMargin(button)\"\n (click)=\"button.click?.(button, $event)\"\n >\n @if (useCheckbox(button)) {\n <mat-checkbox [checked]=\"button.checked\" />\n }\n {{ button.label }}\n </button>\n }\n }\n }\n\n @if (displayedColumns.length) {\n <button mat-menu-item [matMenuTriggerFor]=\"columnMenu\" [class]=\"needMargin(null)\">\n <span i18n>Colonnes</span>\n </button>\n }\n </ng-template>\n </mat-menu>\n } @else {\n @for (button of buttons(); track button) {\n @if (defaultTrue(button.show)) {\n @if (button.href) {\n <a\n matIconButton\n [href]=\"button.href\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n (click)=\"button.click?.(button, $event)\"\n >\n <mat-icon [naturalIcon]=\"button.icon\" />\n </a>\n } @else if (button.buttons) {\n <button\n matIconButton\n [matMenuTriggerFor]=\"menu\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n (click)=\"button.click?.(button, $event)\"\n >\n <mat-icon [naturalIcon]=\"button.icon\" />\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template matMenuContent>\n @for (subButton of button.buttons; track subButton) {\n <a\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n }\n </ng-template>\n </mat-menu>\n } @else {\n <button\n matIconButton\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n (click)=\"button.click?.(button, $event)\"\n >\n <mat-icon [naturalIcon]=\"button.icon\" />\n </button>\n }\n }\n }\n\n @if (displayedColumns.length) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Sélectionner les colonnes\"\n [matMenuTriggerFor]=\"columnMenu\"\n >\n <mat-icon naturalIcon=\"view_column\" />\n </button>\n }\n }\n</div>\n\n<mat-menu #columnMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (column of displayedColumns; track column) {\n <div mat-menu-item (click)=\"menuItemClicked($event, column)\">\n <mat-checkbox\n [(ngModel)]=\"column.checked\"\n (click)=\"checkboxClicked($event, column)\"\n (change)=\"updateColumns()\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n </ng-template>\n</mat-menu>\n","/*\n * Public API Surface of natural\n */\n\nexport type {AvailableColumn, Button, SubButton} from './types';\nexport * from './columns-picker.component';\n","import {AfterViewInit, DestroyRef, Directive, inject, input} from '@angular/core';\nimport {MatTab, MatTabGroup} from '@angular/material/tabs';\nimport {ActivatedRoute, RouteConfigLoadEnd, RouteConfigLoadStart, Router} from '@angular/router';\nimport {clone} from 'es-toolkit';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Returns an identifier for the tab\n */\nfunction getTabId(tab: MatTab): string {\n return tab.id ?? '';\n}\n\n/**\n * Usage :\n *\n * ```html\n * <mat-tab-group [naturalLinkableTab]=\"!isPanel\">\n * <mat-tab label=\"Tab 1\">Tab 1</mat-tab> // First tab doesn't need id. This keeps url clean on default one\n * <mat-tab label=\"Tab 2\" id=\"second-tab\">Tab 2</mat-tab>\n * ...\n * </mat-tab-group>\n * ```\n */\n@Directive({\n selector: 'mat-tab-group[naturalLinkableTab]',\n})\nexport class NaturalLinkableTabDirective implements AfterViewInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly component = inject(MatTabGroup);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n\n /**\n * If false, disables the persistent navigation\n */\n public readonly naturalLinkableTab = input<boolean | ''>(true);\n private isLoadingRouteConfig = false;\n\n public constructor() {\n this.router.events.pipe(takeUntilDestroyed()).subscribe(event => {\n if (event instanceof RouteConfigLoadStart) {\n this.isLoadingRouteConfig = true;\n } else if (event instanceof RouteConfigLoadEnd) {\n this.isLoadingRouteConfig = false;\n }\n });\n }\n\n public ngAfterViewInit(): void {\n if (this.naturalLinkableTab() === false) {\n return;\n }\n\n // When url params change, update the mat-tab-group selected tab\n this.route.fragment.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(fragment => {\n // Get index of tab that matches wanted name\n const tabIndex = this.getTabIndex(fragment);\n\n // If tab index is valid (>= 0) go to given fragment\n // If there is no fragment at all, go to first tab (index is -1 in this case)\n if (tabIndex >= 0 || !fragment) {\n this.component.selectedIndex = tabIndex;\n }\n });\n\n // When mat-tab-groups selected tab change, update url\n this.component.selectedTabChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(event => {\n if (this.isLoadingRouteConfig) {\n return;\n }\n\n const activatedTabName = getTabId(event.tab);\n const segments = this.route.snapshot.url;\n if (!segments.length) {\n // This should never happen in normal usage, because it would means there is no route at all in the app\n throw new Error('Cannot update URL for tabs without any segments in URL');\n }\n\n // Get url matrix params (/segment;matrix=param) only without route params (segment/:id)\n const params = clone(segments[segments.length - 1].parameters);\n\n this.router.navigate(['.', params], {\n relativeTo: this.route,\n queryParamsHandling: 'preserve',\n fragment: activatedTabName?.length ? activatedTabName : undefined,\n });\n });\n }\n\n private getTabIndex(fragment: string | null): number {\n return this.component._tabs.toArray().findIndex(tab => fragment === getTabId(tab));\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {upperCaseFirstLetter} from '../../../classes/utility';\n\n/**\n * Returns the string with the first letter as capital\n */\n@Pipe({\n name: 'capitalize',\n})\nexport class NaturalCapitalizePipe implements PipeTransform {\n public transform(value: string | null): string | null {\n if (value) {\n return upperCaseFirstLetter(value);\n }\n\n return value;\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'ellipsis',\n})\nexport class NaturalEllipsisPipe implements PipeTransform {\n public transform(value: string, limit: number): string {\n return value.substring(0, limit - 1) + (value.length > limit ? '…' : '');\n }\n}\n","import {inject, Pipe, PipeTransform} from '@angular/core';\nimport {NaturalEnumService} from '../../../services/enum.service';\nimport {Observable} from 'rxjs';\n\n/**\n * A pipe to output an enum user-friendly name, instead of its value.\n *\n * Usage would be: {{ element.priority | enum: 'Priority' | async }}\n */\n@Pipe({\n name: 'enum',\n})\nexport class NaturalEnumPipe implements PipeTransform {\n private readonly enumService = inject(NaturalEnumService);\n\n public transform(value: any, enumName: string): Observable<string> {\n return this.enumService.getValueName(value, enumName);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {ValidationErrors} from '@angular/forms';\nimport {urlPattern} from '../../../classes/validators';\n/**\n * Return a single error message for the first found error, if any.\n *\n * Typical usage is without `@if`:\n *\n * ```html\n * <mat-form-field>\n * <input matInput formControlName=\"name\" />\n * <mat-label i18n>Nom</mat-label>\n * <mat-error>{{ form.get('name')?.errors | errorMessage }}</mat-error>\n * </mat-form-field>\n * ```\n *\n * If you need custom error messages, you can override, or defined new ones like that:\n *\n * ```html\n * <mat-form-field>\n * <input matInput formControlName=\"name\" />\n * <mat-label i18n>Nom</mat-label>\n * @if (form.get('name')?.hasError('required')) {\n * <mat-error>Ce champ est requis parce qu'il est vraiment très important</mat-error>\n * } @else {\n * <mat-error>{{ form.get('name')?.errors | errorMessage }}</mat-error>\n * }\n * </mat-form-field>\n * ```\n *\n * Supported validators are:\n *\n * - Angular\n * - `Validators.max`\n * - `Validators.maxlength`\n * - `Validators.min`\n * - `Validators.minlength`\n * - `Validators.required`\n * - Natural\n * - `available`\n * - `decimal`\n * - `deliverableEmail`\n * - `greaterThan`\n * - `integer`\n * - `money`\n * - `nfcCardHex`\n * - `time`\n * - `unique`\n * - `url`\n * - Others, that live in individual projects, but we exceptionally support here\n * - `iban`\n * - `validateCity`\n *\n * @param unit is used to build the message for the following validators: `min`, `max`, `greaterThan`\n */\n@Pipe({\n name: 'errorMessage',\n})\nexport class NaturalErrorMessagePipe implements PipeTransform {\n public transform(errors: ValidationErrors | null | undefined, unit = ''): string {\n if (!errors) {\n return '';\n }\n\n if (unit) {\n unit = ` ${unit}`;\n }\n\n if (errors.required) {\n return $localize`Requis`;\n } else if (errors.minlength) {\n return $localize`Minimum ${errors.minlength.requiredLength} caractères`;\n } else if (errors.maxlength) {\n return $localize`Maximum ${errors.maxlength.requiredLength} caractères`;\n } else if (errors.integer) {\n return $localize`Doit être un nombre entier`;\n } else if (errors.money) {\n return $localize`Le montant doit être un nombre avec un maximum de deux décimales`;\n } else if (errors.email) {\n return $localize`Adresse email invalide`;\n } else if (errors.iban) {\n return $localize`IBAN invalide`;\n } else if (errors.min) {\n return $localize`Doit être plus grand ou égal à ${errors.min.min}${unit}`;\n } else if (errors.max) {\n return $localize`Doit être plus petit ou égal à ${errors.max.max}${unit}`;\n } else if (errors.greaterThan) {\n return $localize`Doit être plus grand que ${errors.greaterThan.greaterThan}${unit}`;\n } else if (errors.notCity) {\n return $localize`Veuillez choisir une ville de la liste`;\n } else if (errors.decimal) {\n return $localize`Maximum de ${errors.decimal} décimales`;\n } else if (errors.duplicateValue) {\n return $localize`N'est pas unique`;\n } else if (errors.available) {\n return $localize`N'est pas disponible`;\n } else if (errors.time) {\n return errors.time;\n } else if (errors.nfcCardHex) {\n return errors.nfcCardHex;\n } else if (errors.pattern && errors.pattern.requiredPattern === urlPattern) {\n return $localize`URL invalide`;\n }\n\n return '';\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nfunction isDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value.valueOf());\n}\n\n/**\n * Returns a string to approximately describe the date.\n *\n * Eg:\n *\n * - \"il y a quelques minutes\"\n * - \"dans 3 jours\"\n * - \"dans 3 ans\"\n */\n@Pipe({\n name: 'timeAgo',\n})\nexport class NaturalTimeAgoPipe implements PipeTransform {\n public fakedNow: number | null = null;\n\n private getNow(): number {\n return this.fakedNow ?? Date.now();\n }\n\n public transform(date: Date | string | null | undefined): string {\n if (!date) {\n return '';\n }\n\n const stamp = isDate(date) ? date.getTime() : Date.parse(date);\n const now = this.getNow();\n\n const $seconds = (stamp - now) / 1000;\n const minutes = $seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n const weeks = days / 7;\n const months = days / 31;\n const years = days / 365;\n\n // Find out the best unit to use for display\n if (years <= -2) {\n const value = Math.round(Math.abs(years));\n return $localize`il y a ${value} ans`;\n } else if (years <= -1) {\n return $localize`il y a un an`;\n } else if (months <= -2) {\n const value = Math.round(Math.abs(months));\n return $localize`il y a ${value} mois`;\n } else if (months <= -1) {\n return $localize`il y a un mois`;\n } else if (weeks <= -2) {\n const value = Math.round(Math.abs(weeks));\n return $localize`il y a ${value} semaines`;\n } else if (weeks <= -1) {\n return $localize`il y a une semaine`;\n } else if (days <= -2) {\n const value = Math.round(Math.abs(days));\n return $localize`il y a ${value} jours`;\n } else if (days <= -1) {\n return $localize`il y a un jour`;\n } else if (hours <= -2) {\n const value = Math.round(Math.abs(hours));\n return $localize`il y a ${value} heures`;\n } else if (hours <= -1) {\n return $localize`il y a une heure`;\n } else if (minutes <= -5) {\n const value = Math.round(Math.abs(minutes));\n return $localize`il y a ${value} minutes`;\n } else if (minutes <= 0) {\n return $localize`il y a quelques minutes`;\n } else if (years > 2) {\n const value = Math.round(years);\n return $localize`dans ${value} ans`;\n } else if (years > 1) {\n return $localize`dans un an`;\n } else if (months > 2) {\n const value = Math.round(months);\n return $localize`dans ${value} mois`;\n } else if (months > 1) {\n return $localize`dans un mois`;\n } else if (weeks > 2) {\n const value = Math.round(weeks);\n return $localize`dans ${value} semaines`;\n } else if (weeks > 1) {\n return $localize`dans une semaine`;\n } else if (days > 2) {\n const value = Math.round(days);\n return $localize`dans ${value} jours`;\n } else if (days > 1) {\n return $localize`dans un jour`;\n } else if (hours > 2) {\n const value = Math.round(hours);\n return $localize`dans ${value} heures`;\n } else if (hours > 1) {\n return $localize`dans une heure`;\n } else if (minutes > 5) {\n const value = Math.round(minutes);\n return $localize`dans ${value} minutes`;\n } else if (minutes > 0) {\n return $localize`dans quelques minutes`;\n } else {\n throw new Error('Time travelling just happened');\n }\n }\n}\n","import {Directive, effect, ElementRef, inject, input} from '@angular/core';\n\nexport function densities(src: string, forImageSet: boolean): string {\n const match = /^(.*\\/)(\\d+)$/.exec(src);\n const base = match?.[1];\n const size = +(match?.[2] ?? 0);\n\n if (!base || !size) {\n return '';\n }\n\n // This should cover most common densities according to https://www.mydevice.io/#tab1\n let result = [1, 1.5, 2, 3, 4]\n .map(density => {\n let url = `${base}${Math.round(size * density)}`;\n if (forImageSet) {\n url = `url(\"${url}\")`;\n }\n\n return `${url} ${density}x`;\n })\n .join(', ');\n\n if (forImageSet) {\n result = `image-set(${result})`;\n }\n\n return result;\n}\n\n@Directive({\n selector: 'img[naturalSrcDensity]',\n})\nexport class NaturalSrcDensityDirective {\n private readonly elementRef = inject<ElementRef<HTMLImageElement>>(ElementRef);\n\n /**\n * Automatically apply image selection based on screen density.\n *\n * The given URL **MUST** be the normal density URL. And it **MUST** include\n * the size as last path segment. That size will automatically be changed\n * for other screen densities. That means that the server **MUST** be able to\n * serve an image of the given size.\n *\n * Usage:\n *\n * ```html\n * <img naturalSrcDensity=\"/api/image/123/200\" />\n * ```\n *\n * Will generate something like:\n *\n * ```html\n * <img\n * src=\"/api/image/123/200\"\n * srcset=\"/api/image/123/200, /api/image/123/300 1.5x, /api/image/123/400 2x, /api/image/123/600 3x, /api/image/123/800 4x\"\n * />\n * ```\n *\n * See https://web.dev/codelab-density-descriptors/\n */\n public readonly naturalSrcDensity = input.required<string>();\n\n public constructor() {\n effect(() => {\n const src = this.naturalSrcDensity();\n if (!src) {\n return;\n }\n\n this.elementRef.nativeElement.src = src;\n this.elementRef.nativeElement.srcset = densities(src, false);\n });\n }\n}\n","import {Directive, effect, ElementRef, inject, input} from '@angular/core';\nimport {densities} from './src-density.directive';\n\n@Directive({\n selector: '[naturalBackgroundDensity]',\n})\nexport class NaturalBackgroundDensityDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Automatically apply background image selection based on screen density.\n *\n * The given URL **MUST** be the normal density URL. And it **MUST** include\n * the size as last path segment. That size will automatically be changed\n * for other screen densities. That means that the server **MUST** be able to\n * serve an image of the given size.\n *\n * If the given URL starts with `url(`, or is not ending with a number, then\n * it will be set as-is, without any processing. This allows using url data,\n * such as `url(data:image/png;base64,aabbcc)`.\n *\n * Usage:\n *\n * ```html\n * <div naturalBackgroundDensity=\"/api/image/123/200\"></div>\n * <div naturalBackgroundDensity=\"/non-responsive.jpg\"></div>\n * <div naturalBackgroundDensity=\"url(data:image/png;base64,aabbcc)\"></div>\n * ```\n *\n * Will generate something like:\n *\n * ```html\n * <div style=\"background-image: image-set(url(\"/api/image/123/200\") 1x, url(\"/api/image/123/300\") 1.5x, url(\"/api/image/123/400\") 2x, url(\"/api/image/123/600\") 3x, url(\"/api/image/123/800\") 4x);\"></div>\n * <div style=\"background-image: url(\"/non-responsive.jpg\");\"></div>\n * <div style=\"background-image: url(data:image/png;base64,aabbcc)\"></div>\n * ```\n *\n * See https://developer.mozilla.org/en-US/docs/Web/CSS/image/image-set\n */\n public readonly naturalBackgroundDensity = input.required<string>();\n\n public constructor() {\n effect(() => {\n const src = this.naturalBackgroundDensity();\n\n if (src.startsWith('url(')) {\n this.elementRef.nativeElement.style.backgroundImage = src;\n return;\n }\n\n // Always include a fallback with standard syntax for browsers that don't support at all, or don't support without\n // prefixes (eg: Chrome v88 that we still see in production)\n const fallback = src ? `url(${src})` : '';\n this.elementRef.nativeElement.style.backgroundImage = fallback;\n\n const responsive = densities(src, true);\n if (responsive) {\n this.elementRef.nativeElement.style.backgroundImage = responsive;\n }\n });\n }\n}\n","import {ComponentType} from '@angular/cdk/portal';\nimport {Component, inject, OnDestroy} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {ActivatedRoute, Router, RouterLink} from '@angular/router';\n\nexport type NaturalDialogTriggerRoutingData<T, D> = {\n component: ComponentType<T>;\n afterClosedRoute?: RouterLink['routerLink'];\n dialogConfig: MatDialogConfig<D>;\n};\n\nexport type NaturalDialogTriggerProvidedData<D> = {\n data?: Readonly<D> | null;\n activatedRoute: ActivatedRoute;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type NaturalDialogTriggerRedirectionValues = RouterLink['routerLink'] | null | undefined | '' | -1;\n\n@Component({\n template: '',\n})\nexport class NaturalDialogTriggerComponent<T, D> implements OnDestroy {\n private readonly dialog = inject(MatDialog);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n\n private readonly dialogRef: MatDialogRef<T, NaturalDialogTriggerRedirectionValues>;\n\n private readonly triggerConfig: NaturalDialogTriggerRoutingData<T, D>;\n\n public constructor() {\n // Data from activated route\n this.triggerConfig = this.route.snapshot.data.trigger as NaturalDialogTriggerRoutingData<T, D>;\n\n // Get data relative to dialog service configuration\n const {data, ...config} = this.triggerConfig.dialogConfig;\n const dialogConfig: MatDialogConfig<NaturalDialogTriggerProvidedData<D>> = {\n ...config,\n data: {\n data: data,\n // Set data accessible into component instantiated by the dialog service\n activatedRoute: this.route,\n },\n };\n\n this.dialogRef = this.dialog.open<\n T,\n NaturalDialogTriggerProvidedData<D>,\n NaturalDialogTriggerRedirectionValues\n >(this.triggerConfig.component, dialogConfig);\n\n // Redirect on closing (if applicable)\n this.dialogRef.beforeClosed().subscribe(exitValue => this.redirect(exitValue));\n }\n\n /**\n * Called when router leaves route, and so on, closes the modal with undefined value to prevent a new redirection\n */\n public ngOnDestroy(): void {\n if (this.dialogRef) {\n this.dialogRef.close(-1); // -1 = no redirection\n }\n }\n\n /**\n * Redirects on modal closing under following rules/conditions\n *\n * If -1 : no redirection\n * If undefined, null or empty string : uses the router provided redirection route or fallbacks on parent route if router don't provide\n * If a value is provided, should be of type any[] and it's used for redirection.\n */\n public redirect(exitValue: NaturalDialogTriggerRedirectionValues): void {\n const isEmptyExitValue = exitValue == null || exitValue === ''; // undefined, null or ''\n\n if (exitValue === -1) {\n // if -1, don't redirect\n return;\n } else if (!isEmptyExitValue) {\n // If value provided, redirect to that route\n this.router.navigate(exitValue as any[]);\n } else if (isEmptyExitValue && this.triggerConfig.afterClosedRoute) {\n // If value is not provided (null) and router context specified default redirection route, use it\n this.router.navigate(this.triggerConfig.afterClosedRoute as any[]);\n } else if (isEmptyExitValue) {\n // If neither of component or router provides redirection, go to parent (care : parent can't have empty path : ''),\n this.router.navigate(['.'], {relativeTo: this.route.parent});\n }\n }\n}\n","import {DOCUMENT, inject, Injectable, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Meta, Title} from '@angular/platform-browser';\nimport {ActivatedRouteSnapshot, Data, NavigationEnd, PRIMARY_OUTLET, Router} from '@angular/router';\nimport {NaturalDialogTriggerComponent} from '../../dialog-trigger/dialog-trigger.component';\nimport {combineLatest, filter, map, Observable, of, startWith, switchMap} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nexport type NaturalSeo = NaturalSeoBasic | NaturalSeoCallback | NaturalSeoResolve;\n\n/**\n * Typically used for \"static\" pages where there is not a single resolved object. So\n * all pages such as \"About\", or list of objects (list of risks, etc.).\n *\n * This should be the most common used variant.\n */\nexport type NaturalSeoBasic = Robots & {\n /**\n * The page title, that will be concatenated with application name\n */\n title: string;\n\n /**\n * If given will be used as page description, otherwise fallback on default value\n */\n description?: string;\n\n /**\n * List of parameters included in the canonical tag's url\n */\n canonicalQueryParamsWhitelist?: string[];\n};\n\ntype NaturalLinkDefinition = {\n charset?: string;\n crossorigin?: string;\n href?: string;\n hreflang?: string;\n media?: string;\n rel?: string;\n rev?: string;\n sizes?: string;\n target?: string;\n type?: string;\n} & Record<string, string>;\n/**\n * Typically used for a \"dynamic\" page where a single object is resolved. So a detail page, such\n * as the detail of a risk and so on.\n */\nexport type NaturalSeoResolve = Robots & {\n /**\n * The key `model` will be used in the resolved data to find the resolved object. The fullName\n * or name of the object will be used for page title, and the object description, if any,\n * will be used for page description.\n */\n resolve: true;\n};\n\n/**\n * Rarely used for a page that has very specific needs and need to build title and description in a custom way.\n * The callback back will be given the resolved data, and it is up to the callback to find whatever it needs.\n */\nexport type NaturalSeoCallback = (routeData: Data) => NaturalSeoBasic | Observable<NaturalSeoBasic>;\n\n/**\n * Typically used to type the routing data received in the component, eg:\n *\n * ```ts\n * class MyComponent extends NaturalAbstractDetail<MyService, NaturalSeoResolveData> {}\n * ```\n */\nexport type NaturalSeoResolveData = {\n seo: NaturalSeoBasic;\n};\n\ntype Robots = {\n /**\n * If given will be used as robots meta tag, otherwise fallback on default value\n */\n robots?: string;\n};\n\ntype NaturalSeoConfigPlain = {\n /**\n * The name of the application that will always appear in the page title\n */\n readonly applicationName: string;\n\n /**\n * Default value for description meta that is used for pages without value\n */\n readonly defaultDescription?: string;\n\n /**\n * Default value for robots meta that is used for pages without value\n */\n readonly defaultRobots?: string;\n\n /**\n * If given, the callback will be called for each route and must return a string that will\n * be inserted between the page title and the application name.\n *\n * It should be used to complete the title with info that are often, but not necessarily always,\n * available throughout the entire application. Typically used for the site/state in OKpilot.\n */\n readonly extraPart?: (routeData: Data) => string;\n\n /**\n * Used to generate alternative tags\n * <link rel=\"alternate\" hreflang=\"en\" href=\"https://www.example.com/en/page\">\n */\n readonly languages?: readonly string[];\n};\n\nexport type NaturalSeoConfig = NaturalSeoConfigPlain | Observable<NaturalSeoConfigPlain>;\nexport const NATURAL_SEO_CONFIG = new InjectionToken<NaturalSeoConfig>('Configuration for SEO service');\n\nexport function stripTags(str: string): string {\n return str.replace(/<\\/?[^>]*>/g, '');\n}\n\ntype Model = {\n name?: string;\n fullName?: string;\n description?: string;\n};\n\ntype ResolvedData = {\n model?: Model | Observable<Model>;\n};\n\n/**\n * This service is responsible to keep up to date the page title and page description according\n * to what is configured in routing or default values.\n *\n * It **must** be injected in the root module of the application to have effects in all modules. And it\n * must be provided a configuration.\n *\n * The full title has the following structure:\n *\n * dialog title - page title - extra part - app name\n *\n * `dialog title` only exists if a `NaturalDialogTriggerComponent` is currently open, and that some SEO is\n * configured for it in the routing.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSeoService {\n private readonly router = inject(Router);\n private readonly titleService = inject(Title);\n private readonly metaTagService = inject(Meta);\n private readonly document = inject(DOCUMENT);\n private locale = inject(LOCALE_ID);\n\n private routeData?: Data;\n private config: NaturalSeoConfigPlain = {\n applicationName: '',\n };\n\n public constructor() {\n const configToken = inject(NATURAL_SEO_CONFIG);\n\n combineLatest({\n config: configToken instanceof Observable ? configToken.pipe(startWith(this.config)) : of(configToken),\n navigationEnd: this.router.events.pipe(filter(event => event instanceof NavigationEnd)),\n })\n .pipe(\n takeUntilDestroyed(),\n switchMap(({config}) => {\n this.config = config;\n const root = this.router.routerState.root.snapshot;\n this.routeData = this.getRouteData(root);\n\n const seo: NaturalSeo = this.routeData.seo ?? {title: ''};\n const dialogRouteData = this.getDialogRouteData(root);\n const dialogSeo: NaturalSeo = dialogRouteData?.seo;\n\n const basic = this.toBasic(seo, this.routeData);\n const dialogBasic =\n dialogRouteData && dialogSeo ? this.toBasic(dialogSeo, dialogRouteData) : of(null);\n\n return combineLatest({basic, dialogBasic});\n }),\n )\n .subscribe(({basic, dialogBasic}) => {\n if (dialogBasic) {\n basic = {\n ...dialogBasic,\n title: this.join([dialogBasic.title, basic.title]),\n };\n }\n\n this.update(basic);\n });\n }\n\n /**\n * Update the SEO with given info. The extra part and app name will be appended automatically.\n *\n * In most cases, this should not be used. And instead, the SEO should be configured in the routing,\n * possibly with the callback variant for some dynamism.\n *\n * But in rare cases, only the Component is able to build a proper page title, after it gathered everything it\n * needed. For those cases, the Component can inject this service and update the SEO directly.\n */\n public update(seo: NaturalSeoBasic): void {\n // Title\n const parts = [\n seo.title,\n this.config.extraPart && this.routeData ? this.config.extraPart(this.routeData) : '',\n this.config.applicationName,\n ];\n\n const title = this.join(parts);\n this.titleService.setTitle(title);\n\n // Description\n const description = seo?.description ?? this.config.defaultDescription;\n this.updateTag('description', description);\n\n // Robots\n const robots = seo?.robots ?? this.config.defaultRobots;\n this.updateTag('robots', robots);\n\n // Canonical\n // Add language in url (after domain) if some languages are provided only\n const language = this.config.languages?.length && this.locale ? this.locale.split('-')[0] : '';\n const urlParts = this.getUrlParts(seo.canonicalQueryParamsWhitelist ?? []);\n this.updateLinkTag({rel: 'canonical', href: this.getUrl(urlParts, language)});\n this.updateAlternates(urlParts);\n }\n\n private updateAlternates(urlParts: {url: string; params: string}): void {\n this.config.languages?.forEach(language => {\n this.updateLinkTag({rel: 'alternate', href: this.getUrl(urlParts, language), hreflang: language});\n });\n }\n\n private getUrlParts(whiteListedParams: string[]): {url: string; params: string} {\n let url = 'https://' + this.document.defaultView?.window.location.hostname;\n const urlTree = this.router.parseUrl(this.router.url);\n\n // need better like something recursive ?\n if (urlTree.root.hasChildren()) {\n const segments = urlTree.root.children.primary?.segments;\n if (segments && segments.length > 0) {\n url += '/' + segments.map(segment => segment.path).join('/');\n }\n }\n\n // Query Params\n let params = '';\n for (const whiteListedParam of whiteListedParams) {\n if (whiteListedParam in urlTree.queryParams) {\n const key = encodeURIComponent(whiteListedParam);\n const value = encodeURIComponent(urlTree.queryParams[whiteListedParam]);\n if (params.length) {\n params += '&';\n }\n params += `${key}=${value}`;\n }\n }\n\n if (params.length) {\n params = '?' + params;\n }\n\n return {url, params};\n }\n\n /**\n * Add language between domain and uri https://example.com/fr/folder/page\n */\n private getUrl(urlParts: {url: string; params: string}, language?: string): string {\n let url = urlParts.url;\n\n if (language) {\n url = this.addLanguageSegment(url, language);\n }\n\n if (urlParts.params) {\n url += urlParts.params;\n }\n\n return url;\n }\n\n private addLanguageSegment(url: string, language: string): string {\n const urlObj = new URL(url);\n const newPath = urlObj.pathname === '/' ? `/${language}` : `/${language}${urlObj.pathname}`;\n return urlObj.origin + newPath + urlObj.search + urlObj.hash;\n }\n\n private join(parts: string[]): string {\n return parts.filter(s => !!s).join(' - ');\n }\n\n private updateTag(name: string, value?: string): void {\n if (value) {\n this.metaTagService.updateTag({\n name: name,\n value: stripTags(value),\n });\n } else {\n this.metaTagService.removeTag(`name=\"${name}\"`);\n }\n }\n\n private updateLinkTag(definition: NaturalLinkDefinition): void {\n const linkElement =\n this.document.head.querySelector<HTMLLinkElement>(this.parseSelector(definition)) ??\n this.document.head.appendChild(this.document.createElement('link'));\n\n if (linkElement) {\n Object.keys(definition).forEach((attribute: string) => {\n linkElement.setAttribute(attribute, definition[attribute]);\n });\n }\n }\n\n /**\n * Returns selector to use in querySelector to get the given link\n */\n private parseSelector(definition: NaturalLinkDefinition): string {\n let attributes = 'link';\n Object.keys(definition).forEach(attr => {\n if (attr !== 'href') {\n attributes += `[${attr}=\"${definition[attr]}\"]`;\n }\n });\n\n return attributes;\n }\n\n /**\n * Returns the data from the most deep/specific activated route\n */\n private getRouteData(route: ActivatedRouteSnapshot): Data {\n if (route.firstChild) {\n return this.getRouteData(route.firstChild);\n } else {\n return route.data;\n }\n }\n\n /**\n * Returns the data from the `NaturalDialogTriggerComponent` if one is open\n */\n private getDialogRouteData(route: ActivatedRouteSnapshot): Data | null {\n if (route.component === NaturalDialogTriggerComponent && route.outlet !== PRIMARY_OUTLET) {\n return route.data;\n }\n\n for (const child of route.children) {\n const data = this.getDialogRouteData(child);\n if (data) {\n return data;\n }\n }\n\n return null;\n }\n\n private toBasic(seo: NaturalSeo, routeData: ResolvedData): Observable<NaturalSeoBasic> {\n if (typeof seo === 'function') {\n const result = seo(routeData);\n return result instanceof Observable ? result : of(result);\n } else if ('resolve' in seo) {\n if (!('model' in routeData)) {\n throw new Error('Could not find resolved data `model` for SEO service');\n }\n\n const model = routeData.model;\n\n return (model instanceof Observable ? model : of(model)).pipe(\n map(value => {\n return {\n title: value?.fullName ?? value?.name ?? '',\n description: value?.description,\n robots: seo.robots,\n };\n }),\n );\n }\n\n return of(seo);\n }\n}\n","import {EnvironmentProviders, inject, provideAppInitializer, Provider} from '@angular/core';\nimport {NATURAL_SEO_CONFIG, NaturalSeoConfig, NaturalSeoService} from './seo.service';\n\n/**\n * Configure and starts `NaturalSeoService`\n */\nexport function provideSeo(config: NaturalSeoConfig): (EnvironmentProviders | Provider)[] {\n return [\n {\n provide: NATURAL_SEO_CONFIG,\n useValue: config,\n },\n provideAppInitializer(() => {\n // injection required, but works without doing anything else\n inject(NaturalSeoService);\n }),\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './directives/linkable-tab.directive';\nexport * from './pipes/capitalize.pipe';\nexport * from './pipes/ellipsis.pipe';\nexport * from './pipes/enum.pipe';\nexport {NaturalErrorMessagePipe} from './pipes/error-message.pipe';\nexport {NaturalTimeAgoPipe} from './pipes/time-ago.pipe';\nexport * from './services/memory-storage';\nexport {NaturalSrcDensityDirective} from './directives/src-density.directive';\nexport {NaturalBackgroundDensityDirective} from './directives/background-density.directive';\nexport {NATURAL_SEO_CONFIG, NaturalSeoService} from './services/seo.service';\nexport type {\n NaturalSeoConfig,\n NaturalSeo,\n NaturalSeoBasic,\n NaturalSeoResolve,\n NaturalSeoCallback,\n NaturalSeoResolveData,\n} from './services/seo.service';\nexport {provideSeo} from './services/seo.provider';\n","import {Component, Input, input} from '@angular/core';\nimport {Literal, NameOrFullName} from '../../types/types';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {RouterLink} from '@angular/router';\nimport {MatButton} from '@angular/material/button';\n\n@Component({\n selector: 'natural-detail-header',\n imports: [MatButton, RouterLink, MatIcon, NaturalIconDirective],\n templateUrl: './detail-header.component.html',\n styleUrl: './detail-header.component.scss',\n})\nexport class NaturalDetailHeaderComponent {\n /**\n * Base URL used to build links, defaults to '/'\n */\n public readonly currentBaseUrl = input<string>();\n\n /**\n * Must be set to get proper links when used in panels\n */\n public readonly isPanel = input(false);\n\n /**\n * If given will show icon before title\n */\n @Input() public icon = '';\n /**\n * Title shown if model has no name, or empty name.\n *\n * Typically should be the human name for the object type, eg: 'Product'\n */\n @Input() public label = '';\n\n /**\n * Label of the root of the breadcrumb, defaults to the value of `label`.\n *\n * Typically should be the plural form of the object type, eg: 'Products'\n */\n @Input() public rootLabel = '';\n\n /**\n * Title shown if model has no id.\n *\n * Typically should be similar to 'New product'.\n */\n public readonly newLabel = input('');\n @Input({required: true}) public model!: Literal;\n public readonly breadcrumbs = input<NameOrFullName[]>([]);\n public readonly listRoute = input<any[]>([]);\n public readonly listFragment = input<string>();\n public readonly link = input<(id: string) => any[]>();\n\n public getRootLink(): string[] {\n return [this.currentBaseUrl() || '/'].concat(this.listRoute());\n }\n\n public getLink(id: string): any[] {\n const link = this.link();\n if (link) {\n return this.getRootLink().concat(link(id));\n }\n\n return this.getRootLink().concat([id]);\n }\n}\n","<div class=\"breadcrumb\">\n @if (rootLabel || label) {\n <a color=\"primary\" mat-button [routerLink]=\"isPanel() ? [] : getRootLink()\" [fragment]=\"listFragment()\">{{\n rootLabel || label\n }}</a>\n }\n @for (parent of breadcrumbs(); track parent.id) {\n /\n <a color=\"primary\" mat-button [routerLink]=\"isPanel() ? [] : getLink(parent.id)\">\n {{ parent?.fullName || parent?.name }}</a\n >\n }\n</div>\n\n<div class=\"body\">\n @if (icon) {\n <div style=\"width: 30px\">\n <mat-icon [naturalIcon]=\"icon\" />\n </div>\n }\n @if (!model.id) {\n <div class=\"mat-font-headline-sm nat-no-margin newLabel\">{{ newLabel() }}</div>\n }\n @if (model.id) {\n <div class=\"mat-font-headline-sm nat-no-margin label\">{{ model.name || model.fullName || label }}</div>\n }\n <div>\n <ng-content />\n </div>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './detail-header.component';\n","import {Component, DestroyRef, inject} from '@angular/core';\nimport {MatListOption, MatSelectionList} from '@angular/material/list';\nimport {BehaviorSubject, merge, Observable, of} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn, Validators} from '@angular/forms';\nimport {map, startWith} from 'rxjs/operators';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from '../types';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatFormField, MatLabel} from '@angular/material/form-field';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nexport type TypeSelectItem =\n | Scalar\n | {\n id: Scalar;\n name: Scalar;\n }\n | {\n value: Scalar;\n name: Scalar;\n };\n\nexport type TypeSelectConfiguration = {\n items: TypeSelectItem[] | Observable<TypeSelectItem[]>;\n multiple?: boolean;\n /**\n * If true (default) a selectbox allows to choose an operator. Otherwise, the selectbox is hidden and the operator will always be `is`.\n */\n operators?: boolean;\n};\n\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n MatSelectionList,\n MatListOption,\n ],\n templateUrl: './type-select.component.html',\n})\nexport class TypeSelectComponent implements DropdownComponent {\n private readonly destroyRef = inject(DestroyRef);\n public readonly renderedValue = new BehaviorSubject<string>('');\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public items: TypeSelectItem[] = [];\n public readonly configuration: Required<TypeSelectConfiguration>;\n\n private readonly defaults: Required<TypeSelectConfiguration> = {\n items: [],\n multiple: true,\n operators: true,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeSelectConfiguration>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n public getId(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item) {\n return (item as any).id || (item as any).value;\n }\n\n return item;\n }\n\n public getDisplay(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item?.name) {\n return item.name;\n }\n\n return item as Scalar;\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const values = this.valueCtrl.value;\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private isMultiple(): boolean {\n return this.configuration.multiple;\n }\n\n private getItemById(id: Scalar): TypeSelectItem | undefined {\n return this.items.find(item => this.getId(item) === id);\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (condition) {\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n }\n\n // Always reload value, even without condition because we need to load list of available items in all cases\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n private reloadValue(condition: FilterGroupConditionField | null): Observable<Scalar[]> {\n const wantedIds = condition?.in?.values ?? [];\n\n const items$ = Array.isArray(this.configuration.items)\n ? of(this.configuration.items)\n : this.configuration.items;\n\n return items$.pipe(\n takeUntilDestroyed(this.destroyRef),\n map(items => {\n this.items = items;\n\n // Reload selection, according to possible values from configuration\n const possibleIds = this.items.map(item => this.getId(item));\n const wantedAndPossibleIds = wantedIds.filter(id => possibleIds.some(i => i === id));\n\n return wantedAndPossibleIds;\n }),\n );\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection =\n this.valueCtrl.value\n ?.map((id: Scalar) => {\n const item = this.getItemById(id);\n if (item) {\n return this.getDisplay(item);\n }\n })\n .join(', ') ?? null;\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (!this.configuration.operators) {\n return 'is';\n }\n\n if (condition.in && !condition.in.not) {\n return 'is';\n } else if (condition.in?.not) {\n return 'isnot';\n } else if (condition.null?.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n private operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: Scalar[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {in: {values: values}};\n case 'isnot':\n return {in: {values: values, not: true}};\n case 'any':\n return {null: {not: true}};\n case 'none':\n return {null: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + (key as string));\n }\n }\n}\n","<form [formGroup]=\"form\">\n @if (configuration.operators) {\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n\n @if (requireValueCtrl) {\n <mat-selection-list [formControl]=\"valueCtrl\" [multiple]=\"configuration.multiple\">\n @for (item of items; track item) {\n <mat-list-option togglePosition=\"before\" [value]=\"getId(item)\">\n {{ getDisplay(item) }}\n </mat-list-option>\n }\n </mat-selection-list>\n }\n</form>\n","import {Directive, inject} from '@angular/core';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../search/types/dropdown-component';\nimport {FormControl, FormGroup, ValidatorFn, Validators} from '@angular/forms';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from './types';\nimport {startWith} from 'rxjs/operators';\n\n@Directive()\nexport abstract class AbstractAssociationSelectComponent<C> implements DropdownComponent {\n public readonly configuration: C;\n public readonly renderedValue = new BehaviorSubject<string>('');\n\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public constructor() {\n const data = inject<NaturalDropdownData<C>>(NATURAL_DROPDOWN_DATA);\n this.configuration = data.configuration;\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n protected abstract reloadValue(condition: FilterGroupConditionField): Observable<unknown>;\n\n protected abstract renderValueWithoutOperator(): string;\n\n public abstract getCondition(): FilterGroupConditionField;\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n protected getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection = this.renderValueWithoutOperator();\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n protected conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (condition.have && !condition.have.not) {\n return 'is';\n } else if (condition.have?.not) {\n return 'isnot';\n } else if (condition.empty?.not) {\n return 'any';\n } else if (condition.empty && !condition.empty.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n protected operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: string[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {have: {values: values}};\n case 'isnot':\n return {have: {values: values, not: true}};\n case 'any':\n return {empty: {not: true}};\n case 'none':\n return {empty: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + (key as string));\n }\n }\n}\n","import {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {computed, Directive, DoCheck, inject, input, Input, OnInit, output} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormControlDirective,\n FormControlName,\n NgControl,\n Validators,\n} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\n\n/**\n * This will completely ignore internal formControl and instead use the one from the component\n * which comes from outside of this component. This basically allows us to **not** depend on\n * touched status propagation between outside and inside world, and thus get rid of our legacy\n * custom FormControl class (\"NaturalFormControl\").\n */\nclass ExternalFormControlMatcher<TValue, TInput> extends ErrorStateMatcher {\n public constructor(private readonly component: AbstractSelect<TValue, TInput>) {\n super();\n }\n\n public override isErrorState(): boolean {\n const externalCtrl = this.component.ngControl?.control || this.component.internalCtrl;\n if (externalCtrl) {\n return !!(externalCtrl.errors && (externalCtrl.touched || externalCtrl.dirty));\n }\n\n return false;\n }\n}\n\n@Directive()\nexport abstract class AbstractSelect<TValue, TInput> implements OnInit, ControlValueAccessor, DoCheck {\n public readonly placeholder = input<string>();\n\n /**\n * Mat-hint, if given, and it is non-empty, then `subscriptSizing` will\n * automatically be set to `dynamic` to allow for long, wrapping text.\n */\n public readonly hint = input<string | null>();\n\n protected readonly subscriptSizing = computed(() => (this.hint() ? 'dynamic' : 'fixed'));\n\n /**\n * If given an error message, it will be displayed in a `<mat-error>`, but only if the control\n * is actually in an error state via one of its validators.\n *\n * This is not needed for the special case of the required validator, because the message is hardcoded.\n */\n @Input() public error: string | null = null;\n\n /**\n * If the field is required\n */\n @Input()\n public set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.applyRequired();\n }\n\n public get required(): boolean {\n return !!this._required;\n }\n\n private _required: boolean | undefined;\n\n /**\n * Add a suffix button that is a link to given destination\n */\n @Input() public navigateTo?: any[] | string | null;\n\n /**\n * If provided cause a new clear button to appear\n */\n public readonly clearLabel = input<string>();\n\n /**\n * Whether to show the search icon\n */\n public readonly showIcon = input(true);\n\n /**\n * Icon name\n */\n public readonly icon = input('search');\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n public readonly displayWith = input<(item: TValue | null) => string>();\n\n /**\n * Emit the selected value whenever it changes\n */\n public readonly selectionChange = output<TValue | null>();\n\n /**\n * Emits when internal input is blurred\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n public readonly blur = output();\n\n /**\n * Contains internal representation for current selection AND searched text (for autocomplete)\n *\n * It is **not** necessarily `TValue | null`.\n *\n * - NaturalSelectComponent: `string | TValue | null`. We allow `string`\n * only when `optionRequired` is false, so most of the time it is `TValue | null`.\n * - NaturalSelectHierarchicComponent: `string | null`.\n * - NaturalSelectEnumComponent: `TValue | null`.\n *\n * In natural-select context, we use pristine and dirty to identify if the displayed value is search or committed model :\n * - Pristine status (unchanged value) means the model is displayed and propagated = the selection is committed\n * - Dirty status (changed value) means we are in search/autocomplete mode\n */\n public readonly internalCtrl = new FormControl<TInput | null>(null);\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onChange?: (item: TValue | null) => void;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onTouched?: () => void;\n\n public readonly matcher: ExternalFormControlMatcher<TValue, TInput>;\n public readonly ngControl = inject(NgControl, {optional: true, self: true});\n\n public constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.matcher = new ExternalFormControlMatcher(this);\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.applyRequired();\n }\n }\n\n public writeValue(value: TInput | null): void {\n this.internalCtrl.setValue(value);\n }\n\n public ngOnInit(): void {\n const isReactive = this.ngControl instanceof FormControlDirective || this.ngControl instanceof FormControlName;\n if (isReactive && typeof this._required !== 'undefined') {\n console.warn('<natural-select-*> should not be used as ReactiveForm and with the [required] attribute');\n }\n }\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public registerOnChange(fn: (item: TValue | null) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public abstract getDisplayFn(): (item: TValue | null) => string;\n\n /**\n * Commit the model to null\n * Emit and event to update the model\n */\n public clear(): void {\n this.internalCtrl.setValue(null);\n this.propagateValue(null);\n }\n\n /**\n * If input is dirty (search running) restore to model value\n */\n public onBlur(): void {\n this.touch();\n this.blur.emit();\n }\n\n /**\n * Commit the model change\n */\n public propagateValue(value: TValue | null): void {\n // before selectionChange to allow formControl to update before change is effectively emitted\n if (this.onChange) {\n this.onChange(value);\n }\n\n this.selectionChange.emit(value);\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel() && !!this.internalCtrl.value;\n }\n\n public touch(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n public hasRequiredError(): boolean {\n const control = this.ngControl?.control ? this.ngControl?.control : this.internalCtrl;\n\n return control.hasError('required');\n }\n\n /**\n * Apply Validators.required on the internal form, based on ngControl or [required] attribute, giving priority to attribute.\n */\n private applyRequired(): void {\n // Required status on parent validator\n const outerRequiredStatus = this?.ngControl?.control?.hasValidator(Validators.required);\n\n // Wanted required status, giving priority to template\n const newRequiredStatus = typeof this._required !== 'undefined' ? this._required : outerRequiredStatus;\n\n // Actual internal validation status\n const currentRequiredStatus = this.internalCtrl.hasValidator(Validators.required);\n\n // If wanted status is similar to actual status, stop everything\n if (currentRequiredStatus === newRequiredStatus) {\n return;\n }\n\n // Apply only if changed\n if (newRequiredStatus) {\n this.internalCtrl.setValidators(Validators.required);\n } else {\n this.internalCtrl.clearValidators();\n }\n\n this.internalCtrl.updateValueAndValidity();\n }\n}\n","import {\n AfterViewInit,\n Component,\n contentChild,\n DestroyRef,\n inject,\n Input,\n input,\n OnInit,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocomplete, MatAutocompleteTrigger} from '@angular/material/autocomplete';\nimport {merge} from 'es-toolkit';\nimport {Observable} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, finalize, map} from 'rxjs/operators';\nimport {PaginatedData} from '../../../classes/data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall, Literal} from '../../../types/types';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {MatProgressSpinner} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix} from '@angular/material/form-field';\nimport {MatOption} from '@angular/material/core';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n// Return the type of TValue for the given TService\ntype ValueTypeFor<TService> = string | ExtractTallOne<TService>;\n\n/**\n * Default usage:\n * ```html\n * <natural-select [service]=\"myServiceInstance\" [(model)]=\"myModel\" (modelChange)=myChangeFn($event) />\n * ```\n *\n * Custom template usage :\n * ```html\n * <natural-select [service]=\"svc\" [(ngModel)]=\"model\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-select>\n * ```\n *\n * `[(ngModel)]` and `(ngModelChange)` are optional.\n *\n * Placeholder :\n * ```html\n * <natural-select placeholder=\"my placeholder\" />\n * ```\n *\n * Search with like %xxx% on specified field `name` instead of custom filter on whole object\n * ```html\n * <natural-select searchField=\"name\" />\n * ```\n *\n * Allows to input free string without selecting an option from autocomplete suggestions\n * ```html\n * <natural-select [optionRequired]=\"false\" />\n * ```\n */\n@Component({\n selector: 'natural-select',\n imports: [\n MatAutocomplete,\n NgTemplateOutlet,\n AsyncPipe,\n MatOption,\n MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatPrefix,\n MatSuffix,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatIcon,\n NaturalIconDirective,\n MatProgressSpinner,\n MatButton,\n MatIconButton,\n MatTooltip,\n RouterLink,\n MatAutocompleteTrigger,\n ],\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n})\nexport class NaturalSelectComponent<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends AbstractSelect<ValueTypeFor<TService>, ValueTypeFor<TService>>\n implements OnInit, ControlValueAccessor, AfterViewInit\n{\n private readonly destroyRef = inject(DestroyRef);\n public readonly autoTrigger = viewChild.required(MatAutocompleteTrigger);\n public readonly itemTemplate = contentChild(TemplateRef);\n\n /**\n * Service with watchAll function that accepts queryVariables.\n */\n public readonly service = input.required<TService>();\n\n /**\n * If false, allows to input free string without selecting an option from autocomplete suggestions\n */\n public readonly optionRequired = input(true);\n\n /**\n * The field on which to search for, default to 'custom'.\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n @Input() public searchField: 'custom' | string = 'custom';\n\n /**\n * The operator with which to search for, default to 'search' if `searchField` is 'custom', else 'like'.\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n @Input() public searchOperator: 'search' | string | null = null;\n\n /**\n * Cache the committed value during search mode.\n * It's used to be restored in case we cancel the selection\n */\n private lastValidValue: ValueTypeFor<TService> | null = null;\n\n /**\n * Additional filter for query\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter'] | null | undefined) {\n this.variablesManager.set('additional-filter', {filter: filter});\n }\n\n /**\n * Items returned by server to show in listing\n */\n public items: null | Observable<readonly any[]> = null;\n\n /**\n * Whether we are searching something\n */\n public loading = false;\n\n /**\n * If some items are not shown in result list\n * Shows a message after list if true\n */\n public hasMoreItems = false;\n\n public nbTotal = 0;\n\n /**\n * Default page size\n */\n public readonly pageSize = input(10);\n\n /**\n * Init search options\n */\n private readonly variablesManager = new NaturalQueryVariablesManager<QueryVariables>();\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public override set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.initService();\n }\n\n public ngAfterViewInit(): void {\n this.internalCtrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef), distinctUntilChanged(), debounceTime(300))\n .subscribe(val => this.search(val));\n }\n\n public onInternalFormChange(): void {\n // If we allow free string typing, then we propagate it as it is being typed\n if (!this.optionRequired()) {\n this.propagateValue(this.internalCtrl.value);\n }\n }\n\n public override onBlur(): void {\n if (this.internalCtrl.dirty) {\n this.reset();\n }\n super.onBlur();\n }\n\n /**\n * Reset form to it's initial value\n * Discard searched text (in autocomplete use case)\n * Doest not commit the change to the model (no change event is emitted)\n */\n public reset(): void {\n this.internalCtrl.setValue(this.lastValidValue);\n this.internalCtrl.markAsPristine();\n }\n\n /**\n * Enter semantic means we want to validate something.\n * If we hit ENTER while typing a text, the stroke is ignored because the value is invalid (it's accepted in free text mode)\n * If we hit ENTER while the input field is empty, we validate the unselection (empty is a valid value)\n */\n public onKeyEnter(): void {\n if (!this.internalCtrl.value) {\n this.clear();\n this.autoTrigger().closePanel();\n }\n }\n\n public override writeValue(value: ValueTypeFor<TService> | null): void {\n super.writeValue(value);\n this.lastValidValue = this.internalCtrl.value;\n }\n\n private initService(): void {\n // Assert given service has a watchAll function\n if (typeof this.service().watchAll !== 'function') {\n throw new TypeError('Provided service does not contain watchAll function');\n }\n\n const defaultPagination = {\n pagination: {\n pageIndex: 0,\n pageSize: this.pageSize(),\n },\n };\n\n const variables = merge(defaultPagination, this.getSearchFilter(null));\n this.variablesManager.set('variables', variables);\n }\n\n public startSearch(): void {\n // Start search only once\n if (this.items) {\n return;\n }\n\n // Init query, and when query results arrive, finish loading, and count items\n this.items = this.service()\n .watchAll(this.variablesManager)\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n finalize(() => (this.loading = false)),\n map(data => {\n this.loading = false;\n this.nbTotal = data.length;\n const nbListed = Math.min(data.length, this.pageSize());\n this.hasMoreItems = this.nbTotal > nbListed;\n\n return data.items;\n }),\n );\n\n this.loading = true;\n this.items.subscribe();\n }\n\n /**\n * Commit the model change\n * Set internal form as pristine to reflect that the visible value match the model\n */\n public override propagateValue(value: ValueTypeFor<TService> | null): void {\n this.internalCtrl.markAsPristine();\n this.lastValidValue = this.internalCtrl.value;\n this.loading = false;\n\n // If we cleared value via button, but we allow free string typing, then force to empty string\n if (!this.optionRequired() && value === null) {\n value = '';\n }\n\n super.propagateValue(value);\n }\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: ValueTypeFor<TService> | null) => string {\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return (item: any) => {\n if (!item) {\n return '';\n }\n\n if (typeof item === 'string') {\n return item;\n }\n\n return item.fullName || item.name || item.iban || item[this.searchField] || item.id;\n };\n }\n\n public override clear(): void {\n this.search(null);\n super.clear();\n }\n\n public search(term: ValueTypeFor<TService> | null): void {\n if (typeof term === 'string' || term === null) {\n if (term) {\n this.loading = !!this.items;\n }\n\n this.variablesManager.merge('variables', this.getSearchFilter(term));\n }\n }\n\n public override showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel() && !!this.internalCtrl.value;\n }\n\n private getSearchFilter(term: string | null): QueryVariables {\n const searchOperator = this.searchOperator ?? (this.searchField === 'custom' ? 'search' : 'like');\n if (term && searchOperator === 'like') {\n term = '%' + term + '%';\n }\n\n return {\n filter: {\n groups: [\n {\n conditions: [\n {\n [this.searchField]: term\n ? {\n [searchOperator]: {value: term},\n }\n : null,\n },\n ],\n },\n ],\n },\n };\n }\n\n public getVariablesForDebug(): Readonly<QueryVariables> | undefined {\n return this.variablesManager.variables.value;\n }\n}\n","<!-- eslint-disable @angular-eslint/template/cyclomatic-complexity -->\n<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n panelWidth=\"auto !important\"\n [displayWith]=\"getDisplayFn()\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n>\n @for (item of items | async; track $index) {\n <mat-option [value]=\"item\">\n @let customTemplate = itemTemplate();\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"customTemplate ? customTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (hasMoreItems) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">Saisir pour chercher parmi {{ nbTotal }} résultats</div>\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder() }}</mat-label>\n\n <input\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n [errorStateMatcher]=\"matcher\"\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger().openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n />\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon()) {\n <mat-icon matIconPrefix [naturalIcon]=\"icon()\" />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner mode=\"indeterminate\" [diameter]=\"21\" [strokeWidth]=\"5\" />\n </div>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel()) {\n <button matIconButton i18n-matTooltip matTooltip=\"Désélectionner\" (click)=\"clear()\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired()) {\n <button matIconButton i18n-matTooltip matTooltip=\"Annuler la recherche\" (click)=\"reset()\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button color=\"error\" mat-button (click)=\"clear()\">{{ clearLabel() }}</button>\n }\n </div>\n}\n","import {Component} from '@angular/core';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {ExtractTone, ExtractVall, UntypedModelService} from '../../../types/types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {NaturalSelectComponent} from '../../select/select/select.component';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatFormField, MatLabel} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport type TypeSelectNaturalConfiguration<TService extends UntypedModelService> = {\n service: TService;\n placeholder: string;\n filter?: ExtractVall<TService>['filter'];\n pageSize?: number;\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatSelect, MatOption, NaturalSelectComponent],\n templateUrl: './type-natural-select.component.html',\n})\nexport class TypeNaturalSelectComponent<\n TService extends UntypedModelService,\n> extends AbstractAssociationSelectComponent<TypeSelectNaturalConfiguration<TService>> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const id = this.valueCtrl.value?.id;\n const values = id ? [id] : [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n protected reloadValue(condition: FilterGroupConditionField): Observable<ExtractTone<TService>> {\n if (!condition.have) {\n return EMPTY;\n }\n\n return this.configuration.service.getOne(condition.have.values[0]);\n }\n\n protected renderValueWithoutOperator(): string {\n const selected: {id: string; name?: string; fullName?: string} | null = this.valueCtrl.value;\n const selectedName = selected?.fullName || selected?.name || '';\n\n return selectedName;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (configuration && requireValueCtrl) {\n <natural-select\n style=\"display: inline\"\n [formControl]=\"valueCtrl\"\n [placeholder]=\"configuration.placeholder\"\n [service]=\"configuration.service\"\n [filter]=\"configuration.filter\"\n [pageSize]=\"configuration.pageSize || 10\"\n />\n }\n</form>\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatLabel} from '@angular/material/form-field';\n\n/**\n * Show an error message if the control has a value and an error, even if control is not dirty and not touched.\n */\nexport class InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl | null): boolean {\n return control && control.invalid && control.value;\n }\n}\n\n@Component({\n imports: [MatFormField, MatLabel, MatError, MatInput, FormsModule, ReactiveFormsModule],\n templateUrl: './type-text.component.html',\n styleUrl: './type-text.component.scss',\n})\nexport class TypeTextComponent implements DropdownComponent {\n protected dropdownRef = inject(NaturalDropdownRef);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly formCtrl = new FormControl('', {nonNullable: true});\n public readonly matcher = new InvalidWithValueStateMatcher();\n\n public constructor() {\n const data = inject<NaturalDropdownData<never>>(NATURAL_DROPDOWN_DATA);\n\n this.formCtrl.valueChanges.subscribe(value => {\n this.renderedValue.next(value === null ? '' : this.formCtrl.value);\n });\n\n this.formCtrl.setValidators([Validators.required]);\n\n if (data.condition?.like) {\n this.formCtrl.setValue('' + data.condition.like.value);\n }\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.formCtrl.value) {\n return {};\n }\n\n return {like: {value: this.formCtrl.value}};\n }\n\n public isValid(): boolean {\n return this.formCtrl.valid;\n }\n\n public isDirty(): boolean {\n return this.formCtrl.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n}\n","<mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n>Valeur</mat-label>\n <input\n matInput\n type=\"text\"\n autocomplete=\"off\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"formCtrl\"\n [required]=\"true\"\n (keydown.enter)=\"close()\"\n />\n @if (formCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n</mat-form-field>\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn, Validators} from '@angular/forms';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {\n type PossibleComparableOperator,\n type PossibleComparableOperatorKeys,\n possibleComparableOperators,\n possibleNullComparableOperators,\n} from '../types';\nimport {InvalidWithValueStateMatcher} from '../type-text/type-text.component';\nimport {decimal} from '../../../classes/validators';\nimport {MatInput} from '@angular/material/input';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatError, MatFormField, MatLabel} from '@angular/material/form-field';\nimport {startWith} from 'rxjs/operators';\n\nexport type TypeNumberConfiguration = {\n min?: number | null;\n max?: number | null;\n step?: number | null;\n /**\n * If true, two extra choices, \"avec\" and \"sans\", will be shown to filter by the (in-)existence of a value\n */\n nullable?: boolean;\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatError, MatSelect, MatOption, MatInput],\n templateUrl: './type-number.component.html',\n styleUrl: './type-number.component.scss',\n})\nexport class TypeNumberComponent implements DropdownComponent {\n protected dropdownRef = inject(NaturalDropdownRef);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeNumberConfiguration>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOperatorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl(null as number | null);\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n public requireValueCtrl = false;\n public readonly operators: readonly PossibleComparableOperator[];\n private readonly defaults: Required<TypeNumberConfiguration> = {\n min: null,\n max: null,\n step: null,\n nullable: false,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeNumberConfiguration>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n this.operators = this.configuration.nullable ? possibleNullComparableOperators : possibleComparableOperators;\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const key = this.operatorCtrl.value;\n const value = this.valueCtrl.value;\n\n switch (key) {\n case 'any':\n return {null: {not: true}};\n case 'none':\n return {null: {not: false}};\n default: {\n return {[key]: {value: value}};\n }\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n\n private initValidators(): void {\n const blacklist: PossibleComparableOperatorKeys[] = ['any', 'none'];\n this.requireValueCtrl = !blacklist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n if (typeof this.configuration.min === 'number') {\n validators.push(Validators.min(this.configuration.min));\n }\n\n if (typeof this.configuration.max === 'number') {\n validators.push(Validators.max(this.configuration.max));\n }\n\n if (this.configuration.step) {\n const decimals = /\\.(\\d+)$/.exec('' + this.configuration.step)?.[1] ?? '';\n const decimalCount = decimals.length;\n validators.push(decimal(decimalCount));\n }\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n this.valueCtrl.setValue(condition[operatorKey]?.value);\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (operator && ['any', 'none'].includes(operator.key)) {\n return operator.label;\n } else if (operator && this.valueCtrl.value !== null) {\n return operator.label + ' ' + this.valueCtrl.value;\n } else {\n return '';\n }\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleComparableOperatorKeys {\n if (condition.null?.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n } else {\n return this.operators.find(operator => condition[operator.key])?.key ?? 'equal';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field\n style=\"margin-right: 1em\"\n subscriptSizing=\"dynamic\"\n [style.max-width]=\"configuration.nullable ? '6em' : '4em'\"\n >\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (requireValueCtrl) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n>Valeur</mat-label>\n <input\n matInput\n type=\"number\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"valueCtrl\"\n [attr.max]=\"configuration.max\"\n [attr.min]=\"configuration.min\"\n [required]=\"true\"\n [step]=\"configuration.step\"\n (keydown.enter)=\"close()\"\n />\n @if (valueCtrl.hasError('min')) {\n <mat-error>< {{ configuration.min }}</mat-error>\n }\n @if (valueCtrl.hasError('max')) {\n <mat-error>> {{ configuration.max }}</mat-error>\n }\n </mat-form-field>\n }\n</form>\n","import {Component, inject} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {Facet, NaturalSearchFacets} from '../types/facet';\nimport {MatListItem, MatNavList} from '@angular/material/list';\n\n/**\n * Configuration for facet selection\n */\nexport type FacetSelectorConfiguration = {\n facets: NaturalSearchFacets;\n};\n\n@Component({\n imports: [MatNavList, MatListItem],\n templateUrl: './facet-selector.component.html',\n styleUrl: './facet-selector.component.scss',\n})\nexport class FacetSelectorComponent implements DropdownComponent {\n public readonly data = inject<NaturalDropdownData<FacetSelectorConfiguration>>(NATURAL_DROPDOWN_DATA);\n protected dropdownRef = inject(NaturalDropdownRef);\n\n // Never has a real value\n public readonly renderedValue = new BehaviorSubject<string>('');\n public facets = this.data.configuration.facets;\n public selection: Facet | null = null;\n\n /**\n * Get value, including rich object types\n */\n public getCondition(): FilterGroupConditionField {\n return {};\n }\n\n /**\n * Allow to close the dropdown with a valid value\n */\n public close(): void {\n if (this.selection) {\n this.dropdownRef.close({\n condition: {},\n facet: this.selection,\n });\n }\n }\n\n public isValid(): boolean {\n return !!this.selection;\n }\n\n public isDirty(): boolean {\n return true;\n }\n}\n","@if (data.title) {\n <div class=\"dropdown-title nat-bold\">{{ data.title }}</div>\n}\n<mat-nav-list>\n @for (facet of facets; track $index) {\n <mat-list-item (click)=\"selection = facet; close()\">\n <a>{{ facet.display }}</a>\n </mat-list-item>\n }\n</mat-nav-list>\n","import {\n Component,\n ComponentRef,\n createComponent,\n createEnvironmentInjector,\n ElementRef,\n EnvironmentInjector,\n HostListener,\n inject,\n Input,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n StaticProvider,\n viewChild,\n} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport {ErrorStateMatcher, MatRipple} from '@angular/material/core';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {getFacetFromSelection} from '../classes/utils';\nimport {NaturalDropdownRef} from '../dropdown-container/dropdown-ref';\nimport {\n NATURAL_DROPDOWN_DATA,\n NaturalDropdownData,\n NaturalDropdownService,\n} from '../dropdown-container/dropdown.service';\nimport {FacetSelectorComponent, FacetSelectorConfiguration} from '../facet-selector/facet-selector.component';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {DropdownResult, NaturalSearchSelection} from '../types/values';\nimport {MatIconButton} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatInput} from '@angular/material/input';\nimport {MatFormField, MatLabel, MatPrefix, MatSuffix} from '@angular/material/form-field';\n\n// Required to check invalid fields when initializing natural-search\nclass AlwaysErrorStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null): boolean {\n return !!control && control.invalid;\n }\n}\n\nfunction isComponentValid(component: DropdownComponent): ValidatorFn {\n return (): ValidationErrors | null => {\n if (!component.isValid()) {\n return {component: true};\n }\n\n return null;\n };\n}\n\n@Component({\n selector: 'natural-input',\n imports: [\n MatFormField,\n MatLabel,\n MatPrefix,\n MatSuffix,\n MatRipple,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatIcon,\n NaturalIconDirective,\n MatIconButton,\n ],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n})\nexport class NaturalInputComponent implements OnInit, OnChanges, OnDestroy {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly dropdownService = inject(NaturalDropdownService);\n private readonly injector = inject(EnvironmentInjector);\n\n /**\n * Controls the ripple effect, used when opening a dropdown\n */\n public readonly ripple = viewChild.required(MatRipple);\n\n /**\n * Native element ref for <input> related to this <natural-input> component\n */\n public readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n /**\n * Label for this field\n */\n @Input() public placeholder?: string;\n\n /**\n * Name of the field on which do a global search (without facet)\n */\n public readonly searchFieldName = input('search');\n\n /**\n * Selected setted for this component\n */\n @Input() public selection: NaturalSearchSelection | null = null;\n\n /**\n * Available facets, allows the user to pick one, than generated then a selection\n */\n public readonly facets = input.required<NaturalSearchFacets>();\n\n /**\n * Text display in the dropdown to select the facet\n */\n public readonly dropdownTitle = input('');\n\n /**\n * Emits when user a added/updated/deleted a search (from global context or from facet)\n */\n public readonly selectionChange = output<NaturalSearchSelection>();\n\n /**\n * Emits when user removes the search by pressing the cross icon\n */\n public readonly cleared = output<NaturalInputComponent>();\n\n /**\n * Selected facet from the list of available facets\n */\n public facet: Facet | null = null;\n\n /**\n * Controller for the input field\n */\n public readonly formCtrl = new FormControl<string | null>(null);\n\n /**\n * Customer error matcher that should validate on each change (including initialisation)\n */\n public readonly errorMatcher = new AlwaysErrorStateMatcher();\n\n /**\n * Reference of the opened dropdown container\n */\n private dropdownRef: NaturalDropdownRef | null = null;\n\n /**\n * Reference of the component inside the dropdown container\n */\n private dropdownComponentRef: ComponentRef<DropdownComponent> | null = null;\n\n /**\n * Minimum input length (number of chars)\n * See length attribute\n */\n private readonly minLength = 5;\n\n /**\n * Size of the input (number of chars)\n * Match the input.size attribute\n */\n public length = this.minLength;\n\n /**\n * Flag, that, if marked as yes, prevents the opening of the dropdown\n * Is used to prevent dropdown opening when natural-search takes the focus from parent context (like on modal opening)\n */\n private neutralizeDropdownOpening = false;\n\n /**\n * Custom management for taking the focus from parent context\n * When focusing manually on the <input>, a dropdown is opened\n * But when the focus is given from angular in a parent context (like a dialog) the dropdown would open and we don't want it.\n */\n @HostListener('focus')\n public focus(): void {\n this.neutralizeDropdownOpening = true;\n this.input().nativeElement.focus();\n this.neutralizeDropdownOpening = false;\n }\n\n public ngOnChanges(): void {\n const facets = this.facets();\n if (!facets && this.selection) {\n setTimeout(() => this.clear());\n } else if (facets && this.selection) {\n this.facet = getFacetFromSelection(facets, this.selection);\n\n if (this.isDropdown()) {\n const dropdownComponent = this.createComponent(this.facet as DropdownFacet<FacetSelectorConfiguration>);\n this.formCtrl.setValidators([isComponentValid(dropdownComponent)]);\n dropdownComponent.renderedValue.subscribe(value => {\n this.formCtrl.setValue(value);\n });\n } else if (this.isFlag()) {\n this.formCtrl.setValue('');\n } else if (\n this.selection &&\n this.selection.field === this.searchFieldName() &&\n this.selection.condition.like\n ) {\n // global search mode\n this.formCtrl.setValue('' + this.selection.condition.like.value);\n } else {\n // If component is invalid (no facet and not a global search), clear from result and destroy component\n setTimeout(() => this.clear());\n }\n }\n }\n\n public ngOnInit(): void {\n this.input().nativeElement.addEventListener('focus', () => {\n this.openDropdown();\n });\n\n this.input().nativeElement.addEventListener('keyup', () => {\n if (!this.dropdownRef) {\n return;\n }\n\n if (this.formCtrl.value !== '') {\n this.dropdownRef.close();\n }\n });\n\n if (!this.placeholder) {\n this.placeholder = $localize`Recherche`;\n }\n\n const placeholderSize = (this.facet ? this.facet.display.length : this.placeholder.length) * 0.66;\n this.length = Math.max(this.minLength, Math.ceil(placeholderSize));\n }\n\n public ngOnDestroy(): void {\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n }\n\n public search(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (!this.formCtrl.value) {\n return;\n }\n\n if (this.isDropdown()) {\n return;\n }\n\n if (this.formCtrl.valid && this.formCtrl.dirty) {\n this.selectionChange.emit(this.getSelection({like: {value: this.formCtrl.value}}));\n }\n }\n\n public clear(): void {\n // Prevent opening the facets list when we are removing a facet\n this.neutralizeDropdownOpening = true;\n setTimeout(() => (this.neutralizeDropdownOpening = false));\n\n this.facet = null;\n this.selection = null;\n this.formCtrl.setValue(null);\n this.cleared.emit(this);\n }\n\n public openDropdown(): void {\n if (this.dropdownRef || this.neutralizeDropdownOpening) {\n // Prevent to open multiple dropdowns.\n // Happens as we open on \"focus\", and alt+tab re-activate focus on an element that already had\n // focus when leaving window with another alt+tab\n return;\n }\n\n this.launchRipple();\n\n // If there is no facet and no string typed, show panel to select the facet\n if (!this.facet && !this.formCtrl.value) {\n this.openFacetSelectorDropdown(this.dropdownTitle());\n } else {\n // If a facet is selected, open specific component dropdown\n this.openTypeDropdown();\n }\n }\n\n public isDropdown(): boolean {\n return !!(this.facet && (this.facet as DropdownFacet<unknown>).component);\n }\n\n public isFlag(): boolean {\n return !!(this.facet && (this.facet as FlagFacet<FilterGroupConditionField>).condition);\n }\n\n private createComponent(facet: DropdownFacet<unknown>): DropdownComponent {\n // Always destroy and recreate component\n // Todo : test if facet has changed, if not re-use the component\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n\n const condition = this.selection ? this.selection.condition : null;\n const data: NaturalDropdownData = {\n condition: condition,\n configuration: facet.configuration,\n };\n\n const injector = createEnvironmentInjector(this.createProviders(data), this.injector);\n this.dropdownComponentRef = createComponent(facet.component, {\n environmentInjector: injector,\n });\n\n return this.dropdownComponentRef.instance;\n }\n\n private createProviders(data: NaturalDropdownData): StaticProvider[] {\n // Customize injector to allow data and dropdown reference injection in component\n return [\n {\n provide: NaturalDropdownRef,\n useValue: null,\n },\n {\n provide: NATURAL_DROPDOWN_DATA,\n useValue: data,\n },\n ];\n }\n\n private launchRipple(): void {\n const rippleRef = this.ripple().launch({\n persistent: true,\n centered: true,\n });\n\n rippleRef.fadeOut();\n }\n\n private openFacetSelectorDropdown(title: string | undefined): void {\n const facets = this.facets();\n if (!facets || (facets && !facets.length)) {\n return;\n }\n\n const data: NaturalDropdownData<FacetSelectorConfiguration> = {\n condition: {},\n title: title,\n configuration: {\n facets: facets,\n },\n };\n\n const injectorTokens = this.createProviders(data);\n this.dropdownRef = this.dropdownService.open(FacetSelectorComponent, this.element, injectorTokens, false);\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n if (result.facet) {\n this.setFacet(result.facet);\n } else if (result.condition) {\n this.setValue(result);\n }\n }\n });\n }\n\n private openTypeDropdown(): void {\n if (!this.isDropdown()) {\n return;\n }\n\n const dropdownFacet = this.facet as DropdownFacet<unknown>;\n\n const data: NaturalDropdownData = {\n condition: this.selection ? this.selection.condition : null,\n configuration: dropdownFacet.configuration,\n };\n\n const injectorTokens = this.createProviders(data);\n const component = dropdownFacet.component;\n this.dropdownRef = this.dropdownService.open(\n component,\n this.element,\n injectorTokens,\n dropdownFacet.showValidateButton !== undefined ? dropdownFacet.showValidateButton : true,\n );\n\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n this.setValue(result);\n }\n });\n }\n\n private setFacet(facet: Facet): void {\n this.facet = facet;\n\n if (this.isDropdown()) {\n this.openTypeDropdown();\n } else if (this.isFlag()) {\n this.setValue({\n condition: (facet as FlagFacet<FilterGroupConditionField>).condition,\n });\n } else {\n this.input().nativeElement.focus();\n }\n }\n\n private setValue(result: DropdownResult): void {\n if (this.facet) {\n this.selectionChange.emit(this.getSelection(result.condition));\n }\n }\n\n private getSelection(condition: NaturalSearchSelection['condition']): NaturalSearchSelection {\n const selection: NaturalSearchSelection = {\n field: this.facet ? this.facet.field : this.searchFieldName(),\n condition: condition,\n };\n\n if (this.facet?.name) {\n selection.name = this.facet.name;\n }\n\n return selection;\n }\n}\n","<!-- click condition should match to allow click action only when no other button is visible -->\n<mat-form-field\n matRipple\n subscriptSizing=\"dynamic\"\n (click)=\"!selection && !(facet && !selection) ? openDropdown() : null\"\n>\n @if (facet) {\n <mat-label>{{ facet.display }}</mat-label>\n }\n @if (!facet) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input\n #input\n autocomplete=\"off\"\n matInput\n type=\"text\"\n [attr.size]=\"length\"\n [errorStateMatcher]=\"errorMatcher\"\n [formControl]=\"formCtrl\"\n [readonly]=\"(isDropdown() && !!selection) || isFlag()\"\n (blur)=\"search($event)\"\n (keydown.enter)=\"search($event)\"\n />\n\n @if (!facet && !selection) {\n <mat-icon naturalIcon=\"search\" matIconPrefix />\n }\n\n @if (selection) {\n <button matIconButton matIconSuffix (click)=\"clear()\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n\n @if (facet && !selection) {\n <button matIconButton matIconSuffix (click)=\"clear()\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n</mat-form-field>\n<div class=\"hide\">{{ formCtrl.value ? formCtrl.value : facet ? facet.display : placeholder }}</div>\n","import {Component, Input, input, output, viewChild} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalInputComponent} from '../input/input.component';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelection} from '../types/values';\n\n@Component({\n selector: 'natural-group',\n imports: [NaturalInputComponent],\n templateUrl: './group.component.html',\n styleUrl: './group.component.scss',\n})\nexport class NaturalGroupComponent {\n public readonly newValueInput = viewChild.required<NaturalInputComponent>('newValueInput');\n\n /**\n * Text display in the dropdown to select the facet\n */\n public readonly dropdownTitle = input('');\n public readonly placeholder = input.required<string>();\n public readonly facets = input.required<NaturalSearchFacets>();\n public readonly selectionChange = output<GroupSelections>();\n public innerSelections: GroupSelections = [];\n\n @Input() public set selections(selection: GroupSelections) {\n this.innerSelections = deepClone(selection);\n }\n\n public updateInput(selection: NaturalSearchSelection, index: number): void {\n this.innerSelections[index] = selection;\n this.selectionChange.emit(this.innerSelections);\n }\n\n public addInput(selection: NaturalSearchSelection): void {\n this.newValueInput().clear();\n this.innerSelections.push(selection);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public removeInput(index: number): void {\n this.innerSelections.splice(index, 1);\n this.selectionChange.emit(this.innerSelections);\n }\n}\n","@for (selection of innerSelections; track $index) {\n <natural-input\n [facets]=\"facets()\"\n [selection]=\"selection\"\n (cleared)=\"removeInput($index)\"\n (selectionChange)=\"updateInput($event, $index)\"\n />\n}\n\n<natural-input\n #newValueInput\n tabIndex=\"10\"\n cdkFocusInitial\n [facets]=\"facets()\"\n [placeholder]=\"placeholder()\"\n [dropdownTitle]=\"dropdownTitle()\"\n (selectionChange)=\"addInput($event)\"\n/>\n","import {Component, inject, Input, input, OnChanges, output, signal} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelections} from '../types/values';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {map} from 'rxjs';\nimport {MatDivider} from '@angular/material/divider';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatIconButton} from '@angular/material/button';\nimport {NaturalGroupComponent} from '../group/group.component';\nimport {AsyncPipe, NgClass} from '@angular/common';\n\n@Component({\n selector: 'natural-search',\n imports: [\n NgClass,\n AsyncPipe,\n NaturalGroupComponent,\n MatIconButton,\n MatTooltip,\n MatIcon,\n NaturalIconDirective,\n MatDivider,\n ],\n templateUrl: './search.component.html',\n styleUrl: './search.component.scss',\n})\nexport class NaturalSearchComponent implements OnChanges {\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n /**\n * Placeholder for last input (the free search input)\n */\n public readonly placeholder = input($localize`Rechercher`);\n\n /**\n * Exhaustive list of facets to be used in this <natural-search>\n */\n @Input() public facets: NaturalSearchFacets = [];\n\n /**\n * Whether to allow end-user to create multiple `OR` groups\n */\n public readonly multipleGroups = input(false);\n\n /**\n * Text display in the dropdown to select the facet\n */\n public readonly dropdownTitle = input('');\n\n /**\n * Emits when some selection has been setted by the user\n */\n public readonly selectionChange = output<NaturalSearchSelections>();\n\n /**\n * Cleaned inputted selections. Allow valid selections to be manipulated inside component\n */\n readonly #innerSelections = signal<NaturalSearchSelections>([[]]);\n\n /**\n * Cleaned inputted selections. This public API is useful because `selectionChange` does not emit changes made via `[selections]`\n */\n public readonly innerSelections = this.#innerSelections.asReadonly();\n\n /**\n * Input to display at component initialisation\n */\n @Input()\n public set selections(selections: NaturalSearchSelections) {\n this.#innerSelections.set(selections?.[0] ? deepClone(selections) : [[]]);\n }\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n public ngOnChanges(): void {\n if (!this.facets) {\n this.facets = [];\n }\n }\n\n public updateGroup(groupSelections: GroupSelections, groupIndex: number): void {\n const selections = [...this.#innerSelections()];\n for (let i = 0; i < groupSelections.length; i++) {\n selections[groupIndex][i] = groupSelections[i];\n }\n selections[groupIndex].length = groupSelections.length;\n\n this.#notify(selections);\n }\n\n public addGroup(): void {\n const selections = [...this.#innerSelections()];\n selections.push([]);\n\n this.#notify(selections);\n }\n\n public removeGroup(index: number): void {\n const selections = [...this.#innerSelections()];\n selections.splice(index, 1);\n\n this.#notify(selections);\n }\n\n public clear(): void {\n this.#notify([[]]);\n }\n\n #notify(selections: NaturalSearchSelections): void {\n this.#innerSelections.set(selections);\n this.selectionChange.emit(selections);\n }\n}\n","<div class=\"natural-search\" [ngClass]=\"{mobile: isMobile | async, hasMultipleGroups: innerSelections().length > 1}\">\n <div class=\"groupsWrapper\">\n @for (groupSelections of innerSelections(); track $index) {\n <div class=\"groupWrapper\">\n <natural-group\n [facets]=\"facets\"\n [placeholder]=\"placeholder()\"\n [selections]=\"groupSelections\"\n [dropdownTitle]=\"dropdownTitle()\"\n (selectionChange)=\"updateGroup($event, $index)\"\n />\n <div class=\"endOfRowButton\">\n @if ($count > 1) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Supprimer ce groupe\"\n (click)=\"removeGroup($index)\"\n >\n <mat-icon naturalIcon=\"remove\" />\n </button>\n }\n </div>\n </div>\n @if (!$last) {\n <mat-divider />\n }\n }\n </div>\n\n <div class=\"endOfRowButton\">\n @if (multipleGroups()) {\n <button matIconButton i18n-matTooltip matTooltip=\"Ajouter un groupe logique OU\" (click)=\"addGroup()\">\n <mat-icon naturalIcon=\"add\" />\n </button>\n }\n\n <button matIconButton class=\"clear-button\" i18n-matTooltip matTooltip=\"Annuler la recherche\" (click)=\"clear()\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n </div>\n</div>\n","import {BehaviorSubject, Observable} from 'rxjs';\nimport {NaturalHierarchicConfiguration} from './hierarchic-configuration';\nimport {NameOrFullName} from '../../../types/types';\n\nexport type HierarchicModel = {__typename: string} & NameOrFullName;\n\n/**\n * Wrapper for the original model from the DB with specific metadata for tree\n */\nexport class ModelNode {\n public readonly childrenChange = new BehaviorSubject<ModelNode[]>([]);\n\n public isLoading = false;\n public isExpandable = false;\n public isSelectable = false;\n\n public constructor(\n public readonly model: HierarchicModel,\n public readonly config: NaturalHierarchicConfiguration,\n ) {}\n\n public get children(): Observable<ModelNode[]> {\n return this.childrenChange.asObservable();\n }\n\n public get hasChildren(): boolean {\n return this.childrenChange.value?.length > 0;\n }\n}\n","import {inject, Injectable, Injector} from '@angular/core';\nimport {intersection} from 'es-toolkit';\nimport {first, forkJoin, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {Literal, UntypedModelService} from '../../../types/types';\nimport {FilterGroupCondition} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {\n HierarchicFilterConfiguration,\n HierarchicFiltersConfiguration,\n} from '../classes/hierarchic-filters-configuration';\nimport {HierarchicModel, ModelNode} from '../classes/model-node';\n\nexport type OrganizedModelSelection = Record<string, any[]>;\n\ntype ContextualizedConfig<T extends UntypedModelService = UntypedModelService> = {\n configuration: NaturalHierarchicConfiguration;\n injectedService: T;\n variablesManager: NaturalQueryVariablesManager;\n};\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorService {\n private readonly injector = inject(Injector);\n\n /**\n * We use cache because dataSource has nested data and would require recursive search\n */\n private readonly nodeCache = new Map<string, ModelNode>();\n\n public isTooBig(): boolean {\n return this.nodeCache.size >= 999;\n }\n\n /**\n * Retrieve elements from the server\n * Get root elements if node is null, or child elements if node is given\n */\n public getList(\n node: ModelNode | null = null,\n filters: HierarchicFiltersConfiguration | null = null,\n variables: QueryVariables | null = null,\n configurations: NaturalHierarchicConfiguration[],\n ): Observable<ModelNode[]> {\n const configs = this.getContextualizedConfigs(node, filters, variables, configurations);\n const observables = configs.map(c => c.injectedService.getAll(c.variablesManager));\n\n // Fire queries, and merge results, transforming apollo items into Node Object.\n return forkJoin(observables).pipe(\n map(results => {\n const listing: ModelNode[] = [];\n\n // For each result of an observable\n for (let i = 0; i < results.length; i++) {\n // For each item of the result, convert into Node object\n for (const item of results[i].items) {\n const node = this.getOrCreateNode(item, configs[i].configuration);\n listing.push(node);\n this.countChildren(node, filters, configurations);\n\n const isSelectable = node.config.isSelectableCallback\n ? node.config.isSelectableCallback(node.model)\n : true;\n node.isSelectable = !!node.config.selectableAtKey && isSelectable;\n }\n }\n\n return listing;\n }),\n );\n }\n\n public countChildren(\n node: ModelNode,\n filters: HierarchicFiltersConfiguration | null = null,\n configurations: NaturalHierarchicConfiguration[],\n ): void {\n const configs = this.getContextualizedConfigs(node, filters, null, configurations);\n const observables = configs.map(c => c.injectedService.count(c.variablesManager).pipe(first()));\n forkJoin(observables).subscribe(results => {\n node.isExpandable = results.reduce((total, length) => total + length, 0) > 0;\n });\n }\n\n private getContextualizedConfigs(\n node: ModelNode | null = null,\n contextFilters: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n configurations: NaturalHierarchicConfiguration[],\n ): ContextualizedConfig[] {\n const configsAndServices: ContextualizedConfig[] = [];\n\n // Considering the whole configuration may cause queries with no/wrong results we have imperatively to avoid !\n // e.g there are cross dependencies between equipments and taxonomies filters. Both have \"parents\" and\n // \"taxonomies\" filters... When clicking on a equipment, the configuration of taxonomies with match \"parents\"\n // filter, but use the id of the equipment To fix this, we should only consider configuration after the one\n // given by the node passed as argument. That would mean : no child can affect parent. That would mean :\n // sorting in the configuration have semantic/hierarchy implications\n const configs = node ? this.getNextConfigs(node.config, configurations) : configurations;\n\n const pagination = {pageIndex: 0, pageSize: 999};\n\n for (const config of configs) {\n const contextFilter = this.getFilterByService(config, contextFilters);\n const filter = this.getServiceFilter(node, config, contextFilter, !!searchVariables);\n\n if (!filter) {\n continue;\n }\n\n const variablesManager = new NaturalQueryVariablesManager();\n\n variablesManager.set('variables', {filter: filter, pagination: pagination});\n variablesManager.set('config-filter', {filter: config.filter});\n\n if (searchVariables) {\n variablesManager.set('natural-search', searchVariables);\n }\n\n const injectedService = this.injector.get(config.service);\n configsAndServices.push({\n configuration: config,\n injectedService: injectedService,\n variablesManager: variablesManager,\n });\n }\n\n return configsAndServices;\n }\n\n /**\n * Return models matching given FlatNodes\n * Returns a Literal of models grouped by their configuration attribute \"selectableAtKey\"\n */\n public toOrganizedSelection(\n nodes: ModelNode[],\n configurations: NaturalHierarchicConfiguration[],\n ): OrganizedModelSelection {\n const selection = configurations.reduce<Literal>((group, config) => {\n if (config.selectableAtKey) {\n group[config.selectableAtKey] = [];\n }\n return group;\n }, {});\n\n for (const node of nodes) {\n if (node.config.selectableAtKey) {\n selection[node.config.selectableAtKey].push(node.model);\n }\n }\n\n return selection;\n }\n\n /**\n * Transforms an OrganizedModelSelection into a list of ModelNodes\n */\n public fromOrganizedSelection(\n organizedModelSelection: OrganizedModelSelection,\n configurations: NaturalHierarchicConfiguration[],\n ): ModelNode[] {\n if (!organizedModelSelection) {\n return [];\n }\n\n const result: ModelNode[] = [];\n for (const selectableAtKey of Object.keys(organizedModelSelection)) {\n const config = this.getConfigurationBySelectableKey(selectableAtKey, configurations);\n if (config) {\n for (const model of organizedModelSelection[selectableAtKey]) {\n result.push(this.getOrCreateNode(model, config));\n }\n }\n }\n return result;\n }\n\n /**\n * Checks that each configuration.selectableAtKey attribute is unique\n */\n public validateConfiguration(configurations: NaturalHierarchicConfiguration[]): void {\n const selectableAtKeyAttributes: string[] = [];\n for (const config of configurations) {\n if (config.selectableAtKey) {\n const keyIndex = selectableAtKeyAttributes.indexOf(config.selectableAtKey);\n\n if (keyIndex === -1 && config.selectableAtKey) {\n selectableAtKeyAttributes.push(config.selectableAtKey);\n }\n\n // This behavior maybe dangerous in case we re-open hierarchical selector with the last returned config\n // having non-unique keys\n if (keyIndex < -1) {\n console.warn('Invalid hierarchic configuration : selectableAtKey attribute should be unique');\n }\n }\n }\n }\n\n /**\n * Return configurations setup in the list after the given one\n */\n private getNextConfigs(\n nodeConfig: NaturalHierarchicConfiguration,\n configurations: NaturalHierarchicConfiguration[],\n ): NaturalHierarchicConfiguration[] {\n const configIndex = configurations.findIndex(c => c === nodeConfig);\n return configurations.slice(configIndex);\n }\n\n /**\n * Builds queryVariables filter for children query\n */\n private getServiceFilter(\n node: ModelNode | null,\n config: NaturalHierarchicConfiguration,\n contextFilter: HierarchicFilterConfiguration['filter'] | null = null,\n allDeeps = false,\n ): HierarchicFilterConfiguration['filter'] | null {\n const fieldCondition: FilterGroupCondition = {};\n\n // if no parent, filter empty elements\n if (!node) {\n if (!config.parentsRelationNames) {\n return contextFilter ? contextFilter : {};\n }\n\n if (!allDeeps) {\n config.parentsRelationNames.forEach(f => {\n fieldCondition[f] = {empty: {}};\n });\n }\n } else {\n if (!node.config.childrenRelationNames || !config.parentsRelationNames) {\n return null;\n }\n\n const matchingFilters = intersection(node.config.childrenRelationNames, config.parentsRelationNames);\n if (!matchingFilters.length) {\n return null;\n }\n fieldCondition[matchingFilters[0]] = {have: {values: [node.model.id]}};\n }\n\n const filters = {groups: [{conditions: [fieldCondition]}]};\n\n // todo : is it right ? shouldn't it be managed with QueryVariablesManager's channels ? ?\n if (contextFilter) {\n filters.groups.push(...contextFilter.groups);\n }\n\n return filters;\n }\n\n /**\n * Return a context filter applicable to the service for given config\n *\n * @param config Applicable config\n * @param contextFilters List of context filters\n */\n private getFilterByService(\n config: NaturalHierarchicConfiguration,\n contextFilters: HierarchicFilterConfiguration[] | null,\n ): HierarchicFilterConfiguration['filter'] | null {\n if (!contextFilters || !config) {\n return null;\n }\n\n const filter = contextFilters.find(f => f.service === config.service);\n return filter ? filter.filter : null;\n }\n\n /**\n * Search in configurations.selectableAtKey attribute to find given key and return the configuration\n */\n private getConfigurationBySelectableKey(\n key: NaturalHierarchicConfiguration['selectableAtKey'],\n configurations: NaturalHierarchicConfiguration[],\n ): NaturalHierarchicConfiguration | null {\n if (!configurations) {\n return null;\n }\n\n return configurations.find(conf => conf.selectableAtKey === key) || null;\n }\n\n private getOrCreateNode(model: HierarchicModel, configurations: NaturalHierarchicConfiguration): ModelNode {\n const key = this.getCacheKey(model);\n let node = this.nodeCache.get(key);\n\n if (node) {\n return node;\n }\n\n node = new ModelNode(model, configurations);\n this.nodeCache.set(key, node);\n return node;\n }\n\n /**\n * Returns an identifier key for map cache\n * As many object types can be used, this function considers typename and ID to return something like document-123\n */\n private getCacheKey(model: HierarchicModel): string {\n return model.__typename + '-' + model.id;\n }\n\n public getAllFetchedNodes(): ModelNode[] {\n return Array.from(this.nodeCache.values());\n }\n}\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {Component, inject, input, OnChanges, OnInit, output, SimpleChanges} from '@angular/core';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {MatCheckbox} from '@angular/material/checkbox';\nimport {MatChipAvatar, MatChipListbox, MatChipOption, MatChipRemove} from '@angular/material/chips';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatProgressSpinner} from '@angular/material/progress-spinner';\nimport {MatRadioButton} from '@angular/material/radio';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {\n MatNestedTreeNode,\n MatTree,\n MatTreeNestedDataSource,\n MatTreeNodeDef,\n MatTreeNodeOutlet,\n MatTreeNodePadding,\n MatTreeNodeToggle,\n} from '@angular/material/tree';\nimport {Observable} from 'rxjs';\nimport {finalize} from 'rxjs/operators';\nimport {QueryVariables} from '../../../classes/query-variable-manager';\nimport {replaceObjectKeepingReference} from '../../../classes/utility';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {toGraphQLDoctrineFilter} from '../../search/classes/graphql-doctrine';\nimport {NaturalSearchComponent} from '../../search/search/search.component';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {ModelNode} from '../classes/model-node';\nimport {NaturalHierarchicSelectorService, OrganizedModelSelection} from './hierarchic-selector.service';\nimport {NgTemplateOutlet} from '@angular/common';\n\n@Component({\n selector: 'natural-hierarchic-selector',\n imports: [\n NaturalSearchComponent,\n MatProgressSpinner,\n MatNestedTreeNode,\n MatTreeNodeDef,\n MatTreeNodePadding,\n MatTreeNodeToggle,\n MatTree,\n MatTreeNodeOutlet,\n MatButton,\n MatIconButton,\n MatIcon,\n NaturalIconDirective,\n MatCheckbox,\n MatChipAvatar,\n MatChipListbox,\n MatChipOption,\n MatChipRemove,\n MatTooltip,\n MatRadioButton,\n NgTemplateOutlet,\n ],\n templateUrl: './hierarchic-selector.component.html',\n styleUrl: './hierarchic-selector.component.scss',\n providers: [NaturalHierarchicSelectorService],\n})\nexport class NaturalHierarchicSelectorComponent implements OnInit, OnChanges {\n protected readonly hierarchicSelectorService = inject(NaturalHierarchicSelectorService);\n\n /**\n * Function that receives a model and returns a string for display value\n */\n public readonly displayWith = input<(item: any) => string>();\n\n /**\n * Config for items and relations arrangement\n */\n public readonly config = input.required<NaturalHierarchicConfiguration[]>();\n\n /**\n * If multiple or single item selection\n */\n public readonly multiple = input(false);\n\n /**\n * Selected items\n * Organized by key, containing each an array of selected items of same type\n */\n public readonly selected = input<OrganizedModelSelection>({});\n\n /**\n * Filters that apply to each query\n */\n public readonly filters = input<HierarchicFiltersConfiguration | null>();\n\n /**\n * Search facets\n */\n public readonly searchFacets = input<NaturalSearchFacets>([]);\n\n /**\n * Selections to apply on natural-search on component initialisation\n */\n public readonly searchSelections = input<NaturalSearchSelections>([]);\n\n /**\n * Select all fetched items of the current search result\n *\n * Use very carefully as recursivity is ignored. The selection includes children (if any) even if the child list has been closed\n *\n * Should be used __only__ for non-recursive use cases. Avoid with recursive because it's not intuitive for end user\n */\n public readonly allowSelectAll = input(false);\n\n /**\n * Emits when natural-search selections change\n */\n public readonly searchSelectionChange = output<NaturalSearchSelections>();\n\n /**\n * Emits selection change\n * Returns a Literal where selected models are organized by key\n */\n public readonly selectionChange = output<OrganizedModelSelection>();\n\n /**\n * List selected items (right listing)\n */\n protected selection!: SelectionModel<ModelNode>;\n\n /**\n * Data source for result listing (left listing)\n */\n protected readonly dataSource = new MatTreeNestedDataSource<ModelNode>();\n\n public loading = false;\n\n /**\n * Angular OnChange implementation\n */\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.selected && !changes.selected.firstChange) {\n this.updateInnerSelection(this.selected());\n }\n\n if (changes.filters && !changes.filters.firstChange) {\n this.loadRoot();\n }\n }\n\n public ngOnInit(): void {\n this.hierarchicSelectorService.validateConfiguration(this.config());\n\n this.selection = new SelectionModel<any>(this.multiple());\n\n // Prevent empty screen on first load and init NaturalHierarchicSelectorService with inputted configuration\n let variables;\n const searchSelections = this.searchSelections();\n if (searchSelections.some(s => s.length)) {\n variables = {filter: toGraphQLDoctrineFilter(this.searchFacets(), searchSelections)};\n }\n\n this.loadRoot(variables);\n\n // OrganizedSelection into list usable by template\n this.updateInnerSelection(this.selected());\n }\n\n /**\n * Toggle selection of a node, considering if multiple selection is activated or not\n */\n public toggleSelection(node: ModelNode): void {\n this.selection.toggle(node);\n this.updateSelection();\n }\n\n protected selectAll(): void {\n this.hierarchicSelectorService.getAllFetchedNodes().forEach(node => {\n this.selection.select(node);\n });\n this.updateSelection();\n }\n\n /**\n * When unselecting an element from the mat-chips, it can be deep in the hierarchy, and the tree element may not\n * exist...\n * ... but we still need to remove the element from the mat-chips list.\n */\n public unselect(node: ModelNode): void {\n this.selection.deselect(node);\n this.updateSelection();\n }\n\n protected getDisplayFn(config: NaturalHierarchicConfiguration): (item: any) => string {\n if (config.displayWith) {\n return config.displayWith;\n }\n\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return item => (item ? item.fullName || item.name : '');\n }\n\n private loadRoot(searchVariables?: QueryVariables): void {\n this.loading = true;\n this.hierarchicSelectorService\n .getList(null, this.filters(), searchVariables, this.config())\n .pipe(finalize(() => (this.loading = false)))\n .subscribe(items => {\n this.dataSource.data = items;\n });\n }\n\n public search(selections: NaturalSearchSelections): void {\n this.searchSelectionChange.emit(selections);\n if (selections.some(s => s.length)) {\n const variables = {filter: toGraphQLDoctrineFilter(this.searchFacets(), selections)};\n this.hierarchicSelectorService.getList(null, this.filters(), variables, this.config()).subscribe(items => {\n this.dataSource.data = items;\n });\n } else {\n this.loadRoot();\n }\n }\n\n /**\n * Get list of children, considering given FlatNode id as a parent.\n * Mark loading status individually on nodes.\n */\n public loadChildren(node: ModelNode): void {\n if (node.hasChildren) {\n return;\n }\n\n node.isLoading = true;\n this.hierarchicSelectorService\n .getList(node, this.filters(), null, this.config())\n .pipe(finalize(() => (node.isLoading = false)))\n .subscribe(items => node.childrenChange.next(items));\n }\n\n protected childrenAccessor = (node: ModelNode): Observable<ModelNode[]> => {\n return node.children;\n };\n\n /**\n * Sync inner selection (tree and mat-chips) according to selected input attribute\n */\n private updateInnerSelection(selected: OrganizedModelSelection): void {\n // Transform an OrganizedModelSelection into a ModelNode list that is used in the selected zone of the component (see template)\n const selectedNodes = this.hierarchicSelectorService.fromOrganizedSelection(selected, this.config());\n this.selection.clear();\n for (const node of selectedNodes) {\n this.selection.select(node);\n }\n }\n\n /**\n * Transform the given elements into the organized selection that is emitted to output\n */\n private updateSelection(): void {\n const organizedFlatNodesSelection = this.hierarchicSelectorService.toOrganizedSelection(\n this.selection.selected,\n this.config(),\n );\n replaceObjectKeepingReference(this.selected(), organizedFlatNodesSelection);\n this.selectionChange.emit(organizedFlatNodesSelection);\n }\n}\n","<ng-template #displayTemplate let-node>\n <div class=\"nat-horizontal nat-gap-5\">\n @if (node.config.icon) {\n <mat-icon [naturalIcon]=\"node.config.icon\" />\n }\n <span>{{ getDisplayFn(node.config)(node.model) }}</span>\n </div>\n</ng-template>\n\n<div [style.margin-bottom.px]=\"20\">\n <natural-search [facets]=\"searchFacets()\" [selections]=\"searchSelections()\" (selectionChange)=\"search($event)\" />\n</div>\n\n@if (allowSelectAll() && multiple()) {\n <div\n class=\"select-all\"\n i18n-matTooltip\n matTooltip=\"Trop de résultats, veuillez affiner la recherche\"\n [matTooltipDisabled]=\"!hierarchicSelectorService.isTooBig()\"\n >\n <a i18n mat-button [disabled]=\"hierarchicSelectorService.isTooBig()\" (click)=\"selectAll()\">Tout sélectionner</a>\n </div>\n}\n\n<div class=\"body\">\n @if (loading) {\n <mat-progress-spinner mode=\"indeterminate\" style=\"margin: 10px\" [diameter]=\"36\" />\n }\n\n <mat-tree #tree [dataSource]=\"dataSource\" [childrenAccessor]=\"childrenAccessor\">\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [class.leaf]=\"!node.isExpandable\"\n (expandedChange)=\"$event ? loadChildren(node) : null\"\n >\n <div class=\"wrapper nat-horizontal nat-align\" [class.unexpandable]=\"!node.isExpandable\">\n @if (node.isExpandable) {\n <button matIconButton matTreeNodeToggle [attr.aria-label]=\"`toggle ${node.model.name}`\">\n @if (node.isLoading) {\n <mat-progress-spinner mode=\"indeterminate\" [diameter]=\"24\" [strokeWidth]=\"5\" />\n } @else {\n <mat-icon [naturalIcon]=\"tree.isExpanded(node) ? 'expand_more' : 'chevron_right'\" />\n }\n </button>\n }\n\n @if (multiple()) {\n <mat-checkbox\n class=\"selection\"\n [checked]=\"selection.isSelected(node)\"\n [disabled]=\"!node.isSelectable\"\n (change)=\"toggleSelection(node)\"\n >\n <ng-template *ngTemplateOutlet=\"displayTemplate; context: {$implicit: node}\" />\n </mat-checkbox>\n } @else {\n <mat-radio-button\n class=\"selection\"\n [checked]=\"selection.isSelected(node)\"\n [disabled]=\"!node.isSelectable\"\n (change)=\"toggleSelection(node)\"\n >\n <ng-template *ngTemplateOutlet=\"displayTemplate; context: {$implicit: node}\" />\n </mat-radio-button>\n }\n </div>\n <div class=\"children\" [class.invisible]=\"!tree.isExpanded(node)\">\n <ng-container matTreeNodeOutlet />\n </div>\n </mat-nested-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n @for (node of selection.selected; track node.model.id) {\n <mat-chip-option [removable]=\"true\" [selectable]=\"false\" (removed)=\"unselect(node)\">\n @if (node.config.icon) {\n <mat-icon matChipAvatar [naturalIcon]=\"node.config.icon\" />\n }\n {{ node.model.name || node.model.fullName }}\n <button matChipRemove>\n <mat-icon naturalIcon=\"cancel\" />\n </button>\n </mat-chip-option>\n } @empty {\n <p class=\"mat-body nat-padding-horizontal\" i18n>Aucune sélection</p>\n }\n </mat-chip-listbox>\n</div>\n\n@if (!loading && !dataSource.data.length) {\n <div i18n>Aucun résultat</div>\n}\n","import {Component} from '@angular/core';\nimport {NaturalQueryVariablesManager} from '../../../classes/query-variable-manager';\nimport {Literal, UntypedModelService} from '../../../types/types';\nimport {NaturalHierarchicConfiguration} from '../../hierarchic-selector/classes/hierarchic-configuration';\nimport {OrganizedModelSelection} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalHierarchicSelectorComponent} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.component';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatFormField, MatLabel} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport type HierarchicFilterConfiguration<T = Literal> = {\n service: NaturalHierarchicConfiguration['service'];\n filter: T;\n};\n\nexport type HierarchicFiltersConfiguration<T = Literal> = HierarchicFilterConfiguration<T>[];\n\nexport type TypeHierarchicSelectorConfiguration = {\n key: string;\n service: UntypedModelService;\n config: NaturalHierarchicConfiguration[];\n filters?: HierarchicFiltersConfiguration;\n};\n\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n NaturalHierarchicSelectorComponent,\n ],\n templateUrl: './type-hierarchic-selector.component.html',\n})\nexport class TypeHierarchicSelectorComponent extends AbstractAssociationSelectComponent<TypeHierarchicSelectorConfiguration> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const ids: string[] =\n this.valueCtrl.value?.[this.configuration.key].map((item: any) => {\n return item.id;\n }) ?? [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, ids);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n protected reloadValue(condition: FilterGroupConditionField): Observable<unknown | null> {\n if (!condition.have) {\n return EMPTY;\n }\n\n const ids = condition.have.values;\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('a', {\n filter: {\n groups: [{conditions: [{id: {in: {values: ids}}}]}],\n },\n });\n\n return this.configuration.service.getAll(qvm).pipe(\n map(v => {\n const selection: OrganizedModelSelection = {};\n\n selection[this.configuration.key] = v.items;\n\n return this.noEmptySelection(selection);\n }),\n );\n }\n\n protected renderValueWithoutOperator(): string {\n const items = this.valueCtrl.value?.[this.configuration.key];\n if (!items) {\n return '';\n }\n\n return items\n .map((item: any) => {\n return item.fullName || item.name;\n })\n .join(', ');\n }\n\n public selectionChange(selection: OrganizedModelSelection): void {\n this.valueCtrl.setValue(this.noEmptySelection(selection));\n this.valueCtrl.markAsDirty();\n }\n\n /**\n * We need to keep `null` in our valueCtrl so the required validator works properly, so\n * filter here\n */\n private noEmptySelection(selection: OrganizedModelSelection): OrganizedModelSelection | null {\n return selection[this.configuration.key].length ? selection : null;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (requireValueCtrl) {\n <natural-hierarchic-selector\n style=\"margin-right: 20px\"\n [config]=\"configuration.config\"\n [filters]=\"configuration.filters\"\n [multiple]=\"true\"\n [selected]=\"valueCtrl.value || {}\"\n (selectionChange)=\"selectionChange($event)\"\n />\n }\n</form>\n","import {Component, inject} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n FormsModule,\n NgForm,\n ReactiveFormsModule,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {DateAdapter, ErrorStateMatcher, MAT_DATE_FORMATS} from '@angular/material/core';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle} from '@angular/material/datepicker';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatSuffix} from '@angular/material/form-field';\n\nexport type TypeDateRangeConfiguration<D = any> = {\n min?: D | null;\n max?: D | null;\n};\n\nclass InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null, form: FormGroupDirective | NgForm | null): boolean {\n return (form && form.invalid && (form.value.to || form.value.from)) || control?.invalid;\n }\n}\n\nfunction parseFromControl<D>(control: AbstractControl, key: string): D | null {\n const c = control.get(key);\n if (!c) {\n return null;\n }\n\n return c.value;\n}\n\n/**\n * From >= To\n */\nfunction toGreaterThanFrom<D>(dateAdapter: DateAdapter<D>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const from = parseFromControl<D>(control, 'from');\n const to = parseFromControl<D>(control, 'to');\n\n if (from && to && dateAdapter.compareDate(from, to) > 0) {\n return {toGreaterThanFrom: true};\n }\n\n return null;\n };\n}\n\n/**\n * Date range with mandatory bounding dates.\n *\n * If you need optional bounding date, then use `TypeDateComponent` instead.\n */\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatError,\n MatSuffix,\n MatInput,\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n ],\n templateUrl: './type-date-range.component.html',\n})\nexport class TypeDateRangeComponent<D = any> implements DropdownComponent {\n private dateAdapter = inject<DateAdapter<D>>(DateAdapter);\n private dateFormats = inject(MAT_DATE_FORMATS);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateRangeConfiguration<D>>;\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly fromCtrl = new FormControl<D | null>(null);\n public readonly toCtrl = new FormControl<D | null>(null);\n public readonly form = new FormGroup({\n from: this.fromCtrl,\n to: this.toCtrl,\n });\n\n private readonly defaults: Required<TypeDateRangeConfiguration<D>> = {\n min: null,\n max: null,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeDateRangeConfiguration<D>>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges).subscribe(() => {\n this.renderedValue.next(this.getRenderedValue());\n });\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const from = serialize<D>(this.dateAdapter, this.fromCtrl.value);\n const to = serialize<D>(this.dateAdapter, this.toCtrl.value);\n\n if (from && to) {\n return {between: {from, to}};\n } else {\n return {};\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const value = {\n from: null as D | null,\n to: null as D | null,\n };\n\n if (condition.between) {\n value.from = this.dateAdapter.parse(condition.between.from, null);\n value.to = this.dateAdapter.parse(condition.between.to, null);\n }\n\n this.form.setValue(value);\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(dateMin<D>(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax<D>(this.dateAdapter, this.configuration.max));\n }\n\n this.fromCtrl.setValidators(validators);\n this.toCtrl.setValidators(validators);\n\n this.form.setValidators([\n toGreaterThanFrom<D>(this.dateAdapter), // From < To\n ]);\n }\n\n public render(value: D | null): string {\n return value ? this.dateAdapter.format(value, this.dateFormats.display.dateInput) : '';\n }\n\n private getRenderedValue(): string {\n const from = this.render(this.fromCtrl.value);\n const to = this.render(this.toCtrl.value);\n\n if (from && to) {\n return from + ' - ' + to;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <input\n matInput\n placeholder=\"De\"\n i18n-placeholder\n [matDatepicker]=\"from\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"from\" />\n <mat-datepicker #from />\n @if (form.hasError('toGreaterThanFrom')) {\n <mat-error>{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</mat-error>\n }\n @if (fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')) {\n <mat-error>< {{ configuration.min }}</mat-error>\n }\n @if (fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')) {\n <mat-error>> {{ configuration.max }}</mat-error>\n }\n @if (fromCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n </mat-form-field>\n\n <mat-form-field subscriptSizing=\"dynamic\">\n <input\n matInput\n placeholder=\"à\"\n i18n-placeholder\n [matDatepicker]=\"to\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"to\" />\n <mat-datepicker #to />\n @if (toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')) {\n <mat-error> < {{ configuration.min }}</mat-error>\n }\n @if (toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')) {\n <mat-error> > {{ configuration.max }}</mat-error>\n }\n @if (toCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n </mat-form-field>\n</form>\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {MatButtonToggle, MatButtonToggleGroup} from '@angular/material/button-toggle';\nimport {BehaviorSubject} from 'rxjs';\nimport {Literal} from '../../../types/types';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {isEqual} from 'es-toolkit/compat';\n\nexport type TypeOption = {\n display: string;\n condition: Literal;\n};\n\nexport type TypeOptionsConfiguration = {\n options: TypeOption[];\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatButtonToggleGroup, MatButtonToggle],\n templateUrl: './type-options.component.html',\n})\nexport class TypeOptionsComponent implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n\n public readonly formControl = new FormControl<TypeOption>({} as TypeOption, {nonNullable: true});\n\n public readonly configuration: Required<TypeOptionsConfiguration>;\n\n private readonly defaults: Required<TypeOptionsConfiguration> = {\n options: [],\n };\n protected readonly dropdownRef = inject(NaturalDropdownRef);\n public constructor() {\n const data: NaturalDropdownData<TypeOptionsConfiguration> = inject(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n if (!this.configuration.options.length) {\n throw new Error('TypeOptions need options, empty array or null given');\n }\n\n this.formControl.setValidators([Validators.required]);\n\n if (data.condition) {\n const option = this.configuration.options.find(option => isEqual(option.condition, data.condition));\n\n if (option) {\n this.formControl.setValue(option);\n this.renderedValue.next(option.display);\n }\n }\n\n // Update rendered value\n this.formControl.valueChanges.subscribe(option => {\n if (option) {\n this.renderedValue.next(option.display);\n this.dropdownRef.close(option);\n }\n });\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n return this.formControl.value.condition;\n }\n\n public isValid(): boolean {\n return this.formControl.valid && !!this.formControl.value?.condition;\n }\n\n public isDirty(): boolean {\n return this.formControl.dirty;\n }\n}\n","<mat-button-toggle-group [formControl]=\"formControl\">\n @for (option of configuration.options; track option) {\n <mat-button-toggle [value]=\"option\">{{ option.display }}</mat-button-toggle>\n }\n</mat-button-toggle-group>\n","import {Component, inject} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {TypeOptionsComponent, TypeOptionsConfiguration} from '../type-options/type-options.component';\nimport {MatButtonToggle, MatButtonToggleGroup} from '@angular/material/button-toggle';\n\nexport type TypeBooleanConfiguration = {\n displayWhenActive: string;\n displayWhenInactive: string;\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatButtonToggleGroup, MatButtonToggle],\n templateUrl: '../type-options/type-options.component.html',\n providers: [\n {\n provide: NATURAL_DROPDOWN_DATA,\n useFactory: (): NaturalDropdownData<TypeOptionsConfiguration> => {\n const data = inject<NaturalDropdownData<TypeBooleanConfiguration>>(NATURAL_DROPDOWN_DATA, {\n skipSelf: true,\n });\n\n // Set up options from hardcoded conditions with custom labels from config\n return {\n ...data,\n configuration: {\n options: [\n {\n display: data.configuration.displayWhenActive,\n condition: {equal: {value: true}},\n },\n {\n display: data.configuration.displayWhenInactive,\n condition: {equal: {value: false}},\n },\n ],\n },\n };\n },\n },\n ],\n})\nexport class TypeBooleanComponent extends TypeOptionsComponent implements DropdownComponent {}\n","/*\n * Public API Surface of natural-search dropdown components\n */\nexport {\n type TypeSelectConfiguration,\n type TypeSelectItem,\n TypeSelectComponent,\n} from './type-select/type-select.component';\n\nexport {\n type TypeSelectNaturalConfiguration,\n TypeNaturalSelectComponent,\n} from './type-natural-select/type-natural-select.component';\n\nexport {type TypeNumberConfiguration, TypeNumberComponent} from './type-number/type-number.component';\n\nexport {\n type TypeHierarchicSelectorConfiguration,\n TypeHierarchicSelectorComponent,\n} from './type-hierarchic-selector/type-hierarchic-selector.component';\n\nexport {type TypeDateConfiguration, TypeDateComponent} from './type-date/type-date.component';\n\nexport {type TypeDateRangeConfiguration, TypeDateRangeComponent} from './type-date-range/type-date-range.component';\n\nexport {TypeTextComponent, InvalidWithValueStateMatcher} from './type-text/type-text.component';\n\nexport {type TypeBooleanConfiguration, TypeBooleanComponent} from './type-boolean/type-boolean.component';\nexport {\n type TypeOptionsConfiguration,\n type TypeOption,\n TypeOptionsComponent,\n} from './type-options/type-options.component';\nexport {\n possibleComparableOperators,\n possibleNullComparableOperators,\n type PossibleComparableOperator,\n type PossibleComparableOperatorKeys,\n} from './types';\n","/**\n * Common image mime type that are supported by Felix out of the box.\n *\n * Should be kept in sync with `\\Ecodev\\Felix\\Model\\Traits\\Image::getAcceptedMimeTypes`\n */\nexport const commonImageMimeTypes =\n 'image/avif,image/bmp,image/x-ms-bmp,image/gif,image/heic,image/heif,image/jpeg,image/pjpeg,image/png,image/svg+xml,image/svg,image/webp';\n\nexport function acceptType(accept: string, type: string, filename: string): boolean {\n const mimeAndExtensions = accept\n .trim()\n .toLowerCase()\n .split(',')\n .map(s => s.trim())\n .filter(s => s);\n\n if (!mimeAndExtensions.length) {\n return true;\n }\n\n type = type.toLowerCase();\n filename = filename.toLowerCase();\n\n const mimeAsExtensions = mimeAndExtensions\n .map(s => /^[^/]+\\/(.*)$/.exec(s)?.[1])\n .filter(s => s)\n .map(s => '.' + s);\n\n return [...mimeAndExtensions, ...mimeAsExtensions].some(mimeOrExtension => {\n if (mimeOrExtension.startsWith('.')) {\n return filename.endsWith(mimeOrExtension);\n } else {\n // Transform `*` into `.*`\n const pattern = mimeOrExtension.replace(/\\*/g, '.*');\n\n return type.match(pattern);\n }\n });\n}\n\nexport function isFileInput(elm: HTMLElement): elm is HTMLInputElement {\n const type = elm.getAttribute('type');\n\n return elm.tagName.toLowerCase() === 'input' && !!type && type.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\n\nexport function detectSwipe(event: Event | TouchEvent): boolean {\n const touches = 'changedTouches' in event ? event.changedTouches : null;\n if (!touches) {\n return false;\n }\n\n if (event.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (event.type === 'touchend') {\n const currentX = touches[0].clientX;\n const currentY = touches[0].clientY;\n if (Math.abs(currentX - initialTouchStartX) > 20 || Math.abs(currentY - initialTouchStartY) > 20) {\n event.stopPropagation();\n if (event.cancelable) {\n event.preventDefault();\n }\n\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport function createInvisibleFileInputWrap(document: Document): HTMLLabelElement {\n const fileElem = createFileInput(document);\n const label = document.createElement('label');\n label.innerHTML = 'upload';\n label.style.visibility = 'hidden';\n label.style.position = 'absolute';\n label.style.overflow = 'hidden';\n label.style.width = '0px';\n label.style.height = '0px';\n label.style.border = 'none';\n label.style.margin = '0px';\n label.style.padding = '0px';\n label.setAttribute('tabindex', '-1');\n\n label.appendChild(fileElem);\n\n return label;\n}\n\nfunction createFileInput(document: Document): HTMLInputElement {\n const fileElem = document.createElement('input');\n fileElem.type = 'file';\n\n return fileElem;\n}\n\nexport function isDirectory(file: File): Promise<boolean> {\n return blobText(file.slice(0, 1)).then(\n text => {\n // Firefox will return empty string for a folder, so we must check that special case.\n // That means that any empty file will incorrectly be interpreted as a folder on all\n // browsers, but that's tolerable because there is no real use-case to upload an empty file.\n return text !== '';\n },\n () => false,\n );\n}\n\n/**\n * This is a ponyfill for `Blob.text()`, because Safari 13 and 14 do not support it, https://caniuse.com/?search=blob.text,\n * and we try our best not to break iPhone users too much.\n */\nfunction blobText(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result as string);\n };\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n}\n\nexport function stopEvent(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport function fileListToArray(fileList: FileList): File[] {\n const result: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList.item(i);\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nfunction dataTransferItemListToArray(items: DataTransferItemList): File[] {\n const result: File[] = [];\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < items.length; i++) {\n const file = items[i].getAsFile();\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nexport function eventToFiles(event: Event | DragEvent): File[] {\n const transfer = 'dataTransfer' in event ? event.dataTransfer : null;\n if (transfer?.files?.length) {\n return fileListToArray(transfer.files);\n }\n\n if (transfer) {\n return dataTransferItemListToArray(transfer.items);\n }\n\n return [];\n}\n","import {DOCUMENT, inject, Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {FileSelection} from './abstract-file';\nimport {FileModel} from './types';\n\n// @dynamic\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalFileService {\n private readonly document = inject(DOCUMENT);\n\n /**\n * Allow to subscribe to selected files in the entire application. So a\n * child component is able to receive a file that was dropped on a parent\n * component.\n *\n * Typically useful to drop a file on the entire screen, instead of a precise\n * component.\n */\n public readonly filesChanged = new Subject<FileSelection>();\n\n public getDownloadLink(model: FileModel | null): null | string {\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Cannot build download link because `window` is undefined');\n }\n\n const hostname = window.location.protocol + '//' + window.location.hostname;\n\n if (model?.__typename === 'File') {\n return hostname + '/api/file/' + model.id;\n } else if (model?.__typename === 'AccountingDocument') {\n return hostname + '/api/accounting-document/' + model.id;\n } else if (model?.__typename === 'Image') {\n return hostname + '/api/image/' + model.id;\n }\n\n return null;\n }\n}\n","import {\n Directive,\n DOCUMENT,\n ElementRef,\n HostListener,\n inject,\n Input,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {\n acceptType,\n createInvisibleFileInputWrap,\n detectSwipe,\n eventToFiles,\n fileListToArray,\n isDirectory,\n isFileInput,\n stopEvent,\n} from './utils';\nimport {NaturalFileService} from './file.service';\nimport {forkJoin, map, Observable, ObservableInput, of, Subject, tap} from 'rxjs';\nimport {outputFromObservable} from '@angular/core/rxjs-interop';\n\nexport type InvalidFile = {\n file: File;\n error: string;\n};\n\nexport type FileSelection = {\n /**\n * The list of files that have been selected.\n */\n valid: File[];\n\n /**\n * The list of files that have been selected but are invalid according to validators.\n */\n invalid: InvalidFile[];\n};\n\n/**\n * A master base set of logic intended to support file select/drag/drop operations\n *\n * In most cases you probably want click-to-select and drag-to-select, so you should use:\n *\n * <div naturalFileDrop [selectable]=\"true\"></div>\n *\n * @dynamic\n */\n@Directive()\nexport abstract class NaturalAbstractFile implements OnInit, OnDestroy, OnChanges {\n private fileElement?: HTMLInputElement;\n\n /**\n * Whether we should accept a single file or multiple files\n */\n public readonly multiple = input(false);\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element,\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n public readonly accept = input('');\n\n /**\n * Maximum file size in bytes. 0 means no validation at all.\n */\n public readonly maxSize = input(0);\n\n /**\n * Disable the file selection entirely\n */\n public readonly fileSelectionDisabled = input(false);\n\n /**\n * Whether the user can click on the element to select something\n *\n * This has only effect during initialization. Subsequent changes will have\n * no effect.\n */\n public readonly selectable = input(false);\n\n /**\n * If true, the file selection will be broadcast through `NaturalFileService.filesChanged`.\n *\n * It is useful to set this to false if there are two uploads on a page with different purposes,\n * and the second upload should not be confused with the first one.\n */\n @Input() public broadcast = true;\n\n private readonly fileChange$ = new Subject<File>();\n\n /**\n * The single valid file that has been selected.\n *\n * It is for convenience of use, and will only emit if there is at least one\n * valid file. See `filesChange` for a more complete output.\n */\n public readonly fileChange = outputFromObservable(this.fileChange$);\n\n private readonly filesChange$ = new Subject<FileSelection>();\n\n /**\n * The list of files that have been selected.\n */\n public readonly filesChange = outputFromObservable(this.filesChange$);\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly naturalFileService = inject(NaturalFileService);\n private readonly document = inject(DOCUMENT);\n\n public ngOnDestroy(): void {\n delete this.fileElement; // faster memory release of dom element\n }\n\n public ngOnInit(): void {\n if (this.selectable()) {\n this.enableSelecting();\n }\n\n this.getFileElement().multiple = this.multiple();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.accept) {\n this.getFileElement().setAttribute('accept', changes.accept.currentValue || '*');\n }\n }\n\n private getFileElement(): HTMLInputElement {\n if (this.fileElement) {\n return this.fileElement;\n }\n\n // elm is a file input\n if (isFileInput(this.element.nativeElement)) {\n this.fileElement = this.element.nativeElement;\n\n return this.fileElement;\n }\n\n // create foo file input\n const label = createInvisibleFileInputWrap(this.document);\n this.fileElement = label.getElementsByTagName('input')[0];\n this.fileElement.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild(label);\n\n return this.fileElement;\n }\n\n private enableSelecting(): void {\n const elm = this.element.nativeElement;\n\n if (isFileInput(elm)) {\n const bindedHandler = (): void => this.beforeSelect();\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n return;\n } else {\n const bindedHandler = (event: Event): boolean => this.clickHandler(event);\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n elm.addEventListener('touchend', bindedHandler);\n }\n }\n\n protected handleFiles(files: File[]): void {\n const selection: FileSelection = {\n valid: [],\n invalid: [],\n };\n\n forkJoin(\n files.map(file =>\n this.validate(file).pipe(\n tap(error => {\n if (error) {\n selection.invalid.push({\n file: file,\n error: error,\n });\n } else {\n selection.valid.push(file);\n }\n }),\n ),\n ),\n ).subscribe(() => {\n if (selection.valid.length) {\n this.fileChange$.next(selection.valid[0]);\n }\n\n if (selection.valid.length || selection.invalid.length) {\n this.filesChange$.next(selection);\n\n if (this.broadcast) {\n this.naturalFileService.filesChanged.next(selection);\n }\n }\n\n this.getFileElement().value = '';\n });\n }\n\n /**\n * Called when input has files\n */\n private changeFn(event: Event): void {\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n const fileList = event.target.files;\n\n if (!fileList) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(fileListToArray(fileList));\n }\n\n private clickHandler(event: Event): boolean {\n const elm = this.element.nativeElement;\n if (elm.getAttribute('disabled') || this.fileSelectionDisabled()) {\n return false;\n }\n\n // prevent the click if it is a swipe\n if (detectSwipe(event)) {\n return true;\n }\n\n const fileElm = this.getFileElement();\n fileElm.click();\n this.beforeSelect();\n\n return false;\n }\n\n private beforeSelect(): void {\n if (!this.fileElement) {\n return;\n }\n\n // if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElement.value = '';\n }\n\n @HostListener('change', ['$event'])\n public onChange(event: Event): void {\n const fileList = this.getFileElement().files;\n const files: File[] = fileList ? fileListToArray(fileList) : eventToFiles(event);\n\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n private validate(file: File): Observable<string | null> {\n const maxSize = this.maxSize();\n return forkJoin<Record<string, ObservableInput<boolean>>>({\n accept: of(acceptType(this.accept(), file.type, file.name)),\n fileSize: of(!(maxSize && file.size > maxSize)),\n directory: isDirectory(file),\n }).pipe(\n map(result => {\n for (const [key, value] of Object.entries(result)) {\n if (!value) {\n return key;\n }\n }\n\n return null;\n }),\n );\n }\n\n protected hasObservers(): boolean {\n return (\n this.fileChange$.observed ||\n this.filesChange$.observed ||\n (this.broadcast && this.naturalFileService.filesChanged.observed)\n );\n }\n}\n","import {DestroyRef, Directive, HostBinding, HostListener, inject, OnInit, output} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\nimport {eventToFiles, stopEvent} from './utils';\nimport {asyncScheduler, Subject} from 'rxjs';\nimport {throttleTime} from 'rxjs/operators';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * This directive has all options to select files, and adds support for drag'n'drop.\n *\n * It will add the CSS class `natural-file-over` on the component when a file is\n * dragged over. It is up to the component to have some specific styling by using\n * this class.\n *\n * In most cases you probably also want click-to-select, so you should use:\n *\n * ```html\n * <div naturalFileDrop [selectable]=\"true\"></div>\n * ```\n */\n@Directive({\n selector: ':not([naturalFileSelect])[naturalFileDrop]',\n})\nexport class NaturalFileDropDirective extends NaturalAbstractFile implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n @HostBinding('class.natural-file-over') public fileOverClass = false;\n\n /**\n * Emits whenever files are being dragged over\n */\n public readonly fileOver = output<boolean>();\n\n private readonly rawFileOver = new Subject<boolean>();\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n // Automatically change the class, but not too often to avoid visual\n // flickering in Chrome when hovering across child HTML element of our host.\n // It's not absolutely perfect and if dragging slowly and precisely we can\n // still see flicker, but it should be better for most normal usages.\n this.rawFileOver\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n throttleTime(200, asyncScheduler, {\n leading: true,\n trailing: true,\n }),\n )\n .subscribe(fileOver => {\n this.fileOver.emit(fileOver);\n this.fileOverClass = fileOver;\n });\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(event: DragEvent): void {\n if (this.fileSelectionDisabled()) {\n return;\n }\n\n this.closeDrags();\n\n const files = eventToFiles(event);\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n @HostListener('dragover', ['$event'])\n public onDragOver(event: DragEvent): void {\n if (!this.hasObservers()) {\n return;\n }\n\n if (this.fileSelectionDisabled()) {\n return;\n }\n\n stopEvent(event);\n\n // Change cursor\n const transfer = event.dataTransfer;\n if (transfer) {\n transfer.dropEffect = 'copy';\n }\n\n this.rawFileOver.next(true);\n }\n\n private closeDrags(): void {\n this.rawFileOver.next(false);\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(event: DragEvent): void {\n if (this.fileSelectionDisabled()) {\n return;\n }\n\n stopEvent(event);\n this.closeDrags();\n }\n}\n","import {Directive, input} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\n\n/**\n * This directive has all options to select files, except drag'n'drop.\n */\n@Directive({\n selector: ':not([naturalFileDrop])[naturalFileSelect]',\n})\nexport class NaturalFileSelectDirective extends NaturalAbstractFile {\n /**\n * Whether the user can click on the element to select something\n *\n * Override parent to enable it by default\n */\n public override readonly selectable = input(true);\n}\n","import {\n Component,\n computed,\n DOCUMENT,\n inject,\n input,\n Input,\n OnChanges,\n OnInit,\n output,\n SimpleChanges,\n} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\nimport {Observable, of, Subject, tap} from 'rxjs';\nimport {NaturalFileService} from '../file.service';\nimport {UpperCasePipe} from '@angular/common';\nimport {FileModel} from '../types';\nimport {NaturalAlertService} from '../../alert/alert.service';\nimport {NaturalCapitalizePipe} from '../../common/pipes/capitalize.pipe';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatRipple} from '@angular/material/core';\nimport {NaturalFileDropDirective} from '../file-drop.directive';\nimport {NaturalBackgroundDensityDirective} from '../../common/directives/background-density.directive';\nimport {commonImageMimeTypes} from '../utils';\n\n// @dynamic\n@Component({\n selector: 'natural-file',\n imports: [\n NaturalFileDropDirective,\n MatRipple,\n UpperCasePipe,\n MatIcon,\n NaturalIconDirective,\n NaturalCapitalizePipe,\n NaturalBackgroundDensityDirective,\n ],\n templateUrl: './file.component.html',\n styleUrl: './file.component.scss',\n host: {\n '[style.height.px]': 'height()',\n },\n})\nexport class NaturalFileComponent implements OnInit, OnChanges {\n private readonly naturalFileService = inject(NaturalFileService);\n private readonly alertService = inject(NaturalAlertService);\n private readonly document = inject(DOCUMENT);\n\n public readonly height = input(250);\n public readonly iconHeight = computed(() => Math.min(this.height() * 0.66, 120));\n public readonly fontSize = computed(() => Math.min(this.height() * 0.3, 36));\n\n public readonly action = input<'upload' | 'download' | null>(null);\n\n public readonly backgroundSize = input('contain');\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element,\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n public readonly accept = input(commonImageMimeTypes);\n\n /**\n * If given, it will be called when a new file is selected. The callback should typically upload the file\n * to the server and link the newly uploaded file to the existing related object.\n *\n * The callback **must** be able to run even if the calling component has been destroyed. That means in most\n * cases you **must** `bind()` the callback explicitly, like so:\n *\n * ```html\n * <natural-file [uploader]=\"myCallback.bind(this)\" />\n * ```\n *\n * Also, you probably **should** set a `[formCtrl]` so that the form is updated automatically, instead of doing\n * it manually within the callback.\n */\n public readonly uploader = input<(file: File) => Observable<FileModel>>();\n\n @Input() public model: FileModel | null = null;\n\n /**\n * If provided, its value will get updated when the model changes.\n * But its value is never read, so if you want to set a value use `[model]` instead.\n */\n public readonly formCtrl = input<AbstractControl | null | undefined>(null);\n\n /**\n * This **must not** be used to mutate the server, because it is very likely it will never be called if the\n * human navigates away from the page before the upload is finished. Instead, you should use `[uploader]`.\n */\n public readonly modelChange = output<FileModel>();\n\n public imagePreview = '';\n public filePreview: string | null = null;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.model && changes.model.previousValue !== changes.model.currentValue) {\n this.updateImage();\n }\n }\n\n public ngOnInit(): void {\n this.updateImage();\n }\n\n public upload(file: File): void {\n this.model = {file: file};\n this.updateImage();\n\n const formCtrl = this.formCtrl();\n if (formCtrl) {\n formCtrl.setValue(this.model);\n }\n\n const observable =\n this.uploader()?.(file).pipe(tap(() => this.alertService.info($localize`Mis à jour`))) ?? of(this.model);\n\n observable.subscribe(result => {\n this.model = result;\n const formCtrlValue = this.formCtrl();\n if (formCtrlValue) {\n formCtrlValue.setValue(this.model);\n }\n\n this.modelChange.emit(this.model);\n this.updateImage();\n });\n }\n\n public getDownloadLink(): null | string {\n if (this.action() !== 'download') {\n return null;\n }\n\n return this.naturalFileService.getDownloadLink(this.model);\n }\n\n private updateImage(): void {\n this.imagePreview = '';\n this.filePreview = null;\n if (!this.model) {\n return;\n }\n\n if (this.model.file?.type.startsWith('image/')) {\n // Model from upload (before saving)\n this.getBase64(this.model.file).subscribe(result => {\n if (this.model?.file?.type) {\n const content = 'url(data:' + this.model?.file?.type + ';base64,' + result + ')';\n this.imagePreview = content;\n }\n });\n } else if (this.model.file) {\n this.filePreview = this.model.file.type.split('/')[1];\n } else if (this.model.__typename === 'Image' && this.model.id) {\n // Model image with id, use specific API to render image by size\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not show image preview because `window` is undefined');\n }\n\n const loc = window.location;\n const height = this.height() ? '/' + this.height() : '';\n\n // create image url without port to stay compatible with dev mode\n const image = loc.protocol + '//' + loc.hostname + '/api/image/' + this.model.id + height;\n this.imagePreview = image;\n } else if (this.model?.mime && ['File', 'AccountingDocument'].includes(this.model.__typename || '')) {\n this.filePreview = this.model.mime.split('/')[1];\n } else if (this.model.src) {\n // external url\n this.imagePreview = this.model.src;\n }\n }\n\n private getBase64(file: File | null): Observable<string> {\n if (!file) {\n return of('');\n }\n\n const subject = new Subject<string>();\n\n const reader = new FileReader();\n reader.addEventListener('load', (ev: any) => {\n subject.next(btoa(ev.target.result));\n subject.complete();\n });\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n reader.readAsBinaryString(file);\n\n return subject.asObservable();\n }\n}\n","<a\n naturalFileDrop\n matRipple\n target=\"_blank\"\n [selectable]=\"true\"\n [accept]=\"accept()\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action()\"\n [class.suggest-upload]=\"!model && action() === 'upload'\"\n [fileSelectionDisabled]=\"action() !== 'upload'\"\n [matRippleDisabled]=\"!action()\"\n [naturalBackgroundDensity]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize()\"\n (fileChange)=\"upload($event)\"\n>\n @if (filePreview) {\n <div class=\"file-preview\" [style.font-size.px]=\"fontSize()\">\n <mat-icon naturalIcon=\"attachment\" [size]=\"iconHeight()\" />\n {{ filePreview | uppercase }}\n </div>\n }\n\n <div class=\"action-overlay\" [style.font-size.px]=\"fontSize()\">\n @if (action() === 'upload') {\n <mat-icon naturalIcon=\"cloud_upload\" [size]=\"iconHeight()\" />\n }\n @if (action() === 'download') {\n <mat-icon naturalIcon=\"get_app\" [size]=\"iconHeight()\" />\n }\n {{ action() | capitalize }}\n </div>\n</a>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './file-drop.directive';\nexport * from './file-select.directive';\nexport * from './file.service';\nexport type {InvalidFile, FileSelection} from './abstract-file';\nexport * from './component/file.component';\nexport * from './types';\nexport {commonImageMimeTypes} from './utils';\n","import {Component, input} from '@angular/core';\nimport {RouterLink} from '@angular/router';\nimport {NatPalette} from '../../types/types';\n\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatFabButton} from '@angular/material/button';\n\n@Component({\n selector: 'natural-fixed-button',\n imports: [MatFabButton, RouterLink, MatIcon, NaturalIconDirective],\n templateUrl: './fixed-button.component.html',\n styleUrl: './fixed-button.component.scss',\n})\nexport class NaturalFixedButtonComponent {\n public readonly icon = input.required<string>();\n public readonly link = input<RouterLink['routerLink'] | null>(null);\n public readonly color = input<NatPalette>('tertiary');\n public readonly disabled = input(false);\n}\n","<button mat-fab [color]=\"color()\" [disabled]=\"disabled()\" [routerLink]=\"link()\">\n <mat-icon [naturalIcon]=\"icon()\" />\n</button>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button.component';\n","import {Component, inject, Input, output} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {NaturalFixedButtonComponent} from '../fixed-button/fixed-button.component';\n\ntype Model = {\n id?: string;\n permissions?: {\n delete: boolean;\n };\n};\n\n@Component({\n selector: 'natural-fixed-button-detail',\n imports: [NaturalFixedButtonComponent, MatTooltip],\n templateUrl: './fixed-button-detail.component.html',\n styleUrl: './fixed-button-detail.component.scss',\n})\nexport class NaturalFixedButtonDetailComponent {\n private canChange = true;\n public isCreation = false;\n\n public get model(): Model {\n return this._model;\n }\n\n @Input({required: true})\n public set model(value: Model) {\n this._model = value;\n if (this.canChange) {\n this.isCreation = !this._model.id;\n this.canChange = false;\n }\n }\n\n private _model!: Model;\n\n @Input({required: true}) public form!: FormGroup;\n\n public readonly create = output();\n public readonly delete = output();\n\n public constructor() {\n const route = inject(ActivatedRoute);\n\n route.params.pipe(takeUntilDestroyed()).subscribe(() => (this.canChange = true));\n }\n\n public clickCreate(): void {\n if (this.form.enabled) {\n this.create.emit();\n }\n }\n\n public clickDelete(): void {\n if (this.form.enabled) {\n this.delete.emit();\n }\n }\n}\n","@if (isCreation) {\n <natural-fixed-button\n class=\"detail-speed-dial\"\n icon=\"save\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'tertiary' : 'error'\"\n (click)=\"clickCreate()\"\n />\n}\n\n@if (!isCreation && (!model.permissions || model.permissions.delete)) {\n <natural-fixed-button\n class=\"detail-speed-dial\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer définitivement\"\n matTooltipPosition=\"left\"\n [disabled]=\"form.disabled\"\n (click)=\"clickDelete()\"\n />\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button-detail.component';\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material/dialog';\nimport {clone} from 'es-toolkit';\nimport {defaults} from 'es-toolkit/compat';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {OrganizedModelSelection} from '../hierarchic-selector/hierarchic-selector.service';\nimport {MatButton} from '@angular/material/button';\nimport {NaturalHierarchicSelectorComponent} from '../hierarchic-selector/hierarchic-selector.component';\n\nexport type HierarchicDialogResult = {\n hierarchicSelection?: OrganizedModelSelection;\n searchSelections?: NaturalSearchSelections | null;\n};\n\nexport type HierarchicDialogConfig = {\n /**\n * Configuration to setup rules of hierarchy\n */\n hierarchicConfig: NaturalHierarchicConfiguration[];\n\n /**\n * Selected items when HierarchicComponent initializes\n */\n hierarchicSelection?: OrganizedModelSelection;\n\n /**\n * Filters to apply on queries (when opening new level of hierarchy)\n */\n hierarchicFilters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Multiple selection if true or single selection if false\n */\n multiple?: boolean;\n\n /**\n * Allow to select all items with dedicated button\n */\n allowSelectAll?: boolean;\n\n /**\n * Facets for natural-search in HierarchicComponent\n */\n searchFacets?: NaturalSearchFacets;\n\n /**\n * Selections of natural search to initialize on HierarchicComponent initialisation\n */\n searchSelections?: NaturalSearchSelections | null;\n};\n\n@Component({\n imports: [MatDialogModule, NaturalHierarchicSelectorComponent, MatButton],\n templateUrl: './hierarchic-selector-dialog.component.html',\n styleUrl: './hierarchic-selector-dialog.component.scss',\n})\nexport class NaturalHierarchicSelectorDialogComponent {\n private dialogRef =\n inject<MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult>>(MatDialogRef);\n\n /**\n * Set of hierarchic configurations to pass as attribute to HierarchicComponent\n */\n public config: HierarchicDialogConfig;\n\n /**\n * Natural search selections after initialisation\n */\n public searchSelectionsOutput: NaturalSearchSelections | undefined | null;\n\n public constructor() {\n const data = inject<HierarchicDialogConfig>(MAT_DIALOG_DATA);\n\n this.config = defaults(data, {multiple: true});\n this.searchSelectionsOutput = this.config.searchSelections;\n }\n\n public close(selected: OrganizedModelSelection | undefined): void {\n const result: HierarchicDialogResult = {\n hierarchicSelection: clone(selected),\n searchSelections: clone(this.searchSelectionsOutput),\n };\n\n this.dialogRef.close(result);\n }\n}\n","<h2 i18n mat-dialog-title>Sélection</h2>\n\n<mat-dialog-content>\n <natural-hierarchic-selector\n [selected]=\"config.hierarchicSelection ?? {}\"\n [config]=\"config.hierarchicConfig\"\n [filters]=\"config.hierarchicFilters\"\n [multiple]=\"config.multiple ?? false\"\n [allowSelectAll]=\"config.allowSelectAll ?? false\"\n [searchFacets]=\"config.searchFacets ?? []\"\n [searchSelections]=\"config.searchSelections ?? []\"\n (selectionChange)=\"config.hierarchicSelection = $event\"\n (searchSelectionChange)=\"searchSelectionsOutput = $event\"\n />\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-dialog-close mat-button i18n>Annuler</button>\n <button color=\"primary\" matButton=\"filled\" (click)=\"close(config.hierarchicSelection)\"\n ><span i18n>Valider</span>\n </button>\n</mat-dialog-actions>\n","import {inject, Injectable} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {defaults} from 'es-toolkit/compat';\nimport {\n HierarchicDialogConfig,\n HierarchicDialogResult,\n NaturalHierarchicSelectorDialogComponent,\n} from './hierarchic-selector-dialog.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorDialogService {\n private readonly dialog = inject(MatDialog);\n\n public open(\n hierarchicConfig: HierarchicDialogConfig,\n dialogConfig?: MatDialogConfig,\n ): MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult> {\n const defaultDialogConfig = {\n width: '700px',\n data: hierarchicConfig,\n };\n\n return this.dialog.open<\n NaturalHierarchicSelectorDialogComponent,\n HierarchicDialogConfig,\n HierarchicDialogResult\n >(NaturalHierarchicSelectorDialogComponent, defaults(dialogConfig, defaultDialogConfig));\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './classes/hierarchic-configuration';\nexport * from './classes/hierarchic-filters-configuration';\nexport * from './hierarchic-selector/hierarchic-selector.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nexport * from './hierarchic-selector/hierarchic-selector.service';\n","import {EnvironmentProviders, inject, provideAppInitializer, Provider} from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {NATURAL_ICONS_CONFIG, NaturalIconsConfig} from './icon.directive';\n\n/**\n * Configure Material Symbols, instead of Material Icons, and configure custom Natural icons.\n *\n * This means that `https://fonts.googleapis.com/icon?family=Material+Icons` must be\n * replaced by `https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@1`.\n */\nexport function provideIcons(config: NaturalIconsConfig): (EnvironmentProviders | Provider)[] {\n return [\n {\n provide: NATURAL_ICONS_CONFIG,\n useValue: config,\n },\n provideAppInitializer(() => {\n const iconRegistry = inject(MatIconRegistry);\n // Replace the old Material Icons by the new Material Symbols\n const defaultFontSetClasses = iconRegistry.getDefaultFontSetClass();\n const outlinedFontSetClasses = defaultFontSetClasses\n .filter(fontSetClass => fontSetClass !== 'material-icons')\n .concat(['material-symbols-outlined']);\n iconRegistry.setDefaultFontSetClass(...outlinedFontSetClasses);\n }),\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './icon.directive';\nexport {provideIcons} from './icon.module';\n","import {ComponentType} from '@angular/cdk/portal';\nimport {InjectionToken, Injector} from '@angular/core';\nimport {UrlSegment} from '@angular/router';\nimport {Literal} from '../../types/types';\nimport {Observable} from 'rxjs';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {LinkableObject} from '../../services/link-mutation.service';\n\n/**\n * Kind of snapshot of the instance of a panel activated route\n */\nexport type NaturalPanelsRouteConfig = {\n segments: UrlSegment[];\n path: string;\n};\n\n/**\n * Config required to manage url and instantiate component correctly\n */\nexport type NaturalPanelConfig = {\n component: ComponentType<NaturalAbstractPanel>;\n injector: Injector | null;\n resolve: NaturalPanelResolves;\n params: Literal;\n rule: NaturalPanelsRouterRule;\n route: NaturalPanelsRouteConfig;\n};\n\n/**\n * Data provided to instantiated components in context of a panel/dialog\n */\nexport type NaturalPanelData = {\n config: NaturalPanelConfig;\n data: Literal;\n\n /**\n * Related objects that should be linked to the object shown in the panel after its creation\n */\n linkableObjects: LinkableObject[];\n};\n\n/**\n * Similar to Angular functional resolver interface, but simpler for our panels' needs\n */\ntype NaturalPanelResolve<T> = (route: NaturalPanelConfig) => Observable<T>;\nexport type NaturalPanelResolves = Record<string, NaturalPanelResolve<unknown>>;\n/**\n * Configuration for a route\n */\nexport type NaturalPanelsRouterRule = {\n path: string;\n component: ComponentType<NaturalAbstractPanel>;\n resolve?: NaturalPanelResolves;\n};\n\nexport type NaturalPanelsBeforeOpenPanel = {\n itemData: NaturalPanelData;\n panelConfig: NaturalPanelConfig;\n fullPanelsConfig: NaturalPanelConfig[];\n resolvedResult: any; // todo : Generic or NaturalAbstractModelService\n};\n\nexport type NaturalPanelsHooksConfig = {\n beforeOpenPanel?: (\n injector: Injector,\n naturalPanelsBeforeOpenPanel: NaturalPanelsBeforeOpenPanel,\n ) => NaturalPanelData;\n};\n\n// Array of NaturalPanelsRouterRule\nexport type NaturalPanelsRoutesConfig = NaturalPanelsRouterRule[];\n\nexport const PanelsHooksConfig = new InjectionToken<NaturalPanelsHooksConfig>('NaturalPanelsHooksConfig');\n","import {Provider} from '@angular/core';\nimport {NaturalPanelsHooksConfig, PanelsHooksConfig} from './types';\n\nexport function providePanels(hooks: NaturalPanelsHooksConfig): Provider[] {\n return [\n {\n provide: PanelsHooksConfig,\n useValue: hooks,\n },\n ];\n}\n","import {Injector} from '@angular/core';\nimport {Route, UrlMatcher, UrlMatchResult, UrlSegment, UrlSegmentGroup} from '@angular/router';\nimport {flatten, merge} from 'es-toolkit';\nimport {NaturalPanelConfig, NaturalPanelsRouterRule} from './types';\nimport {Literal} from '../../types/types';\n\nfunction getConsumedSegments(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): UrlSegment[] {\n return flatten(getStackConfig(segments, routes).map(conf => conf.route.segments));\n}\n\n/**\n * Return a list of items specifying the component, the service and the optional id of url segments\n */\nexport function getStackConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig[] {\n if (!routes) {\n return [];\n }\n\n const comp = getComponentConfig(segments, routes, injector);\n\n if (comp) {\n return [comp].concat(getStackConfig(segments.slice(comp.route.segments.length), routes, injector));\n }\n\n return [];\n}\n\n/**\n * Returns an object with a component class, a service and an optional id from current and next url segments\n */\nfunction getComponentConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig | null {\n if (!segments.length) {\n return null;\n }\n\n // For each config\n for (const routeConfig of routes) {\n const params: Literal = {};\n const configSegments = routeConfig.path.split('/');\n let match = true;\n\n // For each current url segment\n for (let i = 0; i < segments.length; i++) {\n if (!configSegments[i]) {\n match = false;\n break;\n }\n\n // If find variable, store it\n if (configSegments[i].includes(':') && +segments[i].path > 0) {\n params[configSegments[i].replace(':', '')] = segments[i].path;\n } else if (configSegments[i] !== segments[i].path) {\n // If segments are different, url does not match\n match = false;\n break;\n }\n }\n\n if (match) {\n const matrixParams = segments.reduce((groupedParams, segment) => {\n return merge(groupedParams, segment.parameters);\n }, {});\n\n return {\n component: routeConfig.component,\n injector: injector,\n resolve: routeConfig.resolve ?? {},\n params: merge(params, matrixParams),\n rule: routeConfig,\n route: {\n segments: segments,\n path: segments.map(s => s.path).join('/'),\n },\n };\n }\n }\n\n if (segments.length > 1) {\n return getComponentConfig(segments.slice(0, -1), routes, injector);\n }\n\n return null;\n}\n\nexport const naturalPanelsUrlMatcher: UrlMatcher = (\n segments: UrlSegment[],\n group: UrlSegmentGroup,\n route: Route,\n): UrlMatchResult | null => {\n const matchedSegments = getConsumedSegments(segments, route.data ? route.data.panelsRoutes : []);\n\n if (matchedSegments.length) {\n return {consumed: matchedSegments};\n }\n\n return null;\n};\n","import {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {ComponentType} from '@angular/cdk/portal';\nimport {inject, Injectable, Injector, runInInjectionContext} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatDialog, MatDialogConfig} from '@angular/material/dialog';\nimport {ActivatedRoute, DefaultUrlSerializer, NavigationError, Router, UrlSegment} from '@angular/router';\nimport {differenceWith, flatten} from 'es-toolkit';\nimport {isEqual} from 'es-toolkit/compat';\nimport {forkJoin, Observable, of, Subject, Subscription} from 'rxjs';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {getStackConfig} from './panels.urlmatcher';\nimport {\n NaturalPanelConfig,\n NaturalPanelData,\n NaturalPanelsBeforeOpenPanel,\n NaturalPanelsRouterRule,\n PanelsHooksConfig,\n} from './types';\n\nfunction segmentsToString(segments: UrlSegment[]): string {\n return segments.map(s => s.toString()).join('/');\n}\n\nfunction compareConfigs(a: NaturalPanelConfig, b: NaturalPanelConfig): boolean {\n return a.route.path === b.route.path && a.rule === b.rule && isEqual(a.params, b.params);\n}\n\n/**\n * TODO: implement route update when closing dialog with escape\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPanelsService {\n private readonly router = inject(Router);\n private readonly dialog = inject(MatDialog);\n private readonly injector = inject(Injector);\n private hooksConfig = inject(PanelsHooksConfig);\n\n private readonly panelWidth = '960px';\n\n /**\n * Because of this static property Panels are **not** compatible with SSR.\n * And we cannot make it non-static, because `UrlMatcher` cannot be injected.\n */\n private static _opened = false;\n public static get opened(): boolean {\n return this._opened;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing\n */\n public readonly afterAllClosed = new Subject<void>();\n /**\n * Cache for panels counter. Works more like an ID.\n * Is used to give an unique identifier to multiple similar panels configurations\n */\n private counter = 1;\n /**\n * Class applied to dialog overlay related with panels\n * If change, change CSS too\n */\n private panelClass = 'panel';\n\n /**\n * Cache for panels setup before navigation change.\n * Used to detect panels openings/closings and adapt for new configuration\n */\n private oldFullConfig: NaturalPanelConfig[] = [];\n\n /**\n * Cache for subscription stop\n */\n private routeSub?: Subscription;\n\n /**\n * Cache for subscription stop\n */\n private navSub?: Subscription;\n\n /**\n * Horizontal gaps between panels\n */\n private panelsOffsetH = 35;\n\n /**\n * Vertical gaps between panels\n */\n private panelsOffsetV = 40;\n\n /**\n * Cache of previous screen size\n * Used to change panels stack orientation on small screens\n */\n private isVertical = false;\n\n public constructor() {\n const breakpointObserver = inject(BreakpointObserver);\n\n // Watch media to know if display panels horizontally or vertically\n breakpointObserver\n .observe(Breakpoints.XSmall)\n .pipe(takeUntilDestroyed())\n .subscribe(result => {\n this.isVertical = result.matches;\n this.updateComponentsPosition();\n });\n }\n\n /**\n * Notify the service to start listening to route changes to open panels\n *\n * @internal\n */\n public start(route: ActivatedRoute): void {\n NaturalPanelsService._opened = true;\n this.routeSub = route.url.subscribe(segments => {\n this.updatePanels(segments, route.snapshot.data.panelsRoutes);\n });\n\n this.navSub = this.router.events.subscribe(ev => {\n if (!(ev instanceof NavigationError)) {\n return;\n }\n\n // Abort and propagate navigation error\n if (ev.url.endsWith('/')) {\n this.stop();\n\n // This is a bit hackish: we hardcode an impossible url to trigger normal navigation error mechanism\n this.router.navigateByUrl('panels-reached-invalid-url');\n\n return;\n }\n\n this.counter++;\n\n // pc stands for \"panel counter\", required to give an identification to panels with exact same config\n // E.g /new\n const wantedUrl = ev.url + ';pc=' + this.counter;\n\n // Segments matching from wanted url. E.g ~ ['new']\n const wantedUrSegments = new DefaultUrlSerializer().parse(wantedUrl).root.children.primary.segments;\n\n // Don't match any config\n const wantedConfig = getStackConfig(wantedUrSegments, route.snapshot.data.panelsRoutes, this.injector);\n\n if (wantedConfig.length) {\n return this.appendConfigToCurrentUrl(wantedConfig);\n }\n\n // Currently activated routes. E.g ['objective', 'objective', 123, 'risk']\n const currentSegments = flatten(\n this.dialog.openDialogs.map(d => d.componentInstance.panelData.config.route.segments),\n );\n\n // Last segment. E.g ['risk']\n const lastOfCurrentSegments = currentSegments.slice(-1);\n\n // Config for ['risk', 'new']\n const currentAndWantedConfig = getStackConfig(\n lastOfCurrentSegments.concat(wantedUrSegments),\n route.snapshot.data.panelsRoutes,\n this.injector,\n );\n\n return this.appendConfigToCurrentUrl(currentAndWantedConfig);\n });\n }\n\n /**\n * Uses given configuration to add at the end of current url\n */\n private appendConfigToCurrentUrl(config: NaturalPanelConfig[]): void {\n // Navigate to the same url + /risk/new Result : /risk/risk/new\n const newUrl = config.map(conf => segmentsToString(conf.route.segments)).join('/');\n\n this.router.navigateByUrl(this.router.url + '/' + newUrl);\n }\n\n /**\n * Notify the service that all panels were closed\n *\n * @internal\n */\n public stop(): void {\n NaturalPanelsService._opened = false;\n this.routeSub?.unsubscribe();\n this.navSub?.unsubscribe();\n this.dialog.closeAll();\n this.oldFullConfig = [];\n this.afterAllClosed.next();\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n *\n * @internal\n */\n public goToPanelByComponent(component: NaturalAbstractPanel): void {\n this.goToPanelByIndex(this.getPanelIndex(component));\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n */\n public goToPenultimatePanel(): void {\n this.goToPanelByIndex(this.dialog.openDialogs.length - 2);\n }\n\n /**\n * Calls the new url that only includes the segments from the panels we want to stay open\n */\n private goToPanelByIndex(index: number): void {\n // Extracts url segments from next panel until last one\n const url = this.dialog.openDialogs\n .slice(index + 1)\n .map(dialog => {\n return segmentsToString(dialog.componentInstance.panelData.config.route.segments);\n })\n .join('/');\n\n // Remove extra segments and redirects to root\n this.router.navigateByUrl(this.router.url.replace('/' + url, ''));\n }\n\n /**\n * Selecting a panel is equivalent to close all those that are in front of him\n * @param index of panel in stack. The most behind (the first one) is 0.\n */\n private selectPanelByIndex(index: number): Observable<void> {\n const lastDialog = this.dialog.openDialogs[this.dialog.openDialogs.length - 1];\n\n // Update new panels set positions\n this.updateComponentsPosition();\n\n for (let i = this.dialog.openDialogs.length - 1; i >= index + 1; i--) {\n this.dialog.openDialogs[i].close();\n }\n\n return lastDialog.afterClosed();\n }\n\n /**\n * Open new panels if url has changed with new segments\n */\n private updatePanels(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): void {\n // Transform url segments into a config with component name and ID if provided in next segment\n // Returns an array of configs, each config represents the content relative to a panel\n const newFullConfig = getStackConfig(segments, routes, this.injector);\n const configsToRemove = differenceWith(this.oldFullConfig, newFullConfig, compareConfigs);\n const configsToAdd = differenceWith(newFullConfig, this.oldFullConfig, compareConfigs);\n\n const indexOfNextPanel = this.oldFullConfig.length - configsToRemove.length - 1;\n\n if (configsToRemove.length && configsToAdd.length) {\n // Add and remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => {\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n });\n } else if (configsToRemove.length && !configsToAdd.length) {\n // only remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => this.updateComponentsPosition());\n } else if (!configsToRemove.length && configsToAdd.length) {\n // only add panels\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n }\n\n this.oldFullConfig = newFullConfig;\n }\n\n /**\n * Resolve all services, then open panels\n */\n private openPanels(\n newItemsConfig: NaturalPanelConfig[],\n fullConfig: NaturalPanelConfig[],\n ): Observable<Observable<any> | null> {\n const subject = new Subject<Observable<any> | null>();\n\n // Resolve everything before opening a single panel\n const resolves = newItemsConfig.map(conf => this.getResolvedData(conf));\n\n // ForkJoin emits when all promises are executed;\n forkJoin(resolves).subscribe(resolvedResult => {\n // For each new config entry, open a new panel\n for (let i = 0; i < newItemsConfig.length; i++) {\n const config = newItemsConfig[i];\n let itemData: NaturalPanelData = {\n // Config of actual panel route\n config: config,\n\n // Data resolved by service\n // Use in component by calling this.panelData.data.xyz\n data: resolvedResult[i],\n linkableObjects: [],\n };\n\n if (this.hooksConfig?.beforeOpenPanel) {\n const event: NaturalPanelsBeforeOpenPanel = {\n itemData: itemData,\n panelConfig: config,\n resolvedResult: resolvedResult,\n fullPanelsConfig: fullConfig,\n };\n\n itemData = this.hooksConfig.beforeOpenPanel(this.injector, event);\n }\n\n this.openPanel(config.component, itemData);\n }\n\n this.dialog.openDialogs[this.dialog.openDialogs.length - 1].afterOpened().subscribe(() => {\n subject.next(null);\n });\n });\n\n return subject;\n }\n\n private getResolvedData(config: NaturalPanelConfig): Observable<Record<string, unknown>> {\n if (!config.resolve || (config.resolve && Object.keys(config.resolve).length === 0)) {\n return of({});\n }\n\n const resolveKeys = Object.keys(config.resolve);\n const resolvedData: Record<string, Observable<unknown>> = {};\n const injector = config.injector;\n\n if (injector) {\n resolveKeys.forEach(key => {\n resolvedData[key] = runInInjectionContext(injector, () => config.resolve[key](config));\n });\n }\n\n return forkJoin(resolvedData);\n }\n\n private openPanel(componentOrTemplateRef: ComponentType<NaturalAbstractPanel>, data: NaturalPanelData): void {\n const conf: MatDialogConfig = {\n panelClass: this.panelClass,\n closeOnNavigation: false,\n hasBackdrop: this.dialog.openDialogs.length === 0,\n height: '100%',\n width: this.panelWidth,\n position: {\n top: '0',\n right: '0',\n },\n };\n\n const dialogRef = this.dialog.open<NaturalAbstractPanel>(componentOrTemplateRef, conf);\n\n // Panelisable interface attributes/functions\n dialogRef.componentInstance.initPanel(data);\n\n dialogRef.beforeClosed().subscribe(() => {\n const index = this.getPanelIndex(dialogRef.componentInstance);\n this.goToPanelByIndex(index - 1);\n });\n }\n\n /**\n * Return panel position (index) by searching matching component\n */\n private getPanelIndex(component: NaturalAbstractPanel): number {\n if (!component) {\n return -1;\n }\n\n return this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance === component);\n }\n\n /**\n * Whether the given panel is currently the top, visible, panel. If there are no panels opened at all, then any panel given is considered top, visible, panel.\n */\n public isTopPanel(component: NaturalAbstractPanel): boolean {\n const length = this.dialog.openDialogs.length;\n return !length || this.dialog.openDialogs[length - 1]?.componentInstance === component;\n }\n\n /**\n * Repositions panels from start until given index\n */\n private updateComponentsPosition(): void {\n if (!this.dialog.openDialogs.length) {\n return;\n }\n\n // Select the panels that are still opened, ignore the others because they'll be closed\n const affectedElements = this.dialog.openDialogs;\n for (let i = 0; i < affectedElements.length; i++) {\n const dialog = affectedElements[i];\n\n // Set all panels as \"hidden\" except last one. IsFrontPanel attribute causes a CSS that hides body via hostbinding\n dialog.componentInstance.isFrontPanel = i === affectedElements.length - 1;\n dialog.componentInstance.panelService = this;\n\n // Assign offset\n const deep = affectedElements.length - 1 - i;\n\n let position: any = {right: deep * this.panelsOffsetH + 'px'};\n if (this.isVertical && affectedElements.length > 1) {\n const top = i * this.panelsOffsetV + 'px';\n position = {top: top, right: '0px'};\n dialog.updateSize(this.panelWidth, `calc(100% - ${top})`); // call before updatePosition\n } else {\n dialog.updateSize(this.panelWidth, `100%`);\n }\n\n dialog.updatePosition(position);\n }\n }\n}\n","import {Component, inject, OnDestroy} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n@Component({\n selector: 'natural-panels',\n template: '',\n})\nexport class NaturalPanelsComponent implements OnDestroy {\n private readonly panelsService = inject(NaturalPanelsService);\n\n // PanelsComponent is kind of a \"ghost\" component to respond to an url matcher in route config,\n // An UrlMatcher (matcher attribute) is required to catch urls with an undefined number of params in url after a given param /panels/\n public constructor() {\n const route = inject(ActivatedRoute);\n\n this.panelsService.start(route);\n }\n\n public ngOnDestroy(): void {\n this.panelsService.stop();\n }\n}\n","import {UrlMatcher, UrlMatchResult, UrlSegment} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n/**\n * Url fallback matcher to be used instead of `path: '**'` when Panel system\n * is used in the project.\n */\nexport const fallbackIfNoOpenedPanels: UrlMatcher = (segments: UrlSegment[]): UrlMatchResult | null => {\n if (!NaturalPanelsService.opened) {\n return {consumed: segments};\n }\n\n return null;\n};\n","/*\n * Public API Surface of natural\n */\n\nexport {providePanels} from './panels.module';\nexport * from './panels.component';\nexport * from './panels.service';\nexport {naturalPanelsUrlMatcher} from './panels.urlmatcher';\nexport {fallbackIfNoOpenedPanels} from './fallback-if-no-opened-panels.urlmatcher';\nexport * from './abstract-panel';\nexport * from './types';\n","import {\n Component,\n contentChild,\n DestroyRef,\n inject,\n Input,\n input,\n OnChanges,\n OnInit,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport {MatPaginator, PageEvent} from '@angular/material/paginator';\nimport {NaturalDataSource, PaginatedData} from '../../classes/data-source';\nimport {NaturalQueryVariablesManager, PaginationInput, QueryVariables} from '../../classes/query-variable-manager';\nimport {HierarchicFiltersConfiguration} from '../hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {LinkableObject, NaturalLinkMutationService} from '../../services/link-mutation.service';\nimport {NaturalHierarchicConfiguration} from '../hierarchic-selector/classes/hierarchic-configuration';\nimport {HierarchicDialogConfig} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nimport {NaturalHierarchicSelectorDialogService} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nimport {NaturalSelectComponent} from '../select/select/select.component';\nimport {NaturalAbstractModelService} from '../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall} from '../../types/types';\nimport {MatProgressSpinner} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n} from '@angular/material/table';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {finalize, forkJoin, tap} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Custom template usage :\n *\n * ```html\n * <natural-relations [main]=\"owner\" [service]=\"svc\" [filter]=\"{}\" placeholder=\"Select an item\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-relations>\n * ```\n */\n@Component({\n selector: 'natural-relations',\n imports: [\n NgTemplateOutlet,\n MatTable,\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatHeaderCell,\n MatCell,\n MatHeaderRow,\n MatRow,\n MatButton,\n MatIconButton,\n MatTooltip,\n MatIcon,\n NaturalIconDirective,\n MatPaginator,\n MatProgressSpinner,\n NaturalSelectComponent,\n ],\n templateUrl: './relations.component.html',\n styleUrl: './relations.component.scss',\n})\nexport class NaturalRelationsComponent<\n TService extends NaturalAbstractModelService<\n unknown,\n any,\n PaginatedData<LinkableObject>,\n QueryVariables,\n unknown,\n any,\n unknown,\n any,\n unknown,\n any\n >,\n >\n implements OnInit, OnChanges\n{\n private readonly destroyRef = inject(DestroyRef);\n private readonly linkMutationService = inject(NaturalLinkMutationService);\n private readonly hierarchicSelectorDialog = inject(NaturalHierarchicSelectorDialogService);\n private readonly select = viewChild<NaturalSelectComponent<TService>>(NaturalSelectComponent);\n public readonly itemTemplate = contentChild<TemplateRef<unknown>>(TemplateRef);\n\n private _service!: TService;\n\n public get service(): TService {\n return this._service;\n }\n\n @Input({required: true})\n public set service(service: TService) {\n this._service = service;\n this.loading = true;\n const items$ = this._service.watchAll(this.variablesManager).pipe(\n takeUntilDestroyed(this.destroyRef),\n tap({\n next: () => (this.loading = false),\n complete: () => (this.loading = false),\n error: () => (this.loading = false),\n }),\n );\n\n this.dataSource = new NaturalDataSource(items$);\n }\n\n /**\n * The placeholder used in the button to add a new relation\n */\n public readonly placeholder = input('');\n\n /**\n * Filter for autocomplete selector\n */\n public readonly autocompleteSelectorFilter = input<ExtractVall<TService>['filter'] | null>();\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n public readonly displayWith = input<(item: ExtractTallOne<TService> | null) => string>();\n\n /**\n * Whether the relations can be changed\n */\n @Input() public disabled = false;\n\n /**\n * The main object to which all relations belong to\n */\n @Input({required: true}) public main!: LinkableObject & {permissions?: {update: boolean}};\n\n /**\n * Emits after relations were successfully added on the server\n */\n public readonly selectionChange = output();\n\n /**\n * Filters for hierarchic selector\n */\n public readonly hierarchicSelectorFilters = input<HierarchicFiltersConfiguration | null>();\n\n /**\n * Configuration in case we prefer hierarchic selection over autocomplete selection\n */\n public readonly hierarchicSelectorConfig = input<NaturalHierarchicConfiguration[]>();\n\n /**\n * Link mutation semantic\n */\n @Input() public otherName?: string | null;\n\n /**\n * Listing service instance\n */\n public dataSource!: NaturalDataSource<PaginatedData<LinkableObject>>;\n public loading = false;\n\n /**\n * Table columns\n */\n public displayedColumns = ['name'];\n\n public readonly pageSizeOptions = [5, 25, 50, 100];\n protected readonly defaultPagination = {\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Observable variables/options for listing service usage and apollo watchQuery\n */\n private variablesManager = new NaturalQueryVariablesManager<QueryVariables>();\n\n public readonly removing = new Set<LinkableObject>();\n\n /**\n * The filter used to filter relations\n *\n * So if the relations are from one action -> to many objectives, then the filter must filter\n * the objectives that have indeed a relation to the particular action.\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter']) {\n this.variablesManager.set('relations-filter', {filter: filter});\n }\n\n /**\n * The sorting used to sort relations\n *\n * So if the relations are from one action -> to many objectives, then the sorting must sort\n * the objectives that have indeed a relation to the particular action.\n */\n @Input()\n public set sorting(sorting: ExtractVall<TService>['sorting']) {\n this.variablesManager.set('relations-sorting', {sorting: sorting});\n }\n\n public ngOnChanges(): void {\n if (this.disabled && this.displayedColumns.includes('unlink')) {\n this.displayedColumns.pop();\n } else if (!this.disabled && !this.displayedColumns.includes('unlink')) {\n this.displayedColumns.push('unlink');\n }\n }\n\n public ngOnInit(): void {\n this.pagination();\n\n // Force disabled if cannot update object\n if (this.main && this.main.permissions) {\n this.disabled = this.disabled || !this.main.permissions.update;\n }\n }\n\n /**\n * Unlink action\n * Refetch result to display it in table\n */\n public removeRelation(relation: LinkableObject): void {\n this.removing.add(relation);\n\n this.linkMutationService\n .unlink(this.main, relation, this.otherName)\n .pipe(finalize(() => this.removing.delete(relation)))\n .subscribe(() => this.dataSource?.remove(relation));\n }\n\n /**\n * Link action\n * Refetch result to display it in table\n * TODO : could maybe use \"update\" attribute of apollo.mutate function to update table faster (but hard to do it here)\n */\n public addRelations(relations: (LinkableObject | ExtractTallOne<TService> | string | null)[]): void {\n const observables = relations\n .filter((relation): relation is LinkableObject => !!relation && typeof relation === 'object')\n .map(relation => this.linkMutationService.link(this.main, relation, this.otherName));\n\n forkJoin(observables).subscribe(() => {\n this.selectionChange.emit();\n this.select()?.clear();\n });\n }\n\n public pagination(event?: PageEvent): void {\n let pagination: PaginationInput | null = null;\n if (\n event &&\n (event.pageIndex !== this.defaultPagination.pageIndex || event.pageSize !== this.defaultPagination.pageSize)\n ) {\n pagination = {\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n };\n }\n\n this.variablesManager.set('pagination', {pagination: pagination ? pagination : this.defaultPagination});\n }\n\n public getDisplayFn(): (item: ExtractTallOne<TService> | null) => string {\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return (item: any) => (item ? item.fullName || item.name : '');\n }\n\n public openNaturalHierarchicSelector(): void {\n const selectAtKey = this.getSelectKey();\n\n const hierarchicSelectorConfig = this.hierarchicSelectorConfig();\n if (!selectAtKey || !hierarchicSelectorConfig) {\n return;\n }\n\n const selected = {};\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: hierarchicSelectorConfig,\n hierarchicSelection: selected,\n hierarchicFilters: this.hierarchicSelectorFilters(),\n multiple: true,\n };\n\n this.hierarchicSelectorDialog\n .open(hierarchicConfig)\n .afterClosed()\n .subscribe(result => {\n if (result?.hierarchicSelection !== undefined) {\n const selection = result.hierarchicSelection[selectAtKey];\n if (selection.length) {\n this.addRelations(selection);\n }\n }\n });\n }\n\n private getSelectKey(): string | undefined {\n const hierarchicSelectorConfig = this.hierarchicSelectorConfig();\n if (!hierarchicSelectorConfig) {\n return;\n }\n\n return hierarchicSelectorConfig.find(c => !!c.selectableAtKey)?.selectableAtKey;\n }\n}\n","<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table class=\"natural-row-click\" mat-table [dataSource]=\"dataSource\">\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n @let customTemplate = itemTemplate();\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"customTemplate ? customTemplate : defaultNameCell\"\n />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n @if (!disabled) {\n <button\n color=\"error\"\n matIconButton\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n [disabled]=\"removing.has(element)\"\n (click)=\"removeRelation(element)\"\n >\n <mat-icon naturalIcon=\"link_off\" />\n </button>\n }\n </td>\n </ng-container>\n </table>\n\n @if (dataSource.data && (dataSource.data.length || 0) > (dataSource.data.pageSize || 0)) {\n <mat-paginator\n [length]=\"dataSource.data.length || 0\"\n [pageIndex]=\"dataSource.data.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource.data.pageSize || 0\"\n (page)=\"pagination($event)\"\n />\n }\n\n @if (!loading && dataSource.data?.length === 0) {\n <div class=\"nat-margin-vertical mat-body\">\n <span i18n>Aucun résultat</span>\n </div>\n }\n\n @if (loading) {\n <mat-progress-spinner class=\"loading\" mode=\"indeterminate\" [diameter]=\"40\" />\n }\n</div>\n\n@if (!disabled) {\n @if (hierarchicSelectorConfig()) {\n <div>\n <button color=\"primary\" mat-flat-button (click)=\"openNaturalHierarchicSelector()\">{{\n placeholder()\n }}</button>\n </div>\n } @else {\n <natural-select\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter()\"\n [placeholder]=\"placeholder()\"\n [service]=\"service\"\n [showIcon]=\"false\"\n (selectionChange)=\"addRelations([$event])\"\n />\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './relations.component';\n","import {Component, inject, Input, input, OnInit} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {IEnum, NaturalEnumService} from '../../../services/enum.service';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {MatOption} from '@angular/material/core';\nimport {AsyncPipe} from '@angular/common';\nimport {MatSelect} from '@angular/material/select';\nimport {MatError, MatFormField, MatHint, MatLabel} from '@angular/material/form-field';\n\ntype Value = IEnum['value'] | IEnum['value'][];\n\n@Component({\n selector: 'natural-select-enum',\n imports: [\n MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n AsyncPipe,\n MatOption,\n ],\n templateUrl: './select-enum.component.html',\n styleUrl: './select-enum.component.scss',\n})\nexport class NaturalSelectEnumComponent extends AbstractSelect<Value, Value> implements OnInit, ControlValueAccessor {\n private readonly enumService = inject(NaturalEnumService);\n\n /**\n * The name of the enum type, eg: `\"ActionStatus\"`\n */\n public readonly enumName = input.required<string>();\n\n /**\n * If given an extra option is added to select `null` with given label\n */\n @Input() public nullLabel?: string;\n\n /**\n * Functions that receives an enum value and returns whether that value is disabled\n */\n @Input() public optionDisabled?: (item: IEnum) => boolean;\n\n /**\n * Whether the user should be allowed to select multiple options\n */\n public readonly multiple = input(false);\n\n public items?: Observable<IEnum[]>;\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.items = this.enumService.get(this.enumName());\n }\n\n public getDisplayFn(): (item: Value | null) => string {\n throw new Error('This should never be called');\n }\n}\n","<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder() }}</mat-label>\n <mat-select\n [formControl]=\"internalCtrl\"\n [errorStateMatcher]=\"matcher\"\n [multiple]=\"multiple()\"\n (selectionChange)=\"propagateValue($event.value)\"\n (blur)=\"onBlur()\"\n >\n @if (nullLabel) {\n <mat-option [value]=\"null\">{{ nullLabel }}</mat-option>\n }\n @for (item of items | async; track item.value) {\n <mat-option [value]=\"item.value\" [disabled]=\"optionDisabled ? optionDisabled(item) : false\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n","import {Component, inject, Input, input, OnInit} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatDialogConfig} from '@angular/material/dialog';\nimport {Literal} from '../../../types/types';\nimport {HierarchicFiltersConfiguration} from '../../hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {\n HierarchicDialogConfig,\n NaturalHierarchicConfiguration,\n NaturalHierarchicSelectorDialogService,\n OrganizedModelSelection,\n} from '../../hierarchic-selector/public-api';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix} from '@angular/material/form-field';\n\nfunction defaultDisplayFn(item: Literal | null): string {\n if (!item) {\n return '';\n }\n\n return item.fullName || item.name || item.iban || item.id || item;\n}\n\n/**\n * Default usage:\n *\n * ```html\n * <natural-select\n * [config]=\"myConfig\"\n * [(ngModel)]=\"amazingModel\"\n * (ngModelChange)=amazingChangeFn($event)\n * />\n * ```\n *\n * `[(ngModel)]` and `(ngModelChange)` are optional.\n *\n * Placeholder :\n *\n * ```html\n * <natural-select placeholder=\"amazing placeholder\" />\n * ```\n */\n@Component({\n selector: 'natural-select-hierarchic',\n imports: [\n MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatPrefix,\n MatSuffix,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatIcon,\n NaturalIconDirective,\n MatButton,\n MatIconButton,\n MatTooltip,\n RouterLink,\n ],\n templateUrl: './select-hierarchic.component.html',\n styleUrl: './select-hierarchic.component.scss',\n})\nexport class NaturalSelectHierarchicComponent\n extends AbstractSelect<Literal, string>\n implements OnInit, ControlValueAccessor\n{\n private readonly hierarchicSelectorDialogService = inject(NaturalHierarchicSelectorDialogService);\n\n /**\n * If provided cause a new select button to appear\n */\n @Input() public selectLabel?: string;\n\n /**\n * Configuration for hierarchic relations\n *\n * It should be an array with at least one element with `selectableAtKey` configured, otherwise the selector will never open.\n */\n @Input() public config: NaturalHierarchicConfiguration[] | null = null;\n\n /**\n * Filters formatted for hierarchic selector\n */\n public readonly filters = input<HierarchicFiltersConfiguration>();\n\n /**\n * The selected value as an object. The internal value is `internalCtrl.value`, and that is a string.\n */\n private value: Literal | null = null;\n\n /**\n * On Firefox, the combination of <input (focus)> event and dialog opening cause some strange bug where focus event is called multiple\n * times This prevents it.\n */\n private lockOpenDialog = false;\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: Literal | null) => string {\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return defaultDisplayFn;\n }\n\n /**\n * Override parent because our internalCtrl store the textual representation as string instead of raw Literal\n */\n public override writeValue(value: Literal | string | null): void {\n this.value = value as Literal;\n this.internalCtrl.setValue(this.getDisplayFn()(this.value));\n }\n\n public openDialog(): void {\n if (this.internalCtrl.disabled) {\n return;\n }\n\n if (this.lockOpenDialog) {\n return;\n }\n\n const selectAtKey = this.getSelectKey();\n if (!selectAtKey || !this.config) {\n return;\n }\n\n this.lockOpenDialog = true;\n\n if (this.onTouched) {\n this.onTouched();\n }\n\n const selected: OrganizedModelSelection = {};\n\n if (this.internalCtrl.value) {\n selected[selectAtKey] = [this.value];\n }\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: this.config,\n hierarchicSelection: selected,\n hierarchicFilters: this.filters(),\n multiple: false,\n };\n\n const dialogFocus: MatDialogConfig = {restoreFocus: false};\n\n this.hierarchicSelectorDialogService\n .open(hierarchicConfig, dialogFocus)\n .afterClosed()\n .subscribe(result => {\n this.lockOpenDialog = false;\n if (result?.hierarchicSelection) {\n const selection = result.hierarchicSelection;\n // Find the only selection amongst all possible keys\n const keyWithSelection = Object.keys(selection).find(key => selection[key][0]);\n const singleSelection = keyWithSelection ? selection[keyWithSelection][0] : null;\n\n this.writeValue(singleSelection);\n this.propagateValue(singleSelection);\n }\n });\n }\n\n public showSelectButton(): boolean {\n return !!(this.internalCtrl?.enabled && this.selectLabel && this.getSelectKey());\n }\n\n private getSelectKey(): string | undefined {\n return this.config?.find(c => !!c.selectableAtKey)?.selectableAtKey;\n }\n}\n","<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder() }}</mat-label>\n\n <!-- Input for hierarchical selector -->\n <input\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n [formControl]=\"internalCtrl\"\n [errorStateMatcher]=\"matcher\"\n (blur)=\"blur.emit()\"\n (focus)=\"openDialog()\"\n />\n\n <!-- Meta data -->\n @if (showIcon()) {\n <mat-icon matIconPrefix [naturalIcon]=\"icon()\" />\n }\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.value && internalCtrl.enabled && !clearLabel()) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Désélectionner\"\n (click)=\"clear(); $event.stopPropagation()\"\n >\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.value && navigateTo) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showSelectButton() || showClearButton()) {\n <div class=\"external-buttons\">\n @if (showSelectButton()) {\n <button color=\"primary\" mat-flat-button (click)=\"openDialog()\">{{ selectLabel }}</button>\n }\n @if (showClearButton()) {\n <button color=\"error\" mat-button (click)=\"clear()\">{{ clearLabel() }}</button>\n }\n </div>\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './select-enum/select-enum.component';\nexport * from './select-hierarchic/select-hierarchic.component';\nexport * from './select/select.component';\n","import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavStackService {\n /**\n * The stack of all currently living sidenavs\n */\n private readonly sidenavs: NaturalSidenavContainerComponent[] = [];\n\n /**\n * Emits the most recent living SidenavContainer whenever it changes. So it's\n * either the SidenavContainer that was just added, or the one \"before\" the\n * SidenavContainer that was just removed\n */\n public readonly currentSidenav = new Subject<NaturalSidenavContainerComponent | undefined>();\n\n /**\n * For internal use only\n * @internal\n */\n public register(sidenav: NaturalSidenavContainerComponent): void {\n const exists = this.sidenavs.some(s => s.name() === sidenav.name());\n\n // Prevent duplicated name, and so on local storage or further access conflicts\n if (exists) {\n throw new Error('Duplicated side nav name: ' + sidenav.name());\n }\n\n this.sidenavs.push(sidenav);\n this.next();\n }\n\n /**\n * For internal use only\n * @internal\n */\n public unregister(sidenav: NaturalSidenavContainerComponent): void {\n const index = this.sidenavs.indexOf(sidenav);\n if (index === -1) {\n throw Error('Trying to remove a SidenavContainer that was never registered');\n }\n\n this.sidenavs.splice(index, 1);\n this.next();\n }\n\n private next(): void {\n this.currentSidenav.next(this.sidenavs[this.sidenavs.length - 1]);\n }\n}\n","import {DestroyRef, inject, Injectable} from '@angular/core';\nimport {MatDrawerMode} from '@angular/material/sidenav';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {filter} from 'rxjs/operators';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\nimport {SESSION_STORAGE} from '../common/services/memory-storage';\nimport {NaturalSidenavStackService} from './sidenav-stack.service';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Assert that given value is not null\n */\nfunction assert(value: unknown): asserts value {\n if (!value) {\n throw new Error('Must call NaturalSidenavService.init() before using the service');\n }\n}\n\n/**\n * TODO: Fix nav minimize and maximize resize\n * Since Material 2 beta 10, when nav is resized the body is not resized\n * https://github.com/angular/material2/issues/6743\n * Maybe the better is to wait next release\n */\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavService {\n private readonly destroyRef = inject(DestroyRef);\n private readonly breakpointObserver = inject(BreakpointObserver);\n private readonly router = inject(Router);\n private readonly sessionStorage = inject(SESSION_STORAGE);\n private readonly naturalSidenavStackService = inject(NaturalSidenavStackService);\n\n /**\n * Navigation modes\n * First is for desktop view\n * Second is for mobile view\n */\n private modes: MatDrawerMode[] = ['side', 'push'];\n\n /**\n * Activated mode\n * Default to desktop view\n */\n private mode: MatDrawerMode = this.modes[0];\n\n /**\n * Whether nav is opened or not\n */\n private opened = true;\n\n /**\n * Stores the opened status during mobile view, to restore if we come back to desktop view\n */\n private tmpOpened: boolean = this.opened;\n\n /**\n * Whether nav is minimized or not\n */\n private minimized = false;\n\n /**\n * LocalStorage key that stores the minimized status\n */\n private readonly minimizedStorageKey = 'menu-minimized';\n\n /**\n * LocalStorage key that stores the opened status\n */\n private readonly openedStorageKey = 'menu-opened';\n\n private minimizedStorageKeyWithName: string | null = null;\n private openedStorageKeyWithName: string | null = null;\n private _isMobileView = false;\n\n public get activeMode(): MatDrawerMode {\n return this.mode;\n }\n\n public get isOpened(): boolean {\n return this.opened;\n }\n\n public get isMinimized(): boolean {\n return this.minimized;\n }\n\n public destroy(component: NaturalSidenavContainerComponent): void {\n this.naturalSidenavStackService.unregister(component);\n }\n\n public init(name: string, component: NaturalSidenavContainerComponent, autoClose = false): void {\n if (!name || name === '') {\n throw new Error('No sidenav name provided, use <natural-sidenav-container name=\"menu\">');\n }\n\n this.naturalSidenavStackService.register(component);\n\n this.minimizedStorageKeyWithName = name + '-' + this.minimizedStorageKey;\n this.openedStorageKeyWithName = name + '-' + this.openedStorageKey;\n\n // Init from LocalStorage\n this.minimized = this.getMinimizedStatus();\n this.opened = this.getMenuOpenedStatus();\n this.tmpOpened = this.opened;\n\n let oldIsBig: boolean | null = null;\n\n this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(r => {\n this._isMobileView = r.matches;\n const isBig = !this._isMobileView;\n this.mode = isBig ? this.modes[0] : this.modes[1];\n\n if (oldIsBig === null || isBig !== oldIsBig) {\n oldIsBig = isBig;\n\n // If decrease window size, save status of menu before closing it\n if (!isBig) {\n this.tmpOpened = this.opened;\n this.opened = false;\n }\n\n // If increase window size, and sidebar was open before, re-open it.\n if (isBig && this.tmpOpened) {\n this.opened = true;\n this.minimized = this.getMinimizedStatus();\n }\n }\n });\n\n if (autoClose) {\n this.router.events\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(e => e instanceof NavigationEnd),\n )\n .subscribe(() => {\n this.navItemClicked();\n });\n }\n }\n\n public isMobileView(): boolean {\n return this._isMobileView;\n }\n\n /**\n * Close nav on mobile view after a click\n */\n public navItemClicked(): void {\n if (this._isMobileView) {\n this.close();\n }\n }\n\n /**\n * Change minimized status and stores the new value\n */\n public setMinimized(value: boolean): void {\n this.minimized = value;\n assert(this.minimizedStorageKeyWithName);\n this.sessionStorage.setItem(this.minimizedStorageKeyWithName, value ? 'true' : 'false');\n }\n\n public minimize(): void {\n this.setMinimized(true);\n }\n\n public expand(): void {\n this.setMinimized(false);\n }\n\n public toggleMinimized(): void {\n this.setMinimized(!this.minimized);\n }\n\n /**\n * Get the stored minimized status\n */\n public getMinimizedStatus(): boolean {\n assert(this.minimizedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.minimizedStorageKeyWithName);\n\n return value === null ? false : value === 'true';\n }\n\n /**\n * Get the stored opened status\n * Default on an opened status if nothing is stored\n */\n public getMenuOpenedStatus(): boolean {\n assert(this.openedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.openedStorageKeyWithName);\n\n if (value === null) {\n return !this._isMobileView;\n } else {\n return value === 'true';\n }\n }\n\n /**\n * Toggle menu but expand it if mobile mode is activated\n * Stores the status in local storage\n */\n public toggle(): void {\n this.setOpened(!this.opened);\n }\n\n public close(): void {\n this.setOpened(false);\n }\n\n public open(): void {\n this.setOpened(true);\n }\n\n public setOpened(value: boolean): void {\n this.opened = value;\n\n if (this.opened && this._isMobileView) {\n this.minimized = false;\n } else if (!this._isMobileView) {\n assert(this.openedStorageKeyWithName);\n this.sessionStorage.setItem(this.openedStorageKeyWithName, this.opened ? 'true' : 'false');\n }\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav',\n template: '<ng-content />',\n})\nexport class NaturalSidenavComponent {}\n","import {Component, HostBinding, inject, Input, input, OnDestroy, OnInit, viewChild} from '@angular/core';\nimport {MatDrawer, MatSidenav, MatSidenavContainer, MatSidenavContent} from '@angular/material/sidenav';\nimport {NaturalSidenavService} from '../sidenav.service';\n\n@Component({\n selector: 'natural-sidenav-container',\n imports: [MatSidenav, MatSidenavContainer, MatSidenavContent],\n templateUrl: './sidenav-container.component.html',\n styleUrl: './sidenav-container.component.scss',\n providers: [NaturalSidenavService],\n})\nexport class NaturalSidenavContainerComponent implements OnInit, OnDestroy {\n public readonly sidenavService = inject(NaturalSidenavService);\n\n /**\n * Unique identifier used for the local storage\n */\n public readonly name = input.required<string>();\n\n /**\n * The side that the drawer is attached to\n */\n public readonly position = input<MatDrawer['position']>('start');\n\n /**\n * If true listens to route changes to close side nav after a route change if mobile view is active\n * Actually a navigation to current route does not emit a route change, and the sidenav don't close.\n */\n public readonly mobileAutoClose = input(true);\n\n /**\n * Width of the minimized menu\n */\n public readonly minimizedWidth = input(125);\n\n /**\n * If true, prevents \"native\" material sidenav to scroll at container level and delegates the scroll responsability to the transcluded\n * content\n */\n @HostBinding('attr.no-scroll') @Input() public noScroll = false;\n\n /**\n * Inner \"native\" material sidenav\n */\n public readonly menuSidenav = viewChild.required(MatSidenav);\n\n public get isMinimized(): boolean {\n return this.sidenavService.isMinimized;\n }\n\n public get isMobileView(): boolean {\n return this.sidenavService.isMobileView();\n }\n\n public ngOnInit(): void {\n this.sidenavService.init(this.name(), this, this.mobileAutoClose());\n }\n\n public ngOnDestroy(): void {\n this.sidenavService.destroy(this);\n }\n\n public toggle(): void {\n this.sidenavService.toggle();\n }\n\n public close(): void {\n this.sidenavService.close();\n }\n\n public open(): void {\n this.sidenavService.open();\n }\n\n public minimize(): void {\n this.sidenavService.minimize();\n }\n\n public expand(): void {\n this.sidenavService.expand();\n }\n\n public toggleMinimized(): void {\n this.sidenavService.toggleMinimized();\n }\n}\n","<mat-sidenav-container (backdropClick)=\"sidenavService.setOpened(false)\">\n <mat-sidenav\n [mode]=\"sidenavService.activeMode\"\n [class.menuMinimized]=\"sidenavService.isMinimized\"\n [class.mode-side]=\"sidenavService.activeMode === 'side'\"\n [opened]=\"sidenavService.isOpened\"\n [style.min-width.px]=\"sidenavService.isMinimized && minimizedWidth() ? minimizedWidth() : null\"\n [style.width.px]=\"sidenavService.isMinimized && minimizedWidth() ? minimizedWidth() : null\"\n [position]=\"position()\"\n >\n <ng-content select=\"natural-sidenav\" />\n </mat-sidenav>\n\n <mat-sidenav-content>\n <ng-content select=\"natural-sidenav-content\" />\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav-content',\n template: '<ng-content />',\n styleUrl: './sidenav-content.component.scss',\n})\nexport class NaturalSidenavContentComponent {}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './sidenav.service';\nexport * from './sidenav-stack.service';\nexport * from './sidenav/sidenav.component';\nexport * from './sidenav-container/sidenav-container.component';\nexport * from './sidenav-content/sidenav-content.component';\n","import {ChangeDetectionStrategy, Component, computed, input} from '@angular/core';\nimport {NameOrFullName} from '../../types/types';\nimport {NaturalTimeAgoPipe} from '../common/pipes/time-ago.pipe';\nimport {DatePipe} from '@angular/common';\n\ntype Stamped = {\n creator: NameOrFullName | null;\n updater: NameOrFullName | null;\n creationDate: string | null;\n updateDate: string | null;\n};\n\n@Component({\n selector: 'natural-stamp',\n imports: [DatePipe, NaturalTimeAgoPipe],\n templateUrl: './stamp.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NaturalStampComponent {\n public readonly item = input.required<Stamped>();\n\n protected readonly showUpdate = computed(() => {\n const item = this.item();\n const same = item.updater?.id === item.creator?.id && item.updateDate && item.updateDate === item.creationDate;\n\n return !same && (!!item.updateDate || !!item.updater);\n });\n}\n","@let theItem = item();\n@if (theItem.creationDate || theItem.creator) {\n <div>\n <span class=\"mat-subtitle-2\" i18n>Création</span>\n :\n @if (theItem.creator) {\n <span>{{ theItem.creator.fullName || theItem.creator.name }}</span>\n }\n @if (theItem.creator && theItem.creationDate) {\n <span>, </span>\n }\n @if (theItem.creationDate) {\n <span>{{ theItem.creationDate | date }} ({{ theItem.creationDate | timeAgo }})</span>\n }\n </div>\n}\n\n@if (showUpdate()) {\n <div>\n <span class=\"mat-subtitle-2\" i18n>Modification</span>\n :\n @if (theItem.updater) {\n <span>{{ theItem.updater.fullName || theItem.updater.name }}</span>\n }\n @if (theItem.updater && theItem.updateDate) {\n <span>, </span>\n }\n @if (theItem.updateDate) {\n <span>{{ theItem.updateDate | date }} ({{ theItem.updateDate | timeAgo }})</span>\n }\n </div>\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './stamp.component';\n","import {ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation} from '@angular/core';\nimport {Params, QueryParamsHandling, RouterLink, UrlTree} from '@angular/router';\n\nimport {MatButton, type MatButtonAppearance, MatIconButton} from '@angular/material/button';\nimport {NatPalette} from '../../types/types';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {Subject} from 'rxjs';\nimport {outputFromObservable} from '@angular/core/rxjs-interop';\n\n/**\n * Button that fits well in a `<mat-table>` and support either\n * route navigation via `navigate`, or external URL via `href`,\n * or callback via `buttonClick`.\n *\n * If neither `navigate` nor `href` nor `buttonClick` have a meaningful value, then\n * it will show the icon and/or label in a `<span>` instead of a button.\n *\n * External URL will always be opened in new tab.\n */\n@Component({\n selector: 'natural-table-button',\n imports: [MatIcon, NaturalIconDirective, MatButton, MatIconButton, RouterLink],\n templateUrl: './table-button.component.html',\n styleUrl: './table-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n})\nexport class NaturalTableButtonComponent {\n public readonly queryParams = input<Params>({});\n public readonly queryParamsHandling = input<QueryParamsHandling>('');\n public readonly label = input<string | null | undefined>();\n public readonly icon = input<string | null | undefined>();\n public readonly href = input<string | null | undefined>();\n public readonly navigate = input<RouterLink['routerLink']>(null);\n public readonly fragment = input<string | undefined>();\n public readonly preserveFragment = input(false);\n public readonly disabled = input(false);\n public readonly appearance = input<MatButtonAppearance>('text');\n public readonly color = input<NatPalette>();\n\n protected readonly buttonClick$ = new Subject<MouseEvent>();\n public readonly buttonClick = outputFromObservable(this.buttonClick$);\n\n protected readonly type = computed(() => {\n const navigate = this.navigate();\n if (\n navigate instanceof UrlTree ||\n navigate?.length ||\n Object.keys(this.queryParams()).length ||\n this.buttonClick$.observed\n ) {\n return 'routerLinkOrClick';\n } else if (this.href()) {\n return 'href';\n } else {\n return 'none';\n }\n });\n}\n","<!-- eslint-disable @angular-eslint/template/cyclomatic-complexity -->\n<!-- Because directives can't be applied conditionally (routerLink, mat-button and matIconButton), we have to use different elements -->\n@let theIcon = icon();\n\n<!-- Edge case of a button without any kind of link at all -->\n@if (type() === 'none') {\n <span>\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n @if (label()) {\n <span>{{ label() }}</span>\n }\n </span>\n} @else {\n @switch (type()) {\n <!-- App routed link -->\n @case ('routerLinkOrClick') {\n @if (label()) {\n <a\n [matButton]=\"appearance()\"\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [queryParams]=\"queryParams()\"\n [queryParamsHandling]=\"queryParamsHandling()\"\n [routerLink]=\"navigate()\"\n [fragment]=\"fragment()\"\n [preserveFragment]=\"preserveFragment()\"\n (click)=\"buttonClick$.next($event)\"\n >\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n <span>{{ label() }}</span>\n </a>\n } @else {\n <a\n matIconButton\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [queryParams]=\"queryParams()\"\n [queryParamsHandling]=\"queryParamsHandling()\"\n [routerLink]=\"navigate()\"\n [fragment]=\"fragment()\"\n [preserveFragment]=\"preserveFragment()\"\n (click)=\"buttonClick$.next($event)\"\n >\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n </a>\n }\n }\n <!-- External link -->\n @case ('href') {\n @if (label()) {\n <a\n target=\"_blank\"\n [matButton]=\"appearance()\"\n [attr.href]=\"href()\"\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n >\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n <span>{{ label() }}</span>\n </a>\n } @else {\n <a matIconButton target=\"_blank\" [attr.href]=\"href()\" [color]=\"color()\" [disabled]=\"disabled()\">\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n </a>\n }\n }\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './table-button.component';\n","/*\n * Public API Surface of natural\n */\n\nexport * from './dialog-trigger.component';\n","/**\n * A creator interface used to instantiate source implementation\n */\nexport type SourceCreator = new (sourceValue: string) => Source;\n\n/**\n * Contract of all Sources.\n * Every source must implements the fetch method\n * in order to provide the avatar source.\n */\nexport abstract class Source {\n public constructor(private readonly value: string) {\n this.value = value;\n }\n\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Gets the avatar that usually is a URL, but,\n * for example it can also be a string of initials from the name.\n */\n public abstract getAvatar(size: number): Promise<string>;\n\n /**\n * Whether the avatar is purely textual or an URL for an image\n */\n public abstract isTextual(): boolean;\n}\n","function bufferToHexa(hashBuffer: ArrayBuffer): string {\n const hashArray = new Uint8Array(hashBuffer); // convert buffer to byte array\n return hashArray.reduce((result, byte) => result + byte.toString(16).padStart(2, '0'), ''); // convert bytes to hex string\n}\n\n/**\n * Thin wrapper around browsers' native SubtleCrypto for convenience of use\n */\nexport async function sha256(message: string): Promise<string> {\n const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8); // hash the message\n\n return bufferToHexa(hashBuffer);\n}\n\n/**\n * Thin wrapper around browsers' native SubtleCrypto for convenience of use\n */\nexport async function hmacSha256(secret: string, payload: string): Promise<string> {\n const encoder = new TextEncoder();\n const algorithm: HmacKeyGenParams = {name: 'HMAC', hash: 'SHA-256'};\n\n const key = await crypto.subtle.importKey('raw', encoder.encode(secret), algorithm, false, ['sign']);\n const signature = await crypto.subtle.sign(algorithm.name, key, encoder.encode(payload));\n\n return bufferToHexa(signature);\n}\n","import {Source} from './source';\nimport {sha256} from '../../../classes/crypto';\n\nexport function isRetina(): boolean {\n // We cannot reasonably inject `DOCUMENT` here, but we are extra\n // careful about usage of `window` and its possible non-existence in SSR,\n // so we should be fine.\n // eslint-disable-next-line no-restricted-globals\n const myWindow: Window | undefined = window;\n\n if (myWindow?.devicePixelRatio > 1.25) {\n return true;\n }\n\n const mediaQuery =\n '(-webkit-min-device-pixel-ratio: 1.25), (min--moz-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 1.25dppx)';\n\n return myWindow?.matchMedia(mediaQuery).matches;\n}\n\n/**\n * Return URL to Gravatar image from either an email or a MD5 or SHA-256 of an email\n */\nexport class Gravatar extends Source {\n public async getAvatar(size: number): Promise<string> {\n const value = this.getValue();\n const hash = /^([a-f0-9]{32}|[a-f0-9]{64})$/.exec(value) ? value : await sha256(value.trim().toLowerCase());\n\n const avatarSize = isRetina() ? size * 2 : size;\n return `https://secure.gravatar.com/avatar/${hash}?s=${avatarSize}&d=404`;\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Source} from './source';\n\n/**\n * Get the initials of each word in uppercase.\n */\nfunction getInitials(name: string, size: number): string {\n // Drop all text in parentheses, because assumed less important\n name = name.replace(/\\([^)]*\\)/g, '');\n name = name.trim();\n\n // Deliberately short name is kept intact\n if (name.length <= size) {\n return name.toUpperCase();\n }\n\n // Only letters (including unicode), numbers, and whitespace\n name = name.replace(/[^\\p{L}\\p{N}\\s]/gu, '');\n\n if (!name) {\n return '';\n }\n\n let words = name.split(/\\s+/);\n if (size && size < words.length) {\n words = words.slice(0, size);\n }\n\n return words\n .filter(element => element.length > 0)\n .map(element => element[0])\n .join('')\n .toUpperCase();\n}\n\n/**\n * Return the initials of the given value as avatar\n */\nexport class Initials extends Source {\n public getAvatar(size: number): Promise<string> {\n return Promise.resolve(getInitials(this.getValue(), size));\n }\n\n public isTextual(): boolean {\n return true;\n }\n}\n","import {Source} from './source';\n\n/**\n * Return custom image URL as avatar\n */\nexport class Image extends Source {\n public getAvatar(): Promise<string> {\n return Promise.resolve(this.getValue());\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Source, SourceCreator} from '../sources/source';\nimport {Gravatar} from '../sources/gravatar';\nimport {Initials} from '../sources/initials';\nimport {Image} from '../sources/image';\n\ntype SourceType = 'gravatar' | 'image' | 'initials';\n\n/**\n * Provides utilities methods related to Avatar component\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AvatarService {\n /**\n * Ordered pairs of possible sources. First in the list is the highest priority.\n * And key must match one the input of AvatarComponent.\n */\n private readonly sourceCreators = new Map<SourceType, SourceCreator>([\n ['gravatar', Gravatar],\n ['image', Image],\n ['initials', Initials],\n ]);\n\n private readonly avatarColors = [\n '#e37900', // 2.99 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=e37900\n '#e6b102', // 2.26 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=c7ab00\n '#00bbbb', // 2.37 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=00bbbb\n '#008cff', // 3.38 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=008cff\n '#d9138c', // 4.51 pass https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=d901b8\n '#7321d1', // 4.28 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=c800ff\n '#3b3b3b', // 11.2 pass https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=3b3b3b\n ];\n\n private readonly failedSources = new Map<string, true>();\n\n public getRandomColor(avatarText: string): string {\n if (!avatarText) {\n return 'transparent';\n }\n const asciiCodeSum = this.calculateAsciiCode(avatarText);\n\n return this.avatarColors[asciiCodeSum % this.avatarColors.length];\n }\n\n public getCreators(): IterableIterator<[SourceType, SourceCreator]> {\n return this.sourceCreators.entries();\n }\n\n private getSourceKey(source: Source): string {\n return source.constructor.name + '-' + source.getValue();\n }\n\n public sourceHasFailedBefore(source: Source): boolean {\n return this.failedSources.has(this.getSourceKey(source));\n }\n\n public markSourceAsFailed(source: Source): void {\n this.failedSources.set(this.getSourceKey(source), true);\n }\n\n private calculateAsciiCode(value: string): number {\n return value\n .split('')\n .map(letter => letter.charCodeAt(0))\n .reduce((previous, current) => previous + current);\n }\n}\n","import {ChangeDetectionStrategy, Component, computed, inject, input, linkedSignal} from '@angular/core';\nimport {Source} from '../sources/source';\nimport {AvatarService} from '../service/avatar.service';\nimport {AsyncPipe, NgStyle} from '@angular/common';\n\ntype Style = Partial<CSSStyleDeclaration>;\n\n/**\n * Show an avatar from different sources\n */\n@Component({\n selector: 'natural-avatar',\n imports: [NgStyle, AsyncPipe],\n template: `\n @let source = currentSource();\n <div class=\"avatar-container\" [style.height.px]=\"size()\" [style.width.px]=\"size()\">\n @if (source && source?.isTextual()) {\n <div class=\"avatar-content\" [class.natural-elevation]=\"decorated()\" [ngStyle]=\"textualStyle()\">\n {{ textAvatar() | async }}\n </div>\n } @else if (source) {\n @if (imageAvatar() | async; as src) {\n <img\n class=\"avatar-content\"\n loading=\"lazy\"\n [src]=\"src\"\n [width]=\"size()\"\n [height]=\"size()\"\n [ngStyle]=\"imageStyle()\"\n (error)=\"tryNextSource()\"\n />\n }\n }\n </div>\n `,\n styles: `\n :host {\n display: block;\n\n &.decorated {\n position: relative;\n\n .avatar-container::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: 50%;\n background: linear-gradient(345deg, rgba(255, 255, 255, 0) 25%, rgba(255, 255, 255, 0.33) 100%);\n content: '';\n }\n\n .avatar-content {\n text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);\n }\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.height.px]': 'size()',\n '[style.width.px]': 'size()',\n '[class.decorated]': 'decorated()',\n },\n})\nexport class NaturalAvatarComponent {\n private readonly avatarService = inject(AvatarService);\n\n public readonly image = input<string | null>();\n public readonly initials = input<string | null>();\n public readonly gravatar = input<string | null>();\n public readonly size = input(50);\n public readonly decorated = input(true);\n public readonly textSizeRatio = input(2.25);\n public readonly bgColor = input<string | undefined>();\n public readonly fgColor = input('#FFF');\n public readonly borderRadius = input('');\n public readonly textMaximumLength = input(2);\n\n private readonly sources = linkedSignal<{currentIndex: number; sources: Source[]}>(() => {\n const sources: Source[] = [];\n for (const [propName, creator] of this.avatarService.getCreators()) {\n const value = this[propName]();\n if (value) {\n sources.push(new creator(value));\n }\n }\n\n return {\n currentIndex: this.findNextNonFailingIndex(-1, sources),\n sources,\n };\n });\n\n protected readonly currentSource = computed<Source | undefined>(() => {\n const sources = this.sources();\n\n return sources.sources[sources.currentIndex];\n });\n\n protected readonly imageAvatar = computed(() => this.currentSource()?.getAvatar(this.size()));\n\n protected readonly textAvatar = computed(() => this.currentSource()?.getAvatar(this.textMaximumLength()));\n\n /**\n * Try to use the next available avatar source that has not already failed in the past\n */\n public tryNextSource(): void {\n const previousSource = this.currentSource();\n if (previousSource) {\n this.avatarService.markSourceAsFailed(previousSource);\n }\n\n const {currentIndex, sources} = this.sources();\n this.sources.set({\n currentIndex: this.findNextNonFailingIndex(currentIndex, sources),\n sources,\n });\n }\n\n private findNextNonFailingIndex(currentIndex: number, sources: Source[]): number {\n while (++currentIndex < sources.length) {\n const source = sources[currentIndex];\n if (source && !this.avatarService.sourceHasFailedBefore(source)) {\n return currentIndex;\n }\n }\n\n return currentIndex;\n }\n\n /**\n * Returns initials style\n */\n protected readonly textualStyle = computed<Style>(() => {\n const bgColor = this.bgColor();\n\n const backgroundColor = bgColor\n ? bgColor\n : this.avatarService.getRandomColor(this.currentSource()?.getValue() ?? '');\n\n return {\n textAlign: 'center',\n borderRadius: this.borderRadius() || '100%',\n textTransform: 'uppercase',\n color: this.fgColor(),\n backgroundColor: backgroundColor,\n font: Math.floor(this.size() / this.textSizeRatio()) + 'px Helvetica, Arial, sans-serif',\n lineHeight: this.size() + 'px',\n width: this.size() + 'px',\n height: this.size() + 'px',\n };\n });\n\n /**\n * Returns image style\n */\n protected readonly imageStyle = computed<Style>(() => {\n return {\n maxWidth: '100%',\n borderRadius: this.borderRadius() || '100%',\n width: this.size() + 'px',\n height: this.size() + 'px',\n };\n });\n}\n","/*\n * Public API Surface of ngx-avatar\n */\nexport * from './component/avatar.component';\nexport * from './service/avatar.service';\n","import {DOCUMENT, inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {isPlatformBrowser} from '@angular/common';\nimport {Subscription} from 'rxjs';\nimport {Title} from '@angular/platform-browser';\n\n/**\n * Incomplete list of Matomo functions. But it should be enough\n * for our basic needs.\n *\n * To complete this list, maybe see https://developer.matomo.org/guides/tracking-javascript-guide\n */\ntype MatomoFunction =\n | 'setCustomUrl'\n | 'setCustomDimension'\n | 'setDocumentTitle'\n | 'setReferrerUrl'\n | 'setSiteId'\n | 'setTrackerUrl'\n | 'trackPageView';\n\nexport type PaqItem = [MatomoFunction, ...(number | string | null)[]];\n\ntype Paq = {\n push: (item: PaqItem) => void;\n};\n\n/**\n * Service to track visitors via Matomo.\n *\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMatomoService {\n private readonly router = inject(Router);\n private readonly document = inject(DOCUMENT);\n private readonly titleService = inject(Title);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly window: WindowProxy & typeof globalThis & {_paq?: Paq};\n\n private subscription: Subscription | null = null;\n private referrerUrl = '';\n\n public constructor() {\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not init MatomoService `window` is undefined');\n }\n\n this.window = window;\n }\n\n /**\n * Inject Matomo script and start tracking all page navigation\n */\n public startTracking(url: string | null, site: number | null): void {\n // Abort because no tracking info or doing SSR\n if (!url || !site || !this.isBrowser) {\n return;\n }\n\n this.push('setTrackerUrl', url + '/matomo.php');\n this.push('setSiteId', site);\n\n this.injectTrackingCode(url);\n this.listenForRouteChanges();\n }\n\n public stopTracking(): void {\n this.subscription?.unsubscribe();\n this.subscription = null;\n delete this.window._paq;\n }\n\n /**\n * Push a Matomo command on the stack\n *\n * It can be called at any time, including before Matomo is even loaded.\n *\n * Also see https://developer.matomo.org/guides/tracking-javascript-guide\n */\n public push(functionName: PaqItem[0], ...args: PaqItem[1][]): void {\n if (!this.window._paq) {\n this.window._paq = [] as any[];\n }\n\n // Here we must always get `_paq` freshly from window, because Matomo\n // might have changed the object after we created it\n this.window._paq.push([functionName, ...args]);\n }\n\n private injectTrackingCode(url: string): void {\n try {\n const script = this.document.createElement('script');\n script.async = true;\n script.defer = true;\n script.src = url + '/matomo.js';\n this.document.head.appendChild(script);\n } catch (ex) {\n console.error('Error appending Matomo analytics');\n console.error(ex);\n }\n }\n\n private listenForRouteChanges(): void {\n this.subscription = this.router.events.subscribe(event => {\n if (!(event instanceof NavigationEnd)) {\n return;\n }\n\n const currentUrl = this.window.location.href;\n\n this.push('setCustomUrl', currentUrl);\n this.push('setDocumentTitle', this.titleService.getTitle());\n if (this.referrerUrl) {\n this.push('setReferrerUrl', this.referrerUrl);\n }\n\n this.push('trackPageView');\n\n this.referrerUrl = currentUrl;\n });\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalMatomoService} from './matomo.service';\n","import {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DOCUMENT, ErrorHandler, inject, Injectable, InjectionToken} from '@angular/core';\nimport {catchError, EMPTY, first, Observable, of} from 'rxjs';\n\nexport type NaturalLoggerType = {\n message: string;\n stacktrace?: string;\n href?: string;\n host?: string;\n path?: string;\n agent?: string;\n status?: number;\n referrer?: string;\n url?: string;\n userId?: string;\n user?: string;\n\n [key: string]: any;\n};\n\nexport type NaturalLoggerExtra = {\n /**\n * Return an observable of extra data that will be logged. Those data will be merged into\n * the original data, and so it can override things.\n *\n * Only the first emitted value will be used.\n */\n getExtras(error: unknown): Observable<Partial<NaturalLoggerType>>;\n};\n\nexport const NaturalLoggerConfigUrl = new InjectionToken<string>('Absolute URL of the log server');\nexport const NaturalLoggerConfigExtra = new InjectionToken<NaturalLoggerExtra>(\n 'Class that may provide extra data to log',\n);\n\n/**\n * Replace Angular's error handler to also send the log to a remote server via HTTP POST.\n *\n * Usage is automatic as soon as we provide it via:\n *\n * ```ts\n * provideErrorHandler('http://example.com', ExtraService),\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalErrorHandler extends ErrorHandler {\n private readonly http = inject(HttpClient);\n private readonly document = inject(DOCUMENT);\n private readonly url = inject(NaturalLoggerConfigUrl, {optional: true});\n private readonly loggerExtra = inject(NaturalLoggerConfigExtra, {optional: true});\n\n public constructor() {\n super();\n }\n\n public override handleError(error: any): void {\n console.error(error);\n\n const params: NaturalLoggerType = {\n message: this.toMessage(error),\n href: this.document.defaultView?.window.location.href,\n host: this.document.defaultView?.window.location.hostname,\n path: this.document.defaultView?.window.location.pathname,\n agent: this.document.defaultView?.window.navigator.userAgent,\n level: 'error',\n };\n\n if (error?.stack) {\n params.stacktrace = error.stack;\n }\n\n if (typeof error?.status !== 'undefined') {\n params.status = error.status;\n }\n\n if (error?.referrer) {\n params.referrer = error.referrer;\n }\n\n if (error?.url) {\n params.url = error.url;\n }\n\n if (this.loggerExtra) {\n this.loggerExtra\n .getExtras(error)\n .pipe(\n catchError(e => of({getExtrasErrorMessage: this.toMessage(e)})),\n first(),\n )\n .subscribe(result => {\n this.postLog(Object.assign(params, result));\n });\n } else {\n this.postLog(params);\n }\n }\n\n private toMessage(error: any): string {\n if (error && typeof error === 'object' && 'message' in error) {\n return '' + error.message;\n } else {\n return '' + error;\n }\n }\n\n /**\n * Send parameters to remote log\n */\n private postLog(params: NaturalLoggerType): void {\n if (this.url) {\n this.http\n .post(this.url, params, {headers: new HttpHeaders().set('content-type', 'application/json')})\n .pipe(catchError(() => EMPTY))\n .subscribe();\n }\n }\n}\n","import {ErrorHandler, Provider, Type} from '@angular/core';\nimport {\n NaturalErrorHandler,\n NaturalLoggerConfigExtra,\n NaturalLoggerConfigUrl,\n NaturalLoggerExtra,\n} from './error-handler';\n\nexport function provideErrorHandler(url: string | null, extraService?: Type<NaturalLoggerExtra>): Provider[] {\n const providers: Provider[] = [\n {\n provide: ErrorHandler,\n useClass: NaturalErrorHandler,\n },\n {\n provide: NaturalLoggerConfigUrl,\n useValue: url,\n },\n ];\n\n if (extraService) {\n providers.push({\n provide: NaturalLoggerConfigExtra,\n useClass: extraService,\n });\n }\n\n return providers;\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {provideErrorHandler} from './error.module';\n\nexport {NaturalErrorHandler, NaturalLoggerConfigExtra, NaturalLoggerConfigUrl} from './error-handler';\nexport type {NaturalLoggerExtra, NaturalLoggerType} from './error-handler';\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {MatIconButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {ColorScheme, NaturalThemeService} from '../../services/theme.service';\nimport {NaturalIconDirective} from '../icon/icon.directive';\n\n@Component({\n selector: 'natural-color-schemer',\n imports: [MatIconButton, MatTooltip, NaturalIconDirective, FormsModule, MatIcon],\n templateUrl: './color-schemer.component.html',\n styleUrl: './color-schemer.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NaturalColorSchemerComponent {\n protected readonly themeService = inject(NaturalThemeService);\n protected readonly ColorScheme = ColorScheme;\n}\n","<div class=\"nat-horizontal wrapper\">\n <button\n matIconButton\n matTooltip=\"Thème de l'appareil\"\n i18n-matTooltip\n matTooltipPosition=\"below\"\n (click)=\"themeService.setColorScheme(ColorScheme.Auto)\"\n >\n <mat-icon naturalIcon=\"routine\" />\n </button>\n <button\n matIconButton\n matTooltip=\"Thème clair\"\n i18n-matTooltip\n matTooltipPosition=\"below\"\n (click)=\"themeService.setColorScheme(ColorScheme.Light)\"\n >\n <mat-icon naturalIcon=\"light_mode\" />\n </button>\n <button\n matIconButton\n matTooltip=\"Thème sombre\"\n i18n-matTooltip\n matTooltipPosition=\"below\"\n (click)=\"themeService.setColorScheme(ColorScheme.Dark)\"\n >\n <mat-icon naturalIcon=\"dark_mode\" />\n </button>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalColorSchemerComponent} from './color-schemer.component';\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {NATURAL_THEMES_CONFIG, NaturalThemeService} from '../../services/theme.service';\nimport {NaturalIconDirective} from '../icon/icon.directive';\n\n@Component({\n selector: 'natural-theme-changer',\n imports: [MatButton, MatMenuTrigger, MatMenu, MatMenuItem, MatIcon, NaturalIconDirective],\n templateUrl: './theme-changer.component.html',\n styleUrl: './theme-changer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NaturalThemeChangerComponent {\n protected readonly themeService = inject(NaturalThemeService);\n protected readonly allThemes = inject(NATURAL_THEMES_CONFIG);\n}\n","<button matButton=\"filled\" [matMenuTriggerFor]=\"menu\"\n ><mat-icon naturalIcon=\"colors\" /> {{ themeService.theme() }}</button\n>\n<mat-menu #menu=\"matMenu\">\n @for (theme of allThemes; track $index) {\n <button mat-menu-item (click)=\"themeService.setTheme(theme)\">\n <mat-icon [fontIcon]=\"themeService.theme() === theme ? 'check' : ''\" />\n {{ theme }}</button\n >\n }\n</mat-menu>\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalThemeChangerComponent} from './theme-changer.component';\n","import {Directive, HostListener, input} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\n\n/**\n * Need to add http:// prefix if we don't have prefix already AND we don't have part of it\n */\nexport function ensureHttpPrefix(value: string | null): string | null {\n if (!value) {\n return value;\n }\n\n const completePrefix = /^(https?):\\/\\//i.test(value);\n const startingPrefix = 'https://'.startsWith(value) || 'http://'.startsWith(value);\n\n if (!completePrefix && !startingPrefix) {\n return 'http://' + value;\n } else {\n return value;\n }\n}\n\n/**\n * This directive only supports ReactiveForms due to ngModel/ngControl encapsulation and changes emissions.\n */\n@Directive({\n selector: '[naturalHttpPrefix]',\n})\nexport class NaturalHttpPrefixDirective {\n public readonly naturalHttpPrefix = input<AbstractControl | null>(null);\n\n @HostListener('ngModelChange', ['$event'])\n public httpize($event: string): void {\n const naturalHttpPrefix = this.naturalHttpPrefix();\n if (naturalHttpPrefix) {\n const newValue = ensureHttpPrefix($event) || $event;\n if ($event !== newValue) {\n naturalHttpPrefix.setValue(newValue);\n }\n }\n }\n}\n","import {ApplicationConfig, importProvidersFrom} from '@angular/core';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {localStorageProvider, sessionStorageProvider} from '../modules/common/services/memory-storage';\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\nimport {provideThemes} from '../services/theme.service';\n\n/**\n * Minimal, global providers for Natural to work\n */\nexport const naturalProviders: ApplicationConfig['providers'] = [\n importProvidersFrom([MatDialogModule, MatSnackBarModule]),\n sessionStorageProvider,\n localStorageProvider,\n provideThemes(['natural']),\n];\n","import {HttpInterceptorFn, HttpRequest} from '@angular/common/http';\nimport {hmacSha256} from './crypto';\nimport {from, switchMap, throwError} from 'rxjs';\n\nfunction getOperations(req: HttpRequest<unknown>): string {\n if (req.body instanceof FormData) {\n const operations = req.body.get('operations');\n if (typeof operations !== 'string') {\n throw new Error(\n 'Cannot sign a GraphQL query that is using FormData but that is missing the key `operations`',\n );\n }\n return operations;\n } else {\n return JSON.stringify(req.body);\n }\n}\n\n/**\n * Sign all HTTP POST requests that are GraphQL queries against `/graphql` endpoint with a custom signature.\n *\n * The server will validate the signature before executing the GraphQL query.\n */\nexport function graphqlQuerySigner(key: string): HttpInterceptorFn {\n // Validates the configuration exactly 1 time (not for\n // every query), and if not reject **all** HTTP requests\n if (!key) {\n return () =>\n throwError(\n () =>\n new Error(\n 'graphqlQuerySigner requires a non-empty key. Configure it in local.php under signedQueries.',\n ),\n );\n }\n\n return (req, next) => {\n const mustSign = req.method === 'POST' && /\\/graphql(\\?|$)/.exec(req.url);\n if (!mustSign) {\n return next(req);\n }\n\n const operations = getOperations(req);\n const timestamp = Math.round(Date.now() / 1000);\n const payload = timestamp + operations;\n\n return from(hmacSha256(key, payload)).pipe(\n switchMap(hash => {\n const header = `v1.${timestamp}.${hash}`;\n const signedRequest = req.clone({\n headers: req.headers.set('X-Signature', header),\n });\n\n return next(signedRequest);\n }),\n );\n };\n}\n","/// <reference types=\"@angular/localize\" />\n\n/*\n * Public API Surface of natural\n */\n\nexport * from './lib/classes/abstract-detail';\nexport * from './lib/classes/abstract-editable-list';\nexport * from './lib/classes/abstract-list';\nexport * from './lib/classes/abstract-navigable-list';\nexport {createHttpLink, hasFilesAndProcessDate} from './lib/classes/apollo-utils';\nexport * from './lib/classes/data-source';\nexport * from './lib/classes/query-variable-manager';\nexport {cancellableTimeout, debug} from './lib/classes/rxjs';\nexport * from './lib/classes/utility';\nexport * from './lib/classes/validators';\nexport {NetworkActivityService, activityInterceptor} from './lib/classes/network-activity.service';\nexport {validTlds} from './lib/classes/tld';\n\nexport * from './lib/services/abstract-model.service';\nexport {NaturalDebounceService} from './lib/services/debounce.service';\nexport * from './lib/services/enum.service';\nexport * from './lib/services/link-mutation.service';\nexport {NaturalPersistenceService, NATURAL_PERSISTENCE_VALIDATOR} from './lib/services/persistence.service';\nexport {provideThemes, ColorScheme, NaturalThemeService} from './lib/services/theme.service';\nexport type {PersistenceValidator} from './lib/services/persistence.service';\nexport * from './lib/services/swiss-parsing-date-adapter.service';\n\nexport type {\n ExtractResolve,\n ExtractTall,\n ExtractTallOne,\n ExtractTcreate,\n ExtractTdelete,\n ExtractTone,\n ExtractTupdate,\n ExtractVall,\n ExtractVcreate,\n ExtractVdelete,\n ExtractVone,\n ExtractVupdate,\n Literal,\n NameOrFullName,\n ResolvedData,\n NatPalette,\n} from './lib/types/types';\n\nexport * from './lib/modules/alert/public-api';\nexport * from './lib/modules/columns-picker/public-api';\nexport * from './lib/modules/common/public-api';\nexport * from './lib/modules/detail-header/public-api';\nexport * from './lib/modules/dropdown-components/public-api';\nexport * from './lib/modules/file/public-api';\nexport * from './lib/modules/fixed-button/public-api';\nexport * from './lib/modules/fixed-button-detail/public-api';\nexport * from './lib/modules/hierarchic-selector/public-api';\nexport * from './lib/modules/icon/public-api';\nexport * from './lib/modules/panels/public-api';\nexport * from './lib/modules/relations/public-api';\nexport * from './lib/modules/search/public-api';\nexport * from './lib/modules/select/public-api';\nexport * from './lib/modules/sidenav/public-api';\nexport * from './lib/modules/stamp/public-api';\nexport * from './lib/modules/table-button/public-api';\nexport * from './lib/modules/dialog-trigger/public-api';\nexport * from './lib/modules/avatar/public-api';\nexport * from './lib/modules/matomo/public-api';\nexport * from './lib/modules/logger/public-api';\nexport * from './lib/modules/color-schemer/public-api';\nexport * from './lib/modules/theme-changer/public-api';\n\nexport * from './lib/directives/http-prefix.directive';\nexport {naturalProviders} from './lib/classes/providers';\nexport {graphqlQuerySigner} from './lib/classes/signing';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","merge","i1","first","takeUntil","map","debounceTime","tap","shareReplay","startWith","pick","filter","finalize","InvalidWithValueStateMatcher","isEqual"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ecodev-natural.mjs","sources":["../../../projects/natural/src/lib/modules/alert/confirm.component.ts","../../../projects/natural/src/lib/modules/alert/confirm.component.html","../../../projects/natural/src/lib/modules/alert/alert.service.ts","../../../projects/natural/src/lib/modules/panels/abstract-panel.ts","../../../projects/natural/src/lib/classes/utility.ts","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.types.ts","../../../projects/natural/src/lib/classes/query-variable-manager-utils.ts","../../../projects/natural/src/lib/classes/query-variable-manager.ts","../../../projects/natural/src/lib/classes/tld.ts","../../../projects/natural/src/lib/classes/validators.ts","../../../projects/natural/src/lib/classes/cumulative-changes.ts","../../../projects/natural/src/lib/classes/abstract-detail.ts","../../../projects/natural/src/lib/classes/abstract-editable-list.ts","../../../projects/natural/src/lib/modules/search/classes/utils.ts","../../../projects/natural/src/lib/modules/search/classes/transformers.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-container.component.html","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown-ref.ts","../../../projects/natural/src/lib/modules/search/dropdown-container/dropdown.service.ts","../../../projects/natural/src/lib/modules/dropdown-components/types.ts","../../../projects/natural/src/lib/modules/dropdown-components/utils.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date/type-date.component.html","../../../projects/natural/src/lib/modules/search/classes/graphql-doctrine.ts","../../../projects/natural/src/lib/modules/search/classes/url.ts","../../../projects/natural/src/lib/modules/common/services/memory-storage.ts","../../../projects/natural/src/lib/services/persistence.service.ts","../../../projects/natural/src/lib/classes/data-source.ts","../../../projects/natural/src/lib/classes/abstract-list.ts","../../../projects/natural/src/lib/classes/abstract-navigable-list.ts","../../../projects/natural/src/lib/classes/apollo-utils.ts","../../../projects/natural/src/lib/classes/rxjs.ts","../../../projects/natural/src/lib/classes/network-activity.service.ts","../../../projects/natural/src/lib/services/debounce.service.ts","../../../projects/natural/src/lib/services/abstract-model.service.ts","../../../projects/natural/src/lib/services/enum.service.ts","../../../projects/natural/src/lib/services/link-mutation.service.ts","../../../projects/natural/src/lib/services/theme.service.ts","../../../projects/natural/src/lib/services/swiss-parsing-date-adapter.service.ts","../../../projects/natural/src/lib/modules/alert/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.directive.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.ts","../../../projects/natural/src/lib/modules/columns-picker/columns-picker.component.html","../../../projects/natural/src/lib/modules/columns-picker/public-api.ts","../../../projects/natural/src/lib/modules/common/directives/linkable-tab.directive.ts","../../../projects/natural/src/lib/modules/common/pipes/capitalize.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/ellipsis.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/enum.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/error-message.pipe.ts","../../../projects/natural/src/lib/modules/common/pipes/time-ago.pipe.ts","../../../projects/natural/src/lib/modules/common/directives/src-density.directive.ts","../../../projects/natural/src/lib/modules/common/directives/background-density.directive.ts","../../../projects/natural/src/lib/modules/dialog-trigger/dialog-trigger.component.ts","../../../projects/natural/src/lib/modules/common/services/seo.service.ts","../../../projects/natural/src/lib/modules/common/services/seo.provider.ts","../../../projects/natural/src/lib/modules/common/public-api.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.ts","../../../projects/natural/src/lib/modules/detail-header/detail-header.component.html","../../../projects/natural/src/lib/modules/detail-header/public-api.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-select/type-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/abstract-association-select-component.directive.ts","../../../projects/natural/src/lib/modules/select/abstract-select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.ts","../../../projects/natural/src/lib/modules/select/select/select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-text/type-text.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-number/type-number.component.html","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.ts","../../../projects/natural/src/lib/modules/search/facet-selector/facet-selector.component.html","../../../projects/natural/src/lib/modules/search/input/input.component.ts","../../../projects/natural/src/lib/modules/search/input/input.component.html","../../../projects/natural/src/lib/modules/search/group/group.component.ts","../../../projects/natural/src/lib/modules/search/group/group.component.html","../../../projects/natural/src/lib/modules/search/search/search.component.ts","../../../projects/natural/src/lib/modules/search/search/search.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/classes/model-node.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-date-range/type-date-range.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/type-options/type-options.component.html","../../../projects/natural/src/lib/modules/dropdown-components/type-boolean/type-boolean.component.ts","../../../projects/natural/src/lib/modules/dropdown-components/public-api.ts","../../../projects/natural/src/lib/modules/file/utils.ts","../../../projects/natural/src/lib/modules/file/file.service.ts","../../../projects/natural/src/lib/modules/file/abstract-file.ts","../../../projects/natural/src/lib/modules/file/file-drop.directive.ts","../../../projects/natural/src/lib/modules/file/file-select.directive.ts","../../../projects/natural/src/lib/modules/file/component/file.component.ts","../../../projects/natural/src/lib/modules/file/component/file.component.html","../../../projects/natural/src/lib/modules/file/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.ts","../../../projects/natural/src/lib/modules/fixed-button/fixed-button.component.html","../../../projects/natural/src/lib/modules/fixed-button/public-api.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.ts","../../../projects/natural/src/lib/modules/fixed-button-detail/fixed-button-detail.component.html","../../../projects/natural/src/lib/modules/fixed-button-detail/public-api.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.html","../../../projects/natural/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.ts","../../../projects/natural/src/lib/modules/hierarchic-selector/public-api.ts","../../../projects/natural/src/lib/modules/icon/icon.module.ts","../../../projects/natural/src/lib/modules/icon/public-api.ts","../../../projects/natural/src/lib/modules/panels/types.ts","../../../projects/natural/src/lib/modules/panels/panels.module.ts","../../../projects/natural/src/lib/modules/panels/panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/panels.service.ts","../../../projects/natural/src/lib/modules/panels/panels.component.ts","../../../projects/natural/src/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.ts","../../../projects/natural/src/lib/modules/panels/public-api.ts","../../../projects/natural/src/lib/modules/relations/relations.component.ts","../../../projects/natural/src/lib/modules/relations/relations.component.html","../../../projects/natural/src/lib/modules/relations/public-api.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.ts","../../../projects/natural/src/lib/modules/select/select-enum/select-enum.component.html","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.ts","../../../projects/natural/src/lib/modules/select/select-hierarchic/select-hierarchic.component.html","../../../projects/natural/src/lib/modules/select/public-api.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-stack.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav.service.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav/sidenav.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.ts","../../../projects/natural/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.html","../../../projects/natural/src/lib/modules/sidenav/sidenav-content/sidenav-content.component.ts","../../../projects/natural/src/lib/modules/sidenav/public-api.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.ts","../../../projects/natural/src/lib/modules/stamp/stamp.component.html","../../../projects/natural/src/lib/modules/stamp/public-api.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.ts","../../../projects/natural/src/lib/modules/table-button/table-button.component.html","../../../projects/natural/src/lib/modules/table-button/public-api.ts","../../../projects/natural/src/lib/modules/dialog-trigger/public-api.ts","../../../projects/natural/src/lib/modules/avatar/sources/source.ts","../../../projects/natural/src/lib/classes/crypto.ts","../../../projects/natural/src/lib/modules/avatar/sources/gravatar.ts","../../../projects/natural/src/lib/modules/avatar/sources/initials.ts","../../../projects/natural/src/lib/modules/avatar/sources/image.ts","../../../projects/natural/src/lib/modules/avatar/service/avatar.service.ts","../../../projects/natural/src/lib/modules/avatar/component/avatar.component.ts","../../../projects/natural/src/lib/modules/avatar/public-api.ts","../../../projects/natural/src/lib/modules/matomo/matomo.service.ts","../../../projects/natural/src/lib/modules/matomo/public-api.ts","../../../projects/natural/src/lib/modules/logger/error-handler.ts","../../../projects/natural/src/lib/modules/logger/error.module.ts","../../../projects/natural/src/lib/modules/logger/public-api.ts","../../../projects/natural/src/lib/modules/color-schemer/color-schemer.component.ts","../../../projects/natural/src/lib/modules/color-schemer/color-schemer.component.html","../../../projects/natural/src/lib/modules/color-schemer/public-api.ts","../../../projects/natural/src/lib/modules/theme-changer/theme-changer.component.ts","../../../projects/natural/src/lib/modules/theme-changer/theme-changer.component.html","../../../projects/natural/src/lib/modules/theme-changer/public-api.ts","../../../projects/natural/src/lib/directives/http-prefix.directive.ts","../../../projects/natural/src/lib/classes/providers.ts","../../../projects/natural/src/lib/classes/signing.ts","../../../projects/natural/src/public-api.ts","../../../projects/natural/src/ecodev-natural.ts"],"sourcesContent":["import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule} from '@angular/material/dialog';\nimport {MatButton} from '@angular/material/button';\n\nexport type NaturalConfirmData = {\n title: string;\n message: string;\n confirmText: string;\n cancelText: string;\n};\n\n@Component({\n imports: [MatDialogModule, MatButton],\n templateUrl: './confirm.component.html',\n styleUrl: './confirm.component.scss',\n})\nexport class NaturalConfirmComponent {\n public readonly data = inject<NaturalConfirmData>(MAT_DIALOG_DATA);\n}\n","<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button mat-button [mat-dialog-close]=\"false\">{{ data.cancelText }}</button>\n <button mat-stroked-button cdkFocusInitial [mat-dialog-close]=\"true\">{{ data.confirmText }}</button>\n</mat-dialog-actions>\n","import {inject, Injectable} from '@angular/core';\nimport {MatDialog} from '@angular/material/dialog';\nimport {MatSnackBar, MatSnackBarRef, SimpleSnackBar} from '@angular/material/snack-bar';\nimport {Observable} from 'rxjs';\nimport {NaturalConfirmComponent, NaturalConfirmData} from './confirm.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalAlertService {\n private readonly dialog = inject(MatDialog);\n private readonly snackBar = inject(MatSnackBar);\n\n /**\n * Show an informative message in a snack bar\n */\n public info(message: string, duration: number | null = 2500): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, undefined, {\n duration: duration === null ? undefined : duration,\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show an error in a snack bar\n */\n public error(message: string, duration: number | null = 2500, action?: string): MatSnackBarRef<SimpleSnackBar> {\n return this.snackBar.open(message, action, {\n duration: duration === null ? undefined : duration,\n panelClass: ['snackbar-error'],\n verticalPosition: 'top',\n horizontalPosition: 'end',\n });\n }\n\n /**\n * Show a simple confirmation dialog and returns true if user confirmed it\n */\n public confirm(\n title: string,\n message: string,\n confirmText: string,\n cancelText: string = $localize`Annuler`,\n ): Observable<boolean | undefined> {\n const dialog = this.dialog.open<NaturalConfirmComponent, NaturalConfirmData, boolean>(NaturalConfirmComponent, {\n data: {\n title: title,\n message: message,\n confirmText: confirmText,\n cancelText: cancelText,\n },\n });\n\n return dialog.afterClosed();\n }\n}\n","import {DestroyRef, Directive, HostBinding, HostListener, inject} from '@angular/core';\nimport {NaturalPanelsService} from './panels.service';\nimport {NaturalPanelData} from './types';\nimport {Observable} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n@Directive()\nexport class NaturalAbstractPanel {\n protected readonly destroyRef = inject(DestroyRef);\n /**\n * The data property is the container where the resolved content is stored\n * When loading a component from a panel opening (dialog), receives the data provided by the service\n */\n public data: any = {};\n\n /**\n * Bind isFrontPanel style class on root component\n */\n @HostBinding('class.isFrontPanel') public isFrontPanel = false;\n\n /**\n * Bind isPanel style class on root component\n */\n @HostBinding('class.isPanel') public isPanel = false;\n\n /**\n * Merging of data provided by the very root component (that is in a route context) and inherited data through panels\n * TODO: provide type with available attributes\n */\n public panelData?: NaturalPanelData;\n public panelService?: NaturalPanelsService;\n\n /**\n * Bind click on panels, to allow the selection of those who are behind\n */\n @HostListener('click')\n public clickPanel(): void {\n if (!this.isFrontPanel && this.panelService) {\n this.panelService.goToPanelByComponent(this);\n }\n }\n\n /**\n * Called when panel opens and component is loaded\n * Runs before ngOnInit()\n */\n public initPanel(panelData: NaturalPanelData): void {\n this.panelData = panelData;\n this.isPanel = true;\n\n if (this.panelData?.data) {\n if (this.panelData.data.model instanceof Observable) {\n // Subscribe to model to know when Apollo cache is changed, so we can reflect it into `data.model`\n this.panelData.data.model.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(model => {\n this.data = {\n ...this.data,\n ...this.panelData?.data,\n model: model,\n };\n });\n } else {\n this.data = {\n ...this.data,\n ...this.panelData.data,\n };\n }\n }\n }\n}\n","import {NavigationEnd, NavigationStart, Router} from '@angular/router';\nimport {cloneDeepWith, pickBy} from 'es-toolkit';\nimport {Observable, switchMap, take} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport type {ReadonlyDeep} from 'type-fest';\nimport {Literal} from '../types/types';\nimport {PaginationInput, Sorting, SortingOrder} from './query-variable-manager';\n\n/**\n * Very basic formatting to get only date, without time and ignoring entirely the timezone\n *\n * So something like: \"2021-09-23\"\n */\nexport function formatIsoDate(date: null): null;\nexport function formatIsoDate(date: Date): string;\nexport function formatIsoDate(date: Date | null): string | null;\nexport function formatIsoDate(date: Date | null): string | null {\n if (!date) {\n return null;\n }\n\n const y = date.getFullYear();\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Format a date and time in a way that will preserve the local time zone.\n * This allows the server side to know the day (without time) that was selected on client side.\n *\n * So something like: \"2021-09-23T17:57:16+09:00\"\n */\nexport function formatIsoDateTime(date: Date): string {\n const timezoneOffsetInMinutes = Math.round(date.getTimezoneOffset());\n const timezoneOffsetInHours = -Math.trunc(timezoneOffsetInMinutes / 60); // UTC minus local time\n const sign = timezoneOffsetInHours >= 0 ? '+' : '-';\n const remainderMinutes = -(timezoneOffsetInMinutes % 60);\n\n // It's a bit unfortunate that we need to construct a new Date instance,\n // but we don't want the original Date instance to be modified\n const correctedDate = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds(),\n );\n correctedDate.setHours(date.getHours() + timezoneOffsetInHours);\n\n const iso = correctedDate\n .toISOString()\n .replace(/\\.\\d{3}Z/, '')\n .replace('Z', '');\n\n const hours = Math.abs(timezoneOffsetInHours).toString().padStart(2, '0');\n const minutes = remainderMinutes.toString().padStart(2, '0');\n\n return iso + sign + hours + ':' + minutes;\n}\n\n/**\n * Relations to full objects are converted to their IDs only.\n *\n * So {user: {id: 123}} becomes {user: 123}\n */\nexport function relationsToIds(object: Literal): Literal {\n const newObj: Literal = {};\n Object.keys(object).forEach(key => {\n let value: unknown = object[key];\n\n if (value === null || value === undefined) {\n // noop\n } else if (hasId(value)) {\n value = value.id;\n } else if (Array.isArray(value)) {\n value = value.map((i: unknown) => (hasId(i) ? i.id : i));\n } else if (typeof value === 'object' && !(value instanceof File) && !(value instanceof Date)) {\n value = pickBy(value, (v, k) => k !== '__typename'); // omit(value, ['__typename']) ?\n }\n\n newObj[key] = value;\n });\n\n return newObj;\n}\n\nfunction hasId(value: unknown): value is {id: unknown} {\n return !!value && typeof value === 'object' && 'id' in value && !!value.id;\n}\n\n/**\n * Returns the plural form of the given name\n *\n * This is **not** necessarily valid english grammar. Its only purpose is for internal usage, not for humans.\n *\n * This **MUST** be kept in sync with `\\Ecodev\\Felix\\Api\\Plural:make()`.\n *\n * This is a bit performance-sensitive, so we should keep it fast and only cover cases that we actually need.\n */\nexport function makePlural(name: string): string {\n // Words ending in a y preceded by a vowel form their plurals by adding -s:\n if (/[aeiou]y$/.exec(name)) {\n return name + 's';\n }\n\n const plural = name + 's';\n\n return plural.replace(/ys$/, 'ies').replace(/ss$/, 'ses').replace(/xs$/, 'xes');\n}\n\n/**\n * Returns the string with the first letter as capital\n */\nexport function upperCaseFirstLetter(term: string): string {\n return term.charAt(0).toUpperCase() + term.slice(1);\n}\n\n/**\n * Replace all attributes of first object with the ones provided by the second, but keeps the reference\n */\nexport function replaceObjectKeepingReference(obj: Literal | null, newObj: Literal | null): void {\n if (!obj || !newObj) {\n return;\n }\n\n Object.keys(obj).forEach(key => {\n delete obj[key];\n });\n\n Object.keys(newObj).forEach(key => {\n obj[key] = newObj[key];\n });\n}\n\n/**\n * Get contrasted color for text in the slider thumb\n * @param hexBgColor string in hexadecimals representing the background color\n */\nexport function getForegroundColor(hexBgColor: string): 'black' | 'white' {\n const rgb = hexToRgb(hexBgColor.slice(0, 7)); // splice remove alpha and consider only \"visible\" color at 100% alpha\n const o = Math.round((rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000);\n\n return o > 125 ? 'black' : 'white';\n}\n\nfunction hexToRgb(hex: string): {r: number; g: number; b: number} {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : {\n r: 0,\n g: 0,\n b: 0,\n };\n}\n\n/**\n * Convert RGB color to hexadecimal color\n *\n * ```ts\n * rgbToHex('rgb(255, 00, 255)'); // '#FF00FF'\n * ```\n */\nexport function rgbToHex(rgb: string): string {\n const m = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/.exec(rgb);\n if (!m) {\n return rgb;\n }\n\n return '#' + [m[1], m[2], m[3]].map(x => parseInt(x).toString(16).toUpperCase().padStart(2, '0')).join('');\n}\n\n/**\n * Deep clone given values except for `File` that will be referencing the original value\n */\nexport function cloneDeepButSkipFile<T>(value: T): T {\n return cloneDeepWith(value, v => (isFile(v) ? v : undefined));\n}\n\nexport function isFile(value: unknown): boolean {\n return (\n (typeof File !== 'undefined' && value instanceof File) ||\n (typeof Blob !== 'undefined' && value instanceof Blob) ||\n (typeof FileList !== 'undefined' && value instanceof FileList)\n );\n}\n\n/**\n * During lodash.mergeWith, overrides arrays\n */\nexport function mergeOverrideArray(destValue: unknown, source: unknown): unknown {\n if (Array.isArray(source) || isFile(source)) {\n return source;\n }\n}\n\n/**\n * Copy text to clipboard.\n * Accepts line breaks `\\n` as textarea do.\n */\nexport function copyToClipboard(document: Document, text: string): void {\n const input = document.createElement('textarea');\n document.body.append(input);\n input.value = text;\n input.select();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n document.execCommand('copy');\n document.body.removeChild(input);\n}\n\nexport function deepFreeze<T extends Literal>(o: T): ReadonlyDeep<T> {\n Object.values(o).forEach(v => Object.isFrozen(v) || deepFreeze(v));\n\n return Object.freeze(o) as ReadonlyDeep<T>;\n}\n\n/**\n * Return a valid PaginationInput from whatever is available from data. Invalid properties/types will be dropped.\n */\nexport function validatePagination(data: unknown): PaginationInput | null {\n if (!data || typeof data !== 'object' || Array.isArray(data)) {\n return null;\n }\n\n const pagination: PaginationInput = {};\n\n if ('offset' in data && (data.offset === null || typeof data.offset === 'number')) {\n pagination.offset = data.offset;\n }\n\n if ('pageIndex' in data && (data.pageIndex === null || typeof data.pageIndex === 'number')) {\n pagination.pageIndex = data.pageIndex;\n }\n\n if ('pageSize' in data && (data.pageSize === null || typeof data.pageSize === 'number')) {\n pagination.pageSize = data.pageSize;\n }\n\n return pagination;\n}\n\n/**\n * Return a valid Sortings from whatever is available from data. Invalid properties/types will be dropped.\n */\nexport function validateSorting(data: unknown): Sorting[] | null {\n if (!Array.isArray(data)) {\n return null;\n }\n const result: Sorting[] = [];\n data.forEach(s => {\n const r = validateOneSorting(s);\n if (r) {\n result.push(r);\n }\n });\n\n return result;\n}\n\nfunction validateOneSorting(data: unknown): Sorting | null {\n if (!data || typeof data !== 'object' || !('field' in data)) {\n return null;\n }\n\n const sorting: Sorting = {field: data.field};\n\n if (\n 'order' in data &&\n (data.order === SortingOrder.ASC || data.order === SortingOrder.DESC || data.order === null)\n ) {\n sorting.order = data.order;\n }\n\n if ('nullAsHighest' in data && (data.nullAsHighest === null || typeof data.nullAsHighest === 'boolean')) {\n sorting.nullAsHighest = data.nullAsHighest;\n }\n\n if (\n 'emptyStringAsHighest' in data &&\n (data.emptyStringAsHighest === null || typeof data.emptyStringAsHighest === 'boolean')\n ) {\n sorting.emptyStringAsHighest = data.emptyStringAsHighest;\n }\n\n return sorting;\n}\n\n/**\n * Return valid columns from whatever is available from data. Invalid properties/types will be dropped.\n */\nexport function validateColumns(data: unknown): string[] | null {\n if (typeof data !== 'string') {\n return null;\n }\n\n return data.split(',').filter(string => string);\n}\n\nexport function onHistoryEvent(router: Router): Observable<NavigationEnd> {\n return router.events.pipe(\n filter(e => e instanceof NavigationStart && e.navigationTrigger === 'popstate'),\n switchMap(() =>\n router.events.pipe(\n filter(e => e instanceof NavigationEnd),\n take(1),\n ),\n ),\n );\n}\n","// Basic; loosely typed structure for graphql-doctrine filters\n\nimport {Literal} from '../../../types/types';\n\nexport type Filter = {\n groups?: FilterGroup[] | null;\n};\n\nexport type FilterGroup = {\n // The logic operator to be used to append this group\n groupLogic?: LogicalOperator | null;\n // The logic operator to be used within all conditions in this group\n conditionsLogic?: LogicalOperator | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: FilterGroupCondition[] | null;\n};\n\nexport type FilterGroupJoin = Record<string, JoinOn>;\n\nexport type JoinOn = {\n type?: JoinType | null;\n // Optional joins to either filter the query or fetch related objects from DB in a single query\n joins?: FilterGroupJoin | null;\n // Conditions to be applied on fields\n conditions?: FilterGroupCondition[] | null;\n};\n\n// Logical operator to be used in conditions\nexport enum LogicalOperator {\n AND = 'AND',\n OR = 'OR',\n}\n\n// Join types to be used in DQL\nexport enum JoinType {\n innerJoin = 'innerJoin',\n leftJoin = 'leftJoin',\n}\n\nexport type FilterGroupCondition = Record<string, FilterGroupConditionField>;\n\nexport type FilterGroupConditionField = {\n between?: BetweenOperator | null;\n equal?: EqualOperator | null;\n greater?: GreaterOperator | null;\n greaterOrEqual?: GreaterOrEqualOperator | null;\n in?: InOperator | null;\n less?: LessOperator | null;\n lessOrEqual?: LessOrEqualOperator | null;\n like?: LikeOperator | null;\n null?: NullOperator | null;\n\n // For relations\n have?: HaveOperator | null;\n empty?: EmptyOperator | null;\n\n // Allow anything else for custom operators\n [key: string]: Literal | undefined | null;\n};\n\nexport type Scalar = number | string | boolean;\n\nexport type HaveOperator = {\n values: string[];\n not?: boolean | null;\n};\n\nexport type EmptyOperator = {\n not?: boolean | null;\n};\n\nexport type BetweenOperator = {\n from: Scalar;\n to: Scalar;\n not?: boolean | null;\n};\n\nexport type EqualOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type GreaterOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type GreaterOrEqualOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type InOperator = {\n values: Scalar[];\n not?: boolean | null;\n};\n\nexport type LessOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type LessOrEqualOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type LikeOperator = {\n value: Scalar;\n not?: boolean | null;\n};\n\nexport type NullOperator = {\n not?: boolean | null;\n};\n","import {cloneDeep, groupBy, uniq} from 'es-toolkit';\nimport {LogicalOperator} from '../modules/search/classes/graphql-doctrine.types';\nimport {Literal} from '../types/types';\n\nexport function hasMixedGroupLogic(groups: Literal[]): boolean {\n // Complete lack of definition by fallback on AND operator\n const completedGroups = cloneDeep(groups).map(group => {\n if (!group.groupLogic) {\n group.groupLogic = LogicalOperator.AND;\n }\n\n return group;\n });\n\n const groupLogics = uniq(Object.keys(groupBy(completedGroups.slice(1), group => group.groupLogic)));\n\n return groupLogics.length > 1;\n}\n","import {defaultsDeep, mergeWith} from 'es-toolkit/compat';\nimport {cloneDeep, omit} from 'es-toolkit';\nimport {BehaviorSubject} from 'rxjs';\nimport {Literal} from '../types/types';\nimport {cloneDeepButSkipFile, isFile, mergeOverrideArray} from './utility';\nimport {hasMixedGroupLogic} from './query-variable-manager-utils';\n\nexport type QueryVariables = {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n filter?: any | null;\n pagination?: PaginationInput | null;\n sorting?: Sorting[] | null;\n};\n\nexport type PaginationInput = {\n offset?: number | null;\n pageIndex?: number | null;\n pageSize?: number | null;\n};\n\nexport type Sorting = {\n field: any;\n order?: SortingOrder | null;\n nullAsHighest?: boolean | null;\n emptyStringAsHighest?: boolean | null;\n};\n\nexport enum SortingOrder {\n ASC = 'ASC',\n DESC = 'DESC',\n}\n\n/**\n * During lodash merge, concat arrays\n */\nfunction mergeConcatArray(destValue: unknown, source: unknown): unknown {\n if (isFile(source)) {\n return source;\n }\n\n if (Array.isArray(source)) {\n if (Array.isArray(destValue)) {\n return destValue.concat(source);\n } else {\n return source;\n }\n }\n}\n\n/**\n * Filter manager stores a set of channels that contain a variable object and exposes an observable \"variables\" that updates with the result\n * of all channels merged together.\n *\n * A channel is supposed to be used by a given aspect of the GUI (pagination, sorting, search, others ?).\n *\n * ```ts\n * const fm = new QueryVariablesManager();\n * fm.merge('componentA-variables', {a : [1, 2, 3]});\n * ```\n *\n * Variables attributes is a BehaviorSubject. That mean it's not mandatory to subscribe, we can just call getValue or value attributes on\n * it :\n *\n * ```ts\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for 'componentA-variables':\n *\n * ```ts\n * fm.merge('componentA-variables', {a : [1, 2]});\n * console.log(fm.variables.value); // {a : [1, 2, 3]}\n * ```\n *\n * Set new variables for new channel:\n *\n * ```ts\n * fm.merge('componentB-variables', {a : [3, 4]});\n * console.log(fm.variables.value); // {a : [1, 2, 3, 4]}\n * ```\n */\nexport class NaturalQueryVariablesManager<T extends QueryVariables = QueryVariables> {\n public readonly variables = new BehaviorSubject<T | undefined>(undefined);\n private readonly channels = new Map<string, Partial<T>>();\n\n public constructor(queryVariablesManager?: NaturalQueryVariablesManager<T>) {\n if (queryVariablesManager) {\n this.channels = queryVariablesManager.getChannelsCopy();\n this.updateVariables();\n }\n }\n\n /**\n * Set or override all the variables that may exist in the given channel\n */\n public set(channelName: string, variables: Partial<T> | null | undefined): void {\n // cloneDeep to change reference and prevent some interactions when merge\n if (variables) {\n this.channels.set(channelName, cloneDeepButSkipFile(variables));\n } else {\n this.channels.delete(channelName);\n }\n this.updateVariables();\n }\n\n /**\n * Return a deep clone of the variables for the given channel name.\n *\n * Avoid returning the same reference to prevent an attribute change, then another channel update that would\n * used this changed attribute without having explicitly asked QueryVariablesManager to update it.\n */\n public get(channelName: string): Partial<T> | undefined {\n return cloneDeepButSkipFile(this.channels.get(channelName));\n }\n\n /**\n * Merge variable into a channel, overriding arrays in same channel / key\n */\n public merge(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n mergeWith(variables, cloneDeep(newVariables), mergeOverrideArray); // merge preserves references, cloneDeep prevent that\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n /**\n * Apply default values to a channel\n * Note : lodash defaults only defines values on destinations keys that are undefined\n */\n public defaults(channelName: string, newVariables: Partial<T>): void {\n const variables = this.channels.get(channelName);\n if (variables) {\n defaultsDeep(variables, newVariables);\n this.updateVariables();\n } else {\n this.set(channelName, newVariables);\n }\n }\n\n private getChannelsCopy(): Map<string, Partial<T>> {\n return new Map<string, Partial<T>>(this.channels);\n }\n\n /**\n * Merge channels in a single object\n * Arrays are concatenated\n * Filter groups are combined smartly (see mergeGroupList)\n */\n private updateVariables(): void {\n const merged: T = {} as T;\n\n this.channels.forEach(channelVariables => {\n if (channelVariables.filter) {\n // Merge filter's groups first\n const groups = this.mergeGroupList(\n merged.filter?.groups ? merged.filter.groups : [],\n channelVariables.filter.groups || [],\n );\n\n // Merge filter key (that contain groups)\n if (groups?.length) {\n if (merged.filter) {\n merged.filter.groups = groups;\n } else {\n merged.filter = {groups: groups};\n }\n } else {\n mergeWith(merged, {filter: channelVariables.filter}, mergeConcatArray);\n }\n }\n\n // Merge other attributes than filter\n mergeWith(merged, omit(channelVariables, ['filter']), mergeConcatArray);\n });\n\n this.variables.next(merged);\n }\n\n /**\n * Cross merge two filters\n * Only accepts groups with same groupLogic (ignores the first one, because there is no groupLogic in this one)\n * @throws In case two non-empty lists of groups are given and at one of them mix groupLogic value, throws an error\n */\n private mergeGroupList(groupsA: Literal[], groupsB: Literal[]): Literal {\n if (groupsA.length === 0 && groupsB.length === 0) {\n return []; // empty listings, return empty lists\n }\n\n if (groupsA.length === 0 && groupsB.length > 0) {\n return groupsB; // One list is empty, return the one that is not\n }\n\n if (groupsB.length === 0 && groupsA.length > 0) {\n return groupsA; // One list is empty, return the one that is not\n }\n\n const groups: Literal[] = [];\n\n if (hasMixedGroupLogic(groupsA) || hasMixedGroupLogic(groupsB)) {\n throw Error('QueryVariables groups contain mixed group logics');\n }\n\n groupsA.forEach(groupA => {\n groupsB.forEach(groupB => {\n groups.push(mergeWith(cloneDeep(groupA), groupB, mergeConcatArray));\n });\n });\n\n return groups;\n }\n}\n","/**\n * Array of valid top-level-domains\n * IanaVersion 2020033100\n *\n * This should ideally be kept in sync with \\Laminas\\Validator\\Hostname\n *\n * See ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain\n * See http://www.iana.org/domains/root/db/ Official list of supported TLDs\n */\nexport const validTlds: readonly string[] = [\n 'aaa',\n 'aarp',\n 'abb',\n 'abbott',\n 'abbvie',\n 'abc',\n 'able',\n 'abogado',\n 'abudhabi',\n 'ac',\n 'academy',\n 'accenture',\n 'accountant',\n 'accountants',\n 'aco',\n 'actor',\n 'ad',\n 'ads',\n 'adult',\n 'ae',\n 'aeg',\n 'aero',\n 'aetna',\n 'af',\n 'afl',\n 'africa',\n 'ag',\n 'agakhan',\n 'agency',\n 'ai',\n 'aig',\n 'airbus',\n 'airforce',\n 'airtel',\n 'akdn',\n 'al',\n 'alibaba',\n 'alipay',\n 'allfinanz',\n 'allstate',\n 'ally',\n 'alsace',\n 'alstom',\n 'am',\n 'amazon',\n 'americanexpress',\n 'americanfamily',\n 'amex',\n 'amfam',\n 'amica',\n 'amsterdam',\n 'analytics',\n 'android',\n 'anquan',\n 'anz',\n 'ao',\n 'aol',\n 'apartments',\n 'app',\n 'apple',\n 'aq',\n 'aquarelle',\n 'ar',\n 'arab',\n 'aramco',\n 'archi',\n 'army',\n 'arpa',\n 'art',\n 'arte',\n 'as',\n 'asda',\n 'asia',\n 'associates',\n 'at',\n 'athleta',\n 'attorney',\n 'au',\n 'auction',\n 'audi',\n 'audible',\n 'audio',\n 'auspost',\n 'author',\n 'auto',\n 'autos',\n 'aw',\n 'aws',\n 'ax',\n 'axa',\n 'az',\n 'azure',\n 'ba',\n 'baby',\n 'baidu',\n 'banamex',\n 'band',\n 'bank',\n 'bar',\n 'barcelona',\n 'barclaycard',\n 'barclays',\n 'barefoot',\n 'bargains',\n 'baseball',\n 'basketball',\n 'bauhaus',\n 'bayern',\n 'bb',\n 'bbc',\n 'bbt',\n 'bbva',\n 'bcg',\n 'bcn',\n 'bd',\n 'be',\n 'beats',\n 'beauty',\n 'beer',\n 'bentley',\n 'berlin',\n 'best',\n 'bestbuy',\n 'bet',\n 'bf',\n 'bg',\n 'bh',\n 'bharti',\n 'bi',\n 'bible',\n 'bid',\n 'bike',\n 'bing',\n 'bingo',\n 'bio',\n 'biz',\n 'bj',\n 'black',\n 'blackfriday',\n 'blockbuster',\n 'blog',\n 'bloomberg',\n 'blue',\n 'bm',\n 'bms',\n 'bmw',\n 'bn',\n 'bnpparibas',\n 'bo',\n 'boats',\n 'boehringer',\n 'bofa',\n 'bom',\n 'bond',\n 'boo',\n 'book',\n 'booking',\n 'bosch',\n 'bostik',\n 'boston',\n 'bot',\n 'boutique',\n 'box',\n 'br',\n 'bradesco',\n 'bridgestone',\n 'broadway',\n 'broker',\n 'brother',\n 'brussels',\n 'bs',\n 'bt',\n 'build',\n 'builders',\n 'business',\n 'buy',\n 'buzz',\n 'bv',\n 'bw',\n 'by',\n 'bz',\n 'bzh',\n 'ca',\n 'cab',\n 'cafe',\n 'cal',\n 'call',\n 'calvinklein',\n 'cam',\n 'camera',\n 'camp',\n 'canon',\n 'capetown',\n 'capital',\n 'capitalone',\n 'car',\n 'caravan',\n 'cards',\n 'care',\n 'career',\n 'careers',\n 'cars',\n 'casa',\n 'case',\n 'cash',\n 'casino',\n 'cat',\n 'catering',\n 'catholic',\n 'cba',\n 'cbn',\n 'cbre',\n 'cc',\n 'cd',\n 'center',\n 'ceo',\n 'cern',\n 'cf',\n 'cfa',\n 'cfd',\n 'cg',\n 'ch',\n 'chanel',\n 'channel',\n 'charity',\n 'chase',\n 'chat',\n 'cheap',\n 'chintai',\n 'christmas',\n 'chrome',\n 'church',\n 'ci',\n 'cipriani',\n 'circle',\n 'cisco',\n 'citadel',\n 'citi',\n 'citic',\n 'city',\n 'ck',\n 'cl',\n 'claims',\n 'cleaning',\n 'click',\n 'clinic',\n 'clinique',\n 'clothing',\n 'cloud',\n 'club',\n 'clubmed',\n 'cm',\n 'cn',\n 'co',\n 'coach',\n 'codes',\n 'coffee',\n 'college',\n 'cologne',\n 'com',\n 'commbank',\n 'community',\n 'company',\n 'compare',\n 'computer',\n 'comsec',\n 'condos',\n 'construction',\n 'consulting',\n 'contact',\n 'contractors',\n 'cooking',\n 'cool',\n 'coop',\n 'corsica',\n 'country',\n 'coupon',\n 'coupons',\n 'courses',\n 'cpa',\n 'cr',\n 'credit',\n 'creditcard',\n 'creditunion',\n 'cricket',\n 'crown',\n 'crs',\n 'cruise',\n 'cruises',\n 'cu',\n 'cuisinella',\n 'cv',\n 'cw',\n 'cx',\n 'cy',\n 'cymru',\n 'cyou',\n 'cz',\n 'dabur',\n 'dad',\n 'dance',\n 'data',\n 'date',\n 'dating',\n 'datsun',\n 'day',\n 'dclk',\n 'dds',\n 'de',\n 'deal',\n 'dealer',\n 'deals',\n 'degree',\n 'delivery',\n 'dell',\n 'deloitte',\n 'delta',\n 'democrat',\n 'dental',\n 'dentist',\n 'desi',\n 'design',\n 'dev',\n 'dhl',\n 'diamonds',\n 'diet',\n 'digital',\n 'direct',\n 'directory',\n 'discount',\n 'discover',\n 'dish',\n 'diy',\n 'dj',\n 'dk',\n 'dm',\n 'dnp',\n 'do',\n 'docs',\n 'doctor',\n 'dog',\n 'domains',\n 'dot',\n 'download',\n 'drive',\n 'dtv',\n 'dubai',\n 'dunlop',\n 'dupont',\n 'durban',\n 'dvag',\n 'dvr',\n 'dz',\n 'earth',\n 'eat',\n 'ec',\n 'eco',\n 'edeka',\n 'edu',\n 'education',\n 'ee',\n 'eg',\n 'email',\n 'emerck',\n 'energy',\n 'engineer',\n 'engineering',\n 'enterprises',\n 'epson',\n 'equipment',\n 'er',\n 'ericsson',\n 'erni',\n 'es',\n 'esq',\n 'estate',\n 'et',\n 'eu',\n 'eurovision',\n 'eus',\n 'events',\n 'exchange',\n 'expert',\n 'exposed',\n 'express',\n 'extraspace',\n 'fage',\n 'fail',\n 'fairwinds',\n 'faith',\n 'family',\n 'fan',\n 'fans',\n 'farm',\n 'farmers',\n 'fashion',\n 'fast',\n 'fedex',\n 'feedback',\n 'ferrari',\n 'ferrero',\n 'fi',\n 'fidelity',\n 'fido',\n 'film',\n 'final',\n 'finance',\n 'financial',\n 'fire',\n 'firestone',\n 'firmdale',\n 'fish',\n 'fishing',\n 'fit',\n 'fitness',\n 'fj',\n 'fk',\n 'flickr',\n 'flights',\n 'flir',\n 'florist',\n 'flowers',\n 'fly',\n 'fm',\n 'fo',\n 'foo',\n 'food',\n 'football',\n 'ford',\n 'forex',\n 'forsale',\n 'forum',\n 'foundation',\n 'fox',\n 'fr',\n 'free',\n 'fresenius',\n 'frl',\n 'frogans',\n 'frontier',\n 'ftr',\n 'fujitsu',\n 'fun',\n 'fund',\n 'furniture',\n 'futbol',\n 'fyi',\n 'ga',\n 'gal',\n 'gallery',\n 'gallo',\n 'gallup',\n 'game',\n 'games',\n 'gap',\n 'garden',\n 'gay',\n 'gb',\n 'gbiz',\n 'gd',\n 'gdn',\n 'ge',\n 'gea',\n 'gent',\n 'genting',\n 'george',\n 'gf',\n 'gg',\n 'ggee',\n 'gh',\n 'gi',\n 'gift',\n 'gifts',\n 'gives',\n 'giving',\n 'gl',\n 'glass',\n 'gle',\n 'global',\n 'globo',\n 'gm',\n 'gmail',\n 'gmbh',\n 'gmo',\n 'gmx',\n 'gn',\n 'godaddy',\n 'gold',\n 'goldpoint',\n 'golf',\n 'goo',\n 'goodyear',\n 'goog',\n 'google',\n 'gop',\n 'got',\n 'gov',\n 'gp',\n 'gq',\n 'gr',\n 'grainger',\n 'graphics',\n 'gratis',\n 'green',\n 'gripe',\n 'grocery',\n 'group',\n 'gs',\n 'gt',\n 'gu',\n 'gucci',\n 'guge',\n 'guide',\n 'guitars',\n 'guru',\n 'gw',\n 'gy',\n 'hair',\n 'hamburg',\n 'hangout',\n 'haus',\n 'hbo',\n 'hdfc',\n 'hdfcbank',\n 'health',\n 'healthcare',\n 'help',\n 'helsinki',\n 'here',\n 'hermes',\n 'hiphop',\n 'hisamitsu',\n 'hitachi',\n 'hiv',\n 'hk',\n 'hkt',\n 'hm',\n 'hn',\n 'hockey',\n 'holdings',\n 'holiday',\n 'homedepot',\n 'homegoods',\n 'homes',\n 'homesense',\n 'honda',\n 'horse',\n 'hospital',\n 'host',\n 'hosting',\n 'hot',\n 'hotels',\n 'hotmail',\n 'house',\n 'how',\n 'hr',\n 'hsbc',\n 'ht',\n 'hu',\n 'hughes',\n 'hyatt',\n 'hyundai',\n 'ibm',\n 'icbc',\n 'ice',\n 'icu',\n 'id',\n 'ie',\n 'ieee',\n 'ifm',\n 'ikano',\n 'il',\n 'im',\n 'imamat',\n 'imdb',\n 'immo',\n 'immobilien',\n 'in',\n 'inc',\n 'industries',\n 'infiniti',\n 'info',\n 'ing',\n 'ink',\n 'institute',\n 'insurance',\n 'insure',\n 'int',\n 'international',\n 'intuit',\n 'investments',\n 'io',\n 'ipiranga',\n 'iq',\n 'ir',\n 'irish',\n 'is',\n 'ismaili',\n 'ist',\n 'istanbul',\n 'it',\n 'itau',\n 'itv',\n 'jaguar',\n 'java',\n 'jcb',\n 'je',\n 'jeep',\n 'jetzt',\n 'jewelry',\n 'jio',\n 'jll',\n 'jm',\n 'jmp',\n 'jnj',\n 'jo',\n 'jobs',\n 'joburg',\n 'jot',\n 'joy',\n 'jp',\n 'jpmorgan',\n 'jprs',\n 'juegos',\n 'juniper',\n 'kaufen',\n 'kddi',\n 'ke',\n 'kerryhotels',\n 'kerrylogistics',\n 'kerryproperties',\n 'kfh',\n 'kg',\n 'kh',\n 'ki',\n 'kia',\n 'kids',\n 'kim',\n 'kindle',\n 'kitchen',\n 'kiwi',\n 'km',\n 'kn',\n 'koeln',\n 'komatsu',\n 'kosher',\n 'kp',\n 'kpmg',\n 'kpn',\n 'kr',\n 'krd',\n 'kred',\n 'kuokgroup',\n 'kw',\n 'ky',\n 'kyoto',\n 'kz',\n 'la',\n 'lacaixa',\n 'lamborghini',\n 'lamer',\n 'lancaster',\n 'land',\n 'landrover',\n 'lanxess',\n 'lasalle',\n 'lat',\n 'latino',\n 'latrobe',\n 'law',\n 'lawyer',\n 'lb',\n 'lc',\n 'lds',\n 'lease',\n 'leclerc',\n 'lefrak',\n 'legal',\n 'lego',\n 'lexus',\n 'lgbt',\n 'li',\n 'lidl',\n 'life',\n 'lifeinsurance',\n 'lifestyle',\n 'lighting',\n 'like',\n 'lilly',\n 'limited',\n 'limo',\n 'lincoln',\n 'link',\n 'lipsy',\n 'live',\n 'living',\n 'lk',\n 'llc',\n 'llp',\n 'loan',\n 'loans',\n 'locker',\n 'locus',\n 'lol',\n 'london',\n 'lotte',\n 'lotto',\n 'love',\n 'lpl',\n 'lplfinancial',\n 'lr',\n 'ls',\n 'lt',\n 'ltd',\n 'ltda',\n 'lu',\n 'lundbeck',\n 'luxe',\n 'luxury',\n 'lv',\n 'ly',\n 'ma',\n 'madrid',\n 'maif',\n 'maison',\n 'makeup',\n 'man',\n 'management',\n 'mango',\n 'map',\n 'market',\n 'marketing',\n 'markets',\n 'marriott',\n 'marshalls',\n 'mattel',\n 'mba',\n 'mc',\n 'mckinsey',\n 'md',\n 'me',\n 'med',\n 'media',\n 'meet',\n 'melbourne',\n 'meme',\n 'memorial',\n 'men',\n 'menu',\n 'merckmsd',\n 'mg',\n 'mh',\n 'miami',\n 'microsoft',\n 'mil',\n 'mini',\n 'mint',\n 'mit',\n 'mitsubishi',\n 'mk',\n 'ml',\n 'mlb',\n 'mls',\n 'mm',\n 'mma',\n 'mn',\n 'mo',\n 'mobi',\n 'mobile',\n 'moda',\n 'moe',\n 'moi',\n 'mom',\n 'monash',\n 'money',\n 'monster',\n 'mormon',\n 'mortgage',\n 'moscow',\n 'moto',\n 'motorcycles',\n 'mov',\n 'movie',\n 'mp',\n 'mq',\n 'mr',\n 'ms',\n 'msd',\n 'mt',\n 'mtn',\n 'mtr',\n 'mu',\n 'museum',\n 'music',\n 'mv',\n 'mw',\n 'mx',\n 'my',\n 'mz',\n 'na',\n 'nab',\n 'nagoya',\n 'name',\n 'navy',\n 'nba',\n 'nc',\n 'ne',\n 'nec',\n 'net',\n 'netbank',\n 'netflix',\n 'network',\n 'neustar',\n 'new',\n 'news',\n 'next',\n 'nextdirect',\n 'nexus',\n 'nf',\n 'nfl',\n 'ng',\n 'ngo',\n 'nhk',\n 'ni',\n 'nico',\n 'nike',\n 'nikon',\n 'ninja',\n 'nissan',\n 'nissay',\n 'nl',\n 'no',\n 'nokia',\n 'norton',\n 'now',\n 'nowruz',\n 'nowtv',\n 'np',\n 'nr',\n 'nra',\n 'nrw',\n 'ntt',\n 'nu',\n 'nyc',\n 'nz',\n 'obi',\n 'observer',\n 'office',\n 'okinawa',\n 'olayan',\n 'olayangroup',\n 'ollo',\n 'om',\n 'omega',\n 'one',\n 'ong',\n 'onl',\n 'online',\n 'ooo',\n 'open',\n 'oracle',\n 'orange',\n 'org',\n 'organic',\n 'origins',\n 'osaka',\n 'otsuka',\n 'ott',\n 'ovh',\n 'pa',\n 'page',\n 'panasonic',\n 'paris',\n 'pars',\n 'partners',\n 'parts',\n 'party',\n 'pay',\n 'pccw',\n 'pe',\n 'pet',\n 'pf',\n 'pfizer',\n 'pg',\n 'ph',\n 'pharmacy',\n 'phd',\n 'philips',\n 'phone',\n 'photo',\n 'photography',\n 'photos',\n 'physio',\n 'pics',\n 'pictet',\n 'pictures',\n 'pid',\n 'pin',\n 'ping',\n 'pink',\n 'pioneer',\n 'pizza',\n 'pk',\n 'pl',\n 'place',\n 'play',\n 'playstation',\n 'plumbing',\n 'plus',\n 'pm',\n 'pn',\n 'pnc',\n 'pohl',\n 'poker',\n 'politie',\n 'porn',\n 'post',\n 'pr',\n 'pramerica',\n 'praxi',\n 'press',\n 'prime',\n 'pro',\n 'prod',\n 'productions',\n 'prof',\n 'progressive',\n 'promo',\n 'properties',\n 'property',\n 'protection',\n 'pru',\n 'prudential',\n 'ps',\n 'pt',\n 'pub',\n 'pw',\n 'pwc',\n 'py',\n 'qa',\n 'qpon',\n 'quebec',\n 'quest',\n 'racing',\n 'radio',\n 're',\n 'read',\n 'realestate',\n 'realtor',\n 'realty',\n 'recipes',\n 'red',\n 'redstone',\n 'redumbrella',\n 'rehab',\n 'reise',\n 'reisen',\n 'reit',\n 'reliance',\n 'ren',\n 'rent',\n 'rentals',\n 'repair',\n 'report',\n 'republican',\n 'rest',\n 'restaurant',\n 'review',\n 'reviews',\n 'rexroth',\n 'rich',\n 'richardli',\n 'ricoh',\n 'ril',\n 'rio',\n 'rip',\n 'ro',\n 'rocks',\n 'rodeo',\n 'rogers',\n 'room',\n 'rs',\n 'rsvp',\n 'ru',\n 'rugby',\n 'ruhr',\n 'run',\n 'rw',\n 'rwe',\n 'ryukyu',\n 'sa',\n 'saarland',\n 'safe',\n 'safety',\n 'sakura',\n 'sale',\n 'salon',\n 'samsclub',\n 'samsung',\n 'sandvik',\n 'sandvikcoromant',\n 'sanofi',\n 'sap',\n 'sarl',\n 'sas',\n 'save',\n 'saxo',\n 'sb',\n 'sbi',\n 'sbs',\n 'sc',\n 'scb',\n 'schaeffler',\n 'schmidt',\n 'scholarships',\n 'school',\n 'schule',\n 'schwarz',\n 'science',\n 'scot',\n 'sd',\n 'se',\n 'search',\n 'seat',\n 'secure',\n 'security',\n 'seek',\n 'select',\n 'sener',\n 'services',\n 'seven',\n 'sew',\n 'sex',\n 'sexy',\n 'sfr',\n 'sg',\n 'sh',\n 'shangrila',\n 'sharp',\n 'shell',\n 'shia',\n 'shiksha',\n 'shoes',\n 'shop',\n 'shopping',\n 'shouji',\n 'show',\n 'si',\n 'silk',\n 'sina',\n 'singles',\n 'site',\n 'sj',\n 'sk',\n 'ski',\n 'skin',\n 'sky',\n 'skype',\n 'sl',\n 'sling',\n 'sm',\n 'smart',\n 'smile',\n 'sn',\n 'sncf',\n 'so',\n 'soccer',\n 'social',\n 'softbank',\n 'software',\n 'sohu',\n 'solar',\n 'solutions',\n 'song',\n 'sony',\n 'soy',\n 'spa',\n 'space',\n 'sport',\n 'spot',\n 'sr',\n 'srl',\n 'ss',\n 'st',\n 'stada',\n 'staples',\n 'star',\n 'statebank',\n 'statefarm',\n 'stc',\n 'stcgroup',\n 'stockholm',\n 'storage',\n 'store',\n 'stream',\n 'studio',\n 'study',\n 'style',\n 'su',\n 'sucks',\n 'supplies',\n 'supply',\n 'support',\n 'surf',\n 'surgery',\n 'suzuki',\n 'sv',\n 'swatch',\n 'swiss',\n 'sx',\n 'sy',\n 'sydney',\n 'systems',\n 'sz',\n 'tab',\n 'taipei',\n 'talk',\n 'taobao',\n 'target',\n 'tatamotors',\n 'tatar',\n 'tattoo',\n 'tax',\n 'taxi',\n 'tc',\n 'tci',\n 'td',\n 'tdk',\n 'team',\n 'tech',\n 'technology',\n 'tel',\n 'temasek',\n 'tennis',\n 'teva',\n 'tf',\n 'tg',\n 'th',\n 'thd',\n 'theater',\n 'theatre',\n 'tiaa',\n 'tickets',\n 'tienda',\n 'tips',\n 'tires',\n 'tirol',\n 'tj',\n 'tjmaxx',\n 'tjx',\n 'tk',\n 'tkmaxx',\n 'tl',\n 'tm',\n 'tmall',\n 'tn',\n 'to',\n 'today',\n 'tokyo',\n 'tools',\n 'top',\n 'toray',\n 'toshiba',\n 'total',\n 'tours',\n 'town',\n 'toyota',\n 'toys',\n 'tr',\n 'trade',\n 'trading',\n 'training',\n 'travel',\n 'travelers',\n 'travelersinsurance',\n 'trust',\n 'trv',\n 'tt',\n 'tube',\n 'tui',\n 'tunes',\n 'tushu',\n 'tv',\n 'tvs',\n 'tw',\n 'tz',\n 'ua',\n 'ubank',\n 'ubs',\n 'ug',\n 'uk',\n 'unicom',\n 'university',\n 'uno',\n 'uol',\n 'ups',\n 'us',\n 'uy',\n 'uz',\n 'va',\n 'vacations',\n 'vana',\n 'vanguard',\n 'vc',\n 've',\n 'vegas',\n 'ventures',\n 'verisign',\n 'versicherung',\n 'vet',\n 'vg',\n 'vi',\n 'viajes',\n 'video',\n 'vig',\n 'viking',\n 'villas',\n 'vin',\n 'vip',\n 'virgin',\n 'visa',\n 'vision',\n 'viva',\n 'vivo',\n 'vlaanderen',\n 'vn',\n 'vodka',\n 'volvo',\n 'vote',\n 'voting',\n 'voto',\n 'voyage',\n 'vu',\n 'wales',\n 'walmart',\n 'walter',\n 'wang',\n 'wanggou',\n 'watch',\n 'watches',\n 'weather',\n 'weatherchannel',\n 'webcam',\n 'weber',\n 'website',\n 'wed',\n 'wedding',\n 'weibo',\n 'weir',\n 'wf',\n 'whoswho',\n 'wien',\n 'wiki',\n 'williamhill',\n 'win',\n 'windows',\n 'wine',\n 'winners',\n 'wme',\n 'wolterskluwer',\n 'woodside',\n 'work',\n 'works',\n 'world',\n 'wow',\n 'ws',\n 'wtc',\n 'wtf',\n 'xbox',\n 'xerox',\n 'xihuan',\n 'xin',\n 'कॉम',\n 'セール',\n '佛山',\n 'ಭಾರತ',\n '慈善',\n '集团',\n '在线',\n '한국',\n 'ଭାରତ',\n '点看',\n 'คอม',\n 'ভাৰত',\n 'ভারত',\n '八卦',\n 'ישראל',\n 'موقع',\n 'বাংলা',\n '公益',\n '公司',\n '香格里拉',\n '网站',\n '移动',\n '我爱你',\n 'москва',\n 'қаз',\n 'католик',\n 'онлайн',\n 'сайт',\n '联通',\n 'срб',\n 'бг',\n 'бел',\n 'קום',\n '时尚',\n '微博',\n '淡马锡',\n 'ファッション',\n 'орг',\n 'नेट',\n 'ストア',\n 'アマゾン',\n '삼성',\n 'சிங்கப்பூர்',\n '商标',\n '商店',\n '商城',\n 'дети',\n 'мкд',\n 'ею',\n 'ポイント',\n '新闻',\n '家電',\n 'كوم',\n '中文网',\n '中信',\n '中国',\n '中國',\n '娱乐',\n '谷歌',\n 'భారత్',\n 'ලංකා',\n '電訊盈科',\n '购物',\n 'クラウド',\n 'ભારત',\n '通販',\n 'भारतम्',\n 'भारत',\n 'भारोत',\n '网店',\n 'संगठन',\n '餐厅',\n '网络',\n 'ком',\n 'укр',\n '香港',\n '亚马逊',\n '食品',\n '飞利浦',\n '台湾',\n '台灣',\n '手机',\n 'мон',\n 'الجزائر',\n 'عمان',\n 'ارامكو',\n 'ایران',\n 'العليان',\n 'امارات',\n 'بازار',\n 'موريتانيا',\n 'پاکستان',\n 'الاردن',\n 'بارت',\n 'بھارت',\n 'المغرب',\n 'ابوظبي',\n 'البحرين',\n 'السعودية',\n 'ڀارت',\n 'كاثوليك',\n 'سودان',\n 'همراه',\n 'عراق',\n 'مليسيا',\n '澳門',\n '닷컴',\n '政府',\n 'شبكة',\n 'بيتك',\n 'عرب',\n 'გე',\n '机构',\n '组织机构',\n '健康',\n 'ไทย',\n 'سورية',\n '招聘',\n 'рус',\n 'рф',\n 'تونس',\n '大拿',\n 'ລາວ',\n 'みんな',\n 'グーグル',\n 'ευ',\n 'ελ',\n '世界',\n '書籍',\n 'ഭാരതം',\n 'ਭਾਰਤ',\n '网址',\n '닷넷',\n 'コム',\n '天主教',\n '游戏',\n 'vermögensberater',\n 'vermögensberatung',\n '企业',\n '信息',\n '嘉里大酒店',\n '嘉里',\n 'مصر',\n 'قطر',\n '广东',\n 'இலங்கை',\n 'இந்தியா',\n 'հայ',\n '新加坡',\n 'فلسطين',\n '政务',\n 'xxx',\n 'xyz',\n 'yachts',\n 'yahoo',\n 'yamaxun',\n 'yandex',\n 'ye',\n 'yodobashi',\n 'yoga',\n 'yokohama',\n 'you',\n 'youtube',\n 'yt',\n 'yun',\n 'za',\n 'zappos',\n 'zara',\n 'zero',\n 'zip',\n 'zm',\n 'zone',\n 'zuerich',\n 'zw',\n];\n","import {\n AbstractControl,\n AsyncValidatorFn,\n FormArray,\n FormControlStatus,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {Observable, of, timer} from 'rxjs';\nimport {filter, first, map, switchMap} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {validTlds} from './tld';\nimport {FilterGroupCondition} from '../modules/search/classes/graphql-doctrine.types';\nimport {UntypedModelService} from '../types/types';\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\n/**\n * Returns an async validator function that checks that the form control value is unique\n */\nexport function unique(\n fieldName: string,\n excludedId: string | null | undefined,\n modelService: UntypedModelService,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n const condition: FilterGroupCondition = {};\n condition[fieldName] = {equal: {value: control.value}};\n\n if (excludedId) {\n condition.id = {equal: {value: excludedId, not: true}};\n }\n\n const variables: QueryVariables = {\n pagination: {pageIndex: 0, pageSize: 0},\n filter: {groups: [{conditions: [condition]}]},\n };\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n\n return timer(500).pipe(\n switchMap(() =>\n modelService.count(qvm).pipe(\n first(),\n map(count => (count > 0 ? {duplicateValue: count} : null)),\n ),\n ),\n );\n };\n}\n\n/**\n * Returns an async validator function that checks that the form control value is available\n *\n * Similar to `unique` validator, but allows to use a custom query for when the client does\n * not have permissions for `modelService.count()`.\n */\nexport function available(\n getAvailableQuery: (value: string, excludedId: string | null) => Observable<boolean>,\n excludedId: string | null = null,\n): AsyncValidatorFn {\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\n if (!control.value || !control.dirty) {\n return of(null);\n }\n\n return timer(500).pipe(\n switchMap(() =>\n getAvailableQuery(control.value, excludedId).pipe(\n map(isAvailable => (isAvailable ? null : {available: true})),\n ),\n ),\n );\n };\n}\n\n/**\n * Return all errors recursively for the given Form or control\n */\nexport function collectErrors(control: AbstractControl<unknown>): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n if (control instanceof FormGroup || control instanceof FormArray) {\n errors = Object.entries(control.controls).reduce((acc: ValidationErrors | null, [key, childControl]) => {\n const childErrors = collectErrors(childControl);\n if (childErrors) {\n acc = {...acc, [key]: childErrors};\n }\n return acc;\n }, null);\n }\n\n if (!errors) {\n errors = control.errors;\n }\n\n return errors;\n}\n\n/**\n * Force validation of all form controls recursively.\n *\n * Recursively mark descending form tree as dirty and touched in order to show all invalid fields on demand.\n * Typically used when creating a new object and user clicked on create button but several fields were not\n * touched and are invalid.\n */\nexport function validateAllFormControls(control: AbstractControl<unknown>): void {\n control.markAllAsDirty();\n control.markAllAsTouched();\n}\n\nfunction isValid(status: FormControlStatus): status is 'VALID' {\n return status === 'VALID';\n}\n\n/**\n * Emits exactly 0 or 1 time:\n *\n * - if the form is `VALID`, emits immediately\n * - if the form is `PENDING` emits if it changes from `PENDING` to `VALID`\n * - any other cases will **never** emit\n */\nexport function ifValid(control: AbstractControl): Observable<'VALID'> {\n const observable = control.pending ? control.statusChanges.pipe(first()) : of(control.status);\n\n return observable.pipe(filter(isValid));\n}\n\n// This is an approximation of RFC_5322 where the hostname:\n//\n// - is too strict because it rejects IP address\n// - is too lax because it accepts pretty much anything else\n//\n// but the TLD will be validated against a whitelist so that should make the whole thing acceptable\nconst RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[^@ ]+\\.[^@]+$/u;\n\n/**\n * Validate an email address according to RFC, and also that it is publicly deliverable (not \"root@localhost\" or \"root@127.0.0.1\")\n *\n * This is meant to replace **all** usages of Angular too permissive `Validators.email`\n */\nexport function deliverableEmail(control: AbstractControl): ValidationErrors | null {\n // don't validate empty values to allow optional controls\n const value = control.value;\n if (!value) {\n return null;\n }\n\n const error = {email: true};\n if (value.length > 254) {\n return error;\n }\n\n if (!RFC_5322.test(value)) {\n return error;\n }\n\n const tld = value.split('.').pop();\n if (!validTlds.includes(tld)) {\n return error;\n }\n\n return null;\n}\n\nconst urlRegexp = /^https?:\\/\\/(?:[^.\\s]+\\.)+[^.\\s]+$/;\nexport const urlPattern = urlRegexp.toString();\n\n/**\n * Naive URL validator for \"normal\" web links, that is a bit too permissive\n *\n * - It enforces:\n * - http/https protocol\n * - one domain\n * - one tld\n * - It allows:\n * - any number of subdomains\n * - any parameters\n * - any fragments\n * - any characters for any parts (does not conform to rfc1738)\n */\nexport const url = Validators.pattern(urlRegexp);\n\n/**\n * Validates that the value is an integer (non-float)\n */\nexport function integer(control: AbstractControl): ValidationErrors | null {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n return Number.isInteger(parseFloat(control.value)) ? null : {integer: true};\n}\n\n/**\n * Validate that the value is a decimal number with up to `scale` digits\n *\n * The error contains the expected scale, so that the error message can explain\n * it to the end-user.\n */\nexport function decimal(scale: number): ValidatorFn {\n const regExp = new RegExp(`^-?\\\\d+(\\\\.\\\\d{0,${scale}})?$`);\n return control => {\n // Don't validate empty values to allow optional controls\n if (control.value === null || control.value === undefined || control.value === '') {\n return null;\n }\n\n const value = '' + control.value;\n if (value.match(regExp)) {\n return null;\n }\n\n return {decimal: scale};\n };\n}\n\n/**\n * For internal use to avoid re-creating regexp on each call of `money`\n */\nconst twoDecimals = decimal(2);\n\n/**\n * Validate that the value is an amount of money, meaning a number with at most 2 decimals\n */\nexport function money(control: AbstractControl): ValidationErrors | null {\n return twoDecimals(control) ? {money: true} : null;\n}\n\n/**\n * Validate that the number is strictly greater than given one.\n *\n * `Validators.min()` is \"greater than or equal\", but this one is strictly\n * \"greater than\".\n *\n * **SHOULD NOT USE IT**, instead consider using Angular's native `Validators.min()`.\n * Because you should also apply `[attr.min]=\"123\"` in the template to have the browser\n * help the user. And that attribute spec defines that it is \"greater or equal\", which\n * contradicts this validator. So we cannot use this validator and have the best UX.\n */\nexport function greaterThan(min: number): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value <= min ? {greaterThan: {greaterThan: min, actualValue: control.value}} : null;\n };\n}\n\n/**\n * Validate a 32 bits MiFare hexadecimal CSN\n */\nexport function nfcCardHex(control: AbstractControl): ValidationErrors | null {\n const value = control.value || '';\n if (value && !value.match(/^[0-9A-F]{2}:?[0-9A-F]{2}:?[0-9A-F]{2}:?[0-9A-F]{2}$/i)) {\n return {\n nfcCardHex: $localize`Doit être au format hexadécimal (A1:B2:C3:D4 ou A1B2C3D4)`,\n };\n }\n\n return null;\n}\n\nconst invalidTime: ValidationErrors = {\n time: `L'heure doit être au format \"14h35\", \"14:35\" ou \"14h\".`,\n};\n\n// This pattern should be kept in sync with `\\Ecodev\\Felix\\Api\\Scalar\\TimeType::parseValue()`\nconst timePattern = /^(?<hour>\\d{1,2})(([h:]$)|([h:](?<minute>\\d{1,2}))?$)/;\n\n/**\n * Validate a time similar to \"14h35\", \"14:35\" or \"14h\".\n */\nexport function time(control: AbstractControl): ValidationErrors | null {\n const value = control.value || '';\n if (!value) {\n return null;\n } else if (typeof value !== 'string') {\n return invalidTime;\n }\n\n const match = timePattern.exec(value.trim());\n if (match?.groups && parseFloat(match.groups.hour) <= 24 && parseFloat(match.groups.minute ?? '0') <= 60) {\n return null;\n }\n\n return invalidTime;\n}\n","import {isEqual} from 'es-toolkit';\nimport {Literal} from '../types/types';\nimport {cloneDeepButSkipFile} from './utility';\n\n/**\n * Cumulate all changes made to an object over time\n */\nexport class CumulativeChanges<T extends Literal> {\n private original: T = {} as T;\n private diff: Partial<T> = {};\n\n /**\n * Initialize the original values, should be called exactly one time per instance\n */\n public initialize(originalValues: Readonly<T>): void {\n this.original = cloneDeepButSkipFile(originalValues);\n this.diff = {};\n }\n\n /**\n * Returns a literal that contains only the keys whose values have been changed by this call or any previous calls.\n *\n * Eg:\n *\n * ```ts\n * changes.initialize({a: 1, b: 2});\n * changes.differences({a: 1, b: 3}); // => {b: 3}\n * ```\n */\n public differences(newValues: Readonly<T>): Partial<T> | null {\n Object.keys(newValues).forEach(key => {\n const newValue = newValues[key];\n if (\n key in this.diff ||\n (newValue !== undefined && (!(key in this.original) || !isEqual(this.original[key], newValue)))\n ) {\n (this.diff as any)[key] = newValue;\n }\n });\n\n return Object.keys(this.diff).length ? this.diff : null;\n }\n\n /**\n * Commit the given new values, so they are not treated as differences anymore.\n */\n public commit(newValues: Readonly<T>): void {\n this.original = {\n ...this.original,\n ...cloneDeepButSkipFile(newValues),\n };\n\n Object.keys(newValues).forEach(key => {\n if (key in this.diff && isEqual(this.diff[key], newValues[key])) {\n delete this.diff[key];\n }\n });\n }\n}\n","import {Directive, inject, OnInit} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {ActivatedRoute, type NavigationExtras, Router} from '@angular/router';\nimport {kebabCase} from 'es-toolkit';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {NaturalAbstractModelService, WithId} from '../services/abstract-model.service';\nimport {ExtractResolve, ExtractTcreate, ExtractTone, ExtractTupdate, Literal} from '../types/types';\nimport {EMPTY, endWith, finalize, last, Observable, switchMap, tap} from 'rxjs';\nimport {ifValid, validateAllFormControls} from './validators';\nimport {PaginatedData} from './data-source';\nimport {QueryVariables} from './query-variable-manager';\nimport {CumulativeChanges} from './cumulative-changes';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {NaturalDialogTriggerProvidedData} from '../modules/dialog-trigger/dialog-trigger.component';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * `Data` contains in `model` either the model fetched from DB or default values (without ID). And besides `model`,\n * any other extra keys defined by Extra.\n */\ntype Data<TService, Extra> = {model: {id?: string} & ExtractResolve<TService>} & Extra;\n\nfunction isNaturalDialogTriggerProvidedData(\n dialogData: unknown,\n): dialogData is NaturalDialogTriggerProvidedData<never> {\n return (\n !!dialogData &&\n typeof dialogData === 'object' &&\n 'activatedRoute' in dialogData &&\n dialogData.activatedRoute instanceof ActivatedRoute\n );\n}\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractDetail<\n TService extends NaturalAbstractModelService<\n {id: string},\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n unknown,\n any\n >,\n ExtraResolve extends Literal = Record<never, never>,\n >\n extends NaturalAbstractPanel\n implements OnInit\n{\n /**\n * Data retrieved by the server via route resolvers.\n *\n * The key `model` is special. It is readonly and represents the model being updated\n * as it exists on server. The value is kept up to date when Apollo mutates it on server.\n *\n * The only time when `model` is not readonly is during creation. Only then can we modify the model values directly.\n *\n * Other keys, if present, are whatever is returned from route resolvers as-is.\n */\n public override data: Data<TService, ExtraResolve>;\n\n /**\n * Form that manages the data from the controller\n */\n public form: UntypedFormGroup = new UntypedFormGroup({});\n\n /**\n * Show / hides the bottom fab button (mostly to hide it when we are on other tabs where semantic of button can conflict with ...\n * semantic of data on other tab, like relations that list other objects)\n */\n public showFabButton = true;\n\n protected readonly alertService = inject(NaturalAlertService);\n\n protected readonly router = inject(Router);\n\n protected readonly route = inject(ActivatedRoute);\n\n private readonly _dialogData: unknown = inject(MAT_DIALOG_DATA, {optional: true});\n\n /**\n * Once set, this must not change anymore, especially not right after the creation mutation,\n * so the form does not switch from creation mode to update mode without an actual reload of\n * model from DB (by navigating to update page).\n */\n private _isUpdatePage = false;\n private readonly changes = new CumulativeChanges<typeof this.form.getRawValue>();\n\n public constructor(\n // eslint-disable-next-line @angular-eslint/prefer-inject\n protected readonly key: string,\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public readonly service: TService,\n ) {\n super();\n\n this.data = {\n model: this.service.getDefaultForServer(),\n } as Data<TService, ExtraResolve>;\n }\n\n /**\n * You probably should not override this method. Instead, consider overriding `initForm()`.\n */\n public ngOnInit(): void {\n if (this.isPanel) {\n this.initForm();\n } else {\n const route = isNaturalDialogTriggerProvidedData(this._dialogData)\n ? this._dialogData.activatedRoute\n : this.route;\n this.#subscribeToModelFromResolvedData(route);\n }\n }\n\n public changeTab(index: number): void {\n this.showFabButton = index === 0;\n }\n\n #subscribeToModelFromResolvedData(route: ActivatedRoute): void {\n let previousId = -1;\n route.data\n .pipe(\n switchMap(data => {\n if (!(data.model instanceof Observable)) {\n throw new Error(\n 'Resolved data must include the key `model`, and it must be an observable (usually one from Apollo).',\n );\n }\n\n // Subscribe to model to know when Apollo cache is changed, so we can reflect it into `data.model`\n return data.model.pipe(\n tap((model: ExtractResolve<TService>) => {\n this.data = {\n ...data,\n model: model,\n } as Data<TService, ExtraResolve>;\n\n if (previousId !== model.id) {\n previousId = model.id;\n this.initForm();\n }\n }),\n );\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n /**\n * Returns whether `data.model` was fetched from DB, so we are on an update page, or if it is a new object\n * with (only) default values, so we are on a creation page.\n *\n * This should be used instead of checking `data.model.id` directly, in order to type guard and get proper typing\n */\n protected isUpdatePage(): this is {data: {model: ExtractTone<TService>}} {\n return this._isUpdatePage;\n }\n\n /**\n * Update the object on the server with the values from the form fields that were modified since\n * the initialization, or since the previous successful update.\n *\n * Form fields that are never modified are **not** sent to the server, unless if you specify `submitAllFields`.\n */\n public update(now = false, submitAllFields = false): void {\n if (!this.isUpdatePage()) {\n return;\n }\n\n validateAllFormControls(this.form);\n\n ifValid(this.form).subscribe(() => {\n const newValues = this.form.getRawValue();\n if (submitAllFields) {\n this.changes.initialize({});\n }\n\n const toSubmit = {\n id: this.data.model.id,\n ...this.changes.differences(newValues),\n };\n\n const update = now ? this.service.updateNow(toSubmit) : this.service.update(toSubmit);\n update.subscribe(model => {\n this.changes.commit(newValues);\n this.alertService.info($localize`Mis à jour`);\n this.postUpdate(model);\n });\n });\n }\n\n public create(redirect = true): void {\n validateAllFormControls(this.form);\n\n if (!this.form.valid) {\n return;\n }\n\n const newValues = this.form.getRawValue();\n this.form.disable();\n\n this.service\n .create(newValues)\n .pipe(\n switchMap(model => {\n this.alertService.info($localize`Créé`);\n\n return this.postCreate(model).pipe(endWith(model), last());\n }),\n switchMap((model: WithId<object>) => {\n if (redirect) {\n if (this.isPanel) {\n const oldUrl = this.router.url;\n const nextUrl: string = this.panelData?.config.params.nextRoute;\n const newUrl = oldUrl.replace('/new', '/' + model.id) + (nextUrl ? '/' + nextUrl : '');\n return this.router.navigateByUrl(newUrl); // replace /new by /123\n } else {\n const queryParams = this.route.snapshot.queryParams;\n return this.router.navigate(['..', model.id], {relativeTo: this.route, queryParams});\n }\n }\n\n return EMPTY;\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n /**\n * `confirmer` can be used to open a custom dialog, or anything else, to confirm the deletion, instead of the standard dialog\n */\n public delete(\n redirectionRoute?:\n | unknown[]\n | {\n commands: unknown[];\n extras: NavigationExtras;\n },\n confirmer?: Observable<boolean | undefined>,\n ): void {\n this.form.disable();\n\n (\n confirmer ??\n this.alertService.confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement cet élément ?`,\n $localize`Supprimer définitivement`,\n )\n )\n .pipe(\n switchMap(confirmed => {\n if (!confirmed || !this.isUpdatePage()) {\n return EMPTY;\n }\n\n this.preDelete(this.data.model);\n\n return this.service.delete([this.data.model]).pipe(\n switchMap(() => {\n this.alertService.info($localize`Supprimé`);\n\n if (this.isPanel) {\n this.panelService?.goToPenultimatePanel();\n\n return EMPTY;\n } else {\n let commands: unknown[] = ['../../' + kebabCase(this.key)];\n let extras: NavigationExtras = {relativeTo: this.route};\n\n if (redirectionRoute && 'extras' in redirectionRoute) {\n commands = redirectionRoute.commands;\n extras = {...extras, ...redirectionRoute.extras};\n } else if (redirectionRoute) {\n commands = redirectionRoute;\n }\n\n return this.router.navigate(commands, extras);\n }\n }),\n );\n }),\n finalize(() => this.form.enable()),\n )\n .subscribe();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postUpdate(model: ExtractTupdate<TService>): void {\n // noop\n }\n\n /**\n * Returns an observable that will be subscribed to immediately and the\n * redirect navigation will only happen after the observable completes.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected postCreate(model: ExtractTcreate<TService>): Observable<unknown> {\n return EMPTY;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected preDelete(model: ExtractTone<TService>): void {\n // noop\n }\n\n /**\n * Initialize the form whenever it is needed.\n *\n * You should override this method, and not `ngOnInit()` if you need to customize the form. Because this will\n * correctly be called more than one time per component instance if needed, when the route changes. But `ngOnInit()`\n * will incorrectly be called exactly 1 time per component instance, even if the object changes via route navigation.\n */\n protected initForm(): void {\n this._isUpdatePage = !!this.data.model.id;\n this.form = this.service.getFormGroup(this.data.model);\n this.changes.initialize(this.form.getRawValue());\n }\n}\n","import {AbstractControl, UntypedFormArray, UntypedFormGroup} from '@angular/forms';\nimport {MatTableDataSource} from '@angular/material/table';\nimport {merge} from 'es-toolkit';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {validateAllFormControls} from './validators';\nimport {Directive} from '@angular/core';\nimport {PaginatedData} from './data-source';\n\n/**\n * This class helps managing non-paginated rows of items that can be edited in-place, typically in a <mat-table>.\n * But it does **not** mutate anything to persist the edits on the server. It is up to the consuming component to implement\n * custom mutation mechanism.\n *\n * To access data of this component from a parent component, use:\n *\n * ```ts\n * private readonly cmp = viewChildren(ComponentType);\n *\n * this.cmp.getItems();\n * ```\n *\n * To add empty line, call:\n *\n * ```\n * this.cmp.addEmpty();\n * ```\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractEditableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // The Literal here is a bit too loose. Ideally we would like to express\n // \"it must be a union and one of the type in the union must be ExtractTallOne<TService>\"\n T extends Literal = ExtractTallOne<TService>,\n> {\n public readonly form: UntypedFormGroup;\n public readonly formArray = new UntypedFormArray([]);\n public readonly variablesManager = new NaturalQueryVariablesManager<ExtractVall<TService>>();\n public readonly dataSource = new MatTableDataSource<AbstractControl>();\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public constructor(protected readonly service: TService) {\n // Create a form group with a line attributes that contain an array of formGroups (one by line = one by model)\n this.form = new UntypedFormGroup({rows: this.formArray});\n this.dataSource.data = this.formArray.controls;\n this.variablesManager.set('pagination', {pagination: {pageSize: 999, pageIndex: 0}} as ExtractVall<TService>);\n }\n\n /**\n * Set the list of items (overwriting what may have existed)\n */\n public setItems(items: readonly T[]): void {\n this.formArray.clear(); // reset list\n this.addItems(items);\n }\n\n /**\n * Add given items to the list\n * Reproduces the model data loading the same way as it would be on a detail page (via AbstractDetail controller) but without resolving\n */\n public addItems(items: readonly T[]): void {\n items.forEach(item => {\n const completedItem = merge(this.service.getDefaultForServer(), item);\n const lineFormGroup = this.service.getFormGroup(completedItem);\n this.formArray.push(lineFormGroup);\n });\n\n this.dataSource.data = this.formArray.controls;\n }\n\n public removeAt(index: number): void {\n this.formArray.removeAt(index);\n this.dataSource.data = this.formArray.controls;\n }\n\n /**\n * Add empty item at the end of the list\n */\n public addEmpty(): void {\n this.addItems([{} as T]);\n }\n\n /**\n * Return a list of models without any treatment.\n *\n * To mutate models, it would be required to map them using :\n * - AbstractModelService.getInput()\n * - AbstractModelService.getPartialVariablesForCreation()\n * - AbstractModelService.getPartialVariablesForUpdate()\n * - some other required treatment.\n *\n * TODO return type is incorrect and should be closer to `Partial<T>[]` or an even looser type, because we don't really know what fields exists in the form. When we fix this, we should also remove type coercing in unit tests.\n */\n public getItems(): T[] {\n return this.formArray.getRawValue();\n }\n\n /**\n * Force the form validation.\n *\n * The valid state can then be read via `this.form.valid`\n */\n public validateForm(): void {\n validateAllFormControls(this.form);\n }\n}\n","import {Facet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection} from '../types/values';\n\n/**\n * Lookup a facet by its `name` and then by its `field`, or return null if not found\n */\nexport function getFacetFromSelection(\n facets: NaturalSearchFacets | null,\n selection: NaturalSearchSelection,\n): Facet | null {\n if (!facets) {\n return null;\n }\n\n return (\n facets.find(facet => facet.name != null && facet.name === selection.name) ||\n facets.find(facet => facet.field === selection.field) ||\n null\n );\n}\n\n/**\n * Deep clone a literal via JSON serializing/unserializing\n *\n * It will **not** work with:\n *\n * - functions (will be removed)\n * - `undefined` (will be removed)\n * - cyclic references (will crash)\n * - objects (will be converted to `{}`)\n */\nexport function deepClone<T>(obj: T extends undefined ? never : T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n","import {NaturalSearchSelection} from '../types/values';\nimport {formatIsoDate} from '../../../classes/utility';\n\n/**\n * Wrap the searched value by `%` SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: '%foo%'}}}\n */\nexport function wrapLike(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = '%' + selection.condition.like.value + '%';\n }\n\n return selection;\n}\n\n/**\n * Search by prefix using `%' SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo%'}}}\n */\nexport function wrapPrefix(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = selection.condition.like.value + '%';\n }\n\n return selection;\n}\n\n/**\n * Search by suffix using `%' SQL wildcard\n *\n * So:\n *\n * {field: 'myFieldName', condition: {like: {value: 'foo'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {like: {value: '%foo'}}}\n */\nexport function wrapSuffix(selection: NaturalSearchSelection): NaturalSearchSelection {\n if (selection.condition.like) {\n selection.condition.like.value = '%' + selection.condition.like.value;\n }\n\n return selection;\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * attribute \"field\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {myFieldName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByField(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'field');\n}\n\n/**\n * Replace the operator name (usually \"like\", \"in\" or \"between\") with the\n * attribute \"name\" defined in the configuration\n *\n * So:\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {in: {values: [1, 2, 3]}}}\n *\n * will become\n *\n * {field: 'myFieldName', name:'myConfigName', condition: {myConfigName: {values: [1, 2, 3]}}}\n */\nexport function replaceOperatorByName(selection: NaturalSearchSelection): NaturalSearchSelection {\n return replaceOperatorByAttribute(selection, 'name');\n}\n\nfunction replaceOperatorByAttribute(\n selection: NaturalSearchSelection,\n attribute: 'name' | 'field',\n): NaturalSearchSelection {\n const oldOperator = Object.keys(selection.condition)[0];\n\n const attributeValue = selection[attribute];\n if (!attributeValue) {\n throw new Error('Attribute cannot be empty. Most likely the configuration was wrong');\n }\n\n selection.condition[attributeValue] = selection.condition[oldOperator];\n delete selection.condition[oldOperator];\n\n return selection;\n}\n\n/**\n * Replace `\"today\"` and `\"tomorrow\"` by their real value right now.\n *\n * This transformer is applied automatically and should **not** be part\n * of Natural public API.\n *\n * So:\n *\n * {field: 'myFieldName', condition: {greater: {value: 'today'}}}\n *\n * will become\n *\n * {field: 'myFieldName', condition: {greater: {value: '2023-01-03'}}}\n */\nexport function replaceToday(selection: NaturalSearchSelection): NaturalSearchSelection {\n const date = new Date();\n const today = formatIsoDate(date);\n\n date.setDate(date.getDate() + 1);\n const tomorrow = formatIsoDate(date);\n\n // Transparently adapt exclusive/inclusive ranges for special \"today\" value.\n // Ideally this should be done in `TypeDateComponent`, like it is done for real date values. But unfortunately I\n // could not find a reasonable way to do that while still being able to reload a coherent GUI without showing\n // \"Demain\" somewhere in the GUI. And that is something we want to avoid, we only want to show either \"Aujourd'hui\"\n // or a real date. Otherwise, the human would start thinking with \"Demain\", and it would then need to be properly\n // supported which over/complexify the code, the GUI and the workflow.\n const condition = selection.condition;\n if (Object.keys(condition).length === 1) {\n if (condition.lessOrEqual?.value === 'today') {\n delete condition.lessOrEqual;\n condition.less = {value: 'tomorrow'};\n } else if (condition.greater?.value === 'today') {\n delete condition.greater;\n condition.greaterOrEqual = {value: 'tomorrow'};\n }\n }\n\n for (const key in condition) {\n const operator = condition[key];\n if (operator && 'value' in operator) {\n if (operator.value === 'today') {\n operator.value = today;\n } else if (operator.value === 'tomorrow') {\n operator.value = tomorrow;\n }\n }\n }\n\n return selection;\n}\n","import {ConfigurableFocusTrapFactory, FocusTrap} from '@angular/cdk/a11y';\nimport {BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal} from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n inject,\n InjectionToken,\n OnDestroy,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {MatButton} from '@angular/material/button';\n\nexport function throwMatDialogContentAlreadyAttachedError(): void {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n\nexport type NaturalDropdownContainerData = {\n showValidateButton: boolean;\n};\n\nexport const NATURAL_DROPDOWN_CONTAINER_DATA = new InjectionToken<NaturalDropdownContainerData>(\n 'NaturalDropdownContainerData',\n);\n\n/** Name of the enter animation `@keyframes`. */\nconst ENTER_ANIMATION = '_mat-menu-enter';\n\n/** Name of the exit animation `@keyframes`. */\nconst EXIT_ANIMATION = '_mat-menu-exit';\n\n@Component({\n imports: [CdkPortalOutlet, MatButton],\n templateUrl: './dropdown-container.component.html',\n styleUrl: './dropdown-container.component.scss',\n // eslint-disable-next-line @angular-eslint/use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n})\nexport class NaturalDropdownContainerComponent extends BasePortalOutlet implements OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n public readonly data = inject(NATURAL_DROPDOWN_CONTAINER_DATA);\n\n public readonly portalOutlet = viewChild.required(CdkPortalOutlet);\n\n public readonly closed = new Subject<void>();\n\n /** Current state of the panel animation. */\n protected panelAnimationState: 'void' | 'enter' = 'enter';\n\n private focusTrap: FocusTrap | null = null;\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n public ngOnDestroy(): void {\n this.closed.complete();\n }\n\n public close(): void {\n this.panelAnimationState = 'void';\n }\n\n public attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C> {\n return this.portalOutlet().attachTemplatePortal(portal);\n }\n\n public attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> {\n const portalOutlet = this.portalOutlet();\n if (portalOutlet.hasAttached()) {\n throwMatDialogContentAlreadyAttachedError();\n }\n\n return portalOutlet.attachComponentPortal(portal);\n }\n\n /** Callback that is invoked when the panel animation completes. */\n protected onAnimationDone(state: string): void {\n const isExit = state === EXIT_ANIMATION;\n\n if (isExit || state === ENTER_ANIMATION) {\n if (isExit) {\n this.restoreFocus();\n this.closed.next();\n } else {\n this.trapFocus();\n }\n }\n }\n\n private trapFocus(): void {\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);\n }\n\n this.focusTrap.focusInitialElementWhenReady();\n }\n\n /** Restores focus to the element that was focused before the dialog opened. */\n private restoreFocus(): void {\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus();\n }\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n }\n}\n","<div\n class=\"natural-dropdown-container\"\n role=\"menu\"\n tabindex=\"-1\"\n [class.mat-menu-panel-exit-animation]=\"panelAnimationState === 'void'\"\n (animationend)=\"onAnimationDone($event.animationName)\"\n (animationcancel)=\"onAnimationDone($event.animationName)\"\n>\n <div class=\"natural-dropdown-container-content\">\n <ng-template cdkPortalOutlet />\n </div>\n\n @if (data.showValidateButton) {\n <div class=\"natural-dropdown-validate-button\">\n <button color=\"primary\" matButton=\"filled\" i18n (click)=\"close()\">Valider</button>\n </div>\n }\n</div>\n","import {Subject} from 'rxjs';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownResult} from '../types/values';\nimport {NaturalDropdownContainerComponent} from './dropdown-container.component';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, Injector, StaticProvider} from '@angular/core';\n\nexport class NaturalDropdownRef {\n public readonly componentInstance: DropdownComponent;\n public readonly closed = new Subject<DropdownResult | undefined>();\n\n public constructor(\n private readonly dropdownContainer: NaturalDropdownContainerComponent,\n component: ComponentType<DropdownComponent>,\n customProviders: StaticProvider[],\n parentInjector: Injector,\n containerRef: ComponentRef<NaturalDropdownContainerComponent>,\n ) {\n // Customize injector to allow data and dropdown reference injection in component\n customProviders.push({provide: NaturalDropdownRef, useValue: this});\n const customInjector = Injector.create({providers: customProviders, parent: parentInjector});\n\n // Content (type component given in configuration)\n const componentPortal = new ComponentPortal(component, undefined, customInjector);\n const contentRef = containerRef.instance.attachComponentPortal(componentPortal);\n\n this.componentInstance = contentRef.instance;\n }\n\n public close(result?: DropdownResult): void {\n this.closed.next(result);\n this.closed.complete();\n this.dropdownContainer.close();\n }\n}\n","import {\n createFlexibleConnectedPositionStrategy,\n createOverlayRef,\n FlexibleConnectedPositionStrategy,\n OverlayConfig,\n} from '@angular/cdk/overlay';\nimport {ComponentPortal, ComponentType} from '@angular/cdk/portal';\nimport {ComponentRef, ElementRef, inject, Injectable, InjectionToken, Injector, StaticProvider} from '@angular/core';\nimport {takeUntil} from 'rxjs/operators';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {\n NATURAL_DROPDOWN_CONTAINER_DATA,\n NaturalDropdownContainerComponent,\n NaturalDropdownContainerData,\n} from './dropdown-container.component';\nimport {NaturalDropdownRef} from './dropdown-ref';\nimport {DropdownComponent} from '../types/dropdown-component';\n\nexport type NaturalDropdownData<C = any> = {\n condition: FilterGroupConditionField | null;\n configuration: C;\n title?: string;\n};\n\nexport const NATURAL_DROPDOWN_DATA = new InjectionToken<NaturalDropdownData>('NaturalDropdownData');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDropdownService {\n private readonly injector = inject(Injector);\n\n public open(\n component: ComponentType<DropdownComponent>,\n connectedElement: ElementRef<HTMLElement>,\n customProviders: StaticProvider[],\n showValidateButton: boolean,\n ): NaturalDropdownRef {\n // Container data\n const containerData: NaturalDropdownContainerData = {\n showValidateButton: showValidateButton,\n };\n\n const injectionTokens: StaticProvider[] = [\n {\n provide: NATURAL_DROPDOWN_CONTAINER_DATA,\n useValue: containerData,\n },\n ];\n\n const containerInjector = Injector.create({providers: injectionTokens, parent: this.injector});\n\n // Container\n const overlayRef = createOverlayRef(this.injector, this.getOverlayConfig(connectedElement));\n const containerPortal = new ComponentPortal(NaturalDropdownContainerComponent, undefined, containerInjector);\n const containerRef: ComponentRef<NaturalDropdownContainerComponent> = overlayRef.attach(containerPortal);\n\n const dropdownContainer = containerRef.instance;\n const dropdownRef = new NaturalDropdownRef(\n dropdownContainer,\n component,\n customProviders,\n this.injector,\n containerRef,\n );\n\n const close = (): void => {\n if (dropdownRef.componentInstance.isValid() && dropdownRef.componentInstance.isDirty()) {\n dropdownRef.close({\n condition: dropdownRef.componentInstance.getCondition(),\n });\n } else {\n dropdownRef.close();\n }\n };\n\n // When parent closes, remove overlay from dom and update \"return\" valu\n dropdownContainer.closed.subscribe(() => {\n overlayRef.dispose();\n close();\n });\n\n // When click on backdrop, validate result.. ?\n overlayRef\n .backdropClick()\n .pipe(takeUntil(dropdownContainer.closed))\n .subscribe(() => dropdownContainer.close());\n\n return dropdownRef;\n }\n\n /**\n * This method builds the configuration object needed to create the overlay, the OverlayState.\n */\n private getOverlayConfig(element: ElementRef<HTMLElement>): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this.getPosition(element),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n }\n\n private getPosition(element: ElementRef<HTMLElement>): FlexibleConnectedPositionStrategy {\n return createFlexibleConnectedPositionStrategy(this.injector, element)\n .withFlexibleDimensions(true)\n .withViewportMargin(30)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 10,\n },\n ]);\n }\n}\n","import {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\n\ntype PossibleNullableOperatorKeys = 'any' | 'none';\n\ntype PossibleNullableOperator = {\n key: PossibleNullableOperatorKeys;\n label: string;\n};\n\nconst possibleNullableOperators: readonly PossibleNullableOperator[] = [\n {\n key: 'any',\n label: $localize`avec`,\n },\n {\n key: 'none',\n label: $localize`sans`,\n },\n] as const;\n\nexport type PossibleComparableOperatorKeys =\n | keyof Pick<FilterGroupConditionField, 'less' | 'lessOrEqual' | 'equal' | 'greaterOrEqual' | 'greater'>\n | PossibleNullableOperatorKeys;\n\nexport type PossibleComparableOperator = {\n key: PossibleComparableOperatorKeys;\n label: string;\n};\n\nexport const possibleComparableOperators: readonly PossibleComparableOperator[] = [\n {\n key: 'less',\n label: '<',\n },\n {\n key: 'lessOrEqual',\n label: '≤',\n },\n {\n key: 'equal',\n label: '=',\n },\n {\n key: 'greaterOrEqual',\n label: '≥',\n },\n {\n key: 'greater',\n label: '>',\n },\n] as const;\n\nexport const possibleNullComparableOperators: readonly PossibleComparableOperator[] = [\n ...possibleComparableOperators,\n ...possibleNullableOperators,\n] as const;\n\nexport type PossibleDiscreteOperatorKeys = 'is' | 'isnot' | PossibleNullableOperatorKeys;\n\nexport type PossibleDiscreteOperator = {\n key: PossibleDiscreteOperatorKeys;\n label: string;\n};\n\nexport const possibleDiscreteOperators: readonly PossibleDiscreteOperator[] = [\n {\n key: 'is',\n label: $localize`est`,\n },\n {\n key: 'isnot',\n label: $localize`n'est pas`,\n },\n ...possibleNullableOperators,\n] as const;\n","import {DateAdapter} from '@angular/material/core';\nimport {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\n/**\n * Get only date, without time and ignoring entirely the timezone\n */\nexport function serialize<D>(dateAdapter: DateAdapter<D>, value: D | null): string {\n if (!value) {\n return '';\n }\n\n const y = dateAdapter.getYear(value);\n const m = dateAdapter.getMonth(value) + 1;\n const d = dateAdapter.getDate(value);\n\n return y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d;\n}\n\n/**\n * Min date validator\n */\nexport function dateMin<D>(dateAdapter: DateAdapter<D>, min: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, min) < 0) {\n return {min: true};\n }\n\n return null;\n };\n}\n\n/**\n * Max date validator\n */\nexport function dateMax<D>(dateAdapter: DateAdapter<D>, max: D): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (control.value && dateAdapter.compareDate(control.value, max) > 0) {\n return {max: true};\n }\n\n return null;\n };\n}\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn, Validators} from '@angular/forms';\nimport {DateAdapter, MAT_DATE_FORMATS, MatOption} from '@angular/material/core';\nimport {BehaviorSubject, merge, startWith} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {\n type PossibleComparableOperator,\n PossibleComparableOperatorKeys,\n possibleComparableOperators,\n possibleNullComparableOperators,\n} from '../types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatCheckbox} from '@angular/material/checkbox';\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle} from '@angular/material/datepicker';\nimport {MatInput} from '@angular/material/input';\nimport {MatSelect} from '@angular/material/select';\nimport {MatError, MatFormField, MatLabel, MatSuffix} from '@angular/material/form-field';\n\nexport type TypeDateConfiguration<D = Date> = {\n min?: D | null;\n max?: D | null;\n /**\n * If true, two extra choices, \"avec\" and \"sans\", will be shown to filter by the (in-)existence of a value\n */\n nullable?: boolean;\n};\n\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatError,\n MatSuffix,\n MatSelect,\n MatOption,\n MatInput,\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatCheckbox,\n ],\n templateUrl: './type-date.component.html',\n styleUrl: './type-date.component.scss',\n})\nexport class TypeDateComponent<D = any> implements DropdownComponent {\n private dateAdapter = inject<DateAdapter<D>>(DateAdapter);\n private dateFormats = inject(MAT_DATE_FORMATS);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateConfiguration<D>>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOperatorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl<D | null>(null);\n public readonly todayCtrl = new FormControl(false);\n public requireValueCtrl = false;\n public readonly operators: readonly PossibleComparableOperator[];\n\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n today: this.todayCtrl,\n });\n\n private readonly defaults: Required<TypeDateConfiguration<D>> = {\n min: null,\n max: null,\n nullable: false,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeDateConfiguration<D>>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n this.operators = this.configuration.nullable ? possibleNullComparableOperators : possibleComparableOperators;\n\n this.todayCtrl.valueChanges.pipe(takeUntilDestroyed()).subscribe(isToday => {\n if (isToday) {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.valueCtrl.disable();\n } else {\n this.valueCtrl.enable();\n }\n });\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges, this.todayCtrl.valueChanges)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.renderedValue.next(this.getRenderedValue()));\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n let operator = this.operatorCtrl.value;\n if (operator === 'any') {\n return {null: {not: true}};\n } else if (operator === 'none') {\n return {null: {not: false}};\n } else if (!this.valueCtrl.value) {\n return {};\n }\n\n let date: string;\n let dayAfter: string;\n\n if (this.todayCtrl.value) {\n date = 'today';\n dayAfter = 'tomorrow';\n } else {\n date = serialize(this.dateAdapter, this.valueCtrl.value);\n dayAfter = serialize(this.dateAdapter, this.getDayAfter(this.valueCtrl.value));\n }\n\n if (operator === 'equal') {\n return {\n greaterOrEqual: {value: date},\n less: {value: dayAfter},\n };\n } else {\n // Transparently adapt exclusive/inclusive ranges\n if (date !== 'today') {\n if (operator === 'greater') {\n operator = 'greaterOrEqual';\n date = dayAfter;\n } else if (operator === 'lessOrEqual') {\n operator = 'less';\n date = dayAfter;\n }\n }\n\n return {[operator]: {value: date}};\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n // Special case for '='\n if (condition.greaterOrEqual && condition.less) {\n this.operatorCtrl.setValue('equal');\n this.setTodayOrDate(condition.greaterOrEqual.value);\n\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n this.setTodayOrDate(condition[operatorKey]?.value);\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleComparableOperatorKeys {\n if (condition.null?.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n } else {\n return this.operators.find(operator => condition[operator.key])?.key ?? 'equal';\n }\n }\n\n private setTodayOrDate(value: Scalar): void {\n if (value === 'today') {\n this.valueCtrl.setValue(this.dateAdapter.today());\n this.todayCtrl.setValue(true);\n } else {\n this.valueCtrl.setValue(this.dateAdapter.deserialize(value));\n this.todayCtrl.setValue(false);\n }\n }\n\n private initValidators(): void {\n const blacklist: PossibleComparableOperatorKeys[] = ['any', 'none'];\n this.requireValueCtrl = !blacklist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n if (this.configuration.min) {\n validators.push(dateMin(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax(this.dateAdapter, this.configuration.max));\n }\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private getDayAfter(date: D): D {\n return this.dateAdapter.addCalendarDays(this.dateAdapter.clone(date), 1);\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n\n let value = '';\n if (this.todayCtrl.value) {\n value = $localize`Aujourd'hui`;\n } else if (this.valueCtrl.value) {\n value = this.dateAdapter.format(this.valueCtrl.value, this.dateFormats.display.dateInput);\n }\n\n if (operator && ['any', 'none'].includes(operator.key)) {\n return operator.label;\n } else if (operator && value) {\n return operator.label + ' ' + value;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\" [class.nullable]=\"configuration.nullable\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (requireValueCtrl) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n>Date</mat-label>\n <input\n matInput\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"value\" />\n <mat-datepicker #value />\n @if (valueCtrl.hasError('min')) {\n <mat-error>< {{ configuration.min }}</mat-error>\n }\n @if (valueCtrl.hasError('max')) {\n <mat-error>> {{ configuration.max }}</mat-error>\n }\n @if (valueCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n </mat-form-field>\n\n <mat-checkbox i18n [formControl]=\"todayCtrl\">Aujourd'hui</mat-checkbox>\n }\n</form>\n","import {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {NaturalSearchSelection, NaturalSearchSelections} from '../types/values';\nimport {\n Filter,\n FilterGroup,\n FilterGroupCondition,\n FilterGroupConditionField,\n JoinOn,\n LogicalOperator,\n} from './graphql-doctrine.types';\nimport {deepClone, getFacetFromSelection} from './utils';\nimport {replaceToday} from './transformers';\nimport {TypeDateComponent, TypeDateConfiguration} from '../../dropdown-components/type-date/type-date.component';\n\nexport function toGraphQLDoctrineFilter(\n facets: NaturalSearchFacets | null,\n selections: NaturalSearchSelections | null,\n): Filter {\n selections = deepClone(selections);\n\n const filter: Filter = {};\n if (!selections || selections.length === 0) {\n selections = [[]];\n }\n\n for (const groupSelections of selections) {\n const group: FilterGroup = {};\n const neededInversedFlags = facets ? facets.filter(isInvertedFlag) : [];\n\n for (const selection of groupSelections) {\n const facet = getFacetFromSelection(facets, selection);\n const transformedSelection = transformSelection(facet, selection);\n\n // Skip inverted flag and remove it from needed inverted flags\n if (isInvertedFlag(facet)) {\n neededInversedFlags.splice(neededInversedFlags.indexOf(facet), 1);\n } else {\n applyJoinAndCondition(group, transformedSelection);\n }\n }\n\n for (const facet of neededInversedFlags) {\n const transformedSelection = transformSelection(facet, {\n field: facet.field,\n name: facet.name,\n condition: deepClone(facet.condition),\n });\n applyJoinAndCondition(group, transformedSelection);\n }\n\n addGroupToFilter(filter, group);\n }\n\n return filter;\n}\n\nfunction applyJoinAndCondition(group: FilterGroup, selection: NaturalSearchSelection): void {\n // Apply join, then apply operator on that join, if field name has a '.'\n const [joinedRelation, joinedField] = selection.field.split('.');\n let container;\n let wrappedCondition;\n if (joinedField) {\n container = addJoinToGroup(group, joinedRelation);\n wrappedCondition = wrapWithFieldName(joinedField, selection.condition);\n } else {\n container = group;\n wrappedCondition = wrapWithFieldName(selection.field, selection.condition);\n }\n\n addConditionToContainer(container, wrappedCondition);\n}\n\n/**\n * Only add join if it does not already exists\n */\nfunction addJoinToGroup(group: FilterGroup, joinedRelation: string): JoinOn {\n if (!group.joins) {\n group.joins = {};\n }\n\n if (!group.joins[joinedRelation]) {\n group.joins[joinedRelation] = {};\n }\n\n return group.joins[joinedRelation];\n}\n\n/**\n * Only add condition to group or join if it's valid\n */\nfunction addConditionToContainer(container: FilterGroup | JoinOn, condition: FilterGroupCondition): void {\n if (!condition) {\n return;\n }\n\n if (!container.conditions) {\n container.conditions = [];\n }\n\n container.conditions.push(condition);\n}\n\n/**\n * Only add the group if there is something meaningful\n */\nfunction addGroupToFilter(filter: Filter, group: FilterGroup): void {\n if (group.conditions || group.joins) {\n if (!filter.groups) {\n filter.groups = [];\n }\n\n filter.groups.push(group);\n\n if (filter.groups.length > 1) {\n group.groupLogic = LogicalOperator.OR;\n }\n }\n}\n\nfunction wrapWithFieldName(field: string, condition: FilterGroupConditionField): FilterGroupCondition {\n const result: FilterGroupCondition = {};\n\n // We assume a custom operator \"search\"\n if (field === 'search' && condition.like) {\n return {custom: {search: {value: condition.like.value}}};\n } else {\n result[field] = condition;\n }\n\n return result;\n}\n\nfunction transformSelection(facet: Facet | null, selection: NaturalSearchSelection): NaturalSearchSelection {\n const newSelection = facet?.transform ? facet.transform(selection) : selection;\n\n return isDateFacet(facet) ? replaceToday(newSelection) : selection;\n}\n\nfunction isInvertedFlag(facet: Facet | null): facet is FlagFacet<FilterGroupConditionField> {\n return (!!facet && 'inversed' in facet && facet.inversed) || false;\n}\n\nfunction isDateFacet(facet: Facet | null): facet is DropdownFacet<TypeDateConfiguration> {\n return !!facet && 'component' in facet && facet.component === TypeDateComponent;\n}\n","import {NaturalSearchSelections} from '../types/values';\nimport {deepClone} from './utils';\nimport {Literal} from '../../../types/types';\nimport {Params} from '@angular/router';\n\n/**\n * Returns a string representation of the selection that can be used in URL.\n *\n * The string can be parsed back with `fromUrl()`\n */\nexport function toUrl(selections: NaturalSearchSelections | null): string | null {\n if (!selections?.length) {\n return null;\n }\n\n const s = deepClone(selections);\n for (const a of s) {\n for (const b of a) {\n (b as Literal).f = b.field;\n (b as Literal).c = b.condition;\n\n delete (b as Literal).field;\n delete (b as Literal).condition;\n }\n }\n\n const result = JSON.stringify(s);\n\n return result === '[[]]' ? null : result;\n}\n\n/**\n * Parse a string, probably coming from URL, into a selection\n */\nexport function fromUrl(selections: string | null): NaturalSearchSelections {\n if (!selections?.length) {\n return [[]];\n }\n\n const result = JSON.parse(selections) as NaturalSearchSelections;\n\n for (const a of result) {\n for (const b of a) {\n b.field = (b as Literal).f;\n b.condition = (b as Literal).c;\n\n delete (b as Literal).f;\n delete (b as Literal).c;\n }\n }\n\n if (result.length === 0) {\n result.push([]);\n }\n\n return result;\n}\n\n/**\n * Transform a search selection to navigation parameters to be used in URL.\n *\n * This is typically useful to craft URL to pre-filtered lists.\n */\nexport function toNavigationParameters(selections: NaturalSearchSelections): Params {\n const value = toUrl(selections);\n\n return value ? {ns: JSON.stringify(value)} : {};\n}\n","import {Injectable, InjectionToken, Provider} from '@angular/core';\n\nexport const SESSION_STORAGE = new InjectionToken<NaturalStorage>(\n 'Session storage that can be shimed when running on server or in tests',\n);\n\nexport const LOCAL_STORAGE = new InjectionToken<NaturalStorage>(\n 'Local storage that can be shimed when running on server or in tests',\n);\n\n/**\n * Normal `Storage` type, but without array access\n */\nexport type NaturalStorage = Pick<Storage, 'length' | 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem'>;\n\n/**\n * Memory storage to keep store volatile things in memory\n *\n * Should be used to shim sessionStorage when running on server or in our tests\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMemoryStorage implements NaturalStorage {\n private readonly data = new Map<string, string>();\n\n public get length(): number {\n return this.data.size;\n }\n\n public clear(): void {\n this.data.clear();\n }\n\n public getItem(key: string): string | null {\n const value = this.data.get(key);\n return value === undefined ? null : value;\n }\n\n public key(index: number): string | null {\n let i = 0;\n for (const key of this.data.keys()) {\n if (i++ === index) {\n return key;\n }\n }\n\n return null;\n }\n\n public removeItem(key: string): void {\n this.data.delete(key);\n }\n\n public setItem(key: string, value: string): void {\n this.data.set(key, value);\n }\n}\n\nexport function sessionStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof sessionStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return sessionStorage;\n }\n } catch (e) {\n // nothing do to\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `sessionStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `sessionStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const sessionStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: SESSION_STORAGE,\n useFactory: sessionStorageFactory,\n};\n\n/**\n * Provide in-memory session storage to be used only in tests or SSR\n */\nexport const memorySessionStorageProvider: Provider = {\n provide: SESSION_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n\nexport function localStorageFactory(): NaturalStorage {\n try {\n // eslint-disable-next-line no-restricted-globals\n if (typeof localStorage !== 'undefined') {\n // eslint-disable-next-line no-restricted-globals\n return localStorage;\n }\n } catch (e) {\n // Do nothing\n }\n\n return new NaturalMemoryStorage();\n}\n\n/**\n * Standard `localStorage` provider that is compatible with SSR.\n *\n * In SSR environment, or when `localStorage` is not available, will return a `NaturalMemoryStorage`\n */\nexport const localStorageProvider: Provider = {\n // Here we must use a factory that return directly the value, otherwise it will\n // crash when running on server because the value does not exist (but the factory will\n // never actually be called on server, so the server will not see the missing value)\n provide: LOCAL_STORAGE,\n useFactory: localStorageFactory,\n};\n\n/**\n * Provide in-memory local storage to be used only in tests or SSR\n */\nexport const memoryLocalStorageProvider: Provider = {\n provide: LOCAL_STORAGE,\n useClass: NaturalMemoryStorage,\n};\n","import {inject, Injectable, InjectionToken} from '@angular/core';\nimport {ActivatedRoute, NavigationExtras, Router} from '@angular/router';\nimport {clone} from 'es-toolkit';\nimport {SESSION_STORAGE} from '../modules/common/services/memory-storage';\n\n/**\n * Validator for persisted values retrieved from NaturalPersistenceService. If returns false, the persisted value\n * will be ignored, and instead `null` will be returned.\n *\n * `storageKey` is only given if the value is coming from session storage (and not from URL).\n */\nexport type PersistenceValidator = (key: string, storageKey: string | null, value: unknown) => boolean;\n\nexport const NATURAL_PERSISTENCE_VALIDATOR = new InjectionToken<PersistenceValidator>(\n 'Validator for persisted value retrieved from NaturalPersistenceService. If returns false, the persisted value will never be returned.',\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPersistenceService {\n private readonly router = inject(Router);\n private readonly sessionStorage = inject(SESSION_STORAGE);\n private readonly isValid = inject(NATURAL_PERSISTENCE_VALIDATOR, {optional: true}) ?? (() => true); // By default, anything is valid\n\n /**\n * Persist in url and local storage the given value with the given key.\n * When stored in storage, we need more \"key\" to identify the controller.\n */\n public persist(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n storageKey: string,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n this.persistInStorage(key, value, storageKey);\n return this.persistInUrl(key, value, route, navigationExtras);\n }\n\n /**\n * Return object with persisted data in url or in session storage\n * Url has priority over session storage because of url sharing. When url is provided, session storage is ignored.\n * Url and storage are synced when arriving in a component :\n * - When loading with url parameters, storage is updated to stay synced\n * - When loading without url, but with storage data, the url is updated\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public get(key: string, route: ActivatedRoute, storageKey: string): any | null {\n // From url\n let params = this.getFromUrl(key, route);\n if (!this.isFalseyValue(params)) {\n this.persistInStorage(key, params, storageKey);\n return params;\n }\n\n // From storage\n params = this.getFromStorage(key, storageKey);\n if (!this.isFalseyValue(params)) {\n this.persistInUrl(key, params, route);\n return params;\n }\n\n return null;\n }\n\n /**\n * Get given key from the url parameters\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public getFromUrl(key: string, route: ActivatedRoute): any | null {\n const value = route.snapshot.paramMap.get(key);\n\n return this.deserialize(key, null, value);\n }\n\n /**\n * Add/override given pair key-value in the url\n * Always JSON.stringify() the given value\n * If the value is falsey, the pair key-value is removed from the url.\n */\n public persistInUrl(\n key: string,\n value: unknown,\n route: ActivatedRoute,\n navigationExtras?: NavigationExtras,\n ): Promise<boolean> {\n const params = clone(route.snapshot.url[route.snapshot.url.length - 1].parameters);\n\n if (this.isFalseyValue(value)) {\n delete params[key];\n } else {\n params[key] = JSON.stringify(value);\n }\n\n navigationExtras = Object.assign(navigationExtras || {}, {relativeTo: route});\n\n return this.router.navigate(['.', params], navigationExtras);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n public getFromStorage(key: string, storageKey: string): any | null {\n const value = this.sessionStorage.getItem(this.getStorageKey(key, storageKey));\n\n return this.deserialize(key, storageKey, value);\n }\n\n /**\n * Store value in session storage.\n * If value is falsy, the entry is removed\n */\n public persistInStorage(key: string, value: unknown, storageKey: string): void {\n if (this.isFalseyValue(value)) {\n this.sessionStorage.removeItem(this.getStorageKey(key, storageKey));\n } else {\n this.sessionStorage.setItem(this.getStorageKey(key, storageKey), JSON.stringify(value));\n }\n }\n\n private getStorageKey(key: string, storageKey: string): string {\n return storageKey + '-' + key;\n }\n\n // Returns if the given value is falsey\n // Falsey values are : null, undefined and empty string.\n // This cause usually the parameter to be removed from url/storage instead of being stored with no value. Url would be polluted.\n private isFalseyValue(value: unknown): boolean {\n return value == null || value === ''; // == means null or undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n private deserialize(key: string, storageKey: string | null, value: string | null): unknown | null {\n if (!value) {\n return null;\n }\n\n let result = null;\n try {\n result = JSON.parse(value);\n } catch (e) {\n // noop\n }\n\n return this.isValid(key, storageKey, result) ? result : null;\n }\n}\n","import {DataSource} from '@angular/cdk/collections';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {Literal} from '../types/types';\n\nexport type PaginatedData<T> = {\n readonly items: readonly T[];\n readonly offset?: number | null;\n readonly pageSize: number;\n readonly pageIndex: number;\n readonly length: number;\n};\n\n/**\n * A NaturalDataSource will connect immediately, in order to know as soon as possible if\n * we need to show a template at all (as seen in my-ichtus)\n *\n * It also allow some extra data manipulation\n */\nexport class NaturalDataSource<T extends PaginatedData<Literal> = PaginatedData<Literal>> extends DataSource<\n T['items'][0]\n> {\n private readonly ngUnsubscribe = new Subject<void>();\n\n private readonly internalData: BehaviorSubject<T | null>;\n\n public constructor(value: Observable<T> | T) {\n super();\n\n if (value instanceof Observable) {\n this.internalData = new BehaviorSubject<T | null>(null);\n value.pipe(takeUntil(this.ngUnsubscribe)).subscribe(res => (this.data = res));\n } else {\n this.internalData = new BehaviorSubject<T | null>(value);\n }\n }\n\n public get internalDataObservable(): Observable<T | null> {\n return this.internalData;\n }\n\n /**\n * Array of data that should be rendered by the table, where each object represents one row.\n */\n public get data(): T | null {\n return this.internalData.value;\n }\n\n public set data(data: T | null) {\n this.internalData.next(data);\n }\n\n public connect(): Observable<T['items']> {\n return this.internalData.pipe(\n takeUntil(this.ngUnsubscribe),\n map(data => (data ? data.items : [])),\n );\n }\n\n public disconnect(): void {\n this.ngUnsubscribe.next(); // unsubscribe everybody\n this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again\n }\n\n public push(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n fullList.push(item);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n\n public pop(): T['items'][0] | undefined {\n if (!this.data) {\n return;\n }\n\n const fullList = [...this.data.items];\n const removedElement = fullList.pop();\n this.data = {...this.data, items: fullList, length: fullList.length};\n\n return removedElement;\n }\n\n public remove(item: T['items'][0]): void {\n if (!this.data) {\n return;\n }\n\n const index = this.data.items.indexOf(item);\n if (index > -1) {\n const fullList = [...this.data.items];\n fullList.splice(index, 1);\n this.data = {...this.data, items: fullList, length: fullList.length};\n }\n }\n}\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {Directive, inject, Input, OnInit} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {PageEvent} from '@angular/material/paginator';\nimport {Sort} from '@angular/material/sort';\nimport {ActivatedRoute, Data, NavigationExtras, Router} from '@angular/router';\nimport {defaults, isEmpty, pick} from 'es-toolkit/compat';\nimport {isEqual} from 'es-toolkit';\nimport {Observable, Subject} from 'rxjs';\nimport {NaturalAlertService} from '../modules/alert/alert.service';\nimport {AvailableColumn} from '../modules/columns-picker/types';\nimport {NaturalAbstractPanel} from '../modules/panels/abstract-panel';\nimport {toGraphQLDoctrineFilter} from '../modules/search/classes/graphql-doctrine';\nimport {fromUrl, toUrl} from '../modules/search/classes/url';\nimport {NaturalSearchFacets} from '../modules/search/types/facet';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalPersistenceService} from '../services/persistence.service';\nimport {ExtractTall, ExtractVall, Literal} from '../types/types';\nimport {NavigableItem} from './abstract-navigable-list';\nimport {NaturalDataSource, PaginatedData} from './data-source';\nimport {\n NaturalQueryVariablesManager,\n PaginationInput,\n QueryVariables,\n Sorting,\n SortingOrder,\n} from './query-variable-manager';\nimport {onHistoryEvent, validateColumns, validatePagination, validateSorting} from './utility';\n\ntype MaybeNavigable = Literal | NavigableItem<Literal>;\n\nfunction unwrapNavigable(item: MaybeNavigable): Literal {\n if ('item' in item && 'hasNavigation' in item) {\n return item.item;\n }\n\n return item;\n}\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * Components inheriting from this class can be used as standalone with input attributes.\n *\n * Usage :\n *\n * ```html\n * <natural-my-listing [forcedVariables]=\"{filter:...}\" [selectedColumns]=\"['col1']\" [persistSearch]=\"false\">\n * ```\n */\n\n// @dynamic\n@Directive()\nexport class NaturalAbstractList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n // In most case this should not be specified by inheriting classes.\n // It should only be specified to override default if the service items are\n // mapped to a different structure like in NaturalAbstractNavigableList\n Tall extends PaginatedData<MaybeNavigable> = ExtractTall<TService>,\n >\n extends NaturalAbstractPanel\n implements OnInit\n{\n /**\n * Whether search should be loaded from url/storage and persisted in it too.\n */\n @Input() public persistSearch = true;\n\n /**\n * List of columns that are available to the end-user to select from, via `<natural-columns-picker>`\n */\n @Input() public availableColumns: AvailableColumn[] = [];\n\n /**\n * Columns list after interaction with `<natural-columns-picker>`\n */\n public columnsForTable: string[] = [];\n\n /**\n * The default column selection that automatically happened after `<natural-columns-picker>` initialization\n */\n private defaultSelectedColumns: string[] | null = null;\n\n /**\n * Visible (checked) columns\n *\n * Instead of using this, you should consider correctly configuring `AvailableColumn.checked`.\n */\n @Input() public selectedColumns?: string[];\n\n /**\n * Source of the list\n */\n public dataSource: NaturalDataSource<Tall> | undefined;\n\n /**\n * Selection for bulk actions\n */\n public readonly selection = new SelectionModel<ExtractTall<TService>['items'][0]>(true, []);\n\n /**\n * Next executed action from bulk menu\n */\n public bulkActionSelected: string | null = null;\n\n /**\n * Centralisation of query variables\n */\n public variablesManager: NaturalQueryVariablesManager<ExtractVall<TService>> = new NaturalQueryVariablesManager<\n ExtractVall<TService>\n >();\n\n /**\n * Configuration for natural-search facets\n */\n public naturalSearchFacets: NaturalSearchFacets = [];\n\n /**\n * Result of a search (can be provided as input for initialisation)\n */\n public naturalSearchSelections: NaturalSearchSelections = [[]];\n\n /**\n * Data attribute provided by activated route snapshot\n */\n public routeData?: Data;\n\n /**\n * List of page sizes\n */\n public readonly pageSizeOptions = [5, 25, 50, 100, 200];\n\n /**\n * Initial pagination setup\n */\n protected defaultPagination: Required<PaginationInput> = {\n offset: null,\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Initial sorting\n */\n protected defaultSorting?: Sorting[];\n\n protected readonly router = inject(Router);\n protected readonly route = inject(ActivatedRoute);\n protected readonly alertService = inject(NaturalAlertService);\n protected readonly persistenceService = inject(NaturalPersistenceService);\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public constructor(public readonly service: TService) {\n super();\n }\n\n /**\n * Variables that are always forced on a list, in addition to whatever the end-user might select\n */\n @Input()\n public set forcedVariables(variables: QueryVariables | null | undefined) {\n if (variables) {\n this.applyForcedVariables(variables);\n }\n }\n\n /**\n * If change, check DocumentsComponent that overrides this function without calling super.ngOnInit().\n */\n public ngOnInit(): void {\n this.routeData = this.route.snapshot.data;\n\n this.initFromRoute();\n this.initFromPersisted();\n\n this.variablesManager.defaults('pagination', {pagination: this.defaultPagination} as ExtractVall<TService>);\n this.variablesManager.defaults('sorting', {sorting: this.defaultSorting} as ExtractVall<TService>);\n\n this.dataSource = new NaturalDataSource<Tall>(this.getDataObservable());\n this.selection.clear();\n\n this.handleHistoryNavigation();\n }\n\n protected handleHistoryNavigation(): void {\n onHistoryEvent(this.router)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const selections = fromUrl(this.persistenceService.getFromUrl('ns', this.route));\n this.naturalSearchSelections = selections;\n this.search(selections);\n });\n }\n\n /**\n * Persist search and then launch whatever is required to refresh the list\n */\n public search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // Reset page index to restart the pagination (preserve pageSize)\n\n if (resetPagination) {\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n }\n\n // Persist if activated\n // Two parallel navigations conflict. We first persist the search, then the pagination\n if (this.persistSearch && !this.isPanel) {\n const promise = this.persistenceService.persist(\n 'ns',\n toUrl(naturalSearchSelections),\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise, navigationExtras);\n }\n\n this.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n /**\n * Change sorting variables for query and persist the new value in url and local storage\n * The default value is not persisted\n * @param sortingEvents List of material sorting events\n */\n public sorting(sortingEvents: (Sort & Partial<Pick<Sorting, 'nullAsHighest' | 'emptyStringAsHighest'>>)[]): void {\n // Reset page index to restart the pagination (preserve pageSize)\n this.variablesManager.merge('pagination', {\n pagination: pick(this.defaultPagination, ['offset', 'pageIndex']),\n } as ExtractVall<TService>);\n\n // Preserve only sorting events with direction and convert into natural/graphql Sorting type\n let sorting: Sorting[] = sortingEvents\n .filter(e => !!e.direction)\n .map(sortingEvent => {\n const s: Sorting = {\n field: sortingEvent.active,\n };\n\n if (sortingEvent.direction === 'asc') {\n s.order = SortingOrder.ASC;\n } else if (sortingEvent.direction === 'desc') {\n s.order = SortingOrder.DESC;\n }\n\n if ('nullAsHighest' in sortingEvent) {\n s.nullAsHighest = sortingEvent.nullAsHighest;\n }\n\n if ('emptyStringAsHighest' in sortingEvent) {\n s.emptyStringAsHighest = sortingEvent.emptyStringAsHighest;\n }\n\n return s;\n });\n\n // Empty sorting fallbacks on default\n if (sorting.length === 0 && this.defaultSorting) {\n sorting = this.defaultSorting;\n }\n\n // Set sorting as search variable\n this.variablesManager.set('sorting', {sorting: sorting} as ExtractVall<TService>);\n\n if (this.persistSearch && !this.isPanel) {\n // If sorting is equal to default sorting, nullify it to remove from persistence (url and session storage)\n const promise = this.persistenceService.persist(\n 'so',\n isEqual(sorting, this.defaultSorting) ? null : sorting,\n this.route,\n this.getStorageKey(),\n );\n\n const pagination = this.getPagination();\n this.pagination(pagination, promise);\n }\n }\n\n /**\n * Return current pagination, either the user defined one, or the default one\n */\n protected getPagination(): PaginationInput {\n const paginationChannel: Partial<ExtractVall<TService>> | undefined = this.variablesManager.get('pagination');\n\n if (paginationChannel?.pagination) {\n // The cast should not be necessary because Typescript correctly narrow down the type to `PaginationInput`\n // but somehow still get confused when returning it\n return paginationChannel.pagination;\n }\n\n return this.defaultPagination;\n }\n\n /**\n * Change pagination variables for query and persist in url and local storage the new value\n * The default value not persisted\n *\n * @param event Natural or Paginator PageEvent\n * @param defer Promise (usually a route promise) that defers the redirection from this call to prevent route navigation collision\n * @param navigationExtras Angular router navigation options. Is relevant only if persistSearch is true\n */\n public pagination(\n event: PaginationInput | PageEvent,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n let pagination: PaginationInput = this.defaultPagination;\n let forPersistence: PaginationInput | null = null;\n\n // Convert to natural/graphql format, adding missing attributes\n let naturalEvent: PaginationInput = pick(event, Object.keys(this.defaultPagination)); // object with only PaginationInput attributes\n naturalEvent = defaults(naturalEvent, this.defaultPagination); // Default with controller values\n\n if (!isEqual(naturalEvent, this.defaultPagination)) {\n pagination = forPersistence = naturalEvent;\n }\n\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n\n this.persistPagination(forPersistence, defer, navigationExtras);\n }\n\n protected persistPagination(\n pagination: PaginationInput | null,\n defer?: Promise<unknown>,\n navigationExtras?: NavigationExtras,\n ): void {\n if (this.persistSearch && !this.isPanel) {\n // Declare persist function\n const persist = (value: PaginationInput | null): Promise<boolean> =>\n this.persistenceService.persist('pa', value, this.route, this.getStorageKey(), navigationExtras);\n\n // Call function directly or when promise is resolved\n if (defer) {\n defer.then(() => persist(pagination));\n } else {\n persist(pagination);\n }\n }\n }\n\n /**\n * Selects all rows if they are not all selected; otherwise clear selection\n */\n public masterToggle(): void {\n if (this.isAllSelected()) {\n this.selection.clear();\n } else {\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n this.selection.select(unwrapped);\n }\n });\n }\n }\n\n /**\n * Whether the number of selected elements matches the total number of rows\n */\n public isAllSelected(): boolean {\n const numSelected = this.selection.selected.length;\n let numRows = 0;\n this.dataSource?.data?.items.forEach(row => {\n const unwrapped = unwrapNavigable(row);\n if (unwrapped.id) {\n numRows++;\n }\n });\n\n return numSelected === numRows;\n }\n\n /**\n * Called when a bulk action is selected\n */\n public bulkAction(): void {\n if (!this.bulkActionSelected) {\n throw new Error('Trying to execute a bulk action without selecting one');\n }\n\n if (!(this.bulkActionSelected in this)) {\n throw new Error('Trying to execute a bulk action that does not exist: ' + this.bulkActionSelected);\n }\n\n (this as any)[this.bulkActionSelected]();\n }\n\n /**\n * In non-panel context, header is always visible.\n * In panel context, header is hidden when no results.\n */\n public showHeader(): boolean {\n return !this.isPanel || (this.isPanel && this.showTable());\n }\n\n /**\n * Search is visible in most cases, but hidden on a panel\n */\n public showSearch(): boolean {\n return !this.isPanel;\n }\n\n /**\n * Table should be shown only when there is data\n */\n public showTable(): boolean {\n return !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length > 0;\n }\n\n /**\n * No results is shown when there is no items, but only in non-panel context only.\n * In panels we want discrete mode, there is no search and no \"no-results\"\n */\n public showNoResults(): boolean {\n return !this.isPanel && !!this.dataSource && !!this.dataSource.data && this.dataSource.data.length === 0;\n }\n\n /**\n * Initialize from route.\n *\n * Uses data provided by router such as:\n *\n * - `route.data.forcedVariables`\n * - `route.data.availableColumns`\n * - `route.data.selectedColumns`\n */\n protected initFromRoute(): void {\n // Variables\n if (this.route.snapshot.data.forcedVariables) {\n this.applyForcedVariables(this.route.snapshot.data.forcedVariables);\n }\n\n // Available columns\n if (this.route.snapshot.data.availableColumns) {\n this.availableColumns = this.route.snapshot.data.availableColumns;\n }\n\n // Columns\n if (this.route.snapshot.data.selectedColumns) {\n this.selectedColumns = this.route.snapshot.data.selectedColumns;\n }\n }\n\n protected getDataObservable(): Observable<Tall> {\n // Here the casting is a bit unfortunate but required because NaturalAbstractNavigableList\n // breaks the data structure convention (by wrapping items in a structure). Ideally we should remove\n // the casting and resolve things in a better way, but that's too much work for now\n return this.service\n .watchAll(this.variablesManager as unknown as any)\n .pipe(takeUntilDestroyed(this.destroyRef)) as unknown as Observable<Tall>;\n }\n\n protected initFromPersisted(): void {\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n const storageKey = this.getStorageKey();\n\n // Pagination : pa\n const pagination = validatePagination(this.persistenceService.get('pa', this.route, storageKey));\n if (pagination) {\n this.variablesManager.set('pagination', {pagination} as ExtractVall<TService>);\n }\n\n // Sorting : so\n const sorting = validateSorting(this.persistenceService.get('so', this.route, storageKey));\n if (sorting) {\n this.variablesManager.set('sorting', {sorting} as ExtractVall<TService>);\n }\n\n // Columns\n const persistedColumns = validateColumns(this.persistenceService.get('col', this.route, storageKey));\n if (persistedColumns) {\n this.selectedColumns = persistedColumns;\n }\n\n // Natural search : ns\n this.naturalSearchSelections = fromUrl(this.persistenceService.get('ns', this.route, storageKey));\n this.translateSearchAndRefreshList(this.naturalSearchSelections, true);\n }\n\n protected translateSearchAndRefreshList(\n naturalSearchSelections: NaturalSearchSelections,\n ignoreEmptyFilter = false,\n ): void {\n const filter = toGraphQLDoctrineFilter(this.naturalSearchFacets, naturalSearchSelections);\n\n if (ignoreEmptyFilter && isEmpty(filter)) {\n return;\n }\n\n this.variablesManager.set('natural-search', {filter} as ExtractVall<TService>);\n }\n\n /**\n * Return current url excluding last route parameters;\n */\n protected getStorageKey(): string {\n const urlTree = this.router.parseUrl(this.router.url);\n urlTree.root.children.primary.segments[urlTree.root.children.primary.segments.length - 1].parameters = {};\n return urlTree.toString();\n }\n\n protected bulkdDeleteConfirmation(): Observable<boolean | undefined> {\n return this.alertService.confirm(\n $localize`Suppression`,\n $localize`Voulez-vous supprimer définitivement les éléments sélectionnés ?`,\n $localize`Supprimer définitivement`,\n );\n }\n\n /**\n * Delete multiple items at once\n */\n protected bulkDelete(): Observable<void> {\n const subject = new Subject<void>();\n this.bulkdDeleteConfirmation().subscribe(confirmed => {\n this.bulkActionSelected = null;\n if (confirmed) {\n // Assume that our objects have ID. This is true in almost all cases. But if\n // it is not, like AttributeReportComponent, then the inheriting class must\n // never call this method.\n const selection = this.selection.selected as {id: string}[];\n\n this.service.delete(selection).subscribe(() => {\n this.selection.clear();\n this.alertService.info($localize`Supprimé`);\n subject.next();\n subject.complete();\n });\n }\n });\n\n return subject;\n }\n\n private applyForcedVariables(variables: QueryVariables): void {\n if (variables.filter) {\n this.variablesManager.set('forced-filter', {filter: variables.filter} as ExtractVall<TService>);\n }\n\n if (variables.pagination) {\n this.variablesManager.set('pagination', {pagination: variables.pagination} as ExtractVall<TService>);\n }\n\n if (variables.sorting) {\n this.variablesManager.set('sorting', {sorting: variables.sorting} as ExtractVall<TService>);\n }\n }\n\n public selectColumns(columns: string[]): void {\n this.columnsForTable = columns;\n\n if (!this.persistSearch || this.isPanel) {\n return;\n }\n\n // The first selection we receive is the default one made by `<natural-columns-picker>`\n if (!this.defaultSelectedColumns) {\n this.defaultSelectedColumns = columns;\n } else {\n // Persist only if wanted columns are different from default selection\n const value = isEqual(this.defaultSelectedColumns, columns) ? null : columns.join(',');\n this.persistenceService.persist('col', value, this.route, this.getStorageKey());\n }\n }\n}\n","import {Directive, input, OnInit} from '@angular/core';\nimport {NavigationExtras, RouterLink} from '@angular/router';\nimport {map} from 'rxjs/operators';\nimport {NaturalSearchSelections} from '../modules/search/types/values';\nimport {NaturalAbstractModelService} from '../services/abstract-model.service';\nimport {NaturalAbstractList} from './abstract-list';\nimport {PaginatedData} from './data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from './query-variable-manager';\nimport {ExtractTall, ExtractTallOne, ExtractVall, Literal} from '../types/types';\nimport {first, Observable} from 'rxjs';\nimport {FilterGroupCondition} from '../modules/search/classes/graphql-doctrine.types';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\ntype BreadcrumbItem = {\n id: string;\n name: string;\n} & Literal;\n\nexport type NavigableItem<T> = {\n item: T;\n hasNavigation: boolean;\n};\n\n/**\n * This class helps managing a list of paginated items that can be filtered,\n * selected, and then bulk actions can be performed on selection.\n *\n * @dynamic\n */\n@Directive()\nexport class NaturalAbstractNavigableList<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<{id: string}>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends NaturalAbstractList<TService, PaginatedData<NavigableItem<ExtractTall<TService>['items'][0]>>>\n implements OnInit\n{\n /**\n * Name of filter for child items to access ancestor item\n */\n public readonly ancestorRelationName = input('parent');\n\n private oldAncertorId: string | null = null;\n\n public breadcrumbs: BreadcrumbItem[] = [];\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n public constructor(service: TService) {\n super(service);\n }\n\n public override ngOnInit(): void {\n // In fact, \"na\" and \"ns\" key may exist at the same time in url (but shouldn't).\n // When this happens, on page reload, search is priority.\n // \"na\" is a trailing param, and should be considered only when there is no search\n this.route.params.subscribe(params => {\n // \"ns\" stands for natural-search to be shorter in url\n if (params.ns) {\n return;\n }\n\n let navigationConditionValue: FilterGroupCondition | null = null;\n\n // \"na\" stands for \"navigation\" (relation) in url\n if (params.na) {\n navigationConditionValue = {have: {values: [params.na]}};\n this.service.getOne(params.na).subscribe(\n // TODO casting should disappear and instead this class should enforce\n // the service to support Tone with a new generic\n (ancestor: BreadcrumbItem) => (this.breadcrumbs = this.getBreadcrumb(ancestor)),\n );\n\n const hasAncestorChanged = params.na !== this.oldAncertorId;\n this.oldAncertorId = params.na;\n this.clearSearch(hasAncestorChanged);\n } else {\n navigationConditionValue = {empty: {}};\n this.breadcrumbs = [];\n }\n\n const condition: Literal = {};\n condition[this.ancestorRelationName()] = navigationConditionValue;\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n // todo : check why without \"as Vall\" it errors. Vall is supposed to be QueryVariables, and filter too.\n this.variablesManager.set('navigation', variables as ExtractVall<TService>);\n });\n\n super.ngOnInit();\n }\n\n protected override getDataObservable(): Observable<PaginatedData<NavigableItem<ExtractTallOne<TService>>>> {\n return this.service.watchAll(this.variablesManager as unknown as any).pipe(\n takeUntilDestroyed(this.destroyRef),\n map(result => {\n // On each data arriving, we query children count to show/hide chevron\n const navigableItems: NavigableItem<ExtractTallOne<TService>>[] = result.items.map(item => {\n const navigableItem: NavigableItem<ExtractTallOne<TService>> = {\n item: item as ExtractTallOne<TService>,\n hasNavigation: false,\n };\n\n const condition: Literal = {};\n condition[this.ancestorRelationName()] = {have: {values: [item.id]}};\n const variables: QueryVariables = {filter: {groups: [{conditions: [condition]}]}};\n\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('variables', variables);\n this.service\n .count(qvm)\n .pipe(first())\n .subscribe(count => (navigableItem.hasNavigation = count > 0));\n\n return navigableItem;\n });\n\n const navigableResult: PaginatedData<NavigableItem<ExtractTallOne<TService>>> = {\n ...result,\n items: navigableItems,\n };\n\n return navigableResult;\n }),\n );\n }\n\n protected override translateSearchAndRefreshList(naturalSearchSelections: NaturalSearchSelections): void {\n // Clear navigation filter if there is a search\n if (naturalSearchSelections.some(s => s.length)) {\n this.variablesManager.set('navigation', null);\n this.breadcrumbs = [];\n }\n\n super.translateSearchAndRefreshList(naturalSearchSelections);\n }\n\n public clearSearch(resetPagination = true): void {\n this.naturalSearchSelections = [[]];\n super.search([[]], undefined, resetPagination);\n this.persistenceService.persistInStorage('ns', null, this.getStorageKey());\n }\n\n public override search(\n naturalSearchSelections: NaturalSearchSelections,\n navigationExtras?: NavigationExtras,\n resetPagination = true,\n ): void {\n // na stands for navigation\n this.persistenceService.persistInUrl('na', null, this.route).then(() => {\n super.search(naturalSearchSelections, navigationExtras, resetPagination);\n });\n }\n\n /**\n * Return an array for router link usage\n */\n public getChildLink(ancestor: {id: string} | null): RouterLink['routerLink'] {\n if (ancestor?.id) {\n return ['.', {na: ancestor.id}];\n } else {\n return ['.', {}];\n }\n }\n\n /**\n * Depth is limited by queries\n * @param item with an ancestor relation (must match ancestorRelationName attribute)\n */\n protected getBreadcrumb(item: BreadcrumbItem): BreadcrumbItem[] {\n const ancestor = item[this.ancestorRelationName()];\n if (ancestor) {\n return this.getBreadcrumb(ancestor).concat([item]);\n }\n\n return [item];\n }\n}\n","import {ApolloLink, DocumentNode} from '@apollo/client/core';\nimport {formatIsoDateTime, isFile} from './utility';\nimport {HttpBatchLink, HttpLink, Options} from 'apollo-angular/http';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport extractFiles from 'extract-files/extractFiles.mjs';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport isExtractableFile from 'extract-files/isExtractableFile.mjs';\nimport {Kind, OperationTypeNode} from 'graphql/language';\n\n/**\n * Detect if the given variables have a file to be uploaded or not, and\n * also convert date to be serialized with their timezone.\n */\nexport function hasFilesAndProcessDate(variables: unknown): boolean {\n let fileFound = false;\n if (!variables || typeof variables !== 'object') {\n return false;\n }\n\n Object.values(variables).forEach(value => {\n if (value instanceof Date) {\n // Replace native toJSON() function by our own implementation\n value.toJSON = () => formatIsoDateTime(value);\n }\n\n if (isFile(value)) {\n fileFound = true;\n }\n\n if (hasFilesAndProcessDate(value)) {\n fileFound = true;\n }\n });\n\n return fileFound;\n}\n\n/**\n * Whether the given GraphQL document contains at least one mutation\n */\nexport function isMutation(query: DocumentNode): boolean {\n return query.definitions.some(\n definition =>\n definition.kind === Kind.OPERATION_DEFINITION && definition.operation === OperationTypeNode.MUTATION,\n );\n}\n\nexport const naturalExtractFiles: NonNullable<Options['extractFiles']> = body => extractFiles(body, isExtractableFile);\n\n/**\n * Create an Apollo link that supports batched queries and file uploads.\n *\n * File uploads and mutations are never batched.\n */\nexport function createHttpLink(httpLink: HttpLink, httpBatchLink: HttpBatchLink, options: Options): ApolloLink {\n // If the query has no file, batch it, otherwise upload only that query\n return ApolloLink.split(\n operation => hasFilesAndProcessDate(operation.variables) || isMutation(operation.query),\n httpLink.create({\n ...options,\n useMultipart: true,\n extractFiles: naturalExtractFiles,\n }),\n httpBatchLink.create(options),\n );\n}\n","import {map, MonoTypeOperatorFunction, Observable, take, takeUntil, tap, timer} from 'rxjs';\nimport {DestroyRef} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Behave like setTimeout(), but with a mandatory cancel mechanism.\n *\n * This is typically useful to replace setTimeout() in components where the callback\n * would crash if executed after the component destruction. That can easily happen\n * when the user navigates quickly between pages.\n *\n * Typical usage in a component would be:\n *\n * ```ts\n * cancellableTimeout(inject(DestroyRef)).subscribe(myCallback);\n * ```\n *\n * or\n *\n * ```ts\n * cancellableTimeout(this.ngUnsubscribe).subscribe(myCallback);\n * ```\n *\n * Instead of the more error-prone:\n *\n * ```ts\n * public foo(): void {\n * this.timeout = setTimeout(myCallBack);\n * }\n *\n * public ngOnDestroy(): void {\n * if (this.timeout) {\n * clearTimeout(this.timeout);\n * this.timeout = null;\n * }\n * }\n * ```\n */\nexport function cancellableTimeout(canceller: Observable<unknown> | DestroyRef, milliSeconds = 0): Observable<void> {\n return timer(milliSeconds).pipe(\n take(1),\n canceller instanceof DestroyRef ? takeUntilDestroyed(canceller) : takeUntil(canceller),\n map(() => undefined),\n );\n}\n\n/**\n * For debugging purpose only, will dump in console everything that happen to\n * the observable\n */\nexport function debug<T>(debugName: string): MonoTypeOperatorFunction<T> {\n return tap<T>({\n subscribe: () => console.log('SUBSCRIBE', debugName),\n unsubscribe: () => console.log('UNSUBSCRIBE', debugName),\n next: value => console.log('NEXT', debugName, value),\n error: error => console.log('ERROR', debugName, error),\n complete: () => console.log('COMPLETE', debugName),\n });\n}\n","import {inject, Injectable, PLATFORM_ID, signal} from '@angular/core';\nimport {GraphQLFormattedError} from 'graphql';\nimport {HttpInterceptorFn} from '@angular/common/http';\nimport {finalize} from 'rxjs';\nimport {isPlatformBrowser} from '@angular/common';\n\ntype ProgressBar = {\n start: () => void;\n complete: () => void;\n};\n\n/**\n * Intercept HTTP request from Angular to show them as activity\n */\nexport const activityInterceptor: HttpInterceptorFn = (req, next) => {\n const networkActivityService = inject(NetworkActivityService);\n networkActivityService.increase();\n\n return next(req).pipe(finalize(() => networkActivityService.decrease()));\n};\n\n/**\n * Singleton to track pending XHR and XHR errors in the whole application.\n *\n * You must:\n *\n * - start the tracking by calling `setProgressRef()`\n * - provide the HTTP interceptor `activityInterceptor`\n *\n * The tracking will be entirely disabled for SSR.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NetworkActivityService {\n private progress: ProgressBar | null = null;\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /**\n * Count pending requests\n */\n private pending = 0;\n\n private readonly writableErrors = signal<GraphQLFormattedError[]>([]);\n\n /**\n * GraphQL errors that happened recently\n */\n public readonly errors = this.writableErrors.asReadonly();\n\n public setProgressRef(progressBar: ProgressBar): void {\n this.progress = progressBar;\n }\n\n /**\n * Notify an XHR started\n */\n public increase(): void {\n if (!this.isBrowser) {\n return;\n }\n\n if (this.pending === 0) {\n this.progress?.start();\n }\n\n this.pending++;\n }\n\n /**\n * Notify an XHR ended (even if unsuccessful)\n */\n public decrease(): void {\n if (!this.isBrowser) {\n return;\n }\n\n this.pending--;\n if (this.pending < 0) {\n this.pending = 0;\n }\n\n // Mark progress a completed, after waiting 20ms in case a refetchQueries would be used\n if (this.pending === 0) {\n setTimeout(() => {\n if (this.pending === 0) {\n this.progress?.complete();\n }\n }, 20);\n }\n }\n\n /**\n * Add new GraphQL errors\n */\n public addErrors(errors: readonly GraphQLFormattedError[]): void {\n if (errors.length) {\n this.writableErrors.update(previous => [...previous, ...errors]);\n }\n }\n\n /**\n * Clear all GraphQL errors\n */\n public clearErrors(): void {\n this.writableErrors.set([]);\n }\n}\n","import {\n catchError,\n debounceTime,\n EMPTY,\n forkJoin,\n map,\n mergeMap,\n Observable,\n of,\n raceWith,\n ReplaySubject,\n shareReplay,\n Subject,\n take,\n} from 'rxjs';\nimport {Injectable} from '@angular/core';\nimport {UntypedModelService} from '../types/types';\n\ntype Debounced<T extends UntypedModelService> = {\n object: Parameters<T['updateNow']>[0];\n modelService: T;\n debouncer: Subject<void>;\n canceller: Subject<void>;\n flusher: Subject<void>;\n result: ReturnType<T['updateNow']>;\n};\n\n/**\n * Debounce subscriptions to update mutations, with the possibility to cancel one, flush one, or flush all of them.\n *\n * `modelService` is also used to separate objects by their types. So User with ID 1 is not confused with Product with ID 1.\n *\n * `id` must be the ID of the object that will be updated.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalDebounceService {\n /**\n * Stores the debounced update function\n */\n private readonly allDebouncedUpdateCache = new Map<\n UntypedModelService,\n Map<string, Debounced<UntypedModelService>>\n >();\n\n /**\n * Debounce the `modelService.updateNow()` mutation for a short time. If called multiple times with the same\n * modelService and id, it will postpone the subscription to the mutation.\n *\n * All input variables for the same object (same service and ID) will be cumulated over time. So it is possible\n * to update `field1`, then `field2`, and they will be batched into a single XHR including `field1` and `field2`.\n *\n * But it will always keep the same debouncing timeline.\n */\n public debounce<T extends UntypedModelService>(\n modelService: UntypedModelService,\n id: string,\n object: Parameters<T['updateNow']>[0],\n ): ReturnType<T['updateNow']> {\n const debouncedUpdateCache = this.getMap(modelService);\n let debounced = debouncedUpdateCache.get(id) as Debounced<T> | undefined;\n\n if (debounced) {\n debounced.object = {\n ...debounced.object,\n ...object,\n };\n } else {\n const debouncer = new ReplaySubject<void>(1);\n let wasCancelled = false;\n const canceller = new Subject<void>();\n canceller.subscribe(() => {\n wasCancelled = true;\n debouncer.complete();\n canceller.complete();\n this.delete(modelService, id);\n });\n\n const flusher = new Subject<void>();\n\n debounced = {\n object,\n debouncer,\n canceller,\n flusher,\n modelService: modelService as T,\n result: debouncer.pipe(\n debounceTime(2000), // Wait 2 seconds...\n raceWith(flusher), // ...unless flusher is triggered\n take(1),\n mergeMap(() => {\n this.delete(modelService, id);\n\n if (wasCancelled || !debounced) {\n return EMPTY;\n }\n\n return modelService.updateNow(debounced.object);\n }),\n shareReplay(), // All attempts to update will share the exact same single result from API\n ) as ReturnType<T['updateNow']>,\n };\n\n debouncedUpdateCache.set(id, debounced);\n }\n\n // Notify our debounced update each time we ask to update\n debounced.debouncer.next();\n\n // Return and observable that is updated when mutation is done\n return debounced.result;\n }\n\n public cancelOne(modelService: UntypedModelService, id: string): void {\n const debounced = this.allDebouncedUpdateCache.get(modelService)?.get(id);\n debounced?.canceller.next();\n }\n\n /**\n * Immediately execute the pending update, if any.\n *\n * It should typically be called before resolving the object, to mutate it before re-fetching it from server.\n *\n * The returned observable will complete when the update completes, even if it errors.\n */\n public flushOne(modelService: UntypedModelService, id: string): Observable<void> {\n const debounced = this.allDebouncedUpdateCache.get(modelService)?.get(id);\n\n return this.internalFlush(debounced ? [debounced] : []);\n }\n\n /**\n * Immediately execute all pending updates.\n *\n * It should typically be called before login out.\n *\n * The returned observable will complete when all updates complete, even if some of them error.\n */\n public flush(): Observable<void> {\n const all: Debounced<UntypedModelService>[] = [];\n this.allDebouncedUpdateCache.forEach(map => map.forEach(debounced => all.push(debounced)));\n\n return this.internalFlush(all);\n }\n\n private internalFlush(debounceds: Debounced<UntypedModelService>[]): Observable<void> {\n const all: Observable<unknown>[] = [];\n const allFlusher: Subject<void>[] = [];\n\n debounceds.forEach(debounced => {\n all.push(debounced.result.pipe(catchError(() => of(undefined))));\n allFlusher.push(debounced.flusher);\n });\n\n if (!all.length) {\n all.push(of(undefined));\n }\n\n return new Observable(subscriber => {\n const subscription = forkJoin(all)\n .pipe(map(() => undefined))\n .subscribe(subscriber);\n\n // Flush only after subscription process is finished\n allFlusher.forEach(flusher => flusher.next());\n\n return subscription;\n });\n }\n\n /**\n * Count of pending updates\n */\n public get count(): number {\n let count = 0;\n this.allDebouncedUpdateCache.forEach(map => (count += map.size));\n\n return count;\n }\n\n private getMap<T extends UntypedModelService>(modelService: T): Map<string, Debounced<T>> {\n let debouncedUpdateCache = this.allDebouncedUpdateCache.get(modelService);\n if (!debouncedUpdateCache) {\n debouncedUpdateCache = new Map<string, Debounced<UntypedModelService>>();\n this.allDebouncedUpdateCache.set(modelService, debouncedUpdateCache);\n }\n\n return debouncedUpdateCache as Map<string, Debounced<T>>;\n }\n\n private delete(modelService: UntypedModelService, id: string): void {\n const map = this.allDebouncedUpdateCache.get(modelService);\n if (!map) {\n return;\n }\n\n map.delete(id);\n\n if (!map.size) {\n this.allDebouncedUpdateCache.delete(modelService);\n }\n }\n}\n","import {Apollo, gql, MutationResult} from 'apollo-angular';\nimport {FetchResult, NetworkStatus, WatchQueryFetchPolicy} from '@apollo/client/core';\nimport {AbstractControl, AsyncValidatorFn, UntypedFormControl, UntypedFormGroup, ValidatorFn} from '@angular/forms';\nimport {DocumentNode} from 'graphql';\nimport {merge, pick} from 'es-toolkit';\nimport {defaults} from 'es-toolkit/compat';\nimport {catchError, combineLatest, EMPTY, first, from, Observable, of, OperatorFunction} from 'rxjs';\nimport {debounceTime, filter, map, shareReplay, startWith, switchMap, takeWhile, tap} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../classes/query-variable-manager';\nimport {Literal} from '../types/types';\nimport {makePlural, relationsToIds, upperCaseFirstLetter} from '../classes/utility';\nimport {PaginatedData} from '../classes/data-source';\nimport {NaturalDebounceService} from './debounce.service';\nimport {ApolloQueryResult} from '@apollo/client/core/types';\nimport {deepClone} from '../modules/search/classes/utils';\nimport {inject} from '@angular/core';\n\nexport type FormValidators = Record<string, ValidatorFn[]>;\n\nexport type FormAsyncValidators = Record<string, AsyncValidatorFn[]>;\n\nexport type VariablesWithInput = {\n input: Literal;\n};\n\nexport type FormControls = Record<string, AbstractControl>;\n\nexport type WithId<T> = {id: string} & T;\n\nexport abstract class NaturalAbstractModelService<\n Tone,\n Vone extends {id: string},\n Tall extends PaginatedData<Literal>,\n Vall extends QueryVariables,\n Tcreate,\n Vcreate extends VariablesWithInput,\n Tupdate,\n Vupdate extends {id: string; input: Literal},\n Tdelete,\n Vdelete extends {ids: string[]},\n> {\n /**\n * Store the creation mutations that are pending\n */\n private readonly creatingCache = new Map<Vcreate['input'] | WithId<Vupdate['input']>, Observable<Tcreate>>();\n protected readonly apollo = inject(Apollo);\n protected readonly naturalDebounceService = inject(NaturalDebounceService);\n private readonly plural: string;\n\n /**\n *\n * @param name service and single object query name (eg. userForFront or user).\n * @param oneQuery GraphQL query to fetch a single object from ID (eg. userForCrudQuery).\n * @param allQuery GraphQL query to fetch a filtered list of objects (eg. usersForCrudQuery).\n * @param createMutation GraphQL mutation to create an object.\n * @param updateMutation GraphQL mutation to update an object.\n * @param deleteMutation GraphQL mutation to delete a list of objects.\n * @param plural list query name (eg. usersForFront or users).\n * @param createName create object mutation name (eg. createUser).\n * @param updateName update object mutation name (eg. updateUser).\n * @param deleteName delete object mutation name (eg. deleteUsers).\n */\n public constructor(\n protected readonly name: string,\n protected readonly oneQuery: DocumentNode | null,\n protected readonly allQuery: DocumentNode | null,\n protected readonly createMutation: DocumentNode | null,\n protected readonly updateMutation: DocumentNode | null,\n protected readonly deleteMutation: DocumentNode | null,\n plural: string | null = null,\n private readonly createName: string | null = null,\n private readonly updateName: string | null = null,\n private readonly deleteName: string | null = null,\n ) {\n this.plural = plural ?? makePlural(this.name);\n }\n\n /**\n * List of individual fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormValidators(model?: Literal): FormValidators {\n return {};\n }\n\n /**\n * List of individual async fields validators\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormAsyncValidators(model?: Literal): FormAsyncValidators {\n return {};\n }\n\n /**\n * List of grouped fields validators (like password + confirm password)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupValidators(model?: Literal): ValidatorFn[] {\n return [];\n }\n\n /**\n * List of async group fields validators (like unique constraint on multiple columns)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getFormGroupAsyncValidators(model?: Literal): AsyncValidatorFn[] {\n return [];\n }\n\n public getFormConfig(model: Literal): FormControls {\n const values = {...this.getDefaultForServer(), ...this.getFormExtraFieldDefaultValues()};\n const validators = this.getFormValidators(model);\n const asyncValidators = this.getFormAsyncValidators(model);\n const controls: FormControls = {};\n const disabled = model.permissions ? !model.permissions.update : false;\n\n if (model.id) {\n controls.id = new UntypedFormControl({value: model.id, disabled: true});\n }\n\n // Configure form for each field of model\n for (const key of Object.keys(values)) {\n const value = model[key] !== undefined ? model[key] : values[key];\n const formState = {\n value: value,\n disabled: disabled,\n };\n const validator = typeof validators[key] !== 'undefined' ? validators[key] : null;\n const asyncValidator = typeof asyncValidators[key] !== 'undefined' ? asyncValidators[key] : null;\n\n controls[key] = new UntypedFormControl(formState, validator, asyncValidator);\n }\n\n // Configure form for extra validators that are not on a specific field\n for (const key of Object.keys(validators)) {\n if (!controls[key]) {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, validators[key]);\n }\n }\n\n for (const key of Object.keys(asyncValidators)) {\n if (controls[key] && asyncValidators[key]) {\n controls[key].setAsyncValidators(asyncValidators[key]);\n } else {\n const formState = {\n value: model[key] ? model[key] : null,\n disabled: disabled,\n };\n\n controls[key] = new UntypedFormControl(formState, null, asyncValidators[key]);\n }\n }\n\n return controls;\n }\n\n /**\n * Create the final FormGroup for the object, including all validators\n *\n * This method should **not** be overridden, but instead `getFormConfig`,\n * `getFormGroupValidators`, `getFormGroupAsyncValidators` might be.\n */\n public getFormGroup(model: Literal): UntypedFormGroup {\n const formConfig = this.getFormConfig(deepClone(model));\n return new UntypedFormGroup(formConfig, {\n validators: this.getFormGroupValidators(model),\n asyncValidators: this.getFormGroupAsyncValidators(model),\n });\n }\n\n /**\n * Get a single object\n *\n * If available it will emit object from cache immediately, then it\n * will **always** fetch from network and then the observable will be completed.\n *\n * You must subscribe to start getting results (and fetch from network).\n */\n public getOne(id: string): Observable<Tone> {\n return this.prepareOneQuery(id, 'cache-and-network').pipe(\n takeWhile(result => result.networkStatus !== NetworkStatus.ready, true),\n map(result => (result.data as Literal)[this.name]),\n );\n }\n\n /**\n * Watch a single object\n *\n * If available it will emit object from cache immediately, then it\n * will **always** fetch from network, and then keep watching the cache forever.\n *\n * You must subscribe to start getting results (and fetch from network).\n *\n * You **MUST** unsubscribe.\n */\n public watchOne(id: string, fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network'): Observable<Tone> {\n return this.prepareOneQuery(id, fetchPolicy).pipe(map(result => (result.data as Literal)[this.name]));\n }\n\n private prepareOneQuery(id: string, fetchPolicy: WatchQueryFetchPolicy): Observable<ApolloQueryResult<unknown>> {\n this.throwIfObservable(id);\n this.throwIfNotQuery(this.oneQuery);\n\n return this.getVariablesForOne(id).pipe(\n switchMap(variables => {\n this.throwIfNotQuery(this.oneQuery);\n\n return this.apollo.watchQuery<unknown, Vone>({\n query: this.oneQuery,\n variables: variables,\n fetchPolicy: fetchPolicy,\n nextFetchPolicy: 'cache-only',\n }).valueChanges;\n }),\n filter(result => !!result.data),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * It will **always** fetch from network and then the observable will be completed.\n * No cache is ever used, so it's slow but correct.\n */\n public getAll(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return this.getPartialVariablesForAll().pipe(\n first(),\n switchMap(partialVariables => {\n this.throwIfNotQuery(this.allQuery);\n\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n this.mapAll(),\n );\n }\n\n /**\n * Get a collection of objects\n *\n * Every time the observable variables change, and they are not undefined,\n * it will return result from cache, then it will **always** fetch from network,\n * and then keep watching the cache forever.\n *\n * You must subscribe to start getting results (and fetch from network).\n *\n * You **MUST** unsubscribe.\n */\n public watchAll(\n queryVariablesManager: NaturalQueryVariablesManager<Vall>,\n fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network',\n ): Observable<Tall> {\n this.throwIfNotQuery(this.allQuery);\n\n return combineLatest({\n variables: queryVariablesManager.variables.pipe(\n // Ignore very fast variable changes\n debounceTime(20),\n // Wait for variables to be defined to prevent duplicate query: with and without variables\n // Null is accepted value for \"no variables\"\n filter(variables => typeof variables !== 'undefined'),\n ),\n partialVariables: this.getPartialVariablesForAll(),\n }).pipe(\n switchMap(result => {\n // Apply partial variables from service\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', result.partialVariables);\n\n this.throwIfNotQuery(this.allQuery);\n\n return this.apollo\n .watchQuery<unknown, Vall>({\n query: this.allQuery,\n variables: manager.variables.value,\n fetchPolicy: fetchPolicy,\n })\n .valueChanges.pipe(\n catchError(() => EMPTY),\n filter(r => !!r.data),\n this.mapAll(),\n );\n }),\n );\n }\n\n /**\n * This functions allow to quickly create or update objects.\n *\n * Manages a \"creation is pending\" status, and update when creation is ready.\n * Uses regular update/updateNow and create methods.\n * Used mainly when editing multiple objects in same controller (like in editable arrays)\n */\n public createOrUpdate(\n object: Vcreate['input'] | WithId<Vupdate['input']>,\n now = false,\n ): Observable<Tcreate | Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n this.throwIfNotQuery(this.updateMutation);\n\n // If creation is pending, listen to creation observable and when ready, fire update\n const pendingCreation = this.creatingCache.get(object);\n if (pendingCreation) {\n return pendingCreation.pipe(\n switchMap(created => {\n return this.update({\n id: (created as WithId<Tcreate>).id,\n ...(object as Vcreate['input']),\n });\n }),\n );\n }\n\n // If object has Id, just save it\n if ('id' in object && object.id) {\n if (now) {\n // used mainly for tests, because lodash debounced used in update() does not work fine with fakeAsync and tick()\n return this.updateNow(object as WithId<Vupdate['input']>);\n } else {\n return this.update(object as WithId<Vupdate['input']>);\n }\n }\n\n // If object was not saving, and has no ID, create it\n const creation = this.create(object).pipe(\n tap(() => {\n this.creatingCache.delete(object); // remove from cache\n }),\n );\n\n // stores creating observable in a cache replayable version of the observable,\n // so several update() can subscribe to the same creation\n this.creatingCache.set(object, creation.pipe(shareReplay()));\n\n return creation;\n }\n\n /**\n * Create an object in DB and then refetch the list of objects\n */\n public create(object: Vcreate['input']): Observable<Tcreate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.createMutation);\n\n const variables = merge(\n {input: this.getInput(object, true)},\n this.getPartialVariablesForCreation(object),\n ) as Vcreate;\n\n return this.apollo\n .mutate<Tcreate, Vcreate>({\n mutation: this.createMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n return this.mapCreation(result);\n }),\n );\n }\n\n /**\n * Update an object, after a short debounce\n */\n public update(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n // Keep a single instance of the debounced update function\n const id = object.id;\n\n return this.naturalDebounceService.debounce(this, id, object);\n }\n\n /**\n * Update an object immediately when subscribing\n */\n public updateNow(object: WithId<Vupdate['input']>): Observable<Tupdate> {\n this.throwIfObservable(object);\n this.throwIfNotQuery(this.updateMutation);\n\n const variables = merge(\n {\n id: object.id,\n input: this.getInput(object, false),\n },\n this.getPartialVariablesForUpdate(object),\n ) as Vupdate;\n\n return this.apollo\n .mutate<Tupdate, Vupdate>({\n mutation: this.updateMutation,\n variables: variables,\n })\n .pipe(\n map(result => {\n this.apollo.client.reFetchObservableQueries();\n return this.mapUpdate(result);\n }),\n );\n }\n\n /**\n * Delete objects and then refetch the list of objects\n */\n public delete(objects: {id: string}[]): Observable<Tdelete> {\n this.throwIfObservable(objects);\n this.throwIfNotQuery(this.deleteMutation);\n\n const ids = objects.map(o => {\n // Cancel pending update\n this.naturalDebounceService.cancelOne(this, o.id);\n\n return o.id;\n });\n const variables = merge(\n {\n ids: ids,\n },\n this.getPartialVariablesForDelete(objects),\n ) as Vdelete;\n\n return this.apollo\n .mutate<Tdelete, Vdelete>({\n mutation: this.deleteMutation,\n variables: variables,\n })\n .pipe(\n // Delay the observable until Apollo refetch is completed\n switchMap(result => {\n const mappedResult = this.mapDelete(result);\n\n return from(this.apollo.client.reFetchObservableQueries()).pipe(map(() => mappedResult));\n }),\n );\n }\n\n /**\n * If the id is provided, resolves an observable model. The observable model will only be emitted after we are sure\n * that Apollo cache is fresh and warm. Then the component can subscribe to the observable model to get the model\n * immediately from Apollo cache and any subsequents future mutations that may happen to Apollo cache.\n *\n * Without id, returns default values, in order to show a creation form.\n */\n public resolve(id: string | undefined): Observable<Observable<Tone | Vcreate['input']>> {\n if (id) {\n const onlyNetwork = this.watchOne(id, 'network-only').pipe(first());\n const onlyCache = this.watchOne(id, 'cache-first');\n\n // In theory, we can rely on Apollo Cache to return a result instantly. It is very fast indeed,\n // but it is still asynchronous, so there may be a very short time when we don't have the model\n // available. To fix that, we can rely on RxJS, which is able to emit synchronously the value we just\n // got from server. Once Apollo Client moves to RxJS (https://github.com/apollographql/apollo-feature-requests/issues/375),\n // we could try to remove `startWith()`.\n return onlyNetwork.pipe(map(firstValue => onlyCache.pipe(startWith(firstValue))));\n } else {\n return of(of(this.getDefaultForServer()));\n }\n }\n\n /**\n * Return an object that match the GraphQL input type.\n * It creates an object with manually filled data and add uncompleted data (like required attributes that can be empty strings)\n */\n public getInput(object: Literal, forCreation: boolean): Vcreate['input'] | Vupdate['input'] {\n // Convert relations to their IDs for mutation\n object = relationsToIds(object);\n\n // Pick only attributes that we can find in the empty object\n // In other words, prevent to select data that has unwanted attributes\n const emptyObject = this.getDefaultForServer();\n let input = pick(object, Object.keys(emptyObject));\n\n // Complete a potentially uncompleted object with default values\n if (forCreation) {\n input = defaults(input, emptyObject);\n }\n\n return input;\n }\n\n /**\n * Return the number of objects matching the query. It may never complete.\n *\n * This is used for the unique validator\n */\n public count(queryVariablesManager: NaturalQueryVariablesManager<Vall>): Observable<number> {\n const queryName = 'Count' + upperCaseFirstLetter(this.plural);\n const filterType = upperCaseFirstLetter(this.name) + 'Filter';\n\n const query = gql`\n query ${queryName} ($filter: ${filterType}) {\n count: ${this.plural} (filter: $filter, pagination: {pageSize: 0, pageIndex: 0}) {\n length\n }\n }`;\n\n return this.getPartialVariablesForAll().pipe(\n switchMap(partialVariables => {\n // Copy manager to prevent to apply internal variables to external QueryVariablesManager\n const manager = new NaturalQueryVariablesManager<Vall>(queryVariablesManager);\n manager.merge('partial-variables', partialVariables);\n\n return this.apollo.query<{count: {length: number}}, Vall>({\n query: query,\n variables: manager.variables.value,\n fetchPolicy: 'network-only',\n });\n }),\n map(result => result.data.count.length),\n );\n }\n\n /**\n * Return empty object with some default values from server perspective\n *\n * This is typically useful when showing a form for creation\n */\n public getDefaultForServer(): Vcreate['input'] {\n return {};\n }\n\n /**\n * You probably **should not** use this.\n *\n * If you are trying to *call* this method, instead you probably want to call `getDefaultForServer()` to get default\n * values for a model, or `getFormConfig()` to get a configured form that includes extra form fields.\n *\n * If you are trying to *override* this method, instead you probably want to override `getDefaultForServer()`.\n *\n * The only and **very rare** reason to override this method is if the client needs extra form fields that cannot be\n * accepted by the server (not part of `XXXInput` type) and that are strictly for the client form needs. In that case,\n * then you can return default values for those extra form fields, and the form returned by `getFormConfig()` will\n * include those extra fields.\n */\n protected getFormExtraFieldDefaultValues(): Literal {\n return {};\n }\n\n /**\n * This is used to extract only the array of fetched objects out of the entire fetched data\n */\n protected mapAll(): OperatorFunction<FetchResult<unknown>, Tall> {\n return map(result => (result.data as any)[this.plural]); // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the created object out of the entire fetched data\n */\n protected mapCreation(result: MutationResult<unknown>): Tcreate {\n const name = this.createName ?? 'create' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only the updated object out of the entire fetched data\n */\n protected mapUpdate(result: MutationResult<unknown>): Tupdate {\n const name = this.updateName ?? 'update' + upperCaseFirstLetter(this.name);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * This is used to extract only flag when deleting an object\n */\n protected mapDelete(result: MutationResult<unknown>): Tdelete {\n const name = this.deleteName ?? 'delete' + upperCaseFirstLetter(this.plural);\n return (result.data as any)[name]; // See https://github.com/apollographql/apollo-client/issues/5662\n }\n\n /**\n * Returns additional variables to be used when getting a single object\n *\n * This is typically a site or state ID, and is needed to get appropriate access rights\n */\n protected getPartialVariablesForOne(): Observable<Partial<Vone>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when getting multiple objects\n *\n * This is typically a site or state ID, but it could be something else to further filter the query\n */\n public getPartialVariablesForAll(): Observable<Partial<Vall>> {\n return of({});\n }\n\n /**\n * Returns additional variables to be used when creating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForCreation(object: Literal): Partial<Vcreate> {\n return {};\n }\n\n /**\n * Returns additional variables to be used when updating an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForUpdate(object: Literal): Partial<Vupdate> {\n return {};\n }\n\n /**\n * Return additional variables to be used when deleting an object\n *\n * This is typically a site or state ID\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected getPartialVariablesForDelete(objects: Literal[]): Partial<Vdelete> {\n return {};\n }\n\n /**\n * Throw exception to prevent executing queries with invalid variables\n */\n protected throwIfObservable(value: unknown): void {\n if (value instanceof Observable) {\n throw new Error(\n 'Cannot use Observable as variables. Instead you should use .subscribe() to call the method with a real value',\n );\n }\n }\n\n /**\n * Merge given ID with additional partial variables if there is any\n */\n private getVariablesForOne(id: string): Observable<Vone> {\n return this.getPartialVariablesForOne().pipe(\n map(partialVariables => merge({id: id} as Vone, partialVariables)),\n );\n }\n\n /**\n * Throw exception to prevent executing null queries\n */\n private throwIfNotQuery(query: DocumentNode | null): asserts query {\n if (!query) {\n throw new Error('GraphQL query for this method was not configured in this service constructor');\n }\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {inject, Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nconst enumTypeQuery = gql`\n query EnumType($name: String!) {\n __type(name: $name) {\n __typename\n enumValues {\n name\n description\n }\n }\n }\n`;\n\ntype EnumType = {\n __type: null | {\n __typename: string;\n enumValues:\n | null\n | {\n name: string;\n description: null | string;\n }[];\n };\n};\n\nexport type IEnum = {\n value: string;\n name: string;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalEnumService {\n private readonly apollo = inject(Apollo);\n\n /**\n * Return a list of observable enumerables considering the given name\n */\n public get(name: string): Observable<IEnum[]> {\n // Load possible action statuses\n return this.apollo\n .query<EnumType>({\n query: enumTypeQuery,\n variables: {name: name},\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(result => {\n const values: IEnum[] = [];\n if (result.data.__type?.enumValues) {\n for (const enumValue of result.data.__type.enumValues) {\n values.push({\n value: enumValue.name,\n name: enumValue.description || '',\n });\n }\n }\n\n return values;\n }),\n );\n }\n\n /**\n * Returns the enum user-friendly name, instead of its value.\n */\n public getValueName(value: string, enumName: string): Observable<string> {\n return this.get(enumName).pipe(\n map(values => {\n for (const v of values) {\n if (v.value === value) {\n return v.name;\n }\n }\n\n return '';\n }),\n );\n }\n}\n","import {Apollo, gql} from 'apollo-angular';\nimport {FetchResult} from '@apollo/client/core';\nimport {inject, Injectable} from '@angular/core';\nimport {clone} from 'es-toolkit';\nimport {forkJoin, Observable, of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {Literal} from '../types/types';\nimport {upperCaseFirstLetter} from '../classes/utility';\n\n/**\n * Query to get list of mutations\n */\nconst queriesQuery = gql`\n query Mutations {\n __type(name: \"Mutation\") {\n fields {\n name\n args {\n name\n type {\n ofType {\n name\n }\n }\n }\n }\n }\n }\n`;\n\ntype IntrospectedArg = {\n name: string;\n type: {\n ofType: null | {\n name: null | string;\n };\n };\n};\n\ntype IntrospectedMutations = {\n __type: null | {\n fields:\n | null\n | {\n name: string;\n args: IntrospectedArg[];\n }[];\n };\n};\n\nexport type LinkableObject = {\n id: string;\n __typename: string;\n};\n\ntype MutationArg = {\n name: string;\n type: string;\n};\n\ntype Mutation = {\n name: string;\n arg1: MutationArg;\n arg2: MutationArg;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalLinkMutationService {\n private readonly apollo = inject(Apollo);\n\n /**\n * Receives the list of available mutations\n */\n private allMutations?: Mutation[];\n\n /**\n * Link two objects together\n */\n public link(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>> {\n // clone prevents to affect the original reference\n const clonedVariables = clone(variables);\n\n return this.getMutation('link', obj1, obj2, otherName, clonedVariables).pipe(\n switchMap(mutation => this.execute(mutation)),\n );\n }\n\n /**\n * Link many objects\n */\n public linkMany(\n obj1: LinkableObject,\n objects: LinkableObject[],\n otherName: string | null = null,\n variables: Literal = {},\n ): Observable<FetchResult<{id: string}>[]> {\n return forkJoin(objects.map(obj2 => this.link(obj1, obj2, otherName, variables)));\n }\n\n /**\n * Unlink two objects\n */\n public unlink(\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null = null,\n ): Observable<FetchResult<{id: string}>> {\n return this.getMutation('unlink', obj1, obj2, otherName).pipe(switchMap(mutation => this.execute(mutation)));\n }\n\n /**\n * Return the list of all available mutation names\n */\n private getAllMutationNames(): Observable<Mutation[]> {\n if (this.allMutations) {\n return of(this.allMutations);\n }\n\n const mapArg = (arg: IntrospectedArg): MutationArg => {\n return {\n name: arg.name,\n type: arg.type?.ofType?.name?.replace(/ID$/, '') || 'should-never-happen',\n };\n };\n\n return this.apollo\n .query<IntrospectedMutations>({\n query: queriesQuery,\n fetchPolicy: 'cache-first',\n })\n .pipe(\n map(({data}) => {\n if (data.__type?.fields) {\n this.allMutations = data.__type.fields\n .filter(v => /^(link|unlink)/.exec(v.name))\n .map(v => {\n return {\n name: v.name,\n arg1: mapArg(v.args[0]),\n arg2: mapArg(v.args[1]),\n };\n });\n } else {\n this.allMutations = [];\n }\n\n return this.allMutations;\n }),\n );\n }\n\n /**\n * Generate mutation using patterns and replacing variables\n */\n private getMutation(\n action: string,\n obj1: LinkableObject,\n obj2: LinkableObject,\n otherName: string | null,\n variables: Literal = {},\n ): Observable<string> {\n otherName = otherName ? upperCaseFirstLetter(otherName) : otherName;\n const mutationName = action + obj1.__typename + (otherName || obj2.__typename);\n const reversedMutationName = action + obj2.__typename + (otherName || obj1.__typename);\n\n return this.getAllMutationNames().pipe(\n map(allMutationNames => {\n const mutation =\n allMutationNames.find(mut => mut.name === mutationName) ||\n allMutationNames.find(mut => mut.name === reversedMutationName);\n\n if (mutation) {\n return this.buildTemplate(mutation, obj1, obj2, variables);\n }\n\n throw TypeError('API does not allow to ' + action + ' ' + obj1.__typename + ' and ' + obj2.__typename);\n }),\n );\n }\n\n /**\n * Execute mutation\n */\n private execute(mutation: string): Observable<FetchResult<{id: string}>> {\n return this.apollo\n .mutate<{id: string}>({\n mutation: gql(mutation),\n })\n .pipe(\n map(r => {\n this.apollo.client.reFetchObservableQueries();\n return r;\n }),\n );\n }\n\n /**\n * Build the actual mutation string\n */\n private buildTemplate(\n mutation: Mutation,\n obj1: LinkableObject,\n obj2: LinkableObject,\n variables: Literal = {},\n ): string {\n let name1;\n let name2;\n if (obj1.__typename === mutation.arg1.type) {\n name1 = mutation.arg1.name;\n name2 = mutation.arg2.name;\n } else {\n name1 = mutation.arg2.name;\n name2 = mutation.arg1.name;\n }\n variables[name1] = obj1.id;\n variables[name2] = obj2.id;\n\n let serializedVariables = '';\n for (const key of Object.keys(variables)) {\n serializedVariables += key + ': ' + JSON.stringify(variables[key]) + ' ';\n }\n\n return `mutation linkAndUnlink {\n ${mutation.name}(${serializedVariables}) {\n id\n }\n }`;\n }\n}\n","import {isPlatformBrowser} from '@angular/common';\nimport {\n computed,\n DOCUMENT,\n effect,\n EnvironmentProviders,\n inject,\n Injectable,\n InjectionToken,\n PLATFORM_ID,\n provideAppInitializer,\n Provider,\n signal,\n} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {fromEvent, map, of} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {LOCAL_STORAGE} from '../modules/common/services/memory-storage';\n\ntype AllThemes = [string, ...string[]];\nexport const NATURAL_THEMES_CONFIG = new InjectionToken<AllThemes>('Configuration for Natural Theme');\n\nexport function provideThemes(config: AllThemes): (EnvironmentProviders | Provider)[] {\n return [\n {\n provide: NATURAL_THEMES_CONFIG,\n useValue: config,\n },\n provideAppInitializer(() => {\n inject(NaturalThemeService);\n }),\n ];\n}\n\nexport enum ColorScheme {\n Light = 'light',\n Dark = 'dark',\n Auto = 'auto',\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalThemeService {\n private readonly allThemes = inject(NATURAL_THEMES_CONFIG);\n private readonly storage = inject(LOCAL_STORAGE);\n private readonly platformId = inject(PLATFORM_ID);\n protected readonly document = inject(DOCUMENT);\n\n private readonly isDarkSystem = toSignal(\n isPlatformBrowser(this.platformId)\n ? fromEvent<MediaQueryListEvent>(\n this.document.defaultView!.matchMedia('(prefers-color-scheme: dark)'),\n 'change',\n ).pipe(\n startWith(this.document.defaultView!.matchMedia('(prefers-color-scheme: dark)')),\n map(e => e.matches),\n )\n : of(false),\n {initialValue: false},\n );\n\n private readonly isDark = computed(() => {\n return (\n this.colorScheme() === ColorScheme.Dark || (this.colorScheme() === ColorScheme.Auto && this.isDarkSystem())\n );\n });\n\n private readonly _theme = signal<string>(this.allThemes[0]);\n\n /**\n * Currently selected theme. Use `setTheme()` to select a different theme.\n */\n public readonly theme = this._theme.asReadonly();\n\n private readonly _colorScheme = signal<ColorScheme>(ColorScheme.Auto);\n\n /**\n * Currently selected color scheme. Use `setColorScheme()` to select a different scheme.\n */\n public readonly colorScheme = this._colorScheme.asReadonly();\n\n public constructor() {\n effect(() => {\n this.document.documentElement.setAttribute('data-is-dark', this.isDark() ? 'true' : 'false');\n });\n\n const storedScheme = this.storage.getItem('color-scheme') as ColorScheme | null;\n const isValidScheme = storedScheme && Object.values(ColorScheme).includes(storedScheme);\n this._colorScheme.set(isValidScheme ? storedScheme : ColorScheme.Auto);\n }\n\n /**\n * Set theme in memory, local storage and dom\n */\n public setTheme(theme: string): void {\n if (!this.allThemes.includes(theme)) {\n throw new Error(\n `Expecting one of the configured themes: ${this.allThemes.map(t => `'${t}'`).join(', ')}. But got invalid: '${theme}'`,\n );\n }\n\n this._theme.set(theme);\n this.document.documentElement.setAttribute('data-theme', theme);\n }\n\n /**\n * Set dark/light/auto\n */\n public setColorScheme(scheme: ColorScheme, persistInStorage = true): void {\n this._colorScheme.set(scheme); // memory\n this.document.documentElement.setAttribute('data-color-scheme', scheme); // dom\n\n if (persistInStorage) {\n this.storage.setItem('color-scheme', this.colorScheme()); // storage\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NativeDateAdapter} from '@angular/material/core';\n\nconst patterns: readonly RegExp[] = [\n /^(?<day>\\d{1,2})\\.(?<month>\\d{1,2})\\.(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})-(?<month>\\d{1,2})-(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\/(?<month>\\d{1,2})\\/(?<year>\\d{4}|\\d{2})$/,\n /^(?<day>\\d{1,2})\\\\(?<month>\\d{1,2})\\\\(?<year>\\d{4}|\\d{2})$/,\n // strict ISO format\n /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$/,\n];\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSwissParsingDateAdapter extends NativeDateAdapter {\n /**\n * Parse commonly accepted swiss format, such as:\n *\n * - 24.12.2018\n * - 1.4.18\n * - 2018-12-24\n */\n public override parse(value: unknown): Date | null {\n if (typeof value === 'number') {\n return new Date(value);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n for (const pattern of patterns) {\n const m = trimmed.match(pattern);\n if (m?.groups) {\n const year = +m.groups.year;\n const month = +m.groups.month;\n const day = +m.groups.day;\n\n return this.createDateIfValid(year, month, day);\n }\n }\n }\n\n return null;\n }\n\n private createDateIfValid(year: number, month: number, date: number): Date | null {\n // Assume year 2000 if only two digits\n if (year < 100) {\n year += 2000;\n }\n\n month = month - 1;\n if (month >= 0 && month <= 11 && date >= 1 && date <= 31) {\n return this.createDate(year, month, date);\n }\n\n return null;\n }\n\n public override getFirstDayOfWeek(): number {\n // Always starts on Monday, even though it is not true for Canada, U.S., Mexico and many more\n // Also see https://github.com/tc39/ecma402/issues/6\n return 1;\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './alert.service';\nexport * from './confirm.component';\n","import {computed, Directive, effect, inject, InjectionToken, input} from '@angular/core';\nimport {MatIcon, MatIconRegistry} from '@angular/material/icon';\nimport {DomSanitizer} from '@angular/platform-browser';\n\ntype NaturalIconType = {\n name: string;\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n};\n\nexport type NaturalIconConfig = {\n svg?: string;\n font?: string;\n class?: 'negative' | 'neutral' | 'positive';\n};\n\nexport type NaturalIconsConfig = Record<string, NaturalIconConfig>;\n\nexport const NATURAL_ICONS_CONFIG = new InjectionToken<NaturalIconsConfig>('Configuration for Natural Icons');\n\nconst naturalRegistered: unique symbol = Symbol('Natural icon registered');\n\n/**\n * Allows to use `<mat-icon>` without knowing where an icon comes from (SVG or font) or with aliases for Material font.\n *\n * SVG icons and Material font aliases must be configured ahead of time, via `NATURAL_ICONS_CONFIG`.\n *\n * It also make it easy to give a specific size to the icon via `[size]`.\n *\n * Usage:\n *\n * ```html\n * <mat-icon naturalIcon=\"search\"></mat-icon>\n * <mat-icon naturalIcon=\"my-svg-icon-name\"></mat-icon>\n * <mat-icon naturalIcon=\"my-alias-for-search\"></mat-icon>\n * <mat-icon naturalIcon=\"search\" [size]=\"150\"></mat-icon>\n * ```\n */\n@Directive({\n selector: 'mat-icon[naturalIcon]',\n host: {\n '[style.font-size.px]': 'size()',\n '[style.min-height.px]': 'size()',\n '[style.min-width.px]': 'size()',\n '[class]': 'icon().class',\n },\n})\nexport class NaturalIconDirective {\n private readonly matIconRegistry = inject(MatIconRegistry);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly config = inject(NATURAL_ICONS_CONFIG, {optional: true});\n private readonly matIconComponent = inject(MatIcon, {host: true, self: true});\n\n public readonly naturalIcon = input.required<string>();\n public readonly size = input<number | undefined | null>(undefined);\n\n protected readonly icon = computed<NaturalIconType>(() => {\n const value = this.naturalIcon();\n return {\n name: value,\n ...(this.config?.[value] ?? {font: value}),\n };\n });\n\n public constructor() {\n const config = this.config;\n\n this.registerIcons(config ?? {});\n\n effect(() => {\n this.matIconComponent.fontIcon = undefined!;\n this.matIconComponent.svgIcon = undefined!;\n\n const icon = this.icon();\n if (icon.font) {\n this.matIconComponent.fontIcon = icon.font;\n } else if (icon.svg) {\n this.matIconComponent.svgIcon = icon.name;\n }\n });\n }\n\n private registerIcons(config: NaturalIconsConfig): void {\n // Ensure that this specific instance of registry has our our icons\n // exactly once, not less and not more\n const registry = this.matIconRegistry as any;\n if (registry[naturalRegistered]) {\n return;\n }\n registry[naturalRegistered] = true;\n\n for (const key of Object.keys(config)) {\n const svg = config[key].svg;\n if (svg) {\n this.matIconRegistry.addSvgIcon(key, this.domSanitizer.bypassSecurityTrustResourceUrl(svg));\n }\n }\n }\n}\n","import {Component, DestroyRef, inject, Input, input, OnChanges, output, SimpleChanges} from '@angular/core';\nimport {NaturalPalette} from '../../types/types';\nimport {AvailableColumn, Button} from './types';\nimport {cancellableTimeout} from '../../classes/rxjs';\nimport {map} from 'rxjs';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {FormsModule} from '@angular/forms';\nimport {MatCheckbox} from '@angular/material/checkbox';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {MatIconButton} from '@angular/material/button';\nimport {AsyncPipe} from '@angular/common';\nimport {MatTooltip} from '@angular/material/tooltip';\n\n@Component({\n selector: 'natural-columns-picker',\n imports: [\n AsyncPipe,\n FormsModule,\n MatCheckbox,\n MatIcon,\n MatIconButton,\n MatMenu,\n MatMenuContent,\n MatMenuItem,\n MatMenuTrigger,\n MatTooltip,\n NaturalIconDirective,\n ],\n templateUrl: './columns-picker.component.html',\n styleUrl: './columns-picker.component.scss',\n})\nexport class NaturalColumnsPickerComponent implements OnChanges {\n private readonly destroyRef = inject(DestroyRef);\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n private _selections?: string[];\n private _availableColumns: Required<AvailableColumn>[] = [];\n\n public readonly buttons = input<readonly Readonly<Button>[] | null>([]);\n\n /**\n * Set all the columns that are available.\n */\n @Input()\n public set availableColumns(columns: readonly Readonly<AvailableColumn>[] | undefined) {\n this._availableColumns =\n columns?.map(column => {\n return {\n checked: true,\n hidden: false,\n ...column,\n };\n }) ?? [];\n }\n\n /**\n * Set the columns that we would like to select but might be unavailable.\n *\n * If a column is unavailable it will be ignored silently. To know what columns were actually applied\n * you should use `selectionChange`.\n *\n * It is often set once on component initialization, but it can also be set again later in the lifespan of the component.\n */\n @Input()\n public set selections(columns: string[] | undefined) {\n this._selections = columns;\n\n if (!columns || !this._availableColumns.length) {\n return;\n }\n\n this._availableColumns.forEach(col => {\n col.checked = columns.includes(col.id);\n });\n }\n\n /**\n * Emit a list of valid and selected column keys whenever the selection changes\n */\n public readonly selectionChange = output<string[]>();\n\n /**\n * Displayed options in the dropdown menu\n */\n public displayedColumns: Required<AvailableColumn>[] = [];\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n private initColumns(): void {\n this._availableColumns?.forEach(col => {\n col.checked = this._selections?.length ? this._selections.includes(col.id) : col.checked;\n });\n\n // Show options only for columns that are not hidden\n this.displayedColumns = this._availableColumns.filter(col => !col.hidden) ?? [];\n }\n\n public updateColumns(): void {\n const selectedColumns = this._availableColumns.filter(col => col.checked).map(col => col.id);\n this.selectionChange.emit(selectedColumns);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Unfortunately need a timeout to avoid an ExpressionChangedAfterItHasBeenCheckedError on /state/4989/process\n cancellableTimeout(this.destroyRef).subscribe(() => {\n if (changes.availableColumns) {\n this.initColumns();\n this.updateColumns();\n } else if (changes.selections) {\n this.updateColumns();\n }\n });\n }\n\n public defaultTrue(value: boolean | undefined): boolean {\n return value ?? true;\n }\n\n public color(button: Button): NaturalPalette | null {\n return button.checked ? 'primary' : null;\n }\n\n public useCheckbox(button: Button): boolean {\n return 'checked' in button;\n }\n\n public needMargin(button: Button | null = null): string {\n return this.buttons()?.some(this.useCheckbox) && (!button || !this.useCheckbox(button))\n ? 'align-with-checkbox'\n : '';\n }\n\n public someVisibleButtons(): boolean {\n const visibleButtons = this.buttons()?.reduce((sum, button) => (this.defaultTrue(button.show) ? 1 : 0), 0) ?? 0;\n\n return visibleButtons > 0;\n }\n\n protected menuItemClicked($event: MouseEvent, column: Required<AvailableColumn>): void {\n $event.stopPropagation(); // Prevent closing menu\n\n // Change checked value if we clicked anywhere inside the menuItem which is not the mat-checkbox\n column.checked = !column.checked;\n this.updateColumns();\n }\n\n protected checkboxClicked($event: MouseEvent, column: Required<AvailableColumn>): void {\n $event.stopPropagation(); // Prevent bubbling to `menuItemClicked()`, and prevent closing menu\n\n // Also change checked value if we clicked the small area which is inside the mat-checkbox but outside the label\n if ($event.target instanceof HTMLDivElement) {\n column.checked = !column.checked;\n this.updateColumns();\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/cyclomatic-complexity -->\n<div>\n @if ((isMobile | async) && someVisibleButtons()) {\n <button matIconButton [matMenuTriggerFor]=\"mobileMenu\">\n <mat-icon naturalIcon=\"more_vert\" />\n </button>\n <mat-menu #mobileMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (button of buttons(); track button) {\n @if (defaultTrue(button.show)) {\n @if (button.href) {\n <a\n mat-menu-item\n [href]=\"button.href\"\n [disabled]=\"button.disabled\"\n [class]=\"needMargin(button)\"\n (click)=\"button.click?.(button, $event)\"\n >\n @if (useCheckbox(button)) {\n <mat-checkbox [checked]=\"button.checked\" />\n }\n {{ button.label }}\n </a>\n } @else if (button.buttons) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n [class]=\"needMargin(button)\"\n (click)=\"button.click?.(button, $event)\"\n >\n @if (useCheckbox(button)) {\n <mat-checkbox [checked]=\"button.checked\" />\n }\n {{ button.label }}\n </button>\n <mat-menu #subMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (subButton of button.buttons; track subButton) {\n <a\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n }\n </ng-template>\n </mat-menu>\n } @else {\n <button\n mat-menu-item\n [disabled]=\"button.disabled\"\n [class]=\"needMargin(button)\"\n (click)=\"button.click?.(button, $event)\"\n >\n @if (useCheckbox(button)) {\n <mat-checkbox [checked]=\"button.checked\" />\n }\n {{ button.label }}\n </button>\n }\n }\n }\n\n @if (displayedColumns.length) {\n <button mat-menu-item [matMenuTriggerFor]=\"columnMenu\" [class]=\"needMargin(null)\">\n <span i18n>Colonnes</span>\n </button>\n }\n </ng-template>\n </mat-menu>\n } @else {\n @for (button of buttons(); track button) {\n @if (defaultTrue(button.show)) {\n @if (button.href) {\n <a\n matIconButton\n [href]=\"button.href\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n (click)=\"button.click?.(button, $event)\"\n >\n <mat-icon [naturalIcon]=\"button.icon\" />\n </a>\n } @else if (button.buttons) {\n <button\n matIconButton\n [matMenuTriggerFor]=\"menu\"\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n (click)=\"button.click?.(button, $event)\"\n >\n <mat-icon [naturalIcon]=\"button.icon\" />\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template matMenuContent>\n @for (subButton of button.buttons; track subButton) {\n <a\n mat-menu-item\n [disabled]=\"subButton.disabled\"\n (click)=\"subButton.click(subButton, $event)\"\n >\n {{ subButton.label }}\n </a>\n }\n </ng-template>\n </mat-menu>\n } @else {\n <button\n matIconButton\n [disabled]=\"button.disabled\"\n [color]=\"color(button)\"\n [matTooltip]=\"button.label\"\n (click)=\"button.click?.(button, $event)\"\n >\n <mat-icon [naturalIcon]=\"button.icon\" />\n </button>\n }\n }\n }\n\n @if (displayedColumns.length) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Sélectionner les colonnes\"\n [matMenuTriggerFor]=\"columnMenu\"\n >\n <mat-icon naturalIcon=\"view_column\" />\n </button>\n }\n }\n</div>\n\n<mat-menu #columnMenu=\"matMenu\">\n <ng-template matMenuContent>\n @for (column of displayedColumns; track column) {\n <div mat-menu-item (click)=\"menuItemClicked($event, column)\">\n <mat-checkbox\n [(ngModel)]=\"column.checked\"\n (click)=\"checkboxClicked($event, column)\"\n (change)=\"updateColumns()\"\n >{{ column.label }}</mat-checkbox\n >\n </div>\n }\n </ng-template>\n</mat-menu>\n","/*\n * Public API Surface of natural\n */\n\nexport type {AvailableColumn, Button, SubButton} from './types';\nexport * from './columns-picker.component';\n","import {AfterViewInit, DestroyRef, Directive, inject, input} from '@angular/core';\nimport {MatTab, MatTabGroup} from '@angular/material/tabs';\nimport {ActivatedRoute, RouteConfigLoadEnd, RouteConfigLoadStart, Router} from '@angular/router';\nimport {clone} from 'es-toolkit';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Returns an identifier for the tab\n */\nfunction getTabId(tab: MatTab): string {\n return tab.id ?? '';\n}\n\n/**\n * Usage :\n *\n * ```html\n * <mat-tab-group [naturalLinkableTab]=\"!isPanel\">\n * <mat-tab label=\"Tab 1\">Tab 1</mat-tab> // First tab doesn't need id. This keeps url clean on default one\n * <mat-tab label=\"Tab 2\" id=\"second-tab\">Tab 2</mat-tab>\n * ...\n * </mat-tab-group>\n * ```\n */\n@Directive({\n selector: 'mat-tab-group[naturalLinkableTab]',\n})\nexport class NaturalLinkableTabDirective implements AfterViewInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly component = inject(MatTabGroup);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n\n /**\n * If false, disables the persistent navigation\n */\n public readonly naturalLinkableTab = input<boolean | ''>(true);\n private isLoadingRouteConfig = false;\n\n public constructor() {\n this.router.events.pipe(takeUntilDestroyed()).subscribe(event => {\n if (event instanceof RouteConfigLoadStart) {\n this.isLoadingRouteConfig = true;\n } else if (event instanceof RouteConfigLoadEnd) {\n this.isLoadingRouteConfig = false;\n }\n });\n }\n\n public ngAfterViewInit(): void {\n if (this.naturalLinkableTab() === false) {\n return;\n }\n\n // When url params change, update the mat-tab-group selected tab\n this.route.fragment.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(fragment => {\n // Get index of tab that matches wanted name\n const tabIndex = this.getTabIndex(fragment);\n\n // If tab index is valid (>= 0) go to given fragment\n // If there is no fragment at all, go to first tab (index is -1 in this case)\n if (tabIndex >= 0 || !fragment) {\n this.component.selectedIndex = tabIndex;\n }\n });\n\n // When mat-tab-groups selected tab change, update url\n this.component.selectedTabChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(event => {\n if (this.isLoadingRouteConfig) {\n return;\n }\n\n const activatedTabName = getTabId(event.tab);\n const segments = this.route.snapshot.url;\n if (!segments.length) {\n // This should never happen in normal usage, because it would means there is no route at all in the app\n throw new Error('Cannot update URL for tabs without any segments in URL');\n }\n\n // Get url matrix params (/segment;matrix=param) only without route params (segment/:id)\n const params = clone(segments[segments.length - 1].parameters);\n\n this.router.navigate(['.', params], {\n relativeTo: this.route,\n queryParamsHandling: 'preserve',\n fragment: activatedTabName?.length ? activatedTabName : undefined,\n });\n });\n }\n\n private getTabIndex(fragment: string | null): number {\n return this.component._tabs.toArray().findIndex(tab => fragment === getTabId(tab));\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {upperCaseFirstLetter} from '../../../classes/utility';\n\n/**\n * Returns the string with the first letter as capital\n */\n@Pipe({\n name: 'capitalize',\n})\nexport class NaturalCapitalizePipe implements PipeTransform {\n public transform(value: string | null): string | null {\n if (value) {\n return upperCaseFirstLetter(value);\n }\n\n return value;\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'ellipsis',\n})\nexport class NaturalEllipsisPipe implements PipeTransform {\n public transform(value: string, limit: number): string {\n return value.substring(0, limit - 1) + (value.length > limit ? '…' : '');\n }\n}\n","import {inject, Pipe, PipeTransform} from '@angular/core';\nimport {NaturalEnumService} from '../../../services/enum.service';\nimport {Observable} from 'rxjs';\n\n/**\n * A pipe to output an enum user-friendly name, instead of its value.\n *\n * Usage would be: {{ element.priority | enum: 'Priority' | async }}\n */\n@Pipe({\n name: 'enum',\n})\nexport class NaturalEnumPipe implements PipeTransform {\n private readonly enumService = inject(NaturalEnumService);\n\n public transform(value: any, enumName: string): Observable<string> {\n return this.enumService.getValueName(value, enumName);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {ValidationErrors} from '@angular/forms';\nimport {urlPattern} from '../../../classes/validators';\n/**\n * Return a single error message for the first found error, if any.\n *\n * Typical usage is without `@if`:\n *\n * ```html\n * <mat-form-field>\n * <input matInput formControlName=\"name\" />\n * <mat-label i18n>Nom</mat-label>\n * <mat-error>{{ form.get('name')?.errors | errorMessage }}</mat-error>\n * </mat-form-field>\n * ```\n *\n * If you need custom error messages, you can override, or defined new ones like that:\n *\n * ```html\n * <mat-form-field>\n * <input matInput formControlName=\"name\" />\n * <mat-label i18n>Nom</mat-label>\n * @if (form.get('name')?.hasError('required')) {\n * <mat-error>Ce champ est requis parce qu'il est vraiment très important</mat-error>\n * } @else {\n * <mat-error>{{ form.get('name')?.errors | errorMessage }}</mat-error>\n * }\n * </mat-form-field>\n * ```\n *\n * Supported validators are:\n *\n * - Angular\n * - `Validators.max`\n * - `Validators.maxlength`\n * - `Validators.min`\n * - `Validators.minlength`\n * - `Validators.required`\n * - Natural\n * - `available`\n * - `decimal`\n * - `deliverableEmail`\n * - `greaterThan`\n * - `integer`\n * - `money`\n * - `nfcCardHex`\n * - `time`\n * - `unique`\n * - `url`\n * - Others, that live in individual projects, but we exceptionally support here\n * - `iban`\n * - `validateCity`\n *\n * @param unit is used to build the message for the following validators: `min`, `max`, `greaterThan`\n */\n@Pipe({\n name: 'errorMessage',\n})\nexport class NaturalErrorMessagePipe implements PipeTransform {\n public transform(errors: ValidationErrors | null | undefined, unit = ''): string {\n if (!errors) {\n return '';\n }\n\n if (unit) {\n unit = ` ${unit}`;\n }\n\n if (errors.required) {\n return $localize`Requis`;\n } else if (errors.minlength) {\n return $localize`Minimum ${errors.minlength.requiredLength} caractères`;\n } else if (errors.maxlength) {\n return $localize`Maximum ${errors.maxlength.requiredLength} caractères`;\n } else if (errors.integer) {\n return $localize`Doit être un nombre entier`;\n } else if (errors.money) {\n return $localize`Le montant doit être un nombre avec un maximum de deux décimales`;\n } else if (errors.email) {\n return $localize`Adresse email invalide`;\n } else if (errors.iban) {\n return $localize`IBAN invalide`;\n } else if (errors.min) {\n return $localize`Doit être plus grand ou égal à ${errors.min.min}${unit}`;\n } else if (errors.max) {\n return $localize`Doit être plus petit ou égal à ${errors.max.max}${unit}`;\n } else if (errors.greaterThan) {\n return $localize`Doit être plus grand que ${errors.greaterThan.greaterThan}${unit}`;\n } else if (errors.notCity) {\n return $localize`Veuillez choisir une ville de la liste`;\n } else if (errors.decimal) {\n return $localize`Maximum de ${errors.decimal} décimales`;\n } else if (errors.duplicateValue) {\n return $localize`N'est pas unique`;\n } else if (errors.available) {\n return $localize`N'est pas disponible`;\n } else if (errors.time) {\n return errors.time;\n } else if (errors.nfcCardHex) {\n return errors.nfcCardHex;\n } else if (errors.pattern && errors.pattern.requiredPattern === urlPattern) {\n return $localize`URL invalide`;\n }\n\n return '';\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nfunction isDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value.valueOf());\n}\n\n/**\n * Returns a string to approximately describe the date.\n *\n * Eg:\n *\n * - \"il y a quelques minutes\"\n * - \"dans 3 jours\"\n * - \"dans 3 ans\"\n */\n@Pipe({\n name: 'timeAgo',\n})\nexport class NaturalTimeAgoPipe implements PipeTransform {\n public fakedNow: number | null = null;\n\n private getNow(): number {\n return this.fakedNow ?? Date.now();\n }\n\n public transform(date: Date | string | null | undefined): string {\n if (!date) {\n return '';\n }\n\n const stamp = isDate(date) ? date.getTime() : Date.parse(date);\n const now = this.getNow();\n\n const $seconds = (stamp - now) / 1000;\n const minutes = $seconds / 60;\n const hours = minutes / 60;\n const days = hours / 24;\n const weeks = days / 7;\n const months = days / 31;\n const years = days / 365;\n\n // Find out the best unit to use for display\n if (years <= -2) {\n const value = Math.round(Math.abs(years));\n return $localize`il y a ${value} ans`;\n } else if (years <= -1) {\n return $localize`il y a un an`;\n } else if (months <= -2) {\n const value = Math.round(Math.abs(months));\n return $localize`il y a ${value} mois`;\n } else if (months <= -1) {\n return $localize`il y a un mois`;\n } else if (weeks <= -2) {\n const value = Math.round(Math.abs(weeks));\n return $localize`il y a ${value} semaines`;\n } else if (weeks <= -1) {\n return $localize`il y a une semaine`;\n } else if (days <= -2) {\n const value = Math.round(Math.abs(days));\n return $localize`il y a ${value} jours`;\n } else if (days <= -1) {\n return $localize`il y a un jour`;\n } else if (hours <= -2) {\n const value = Math.round(Math.abs(hours));\n return $localize`il y a ${value} heures`;\n } else if (hours <= -1) {\n return $localize`il y a une heure`;\n } else if (minutes <= -5) {\n const value = Math.round(Math.abs(minutes));\n return $localize`il y a ${value} minutes`;\n } else if (minutes <= 0) {\n return $localize`il y a quelques minutes`;\n } else if (years > 2) {\n const value = Math.round(years);\n return $localize`dans ${value} ans`;\n } else if (years > 1) {\n return $localize`dans un an`;\n } else if (months > 2) {\n const value = Math.round(months);\n return $localize`dans ${value} mois`;\n } else if (months > 1) {\n return $localize`dans un mois`;\n } else if (weeks > 2) {\n const value = Math.round(weeks);\n return $localize`dans ${value} semaines`;\n } else if (weeks > 1) {\n return $localize`dans une semaine`;\n } else if (days > 2) {\n const value = Math.round(days);\n return $localize`dans ${value} jours`;\n } else if (days > 1) {\n return $localize`dans un jour`;\n } else if (hours > 2) {\n const value = Math.round(hours);\n return $localize`dans ${value} heures`;\n } else if (hours > 1) {\n return $localize`dans une heure`;\n } else if (minutes > 5) {\n const value = Math.round(minutes);\n return $localize`dans ${value} minutes`;\n } else if (minutes > 0) {\n return $localize`dans quelques minutes`;\n } else {\n throw new Error('Time travelling just happened');\n }\n }\n}\n","import {Directive, effect, ElementRef, inject, input} from '@angular/core';\n\nexport function densities(src: string, forImageSet: boolean): string {\n const match = /^(.*\\/)(\\d+)$/.exec(src);\n const base = match?.[1];\n const size = +(match?.[2] ?? 0);\n\n if (!base || !size) {\n return '';\n }\n\n // This should cover most common densities according to https://www.mydevice.io/#tab1\n let result = [1, 1.5, 2, 3, 4]\n .map(density => {\n let url = `${base}${Math.round(size * density)}`;\n if (forImageSet) {\n url = `url(\"${url}\")`;\n }\n\n return `${url} ${density}x`;\n })\n .join(', ');\n\n if (forImageSet) {\n result = `image-set(${result})`;\n }\n\n return result;\n}\n\n@Directive({\n selector: 'img[naturalSrcDensity]',\n})\nexport class NaturalSrcDensityDirective {\n private readonly elementRef = inject<ElementRef<HTMLImageElement>>(ElementRef);\n\n /**\n * Automatically apply image selection based on screen density.\n *\n * The given URL **MUST** be the normal density URL. And it **MUST** include\n * the size as last path segment. That size will automatically be changed\n * for other screen densities. That means that the server **MUST** be able to\n * serve an image of the given size.\n *\n * Usage:\n *\n * ```html\n * <img naturalSrcDensity=\"/api/image/123/200\" />\n * ```\n *\n * Will generate something like:\n *\n * ```html\n * <img\n * src=\"/api/image/123/200\"\n * srcset=\"/api/image/123/200, /api/image/123/300 1.5x, /api/image/123/400 2x, /api/image/123/600 3x, /api/image/123/800 4x\"\n * />\n * ```\n *\n * See https://web.dev/codelab-density-descriptors/\n */\n public readonly naturalSrcDensity = input.required<string>();\n\n public constructor() {\n effect(() => {\n const src = this.naturalSrcDensity();\n if (!src) {\n return;\n }\n\n this.elementRef.nativeElement.src = src;\n this.elementRef.nativeElement.srcset = densities(src, false);\n });\n }\n}\n","import {Directive, effect, ElementRef, inject, input} from '@angular/core';\nimport {densities} from './src-density.directive';\n\n@Directive({\n selector: '[naturalBackgroundDensity]',\n})\nexport class NaturalBackgroundDensityDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Automatically apply background image selection based on screen density.\n *\n * The given URL **MUST** be the normal density URL. And it **MUST** include\n * the size as last path segment. That size will automatically be changed\n * for other screen densities. That means that the server **MUST** be able to\n * serve an image of the given size.\n *\n * If the given URL starts with `url(`, or is not ending with a number, then\n * it will be set as-is, without any processing. This allows using url data,\n * such as `url(data:image/png;base64,aabbcc)`.\n *\n * Usage:\n *\n * ```html\n * <div naturalBackgroundDensity=\"/api/image/123/200\"></div>\n * <div naturalBackgroundDensity=\"/non-responsive.jpg\"></div>\n * <div naturalBackgroundDensity=\"url(data:image/png;base64,aabbcc)\"></div>\n * ```\n *\n * Will generate something like:\n *\n * ```html\n * <div style=\"background-image: image-set(url(\"/api/image/123/200\") 1x, url(\"/api/image/123/300\") 1.5x, url(\"/api/image/123/400\") 2x, url(\"/api/image/123/600\") 3x, url(\"/api/image/123/800\") 4x);\"></div>\n * <div style=\"background-image: url(\"/non-responsive.jpg\");\"></div>\n * <div style=\"background-image: url(data:image/png;base64,aabbcc)\"></div>\n * ```\n *\n * See https://developer.mozilla.org/en-US/docs/Web/CSS/image/image-set\n */\n public readonly naturalBackgroundDensity = input.required<string>();\n\n public constructor() {\n effect(() => {\n const src = this.naturalBackgroundDensity();\n\n if (src.startsWith('url(')) {\n this.elementRef.nativeElement.style.backgroundImage = src;\n return;\n }\n\n // Always include a fallback with standard syntax for browsers that don't support at all, or don't support without\n // prefixes (eg: Chrome v88 that we still see in production)\n const fallback = src ? `url(${src})` : '';\n this.elementRef.nativeElement.style.backgroundImage = fallback;\n\n const responsive = densities(src, true);\n if (responsive) {\n this.elementRef.nativeElement.style.backgroundImage = responsive;\n }\n });\n }\n}\n","import {ComponentType} from '@angular/cdk/portal';\nimport {Component, inject, OnDestroy} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {ActivatedRoute, Router, RouterLink} from '@angular/router';\n\nexport type NaturalDialogTriggerRoutingData<T, D> = {\n component: ComponentType<T>;\n afterClosedRoute?: RouterLink['routerLink'];\n dialogConfig: MatDialogConfig<D>;\n};\n\nexport type NaturalDialogTriggerProvidedData<D> = {\n data?: Readonly<D> | null;\n activatedRoute: ActivatedRoute;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type NaturalDialogTriggerRedirectionValues = RouterLink['routerLink'] | null | undefined | '' | -1;\n\n@Component({\n template: '',\n})\nexport class NaturalDialogTriggerComponent<T, D> implements OnDestroy {\n private readonly dialog = inject(MatDialog);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n\n private readonly dialogRef: MatDialogRef<T, NaturalDialogTriggerRedirectionValues>;\n\n private readonly triggerConfig: NaturalDialogTriggerRoutingData<T, D>;\n\n public constructor() {\n // Data from activated route\n this.triggerConfig = this.route.snapshot.data.trigger as NaturalDialogTriggerRoutingData<T, D>;\n\n // Get data relative to dialog service configuration\n const {data, ...config} = this.triggerConfig.dialogConfig;\n const dialogConfig: MatDialogConfig<NaturalDialogTriggerProvidedData<D>> = {\n ...config,\n data: {\n data: data,\n // Set data accessible into component instantiated by the dialog service\n activatedRoute: this.route,\n },\n };\n\n this.dialogRef = this.dialog.open<\n T,\n NaturalDialogTriggerProvidedData<D>,\n NaturalDialogTriggerRedirectionValues\n >(this.triggerConfig.component, dialogConfig);\n\n // Redirect on closing (if applicable)\n this.dialogRef.beforeClosed().subscribe(exitValue => this.redirect(exitValue));\n }\n\n /**\n * Called when router leaves route, and so on, closes the modal with undefined value to prevent a new redirection\n */\n public ngOnDestroy(): void {\n if (this.dialogRef) {\n this.dialogRef.close(-1); // -1 = no redirection\n }\n }\n\n /**\n * Redirects on modal closing under following rules/conditions\n *\n * If -1 : no redirection\n * If undefined, null or empty string : uses the router provided redirection route or fallbacks on parent route if router don't provide\n * If a value is provided, should be of type any[] and it's used for redirection.\n */\n public redirect(exitValue: NaturalDialogTriggerRedirectionValues): void {\n const isEmptyExitValue = exitValue == null || exitValue === ''; // undefined, null or ''\n\n if (exitValue === -1) {\n // if -1, don't redirect\n return;\n } else if (!isEmptyExitValue) {\n // If value provided, redirect to that route\n this.router.navigate(exitValue as any[]);\n } else if (isEmptyExitValue && this.triggerConfig.afterClosedRoute) {\n // If value is not provided (null) and router context specified default redirection route, use it\n this.router.navigate(this.triggerConfig.afterClosedRoute as any[]);\n } else if (isEmptyExitValue) {\n // If neither of component or router provides redirection, go to parent (care : parent can't have empty path : ''),\n this.router.navigate(['.'], {relativeTo: this.route.parent});\n }\n }\n}\n","import {DOCUMENT, inject, Injectable, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {Meta, Title} from '@angular/platform-browser';\nimport {ActivatedRouteSnapshot, Data, NavigationEnd, PRIMARY_OUTLET, Router} from '@angular/router';\nimport {NaturalDialogTriggerComponent} from '../../dialog-trigger/dialog-trigger.component';\nimport {combineLatest, filter, map, Observable, of, startWith, switchMap} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nexport type NaturalSeo = NaturalSeoBasic | NaturalSeoCallback | NaturalSeoResolve;\n\n/**\n * Typically used for \"static\" pages where there is not a single resolved object. So\n * all pages such as \"About\", or list of objects (list of risks, etc.).\n *\n * This should be the most common used variant.\n */\nexport type NaturalSeoBasic = Robots & {\n /**\n * The page title, that will be concatenated with application name\n */\n title: string;\n\n /**\n * If given will be used as page description, otherwise fallback on default value\n */\n description?: string;\n\n /**\n * List of parameters included in the canonical tag's url\n */\n canonicalQueryParamsWhitelist?: string[];\n};\n\ntype NaturalLinkDefinition = {\n charset?: string;\n crossorigin?: string;\n href?: string;\n hreflang?: string;\n media?: string;\n rel?: string;\n rev?: string;\n sizes?: string;\n target?: string;\n type?: string;\n} & Record<string, string>;\n/**\n * Typically used for a \"dynamic\" page where a single object is resolved. So a detail page, such\n * as the detail of a risk and so on.\n */\nexport type NaturalSeoResolve = Robots & {\n /**\n * The key `model` will be used in the resolved data to find the resolved object. The fullName\n * or name of the object will be used for page title, and the object description, if any,\n * will be used for page description.\n */\n resolve: true;\n};\n\n/**\n * Rarely used for a page that has very specific needs and need to build title and description in a custom way.\n * The callback back will be given the resolved data, and it is up to the callback to find whatever it needs.\n */\nexport type NaturalSeoCallback = (routeData: Data) => NaturalSeoBasic | Observable<NaturalSeoBasic>;\n\n/**\n * Typically used to type the routing data received in the component, eg:\n *\n * ```ts\n * class MyComponent extends NaturalAbstractDetail<MyService, NaturalSeoResolveData> {}\n * ```\n */\nexport type NaturalSeoResolveData = {\n seo: NaturalSeoBasic;\n};\n\ntype Robots = {\n /**\n * If given will be used as robots meta tag, otherwise fallback on default value\n */\n robots?: string;\n};\n\ntype NaturalSeoConfigPlain = {\n /**\n * The name of the application that will always appear in the page title\n */\n readonly applicationName: string;\n\n /**\n * Default value for description meta that is used for pages without value\n */\n readonly defaultDescription?: string;\n\n /**\n * Default value for robots meta that is used for pages without value\n */\n readonly defaultRobots?: string;\n\n /**\n * If given, the callback will be called for each route and must return a string that will\n * be inserted between the page title and the application name.\n *\n * It should be used to complete the title with info that are often, but not necessarily always,\n * available throughout the entire application. Typically used for the site/state in OKpilot.\n */\n readonly extraPart?: (routeData: Data) => string;\n\n /**\n * Used to generate alternative tags\n * <link rel=\"alternate\" hreflang=\"en\" href=\"https://www.example.com/en/page\">\n */\n readonly languages?: readonly string[];\n};\n\nexport type NaturalSeoConfig = NaturalSeoConfigPlain | Observable<NaturalSeoConfigPlain>;\nexport const NATURAL_SEO_CONFIG = new InjectionToken<NaturalSeoConfig>('Configuration for SEO service');\n\nexport function stripTags(str: string): string {\n return str.replace(/<\\/?[^>]*>/g, '');\n}\n\ntype Model = {\n name?: string;\n fullName?: string;\n description?: string;\n};\n\ntype ResolvedData = {\n model?: Model | Observable<Model>;\n};\n\n/**\n * This service is responsible to keep up to date the page title and page description according\n * to what is configured in routing or default values.\n *\n * It **must** be injected in the root module of the application to have effects in all modules. And it\n * must be provided a configuration.\n *\n * The full title has the following structure:\n *\n * dialog title - page title - extra part - app name\n *\n * `dialog title` only exists if a `NaturalDialogTriggerComponent` is currently open, and that some SEO is\n * configured for it in the routing.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalSeoService {\n private readonly router = inject(Router);\n private readonly titleService = inject(Title);\n private readonly metaTagService = inject(Meta);\n private readonly document = inject(DOCUMENT);\n private locale = inject(LOCALE_ID);\n\n private routeData?: Data;\n private config: NaturalSeoConfigPlain = {\n applicationName: '',\n };\n\n public constructor() {\n const configToken = inject(NATURAL_SEO_CONFIG);\n\n combineLatest({\n config: configToken instanceof Observable ? configToken.pipe(startWith(this.config)) : of(configToken),\n navigationEnd: this.router.events.pipe(filter(event => event instanceof NavigationEnd)),\n })\n .pipe(\n takeUntilDestroyed(),\n switchMap(({config}) => {\n this.config = config;\n const root = this.router.routerState.root.snapshot;\n this.routeData = this.getRouteData(root);\n\n const seo: NaturalSeo = this.routeData.seo ?? {title: ''};\n const dialogRouteData = this.getDialogRouteData(root);\n const dialogSeo: NaturalSeo = dialogRouteData?.seo;\n\n const basic = this.toBasic(seo, this.routeData);\n const dialogBasic =\n dialogRouteData && dialogSeo ? this.toBasic(dialogSeo, dialogRouteData) : of(null);\n\n return combineLatest({basic, dialogBasic});\n }),\n )\n .subscribe(({basic, dialogBasic}) => {\n if (dialogBasic) {\n basic = {\n ...dialogBasic,\n title: this.join([dialogBasic.title, basic.title]),\n };\n }\n\n this.update(basic);\n });\n }\n\n /**\n * Update the SEO with given info. The extra part and app name will be appended automatically.\n *\n * In most cases, this should not be used. And instead, the SEO should be configured in the routing,\n * possibly with the callback variant for some dynamism.\n *\n * But in rare cases, only the Component is able to build a proper page title, after it gathered everything it\n * needed. For those cases, the Component can inject this service and update the SEO directly.\n */\n public update(seo: NaturalSeoBasic): void {\n // Title\n const parts = [\n seo.title,\n this.config.extraPart && this.routeData ? this.config.extraPart(this.routeData) : '',\n this.config.applicationName,\n ];\n\n const title = this.join(parts);\n this.titleService.setTitle(title);\n\n // Description\n const description = seo?.description ?? this.config.defaultDescription;\n this.updateTag('description', description);\n\n // Robots\n const robots = seo?.robots ?? this.config.defaultRobots;\n this.updateTag('robots', robots);\n\n // Canonical\n // Add language in url (after domain) if some languages are provided only\n const language = this.config.languages?.length && this.locale ? this.locale.split('-')[0] : '';\n const urlParts = this.getUrlParts(seo.canonicalQueryParamsWhitelist ?? []);\n this.updateLinkTag({rel: 'canonical', href: this.getUrl(urlParts, language)});\n this.updateAlternates(urlParts);\n }\n\n private updateAlternates(urlParts: {url: string; params: string}): void {\n this.config.languages?.forEach(language => {\n this.updateLinkTag({rel: 'alternate', href: this.getUrl(urlParts, language), hreflang: language});\n });\n }\n\n private getUrlParts(whiteListedParams: string[]): {url: string; params: string} {\n let url = 'https://' + this.document.defaultView?.window.location.hostname;\n const urlTree = this.router.parseUrl(this.router.url);\n\n // need better like something recursive ?\n if (urlTree.root.hasChildren()) {\n const segments = urlTree.root.children.primary?.segments;\n if (segments && segments.length > 0) {\n url += '/' + segments.map(segment => segment.path).join('/');\n }\n }\n\n // Query Params\n let params = '';\n for (const whiteListedParam of whiteListedParams) {\n if (whiteListedParam in urlTree.queryParams) {\n const key = encodeURIComponent(whiteListedParam);\n const value = encodeURIComponent(urlTree.queryParams[whiteListedParam]);\n if (params.length) {\n params += '&';\n }\n params += `${key}=${value}`;\n }\n }\n\n if (params.length) {\n params = '?' + params;\n }\n\n return {url, params};\n }\n\n /**\n * Add language between domain and uri https://example.com/fr/folder/page\n */\n private getUrl(urlParts: {url: string; params: string}, language?: string): string {\n let url = urlParts.url;\n\n if (language) {\n url = this.addLanguageSegment(url, language);\n }\n\n if (urlParts.params) {\n url += urlParts.params;\n }\n\n return url;\n }\n\n private addLanguageSegment(url: string, language: string): string {\n const urlObj = new URL(url);\n const newPath = urlObj.pathname === '/' ? `/${language}` : `/${language}${urlObj.pathname}`;\n return urlObj.origin + newPath + urlObj.search + urlObj.hash;\n }\n\n private join(parts: string[]): string {\n return parts.filter(s => !!s).join(' - ');\n }\n\n private updateTag(name: string, value?: string): void {\n if (value) {\n this.metaTagService.updateTag({\n name: name,\n value: stripTags(value),\n });\n } else {\n this.metaTagService.removeTag(`name=\"${name}\"`);\n }\n }\n\n private updateLinkTag(definition: NaturalLinkDefinition): void {\n const linkElement =\n this.document.head.querySelector<HTMLLinkElement>(this.parseSelector(definition)) ??\n this.document.head.appendChild(this.document.createElement('link'));\n\n if (linkElement) {\n Object.keys(definition).forEach((attribute: string) => {\n linkElement.setAttribute(attribute, definition[attribute]);\n });\n }\n }\n\n /**\n * Returns selector to use in querySelector to get the given link\n */\n private parseSelector(definition: NaturalLinkDefinition): string {\n let attributes = 'link';\n Object.keys(definition).forEach(attr => {\n if (attr !== 'href') {\n attributes += `[${attr}=\"${definition[attr]}\"]`;\n }\n });\n\n return attributes;\n }\n\n /**\n * Returns the data from the most deep/specific activated route\n */\n private getRouteData(route: ActivatedRouteSnapshot): Data {\n if (route.firstChild) {\n return this.getRouteData(route.firstChild);\n } else {\n return route.data;\n }\n }\n\n /**\n * Returns the data from the `NaturalDialogTriggerComponent` if one is open\n */\n private getDialogRouteData(route: ActivatedRouteSnapshot): Data | null {\n if (route.component === NaturalDialogTriggerComponent && route.outlet !== PRIMARY_OUTLET) {\n return route.data;\n }\n\n for (const child of route.children) {\n const data = this.getDialogRouteData(child);\n if (data) {\n return data;\n }\n }\n\n return null;\n }\n\n private toBasic(seo: NaturalSeo, routeData: ResolvedData): Observable<NaturalSeoBasic> {\n if (typeof seo === 'function') {\n const result = seo(routeData);\n return result instanceof Observable ? result : of(result);\n } else if ('resolve' in seo) {\n if (!('model' in routeData)) {\n throw new Error('Could not find resolved data `model` for SEO service');\n }\n\n const model = routeData.model;\n\n return (model instanceof Observable ? model : of(model)).pipe(\n map(value => {\n return {\n title: value?.fullName ?? value?.name ?? '',\n description: value?.description,\n robots: seo.robots,\n };\n }),\n );\n }\n\n return of(seo);\n }\n}\n","import {EnvironmentProviders, inject, provideAppInitializer, Provider} from '@angular/core';\nimport {NATURAL_SEO_CONFIG, NaturalSeoConfig, NaturalSeoService} from './seo.service';\n\n/**\n * Configure and starts `NaturalSeoService`\n */\nexport function provideSeo(config: NaturalSeoConfig): (EnvironmentProviders | Provider)[] {\n return [\n {\n provide: NATURAL_SEO_CONFIG,\n useValue: config,\n },\n provideAppInitializer(() => {\n // injection required, but works without doing anything else\n inject(NaturalSeoService);\n }),\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './directives/linkable-tab.directive';\nexport * from './pipes/capitalize.pipe';\nexport * from './pipes/ellipsis.pipe';\nexport * from './pipes/enum.pipe';\nexport {NaturalErrorMessagePipe} from './pipes/error-message.pipe';\nexport {NaturalTimeAgoPipe} from './pipes/time-ago.pipe';\nexport * from './services/memory-storage';\nexport {NaturalSrcDensityDirective} from './directives/src-density.directive';\nexport {NaturalBackgroundDensityDirective} from './directives/background-density.directive';\nexport {NATURAL_SEO_CONFIG, NaturalSeoService} from './services/seo.service';\nexport type {\n NaturalSeoConfig,\n NaturalSeo,\n NaturalSeoBasic,\n NaturalSeoResolve,\n NaturalSeoCallback,\n NaturalSeoResolveData,\n} from './services/seo.service';\nexport {provideSeo} from './services/seo.provider';\n","import {Component, Input, input} from '@angular/core';\nimport {Literal, NameOrFullName} from '../../types/types';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {RouterLink} from '@angular/router';\nimport {MatButton} from '@angular/material/button';\n\n@Component({\n selector: 'natural-detail-header',\n imports: [MatButton, RouterLink, MatIcon, NaturalIconDirective],\n templateUrl: './detail-header.component.html',\n styleUrl: './detail-header.component.scss',\n})\nexport class NaturalDetailHeaderComponent {\n /**\n * Base URL used to build links, defaults to '/'\n */\n public readonly currentBaseUrl = input<string>();\n\n /**\n * Must be set to get proper links when used in panels\n */\n public readonly isPanel = input(false);\n\n /**\n * If given will show icon before title\n */\n @Input() public icon = '';\n /**\n * Title shown if model has no name, or empty name.\n *\n * Typically should be the human name for the object type, eg: 'Product'\n */\n @Input() public label = '';\n\n /**\n * Label of the root of the breadcrumb, defaults to the value of `label`.\n *\n * Typically should be the plural form of the object type, eg: 'Products'\n */\n @Input() public rootLabel = '';\n\n /**\n * Title shown if model has no id.\n *\n * Typically should be similar to 'New product'.\n */\n public readonly newLabel = input('');\n @Input({required: true}) public model!: Literal;\n public readonly breadcrumbs = input<NameOrFullName[]>([]);\n public readonly listRoute = input<any[]>([]);\n public readonly listFragment = input<string>();\n public readonly link = input<(id: string) => any[]>();\n\n public getRootLink(): string[] {\n return [this.currentBaseUrl() || '/'].concat(this.listRoute());\n }\n\n public getLink(id: string): any[] {\n const link = this.link();\n if (link) {\n return this.getRootLink().concat(link(id));\n }\n\n return this.getRootLink().concat([id]);\n }\n}\n","<div class=\"breadcrumb\">\n @if (rootLabel || label) {\n <a color=\"primary\" mat-button [routerLink]=\"isPanel() ? [] : getRootLink()\" [fragment]=\"listFragment()\">{{\n rootLabel || label\n }}</a>\n }\n @for (parent of breadcrumbs(); track parent.id) {\n /\n <a color=\"primary\" mat-button [routerLink]=\"isPanel() ? [] : getLink(parent.id)\">\n {{ parent?.fullName || parent?.name }}</a\n >\n }\n</div>\n\n<div class=\"body\">\n @if (icon) {\n <div style=\"width: 30px\">\n <mat-icon [naturalIcon]=\"icon\" />\n </div>\n }\n @if (!model.id) {\n <div class=\"mat-font-headline-sm nat-no-margin newLabel\">{{ newLabel() }}</div>\n }\n @if (model.id) {\n <div class=\"mat-font-headline-sm nat-no-margin label\">{{ model.name || model.fullName || label }}</div>\n }\n <div>\n <ng-content />\n </div>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './detail-header.component';\n","import {Component, DestroyRef, inject} from '@angular/core';\nimport {MatListOption, MatSelectionList} from '@angular/material/list';\nimport {BehaviorSubject, merge, Observable, of} from 'rxjs';\nimport {FilterGroupConditionField, Scalar} from '../../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn, Validators} from '@angular/forms';\nimport {map, startWith} from 'rxjs/operators';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from '../types';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatFormField, MatLabel} from '@angular/material/form-field';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nexport type TypeSelectItem =\n | Scalar\n | {\n id: Scalar;\n name: Scalar;\n }\n | {\n value: Scalar;\n name: Scalar;\n };\n\nexport type TypeSelectConfiguration = {\n items: TypeSelectItem[] | Observable<TypeSelectItem[]>;\n multiple?: boolean;\n /**\n * If true (default) a selectbox allows to choose an operator. Otherwise, the selectbox is hidden and the operator will always be `is`.\n */\n operators?: boolean;\n};\n\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n MatSelectionList,\n MatListOption,\n ],\n templateUrl: './type-select.component.html',\n})\nexport class TypeSelectComponent implements DropdownComponent {\n private readonly destroyRef = inject(DestroyRef);\n public readonly renderedValue = new BehaviorSubject<string>('');\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public items: TypeSelectItem[] = [];\n public readonly configuration: Required<TypeSelectConfiguration>;\n\n private readonly defaults: Required<TypeSelectConfiguration> = {\n items: [],\n multiple: true,\n operators: true,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeSelectConfiguration>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n public getId(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item) {\n return (item as any).id || (item as any).value;\n }\n\n return item;\n }\n\n public getDisplay(item: TypeSelectItem): Scalar {\n if (typeof item === 'object' && item?.name) {\n return item.name;\n }\n\n return item as Scalar;\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const values = this.valueCtrl.value;\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private isMultiple(): boolean {\n return this.configuration.multiple;\n }\n\n private getItemById(id: Scalar): TypeSelectItem | undefined {\n return this.items.find(item => this.getId(item) === id);\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (condition) {\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n }\n\n // Always reload value, even without condition because we need to load list of available items in all cases\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n private reloadValue(condition: FilterGroupConditionField | null): Observable<Scalar[]> {\n const wantedIds = condition?.in?.values ?? [];\n\n const items$ = Array.isArray(this.configuration.items)\n ? of(this.configuration.items)\n : this.configuration.items;\n\n return items$.pipe(\n takeUntilDestroyed(this.destroyRef),\n map(items => {\n this.items = items;\n\n // Reload selection, according to possible values from configuration\n const possibleIds = this.items.map(item => this.getId(item));\n const wantedAndPossibleIds = wantedIds.filter(id => possibleIds.some(i => i === id));\n\n return wantedAndPossibleIds;\n }),\n );\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection =\n this.valueCtrl.value\n ?.map((id: Scalar) => {\n const item = this.getItemById(id);\n if (item) {\n return this.getDisplay(item);\n }\n })\n .join(', ') ?? null;\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (!this.configuration.operators) {\n return 'is';\n }\n\n if (condition.in && !condition.in.not) {\n return 'is';\n } else if (condition.in?.not) {\n return 'isnot';\n } else if (condition.null?.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n private operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: Scalar[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {in: {values: values}};\n case 'isnot':\n return {in: {values: values, not: true}};\n case 'any':\n return {null: {not: true}};\n case 'none':\n return {null: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + (key as string));\n }\n }\n}\n","<form [formGroup]=\"form\">\n @if (configuration.operators) {\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n\n @if (requireValueCtrl) {\n <mat-selection-list [formControl]=\"valueCtrl\" [multiple]=\"configuration.multiple\">\n @for (item of items; track item) {\n <mat-list-option togglePosition=\"before\" [value]=\"getId(item)\">\n {{ getDisplay(item) }}\n </mat-list-option>\n }\n </mat-selection-list>\n }\n</form>\n","import {Directive, inject} from '@angular/core';\nimport {BehaviorSubject, merge, Observable} from 'rxjs';\nimport {FilterGroupConditionField} from '../search/classes/graphql-doctrine.types';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../search/types/dropdown-component';\nimport {FormControl, FormGroup, ValidatorFn, Validators} from '@angular/forms';\nimport {PossibleDiscreteOperatorKeys, possibleDiscreteOperators} from './types';\nimport {startWith} from 'rxjs/operators';\n\n@Directive()\nexport abstract class AbstractAssociationSelectComponent<C> implements DropdownComponent {\n public readonly configuration: C;\n public readonly renderedValue = new BehaviorSubject<string>('');\n\n public requireValueCtrl = false;\n public readonly operators = possibleDiscreteOperators;\n public readonly operatorCtrl = new FormControl<PossibleDiscreteOperatorKeys>('is', {nonNullable: true});\n public readonly valueCtrl = new FormControl();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n\n public constructor() {\n const data = inject<NaturalDropdownData<C>>(NATURAL_DROPDOWN_DATA);\n this.configuration = data.configuration;\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n this.reloadCondition(data.condition);\n }\n\n /**\n * Reload the value from API (`operatorCtrl` should not be touched)\n */\n protected abstract reloadValue(condition: FilterGroupConditionField): Observable<unknown>;\n\n protected abstract renderValueWithoutOperator(): string;\n\n public abstract getCondition(): FilterGroupConditionField;\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private initValidators(): void {\n const whitelist: PossibleDiscreteOperatorKeys[] = ['is', 'isnot'];\n this.requireValueCtrl = whitelist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n\n this.reloadValue(condition).subscribe(value => {\n this.valueCtrl.setValue(value);\n this.renderedValue.next(this.getRenderedValue());\n });\n }\n\n protected getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (!operator || !this.isValid()) {\n return '';\n }\n\n const selection = this.renderValueWithoutOperator();\n\n return [operator.label, selection].filter(v => v).join(' ');\n }\n\n protected conditionToOperatorKey(condition: FilterGroupConditionField): PossibleDiscreteOperatorKeys {\n if (condition.have && !condition.have.not) {\n return 'is';\n } else if (condition.have?.not) {\n return 'isnot';\n } else if (condition.empty?.not) {\n return 'any';\n } else if (condition.empty && !condition.empty.not) {\n return 'none';\n }\n\n return 'is';\n }\n\n protected operatorKeyToCondition(key: PossibleDiscreteOperatorKeys, values: string[]): FilterGroupConditionField {\n switch (key) {\n case 'is':\n return {have: {values: values}};\n case 'isnot':\n return {have: {values: values, not: true}};\n case 'any':\n return {empty: {not: true}};\n case 'none':\n return {empty: {not: false}};\n default:\n throw new Error('Unsupported operator key: ' + (key as string));\n }\n }\n}\n","import {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {computed, Directive, DoCheck, inject, input, Input, OnInit, output} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormControlDirective,\n FormControlName,\n NgControl,\n Validators,\n} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\n\n/**\n * This will completely ignore internal formControl and instead use the one from the component\n * which comes from outside of this component. This basically allows us to **not** depend on\n * touched status propagation between outside and inside world, and thus get rid of our legacy\n * custom FormControl class (\"NaturalFormControl\").\n */\nclass ExternalFormControlMatcher<TValue, TInput> extends ErrorStateMatcher {\n public constructor(private readonly component: AbstractSelect<TValue, TInput>) {\n super();\n }\n\n public override isErrorState(): boolean {\n const externalCtrl = this.component.ngControl?.control || this.component.internalCtrl;\n if (externalCtrl) {\n return !!(externalCtrl.errors && (externalCtrl.touched || externalCtrl.dirty));\n }\n\n return false;\n }\n}\n\n@Directive()\nexport abstract class AbstractSelect<TValue, TInput> implements OnInit, ControlValueAccessor, DoCheck {\n public readonly placeholder = input<string>();\n\n /**\n * Mat-hint, if given, and it is non-empty, then `subscriptSizing` will\n * automatically be set to `dynamic` to allow for long, wrapping text.\n */\n public readonly hint = input<string | null>();\n\n protected readonly subscriptSizing = computed(() => (this.hint() ? 'dynamic' : 'fixed'));\n\n /**\n * If given an error message, it will be displayed in a `<mat-error>`, but only if the control\n * is actually in an error state via one of its validators.\n *\n * This is not needed for the special case of the required validator, because the message is hardcoded.\n */\n @Input() public error: string | null = null;\n\n /**\n * If the field is required\n */\n @Input()\n public set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.applyRequired();\n }\n\n public get required(): boolean {\n return !!this._required;\n }\n\n private _required: boolean | undefined;\n\n /**\n * Add a suffix button that is a link to given destination\n */\n @Input() public navigateTo?: any[] | string | null;\n\n /**\n * If provided cause a new clear button to appear\n */\n public readonly clearLabel = input<string>();\n\n /**\n * Whether to show the search icon\n */\n public readonly showIcon = input(true);\n\n /**\n * Icon name\n */\n public readonly icon = input('search');\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n public readonly displayWith = input<(item: TValue | null) => string>();\n\n /**\n * Emit the selected value whenever it changes\n */\n public readonly selectionChange = output<TValue | null>();\n\n /**\n * Emits when internal input is blurred\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n public readonly blur = output();\n\n /**\n * Contains internal representation for current selection AND searched text (for autocomplete)\n *\n * It is **not** necessarily `TValue | null`.\n *\n * - NaturalSelectComponent: `string | TValue | null`. We allow `string`\n * only when `optionRequired` is false, so most of the time it is `TValue | null`.\n * - NaturalSelectHierarchicComponent: `string | null`.\n * - NaturalSelectEnumComponent: `TValue | null`.\n *\n * In natural-select context, we use pristine and dirty to identify if the displayed value is search or committed model :\n * - Pristine status (unchanged value) means the model is displayed and propagated = the selection is committed\n * - Dirty status (changed value) means we are in search/autocomplete mode\n */\n public readonly internalCtrl = new FormControl<TInput | null>(null);\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onChange?: (item: TValue | null) => void;\n\n /**\n * Interface with ControlValueAccessor\n * Notifies parent model / form controller\n */\n public onTouched?: () => void;\n\n public readonly matcher: ExternalFormControlMatcher<TValue, TInput>;\n public readonly ngControl = inject(NgControl, {optional: true, self: true});\n\n public constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n this.matcher = new ExternalFormControlMatcher(this);\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.applyRequired();\n }\n }\n\n public writeValue(value: TInput | null): void {\n this.internalCtrl.setValue(value);\n }\n\n public ngOnInit(): void {\n const isReactive = this.ngControl instanceof FormControlDirective || this.ngControl instanceof FormControlName;\n if (isReactive && typeof this._required !== 'undefined') {\n console.warn('<natural-select-*> should not be used as ReactiveForm and with the [required] attribute');\n }\n }\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public registerOnChange(fn: (item: TValue | null) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public abstract getDisplayFn(): (item: TValue | null) => string;\n\n /**\n * Commit the model to null\n * Emit and event to update the model\n */\n public clear(): void {\n this.internalCtrl.setValue(null);\n this.propagateValue(null);\n }\n\n /**\n * If input is dirty (search running) restore to model value\n */\n public onBlur(): void {\n this.touch();\n this.blur.emit();\n }\n\n /**\n * Commit the model change\n */\n public propagateValue(value: TValue | null): void {\n // before selectionChange to allow formControl to update before change is effectively emitted\n if (this.onChange) {\n this.onChange(value);\n }\n\n this.selectionChange.emit(value);\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel() && !!this.internalCtrl.value;\n }\n\n public touch(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n public hasRequiredError(): boolean {\n const control = this.ngControl?.control ? this.ngControl?.control : this.internalCtrl;\n\n return control.hasError('required');\n }\n\n /**\n * Apply Validators.required on the internal form, based on ngControl or [required] attribute, giving priority to attribute.\n */\n private applyRequired(): void {\n // Required status on parent validator\n const outerRequiredStatus = this?.ngControl?.control?.hasValidator(Validators.required);\n\n // Wanted required status, giving priority to template\n const newRequiredStatus = typeof this._required !== 'undefined' ? this._required : outerRequiredStatus;\n\n // Actual internal validation status\n const currentRequiredStatus = this.internalCtrl.hasValidator(Validators.required);\n\n // If wanted status is similar to actual status, stop everything\n if (currentRequiredStatus === newRequiredStatus) {\n return;\n }\n\n // Apply only if changed\n if (newRequiredStatus) {\n this.internalCtrl.setValidators(Validators.required);\n } else {\n this.internalCtrl.clearValidators();\n }\n\n this.internalCtrl.updateValueAndValidity();\n }\n}\n","import {\n AfterViewInit,\n Component,\n contentChild,\n DestroyRef,\n inject,\n Input,\n input,\n OnInit,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatAutocomplete, MatAutocompleteTrigger} from '@angular/material/autocomplete';\nimport {merge} from 'es-toolkit';\nimport {Observable} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, finalize, map} from 'rxjs/operators';\nimport {PaginatedData} from '../../../classes/data-source';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {NaturalAbstractModelService} from '../../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall, Literal} from '../../../types/types';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {MatProgressSpinner} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix} from '@angular/material/form-field';\nimport {MatOption} from '@angular/material/core';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n// Return the type of TValue for the given TService\ntype ValueTypeFor<TService> = string | ExtractTallOne<TService>;\n\n/**\n * Default usage:\n * ```html\n * <natural-select [service]=\"myServiceInstance\" [(model)]=\"myModel\" (modelChange)=myChangeFn($event) />\n * ```\n *\n * Custom template usage :\n * ```html\n * <natural-select [service]=\"svc\" [(ngModel)]=\"model\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-select>\n * ```\n *\n * `[(ngModel)]` and `(ngModelChange)` are optional.\n *\n * Placeholder :\n * ```html\n * <natural-select placeholder=\"my placeholder\" />\n * ```\n *\n * Search with like %xxx% on specified field `name` instead of custom filter on whole object\n * ```html\n * <natural-select searchField=\"name\" />\n * ```\n *\n * Allows to input free string without selecting an option from autocomplete suggestions\n * ```html\n * <natural-select [optionRequired]=\"false\" />\n * ```\n */\n@Component({\n selector: 'natural-select',\n imports: [\n MatAutocomplete,\n NgTemplateOutlet,\n AsyncPipe,\n MatOption,\n MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatPrefix,\n MatSuffix,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatIcon,\n NaturalIconDirective,\n MatProgressSpinner,\n MatButton,\n MatIconButton,\n MatTooltip,\n RouterLink,\n MatAutocompleteTrigger,\n ],\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n})\nexport class NaturalSelectComponent<\n TService extends NaturalAbstractModelService<\n any,\n any,\n PaginatedData<Literal>,\n QueryVariables,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >\n extends AbstractSelect<ValueTypeFor<TService>, ValueTypeFor<TService>>\n implements OnInit, ControlValueAccessor, AfterViewInit\n{\n private readonly destroyRef = inject(DestroyRef);\n public readonly autoTrigger = viewChild.required(MatAutocompleteTrigger);\n public readonly itemTemplate = contentChild(TemplateRef);\n\n /**\n * Service with watchAll function that accepts queryVariables.\n */\n public readonly service = input.required<TService>();\n\n /**\n * If false, allows to input free string without selecting an option from autocomplete suggestions\n */\n public readonly optionRequired = input(true);\n\n /**\n * The field on which to search for, default to 'custom'.\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n @Input() public searchField: 'custom' | string = 'custom';\n\n /**\n * The operator with which to search for, default to 'search' if `searchField` is 'custom', else 'like'.\n */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n @Input() public searchOperator: 'search' | string | null = null;\n\n /**\n * Cache the committed value during search mode.\n * It's used to be restored in case we cancel the selection\n */\n private lastValidValue: ValueTypeFor<TService> | null = null;\n\n /**\n * Additional filter for query\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter'] | null | undefined) {\n this.variablesManager.set('additional-filter', {filter: filter});\n }\n\n /**\n * Items returned by server to show in listing\n */\n public items: null | Observable<readonly any[]> = null;\n\n /**\n * Whether we are searching something\n */\n public loading = false;\n\n /**\n * If some items are not shown in result list\n * Shows a message after list if true\n */\n public hasMoreItems = false;\n\n public nbTotal = 0;\n\n /**\n * Default page size\n */\n public readonly pageSize = input(10);\n\n /**\n * Init search options\n */\n private readonly variablesManager = new NaturalQueryVariablesManager<QueryVariables>();\n\n /**\n * Whether the value can be changed\n */\n @Input()\n public override set disabled(disabled: boolean) {\n disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.initService();\n }\n\n public ngAfterViewInit(): void {\n this.internalCtrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef), distinctUntilChanged(), debounceTime(300))\n .subscribe(val => this.search(val));\n }\n\n public onInternalFormChange(): void {\n // If we allow free string typing, then we propagate it as it is being typed\n if (!this.optionRequired()) {\n this.propagateValue(this.internalCtrl.value);\n }\n }\n\n public override onBlur(): void {\n if (this.internalCtrl.dirty) {\n this.reset();\n }\n super.onBlur();\n }\n\n /**\n * Reset form to it's initial value\n * Discard searched text (in autocomplete use case)\n * Doest not commit the change to the model (no change event is emitted)\n */\n public reset(): void {\n this.internalCtrl.setValue(this.lastValidValue);\n this.internalCtrl.markAsPristine();\n }\n\n /**\n * Enter semantic means we want to validate something.\n * If we hit ENTER while typing a text, the stroke is ignored because the value is invalid (it's accepted in free text mode)\n * If we hit ENTER while the input field is empty, we validate the unselection (empty is a valid value)\n */\n public onKeyEnter(): void {\n if (!this.internalCtrl.value) {\n this.clear();\n this.autoTrigger().closePanel();\n }\n }\n\n public override writeValue(value: ValueTypeFor<TService> | null): void {\n super.writeValue(value);\n this.lastValidValue = this.internalCtrl.value;\n }\n\n private initService(): void {\n // Assert given service has a watchAll function\n if (typeof this.service().watchAll !== 'function') {\n throw new TypeError('Provided service does not contain watchAll function');\n }\n\n const defaultPagination = {\n pagination: {\n pageIndex: 0,\n pageSize: this.pageSize(),\n },\n };\n\n const variables = merge(defaultPagination, this.getSearchFilter(null));\n this.variablesManager.set('variables', variables);\n }\n\n public startSearch(): void {\n // Start search only once\n if (this.items) {\n return;\n }\n\n // Init query, and when query results arrive, finish loading, and count items\n this.items = this.service()\n .watchAll(this.variablesManager)\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n finalize(() => (this.loading = false)),\n map(data => {\n this.loading = false;\n this.nbTotal = data.length;\n const nbListed = Math.min(data.length, this.pageSize());\n this.hasMoreItems = this.nbTotal > nbListed;\n\n return data.items;\n }),\n );\n\n this.loading = true;\n this.items.subscribe();\n }\n\n /**\n * Commit the model change\n * Set internal form as pristine to reflect that the visible value match the model\n */\n public override propagateValue(value: ValueTypeFor<TService> | null): void {\n this.internalCtrl.markAsPristine();\n this.lastValidValue = this.internalCtrl.value;\n this.loading = false;\n\n // If we cleared value via button, but we allow free string typing, then force to empty string\n if (!this.optionRequired() && value === null) {\n value = '';\n }\n\n super.propagateValue(value);\n }\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: ValueTypeFor<TService> | null) => string {\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return (item: any) => {\n if (!item) {\n return '';\n }\n\n if (typeof item === 'string') {\n return item;\n }\n\n return item.fullName || item.name || item.iban || item[this.searchField] || item.id;\n };\n }\n\n public override clear(): void {\n this.search(null);\n super.clear();\n }\n\n public search(term: ValueTypeFor<TService> | null): void {\n if (typeof term === 'string' || term === null) {\n if (term) {\n this.loading = !!this.items;\n }\n\n this.variablesManager.merge('variables', this.getSearchFilter(term));\n }\n }\n\n public override showClearButton(): boolean {\n return this.internalCtrl?.enabled && !!this.clearLabel() && !!this.internalCtrl.value;\n }\n\n private getSearchFilter(term: string | null): QueryVariables {\n const searchOperator = this.searchOperator ?? (this.searchField === 'custom' ? 'search' : 'like');\n if (term && searchOperator === 'like') {\n term = '%' + term + '%';\n }\n\n return {\n filter: {\n groups: [\n {\n conditions: [\n {\n [this.searchField]: term\n ? {\n [searchOperator]: {value: term},\n }\n : null,\n },\n ],\n },\n ],\n },\n };\n }\n\n public getVariablesForDebug(): Readonly<QueryVariables> | undefined {\n return this.variablesManager.variables.value;\n }\n}\n","<!-- eslint-disable @angular-eslint/template/cyclomatic-complexity -->\n<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n panelWidth=\"auto !important\"\n [displayWith]=\"getDisplayFn()\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n>\n @for (item of items | async; track $index) {\n <mat-option [value]=\"item\">\n @let customTemplate = itemTemplate();\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"customTemplate ? customTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (hasMoreItems) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">Saisir pour chercher parmi {{ nbTotal }} résultats</div>\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder() }}</mat-label>\n\n <input\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n [errorStateMatcher]=\"matcher\"\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger().openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n />\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon()) {\n <mat-icon matIconPrefix [naturalIcon]=\"icon()\" />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner mode=\"indeterminate\" [diameter]=\"21\" [strokeWidth]=\"5\" />\n </div>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel()) {\n <button matIconButton i18n-matTooltip matTooltip=\"Désélectionner\" (click)=\"clear()\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired()) {\n <button matIconButton i18n-matTooltip matTooltip=\"Annuler la recherche\" (click)=\"reset()\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button color=\"error\" mat-button (click)=\"clear()\">{{ clearLabel() }}</button>\n }\n </div>\n}\n","import {Component} from '@angular/core';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {ExtractTone, ExtractVall, UntypedModelService} from '../../../types/types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {NaturalSelectComponent} from '../../select/select/select.component';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatFormField, MatLabel} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport type TypeSelectNaturalConfiguration<TService extends UntypedModelService> = {\n service: TService;\n placeholder: string;\n filter?: ExtractVall<TService>['filter'];\n pageSize?: number;\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatSelect, MatOption, NaturalSelectComponent],\n templateUrl: './type-natural-select.component.html',\n})\nexport class TypeNaturalSelectComponent<\n TService extends UntypedModelService,\n> extends AbstractAssociationSelectComponent<TypeSelectNaturalConfiguration<TService>> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const id = this.valueCtrl.value?.id;\n const values = id ? [id] : [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, values);\n }\n\n protected reloadValue(condition: FilterGroupConditionField): Observable<ExtractTone<TService>> {\n if (!condition.have) {\n return EMPTY;\n }\n\n return this.configuration.service.getOne(condition.have.values[0]);\n }\n\n protected renderValueWithoutOperator(): string {\n const selected: {id: string; name?: string; fullName?: string} | null = this.valueCtrl.value;\n const selectedName = selected?.fullName || selected?.name || '';\n\n return selectedName;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (configuration && requireValueCtrl) {\n <natural-select\n style=\"display: inline\"\n [formControl]=\"valueCtrl\"\n [placeholder]=\"configuration.placeholder\"\n [service]=\"configuration.service\"\n [filter]=\"configuration.filter\"\n [pageSize]=\"configuration.pageSize || 10\"\n />\n }\n</form>\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatLabel} from '@angular/material/form-field';\n\n/**\n * Show an error message if the control has a value and an error, even if control is not dirty and not touched.\n */\nexport class InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl | null): boolean {\n return control && control.invalid && control.value;\n }\n}\n\n@Component({\n imports: [MatFormField, MatLabel, MatError, MatInput, FormsModule, ReactiveFormsModule],\n templateUrl: './type-text.component.html',\n styleUrl: './type-text.component.scss',\n})\nexport class TypeTextComponent implements DropdownComponent {\n protected dropdownRef = inject(NaturalDropdownRef);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly formCtrl = new FormControl('', {nonNullable: true});\n public readonly matcher = new InvalidWithValueStateMatcher();\n\n public constructor() {\n const data = inject<NaturalDropdownData<never>>(NATURAL_DROPDOWN_DATA);\n\n this.formCtrl.valueChanges.subscribe(value => {\n this.renderedValue.next(value === null ? '' : this.formCtrl.value);\n });\n\n this.formCtrl.setValidators([Validators.required]);\n\n if (data.condition?.like) {\n this.formCtrl.setValue('' + data.condition.like.value);\n }\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.formCtrl.value) {\n return {};\n }\n\n return {like: {value: this.formCtrl.value}};\n }\n\n public isValid(): boolean {\n return this.formCtrl.valid;\n }\n\n public isDirty(): boolean {\n return this.formCtrl.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n}\n","<mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n>Valeur</mat-label>\n <input\n matInput\n type=\"text\"\n autocomplete=\"off\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"formCtrl\"\n [required]=\"true\"\n (keydown.enter)=\"close()\"\n />\n @if (formCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n</mat-form-field>\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn, Validators} from '@angular/forms';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {\n type PossibleComparableOperator,\n type PossibleComparableOperatorKeys,\n possibleComparableOperators,\n possibleNullComparableOperators,\n} from '../types';\nimport {InvalidWithValueStateMatcher} from '../type-text/type-text.component';\nimport {decimal} from '../../../classes/validators';\nimport {MatInput} from '@angular/material/input';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatError, MatFormField, MatLabel} from '@angular/material/form-field';\nimport {startWith} from 'rxjs/operators';\n\nexport type TypeNumberConfiguration = {\n min?: number | null;\n max?: number | null;\n step?: number | null;\n /**\n * If true, two extra choices, \"avec\" and \"sans\", will be shown to filter by the (in-)existence of a value\n */\n nullable?: boolean;\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatError, MatSelect, MatOption, MatInput],\n templateUrl: './type-number.component.html',\n styleUrl: './type-number.component.scss',\n})\nexport class TypeNumberComponent implements DropdownComponent {\n protected dropdownRef = inject(NaturalDropdownRef);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeNumberConfiguration>;\n public readonly operatorCtrl = new FormControl<PossibleComparableOperatorKeys>('equal', {nonNullable: true});\n public readonly valueCtrl = new FormControl(null as number | null);\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly form = new FormGroup({\n operator: this.operatorCtrl,\n value: this.valueCtrl,\n });\n public requireValueCtrl = false;\n public readonly operators: readonly PossibleComparableOperator[];\n private readonly defaults: Required<TypeNumberConfiguration> = {\n min: null,\n max: null,\n step: null,\n nullable: false,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeNumberConfiguration>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n this.operators = this.configuration.nullable ? possibleNullComparableOperators : possibleComparableOperators;\n\n merge(this.operatorCtrl.valueChanges, this.valueCtrl.valueChanges).subscribe(() => {\n const rendered = this.getRenderedValue();\n this.renderedValue.next(rendered);\n });\n\n // Immediately initValidators and everytime the operator change later\n this.operatorCtrl.valueChanges.pipe(startWith(null)).subscribe(() => this.initValidators());\n\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const key = this.operatorCtrl.value;\n const value = this.valueCtrl.value;\n\n switch (key) {\n case 'any':\n return {null: {not: true}};\n case 'none':\n return {null: {not: false}};\n default: {\n return {[key]: {value: value}};\n }\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n public close(): void {\n if (this.isValid()) {\n this.dropdownRef.close({condition: this.getCondition()});\n } else {\n this.dropdownRef.close(); // undefined value, discard changes / prevent to add a condition (on new fields\n }\n }\n\n private initValidators(): void {\n const blacklist: PossibleComparableOperatorKeys[] = ['any', 'none'];\n this.requireValueCtrl = !blacklist.includes(this.operatorCtrl.value);\n const validators: ValidatorFn[] = this.requireValueCtrl ? [Validators.required] : [];\n if (typeof this.configuration.min === 'number') {\n validators.push(Validators.min(this.configuration.min));\n }\n\n if (typeof this.configuration.max === 'number') {\n validators.push(Validators.max(this.configuration.max));\n }\n\n if (this.configuration.step) {\n const decimals = /\\.(\\d+)$/.exec('' + this.configuration.step)?.[1] ?? '';\n const decimalCount = decimals.length;\n validators.push(decimal(decimalCount));\n }\n\n this.valueCtrl.setValidators(validators);\n this.valueCtrl.updateValueAndValidity();\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const operatorKey = this.conditionToOperatorKey(condition);\n this.operatorCtrl.setValue(operatorKey);\n this.valueCtrl.setValue(condition[operatorKey]?.value);\n }\n\n private getRenderedValue(): string {\n const operator = this.operators.find(v => v.key === this.operatorCtrl.value);\n if (operator && ['any', 'none'].includes(operator.key)) {\n return operator.label;\n } else if (operator && this.valueCtrl.value !== null) {\n return operator.label + ' ' + this.valueCtrl.value;\n } else {\n return '';\n }\n }\n\n private conditionToOperatorKey(condition: FilterGroupConditionField): PossibleComparableOperatorKeys {\n if (condition.null?.not) {\n return 'any';\n } else if (condition.null && !condition.null.not) {\n return 'none';\n } else {\n return this.operators.find(operator => condition[operator.key])?.key ?? 'equal';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field\n style=\"margin-right: 1em\"\n subscriptSizing=\"dynamic\"\n [style.max-width]=\"configuration.nullable ? '6em' : '4em'\"\n >\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (requireValueCtrl) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label i18n>Valeur</mat-label>\n <input\n matInput\n type=\"number\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"valueCtrl\"\n [attr.max]=\"configuration.max\"\n [attr.min]=\"configuration.min\"\n [required]=\"true\"\n [step]=\"configuration.step\"\n (keydown.enter)=\"close()\"\n />\n @if (valueCtrl.hasError('min')) {\n <mat-error>< {{ configuration.min }}</mat-error>\n }\n @if (valueCtrl.hasError('max')) {\n <mat-error>> {{ configuration.max }}</mat-error>\n }\n </mat-form-field>\n }\n</form>\n","import {Component, inject} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {Facet, NaturalSearchFacets} from '../types/facet';\nimport {MatListItem, MatNavList} from '@angular/material/list';\n\n/**\n * Configuration for facet selection\n */\nexport type FacetSelectorConfiguration = {\n facets: NaturalSearchFacets;\n};\n\n@Component({\n imports: [MatNavList, MatListItem],\n templateUrl: './facet-selector.component.html',\n styleUrl: './facet-selector.component.scss',\n})\nexport class FacetSelectorComponent implements DropdownComponent {\n public readonly data = inject<NaturalDropdownData<FacetSelectorConfiguration>>(NATURAL_DROPDOWN_DATA);\n protected dropdownRef = inject(NaturalDropdownRef);\n\n // Never has a real value\n public readonly renderedValue = new BehaviorSubject<string>('');\n public facets = this.data.configuration.facets;\n public selection: Facet | null = null;\n\n /**\n * Get value, including rich object types\n */\n public getCondition(): FilterGroupConditionField {\n return {};\n }\n\n /**\n * Allow to close the dropdown with a valid value\n */\n public close(): void {\n if (this.selection) {\n this.dropdownRef.close({\n condition: {},\n facet: this.selection,\n });\n }\n }\n\n public isValid(): boolean {\n return !!this.selection;\n }\n\n public isDirty(): boolean {\n return true;\n }\n}\n","@if (data.title) {\n <div class=\"dropdown-title nat-bold\">{{ data.title }}</div>\n}\n<mat-nav-list>\n @for (facet of facets; track $index) {\n <mat-list-item (click)=\"selection = facet; close()\">\n <a>{{ facet.display }}</a>\n </mat-list-item>\n }\n</mat-nav-list>\n","import {\n Component,\n ComponentRef,\n createComponent,\n createEnvironmentInjector,\n ElementRef,\n EnvironmentInjector,\n HostListener,\n inject,\n Input,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n StaticProvider,\n viewChild,\n} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport {ErrorStateMatcher, MatRipple} from '@angular/material/core';\nimport {FilterGroupConditionField} from '../classes/graphql-doctrine.types';\nimport {getFacetFromSelection} from '../classes/utils';\nimport {NaturalDropdownRef} from '../dropdown-container/dropdown-ref';\nimport {\n NATURAL_DROPDOWN_DATA,\n NaturalDropdownData,\n NaturalDropdownService,\n} from '../dropdown-container/dropdown.service';\nimport {FacetSelectorComponent, FacetSelectorConfiguration} from '../facet-selector/facet-selector.component';\nimport {DropdownComponent} from '../types/dropdown-component';\nimport {DropdownFacet, Facet, FlagFacet, NaturalSearchFacets} from '../types/facet';\nimport {DropdownResult, NaturalSearchSelection} from '../types/values';\nimport {MatIconButton} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatInput} from '@angular/material/input';\nimport {MatFormField, MatLabel, MatPrefix, MatSuffix} from '@angular/material/form-field';\n\n// Required to check invalid fields when initializing natural-search\nclass AlwaysErrorStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null): boolean {\n return !!control && control.invalid;\n }\n}\n\nfunction isComponentValid(component: DropdownComponent): ValidatorFn {\n return (): ValidationErrors | null => {\n if (!component.isValid()) {\n return {component: true};\n }\n\n return null;\n };\n}\n\n@Component({\n selector: 'natural-input',\n imports: [\n MatFormField,\n MatLabel,\n MatPrefix,\n MatSuffix,\n MatRipple,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatIcon,\n NaturalIconDirective,\n MatIconButton,\n ],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n})\nexport class NaturalInputComponent implements OnInit, OnChanges, OnDestroy {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly dropdownService = inject(NaturalDropdownService);\n private readonly injector = inject(EnvironmentInjector);\n\n /**\n * Controls the ripple effect, used when opening a dropdown\n */\n public readonly ripple = viewChild.required(MatRipple);\n\n /**\n * Native element ref for <input> related to this <natural-input> component\n */\n public readonly input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n /**\n * Label for this field\n */\n @Input() public placeholder?: string;\n\n /**\n * Name of the field on which do a global search (without facet)\n */\n public readonly searchFieldName = input('search');\n\n /**\n * Selected setted for this component\n */\n @Input() public selection: NaturalSearchSelection | null = null;\n\n /**\n * Available facets, allows the user to pick one, than generated then a selection\n */\n public readonly facets = input.required<NaturalSearchFacets>();\n\n /**\n * Text display in the dropdown to select the facet\n */\n public readonly dropdownTitle = input('');\n\n /**\n * Emits when user a added/updated/deleted a search (from global context or from facet)\n */\n public readonly selectionChange = output<NaturalSearchSelection>();\n\n /**\n * Emits when user removes the search by pressing the cross icon\n */\n public readonly cleared = output<NaturalInputComponent>();\n\n /**\n * Selected facet from the list of available facets\n */\n public facet: Facet | null = null;\n\n /**\n * Controller for the input field\n */\n public readonly formCtrl = new FormControl<string | null>(null);\n\n /**\n * Customer error matcher that should validate on each change (including initialisation)\n */\n public readonly errorMatcher = new AlwaysErrorStateMatcher();\n\n /**\n * Reference of the opened dropdown container\n */\n private dropdownRef: NaturalDropdownRef | null = null;\n\n /**\n * Reference of the component inside the dropdown container\n */\n private dropdownComponentRef: ComponentRef<DropdownComponent> | null = null;\n\n /**\n * Minimum input length (number of chars)\n * See length attribute\n */\n private readonly minLength = 5;\n\n /**\n * Size of the input (number of chars)\n * Match the input.size attribute\n */\n public length = this.minLength;\n\n /**\n * Flag, that, if marked as yes, prevents the opening of the dropdown\n * Is used to prevent dropdown opening when natural-search takes the focus from parent context (like on modal opening)\n */\n private neutralizeDropdownOpening = false;\n\n /**\n * Custom management for taking the focus from parent context\n * When focusing manually on the <input>, a dropdown is opened\n * But when the focus is given from angular in a parent context (like a dialog) the dropdown would open and we don't want it.\n */\n @HostListener('focus')\n public focus(): void {\n this.neutralizeDropdownOpening = true;\n this.input().nativeElement.focus();\n this.neutralizeDropdownOpening = false;\n }\n\n public ngOnChanges(): void {\n const facets = this.facets();\n if (!facets && this.selection) {\n setTimeout(() => this.clear());\n } else if (facets && this.selection) {\n this.facet = getFacetFromSelection(facets, this.selection);\n\n if (this.isDropdown()) {\n const dropdownComponent = this.createComponent(this.facet as DropdownFacet<FacetSelectorConfiguration>);\n this.formCtrl.setValidators([isComponentValid(dropdownComponent)]);\n dropdownComponent.renderedValue.subscribe(value => {\n this.formCtrl.setValue(value);\n });\n } else if (this.isFlag()) {\n this.formCtrl.setValue('');\n } else if (\n this.selection &&\n this.selection.field === this.searchFieldName() &&\n this.selection.condition.like\n ) {\n // global search mode\n this.formCtrl.setValue('' + this.selection.condition.like.value);\n } else {\n // If component is invalid (no facet and not a global search), clear from result and destroy component\n setTimeout(() => this.clear());\n }\n }\n }\n\n public ngOnInit(): void {\n this.input().nativeElement.addEventListener('focus', () => {\n this.openDropdown();\n });\n\n this.input().nativeElement.addEventListener('keyup', () => {\n if (!this.dropdownRef) {\n return;\n }\n\n if (this.formCtrl.value !== '') {\n this.dropdownRef.close();\n }\n });\n\n if (!this.placeholder) {\n this.placeholder = $localize`Recherche`;\n }\n\n const placeholderSize = (this.facet ? this.facet.display.length : this.placeholder.length) * 0.66;\n this.length = Math.max(this.minLength, Math.ceil(placeholderSize));\n }\n\n public ngOnDestroy(): void {\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n }\n\n public search(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n\n if (!this.formCtrl.value) {\n return;\n }\n\n if (this.isDropdown()) {\n return;\n }\n\n if (this.formCtrl.valid && this.formCtrl.dirty) {\n this.selectionChange.emit(this.getSelection({like: {value: this.formCtrl.value}}));\n }\n }\n\n public clear(): void {\n // Prevent opening the facets list when we are removing a facet\n this.neutralizeDropdownOpening = true;\n setTimeout(() => (this.neutralizeDropdownOpening = false));\n\n this.facet = null;\n this.selection = null;\n this.formCtrl.setValue(null);\n this.cleared.emit(this);\n }\n\n public openDropdown(): void {\n if (this.dropdownRef || this.neutralizeDropdownOpening) {\n // Prevent to open multiple dropdowns.\n // Happens as we open on \"focus\", and alt+tab re-activate focus on an element that already had\n // focus when leaving window with another alt+tab\n return;\n }\n\n this.launchRipple();\n\n // If there is no facet and no string typed, show panel to select the facet\n if (!this.facet && !this.formCtrl.value) {\n this.openFacetSelectorDropdown(this.dropdownTitle());\n } else {\n // If a facet is selected, open specific component dropdown\n this.openTypeDropdown();\n }\n }\n\n public isDropdown(): boolean {\n return !!(this.facet && (this.facet as DropdownFacet<unknown>).component);\n }\n\n public isFlag(): boolean {\n return !!(this.facet && (this.facet as FlagFacet<FilterGroupConditionField>).condition);\n }\n\n private createComponent(facet: DropdownFacet<unknown>): DropdownComponent {\n // Always destroy and recreate component\n // Todo : test if facet has changed, if not re-use the component\n if (this.dropdownComponentRef) {\n this.dropdownComponentRef.destroy();\n }\n\n const condition = this.selection ? this.selection.condition : null;\n const data: NaturalDropdownData = {\n condition: condition,\n configuration: facet.configuration,\n };\n\n const injector = createEnvironmentInjector(this.createProviders(data), this.injector);\n this.dropdownComponentRef = createComponent(facet.component, {\n environmentInjector: injector,\n });\n\n return this.dropdownComponentRef.instance;\n }\n\n private createProviders(data: NaturalDropdownData): StaticProvider[] {\n // Customize injector to allow data and dropdown reference injection in component\n return [\n {\n provide: NaturalDropdownRef,\n useValue: null,\n },\n {\n provide: NATURAL_DROPDOWN_DATA,\n useValue: data,\n },\n ];\n }\n\n private launchRipple(): void {\n const rippleRef = this.ripple().launch({\n persistent: true,\n centered: true,\n });\n\n rippleRef.fadeOut();\n }\n\n private openFacetSelectorDropdown(title: string | undefined): void {\n const facets = this.facets();\n if (!facets || (facets && !facets.length)) {\n return;\n }\n\n const data: NaturalDropdownData<FacetSelectorConfiguration> = {\n condition: {},\n title: title,\n configuration: {\n facets: facets,\n },\n };\n\n const injectorTokens = this.createProviders(data);\n this.dropdownRef = this.dropdownService.open(FacetSelectorComponent, this.element, injectorTokens, false);\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n if (result.facet) {\n this.setFacet(result.facet);\n } else if (result.condition) {\n this.setValue(result);\n }\n }\n });\n }\n\n private openTypeDropdown(): void {\n if (!this.isDropdown()) {\n return;\n }\n\n const dropdownFacet = this.facet as DropdownFacet<unknown>;\n\n const data: NaturalDropdownData = {\n condition: this.selection ? this.selection.condition : null,\n configuration: dropdownFacet.configuration,\n };\n\n const injectorTokens = this.createProviders(data);\n const component = dropdownFacet.component;\n this.dropdownRef = this.dropdownService.open(\n component,\n this.element,\n injectorTokens,\n dropdownFacet.showValidateButton !== undefined ? dropdownFacet.showValidateButton : true,\n );\n\n this.dropdownRef.closed.subscribe(result => {\n this.dropdownRef = null;\n if (result !== undefined) {\n this.setValue(result);\n }\n });\n }\n\n private setFacet(facet: Facet): void {\n this.facet = facet;\n\n if (this.isDropdown()) {\n this.openTypeDropdown();\n } else if (this.isFlag()) {\n this.setValue({\n condition: (facet as FlagFacet<FilterGroupConditionField>).condition,\n });\n } else {\n this.input().nativeElement.focus();\n }\n }\n\n private setValue(result: DropdownResult): void {\n if (this.facet) {\n this.selectionChange.emit(this.getSelection(result.condition));\n }\n }\n\n private getSelection(condition: NaturalSearchSelection['condition']): NaturalSearchSelection {\n const selection: NaturalSearchSelection = {\n field: this.facet ? this.facet.field : this.searchFieldName(),\n condition: condition,\n };\n\n if (this.facet?.name) {\n selection.name = this.facet.name;\n }\n\n return selection;\n }\n}\n","<!-- click condition should match to allow click action only when no other button is visible -->\n<mat-form-field\n matRipple\n subscriptSizing=\"dynamic\"\n (click)=\"!selection && !(facet && !selection) ? openDropdown() : null\"\n>\n @if (facet) {\n <mat-label>{{ facet.display }}</mat-label>\n }\n @if (!facet) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input\n #input\n autocomplete=\"off\"\n matInput\n type=\"text\"\n [attr.size]=\"length\"\n [errorStateMatcher]=\"errorMatcher\"\n [formControl]=\"formCtrl\"\n [readonly]=\"(isDropdown() && !!selection) || isFlag()\"\n (blur)=\"search($event)\"\n (keydown.enter)=\"search($event)\"\n />\n\n @if (!facet && !selection) {\n <mat-icon naturalIcon=\"search\" matIconPrefix />\n }\n\n @if (selection) {\n <button matIconButton matIconSuffix (click)=\"clear()\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n\n @if (facet && !selection) {\n <button matIconButton matIconSuffix (click)=\"clear()\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n</mat-form-field>\n<div class=\"hide\">{{ formCtrl.value ? formCtrl.value : facet ? facet.display : placeholder }}</div>\n","import {Component, Input, input, output, viewChild} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalInputComponent} from '../input/input.component';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelection} from '../types/values';\n\n@Component({\n selector: 'natural-group',\n imports: [NaturalInputComponent],\n templateUrl: './group.component.html',\n styleUrl: './group.component.scss',\n})\nexport class NaturalGroupComponent {\n public readonly newValueInput = viewChild.required<NaturalInputComponent>('newValueInput');\n\n /**\n * Text display in the dropdown to select the facet\n */\n public readonly dropdownTitle = input('');\n public readonly placeholder = input.required<string>();\n public readonly facets = input.required<NaturalSearchFacets>();\n public readonly selectionChange = output<GroupSelections>();\n public innerSelections: GroupSelections = [];\n\n @Input() public set selections(selection: GroupSelections) {\n this.innerSelections = deepClone(selection);\n }\n\n public updateInput(selection: NaturalSearchSelection, index: number): void {\n this.innerSelections[index] = selection;\n this.selectionChange.emit(this.innerSelections);\n }\n\n public addInput(selection: NaturalSearchSelection): void {\n this.newValueInput().clear();\n this.innerSelections.push(selection);\n this.selectionChange.emit(this.innerSelections);\n }\n\n public removeInput(index: number): void {\n this.innerSelections.splice(index, 1);\n this.selectionChange.emit(this.innerSelections);\n }\n}\n","@for (selection of innerSelections; track $index) {\n <natural-input\n [facets]=\"facets()\"\n [selection]=\"selection\"\n (cleared)=\"removeInput($index)\"\n (selectionChange)=\"updateInput($event, $index)\"\n />\n}\n\n<natural-input\n #newValueInput\n tabIndex=\"10\"\n cdkFocusInitial\n [facets]=\"facets()\"\n [placeholder]=\"placeholder()\"\n [dropdownTitle]=\"dropdownTitle()\"\n (selectionChange)=\"addInput($event)\"\n/>\n","import {Component, inject, Input, input, OnChanges, output, signal} from '@angular/core';\nimport {deepClone} from '../classes/utils';\nimport {NaturalSearchFacets} from '../types/facet';\nimport {GroupSelections, NaturalSearchSelections} from '../types/values';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {map} from 'rxjs';\nimport {MatDivider} from '@angular/material/divider';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatIconButton} from '@angular/material/button';\nimport {NaturalGroupComponent} from '../group/group.component';\nimport {AsyncPipe, NgClass} from '@angular/common';\n\n@Component({\n selector: 'natural-search',\n imports: [\n NgClass,\n AsyncPipe,\n NaturalGroupComponent,\n MatIconButton,\n MatTooltip,\n MatIcon,\n NaturalIconDirective,\n MatDivider,\n ],\n templateUrl: './search.component.html',\n styleUrl: './search.component.scss',\n})\nexport class NaturalSearchComponent implements OnChanges {\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n /**\n * Placeholder for last input (the free search input)\n */\n public readonly placeholder = input($localize`Rechercher`);\n\n /**\n * Exhaustive list of facets to be used in this <natural-search>\n */\n @Input() public facets: NaturalSearchFacets = [];\n\n /**\n * Whether to allow end-user to create multiple `OR` groups\n */\n public readonly multipleGroups = input(false);\n\n /**\n * Text display in the dropdown to select the facet\n */\n public readonly dropdownTitle = input('');\n\n /**\n * Emits when some selection has been setted by the user\n */\n public readonly selectionChange = output<NaturalSearchSelections>();\n\n /**\n * Cleaned inputted selections. Allow valid selections to be manipulated inside component\n */\n readonly #innerSelections = signal<NaturalSearchSelections>([[]]);\n\n /**\n * Cleaned inputted selections. This public API is useful because `selectionChange` does not emit changes made via `[selections]`\n */\n public readonly innerSelections = this.#innerSelections.asReadonly();\n\n /**\n * Input to display at component initialisation\n */\n @Input()\n public set selections(selections: NaturalSearchSelections) {\n this.#innerSelections.set(selections?.[0] ? deepClone(selections) : [[]]);\n }\n\n public readonly isMobile = this.breakpointObserver.observe(Breakpoints.XSmall).pipe(map(result => result.matches));\n\n public ngOnChanges(): void {\n if (!this.facets) {\n this.facets = [];\n }\n }\n\n public updateGroup(groupSelections: GroupSelections, groupIndex: number): void {\n const selections = [...this.#innerSelections()];\n for (let i = 0; i < groupSelections.length; i++) {\n selections[groupIndex][i] = groupSelections[i];\n }\n selections[groupIndex].length = groupSelections.length;\n\n this.#notify(selections);\n }\n\n public addGroup(): void {\n const selections = [...this.#innerSelections()];\n selections.push([]);\n\n this.#notify(selections);\n }\n\n public removeGroup(index: number): void {\n const selections = [...this.#innerSelections()];\n selections.splice(index, 1);\n\n this.#notify(selections);\n }\n\n public clear(): void {\n this.#notify([[]]);\n }\n\n #notify(selections: NaturalSearchSelections): void {\n this.#innerSelections.set(selections);\n this.selectionChange.emit(selections);\n }\n}\n","<div class=\"natural-search\" [ngClass]=\"{mobile: isMobile | async, hasMultipleGroups: innerSelections().length > 1}\">\n <div class=\"groupsWrapper\">\n @for (groupSelections of innerSelections(); track $index) {\n <div class=\"groupWrapper\">\n <natural-group\n [facets]=\"facets\"\n [placeholder]=\"placeholder()\"\n [selections]=\"groupSelections\"\n [dropdownTitle]=\"dropdownTitle()\"\n (selectionChange)=\"updateGroup($event, $index)\"\n />\n <div class=\"endOfRowButton\">\n @if ($count > 1) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Supprimer ce groupe\"\n (click)=\"removeGroup($index)\"\n >\n <mat-icon naturalIcon=\"remove\" />\n </button>\n }\n </div>\n </div>\n @if (!$last) {\n <mat-divider />\n }\n }\n </div>\n\n <div class=\"endOfRowButton\">\n @if (multipleGroups()) {\n <button matIconButton i18n-matTooltip matTooltip=\"Ajouter un groupe logique OU\" (click)=\"addGroup()\">\n <mat-icon naturalIcon=\"add\" />\n </button>\n }\n\n <button matIconButton class=\"clear-button\" i18n-matTooltip matTooltip=\"Annuler la recherche\" (click)=\"clear()\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n </div>\n</div>\n","import {BehaviorSubject, Observable} from 'rxjs';\nimport {NaturalHierarchicConfiguration} from './hierarchic-configuration';\nimport {NameOrFullName} from '../../../types/types';\n\nexport type HierarchicModel = {__typename: string} & NameOrFullName;\n\n/**\n * Wrapper for the original model from the DB with specific metadata for tree\n */\nexport class ModelNode {\n public readonly childrenChange = new BehaviorSubject<ModelNode[]>([]);\n\n public isLoading = false;\n public isExpandable = false;\n public isSelectable = false;\n\n public constructor(\n public readonly model: HierarchicModel,\n public readonly config: NaturalHierarchicConfiguration,\n ) {}\n\n public get children(): Observable<ModelNode[]> {\n return this.childrenChange.asObservable();\n }\n\n public get hasChildren(): boolean {\n return this.childrenChange.value?.length > 0;\n }\n}\n","import {inject, Injectable, Injector} from '@angular/core';\nimport {intersection} from 'es-toolkit';\nimport {first, forkJoin, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalQueryVariablesManager, QueryVariables} from '../../../classes/query-variable-manager';\nimport {Literal, UntypedModelService} from '../../../types/types';\nimport {FilterGroupCondition} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {\n HierarchicFilterConfiguration,\n HierarchicFiltersConfiguration,\n} from '../classes/hierarchic-filters-configuration';\nimport {HierarchicModel, ModelNode} from '../classes/model-node';\n\nexport type OrganizedModelSelection = Record<string, any[]>;\n\ntype ContextualizedConfig<T extends UntypedModelService = UntypedModelService> = {\n configuration: NaturalHierarchicConfiguration;\n injectedService: T;\n variablesManager: NaturalQueryVariablesManager;\n};\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorService {\n private readonly injector = inject(Injector);\n\n /**\n * We use cache because dataSource has nested data and would require recursive search\n */\n private readonly nodeCache = new Map<string, ModelNode>();\n\n public isTooBig(): boolean {\n return this.nodeCache.size >= 999;\n }\n\n /**\n * Retrieve elements from the server\n * Get root elements if node is null, or child elements if node is given\n */\n public getList(\n node: ModelNode | null = null,\n filters: HierarchicFiltersConfiguration | null = null,\n variables: QueryVariables | null = null,\n configurations: NaturalHierarchicConfiguration[],\n ): Observable<ModelNode[]> {\n const configs = this.getContextualizedConfigs(node, filters, variables, configurations);\n const observables = configs.map(c => c.injectedService.getAll(c.variablesManager));\n\n // Fire queries, and merge results, transforming apollo items into Node Object.\n return forkJoin(observables).pipe(\n map(results => {\n const listing: ModelNode[] = [];\n\n // For each result of an observable\n for (let i = 0; i < results.length; i++) {\n // For each item of the result, convert into Node object\n for (const item of results[i].items) {\n const node = this.getOrCreateNode(item, configs[i].configuration);\n listing.push(node);\n this.countChildren(node, filters, configurations);\n\n const isSelectable = node.config.isSelectableCallback\n ? node.config.isSelectableCallback(node.model)\n : true;\n node.isSelectable = !!node.config.selectableAtKey && isSelectable;\n }\n }\n\n return listing;\n }),\n );\n }\n\n public countChildren(\n node: ModelNode,\n filters: HierarchicFiltersConfiguration | null = null,\n configurations: NaturalHierarchicConfiguration[],\n ): void {\n const configs = this.getContextualizedConfigs(node, filters, null, configurations);\n const observables = configs.map(c => c.injectedService.count(c.variablesManager).pipe(first()));\n forkJoin(observables).subscribe(results => {\n node.isExpandable = results.reduce((total, length) => total + length, 0) > 0;\n });\n }\n\n private getContextualizedConfigs(\n node: ModelNode | null = null,\n contextFilters: HierarchicFiltersConfiguration | null = null,\n searchVariables: QueryVariables | null = null,\n configurations: NaturalHierarchicConfiguration[],\n ): ContextualizedConfig[] {\n const configsAndServices: ContextualizedConfig[] = [];\n\n // Considering the whole configuration may cause queries with no/wrong results we have imperatively to avoid !\n // e.g there are cross dependencies between equipments and taxonomies filters. Both have \"parents\" and\n // \"taxonomies\" filters... When clicking on a equipment, the configuration of taxonomies with match \"parents\"\n // filter, but use the id of the equipment To fix this, we should only consider configuration after the one\n // given by the node passed as argument. That would mean : no child can affect parent. That would mean :\n // sorting in the configuration have semantic/hierarchy implications\n const configs = node ? this.getNextConfigs(node.config, configurations) : configurations;\n\n const pagination = {pageIndex: 0, pageSize: 999};\n\n for (const config of configs) {\n const contextFilter = this.getFilterByService(config, contextFilters);\n const filter = this.getServiceFilter(node, config, contextFilter, !!searchVariables);\n\n if (!filter) {\n continue;\n }\n\n const variablesManager = new NaturalQueryVariablesManager();\n\n variablesManager.set('variables', {filter: filter, pagination: pagination});\n variablesManager.set('config-filter', {filter: config.filter});\n\n if (searchVariables) {\n variablesManager.set('natural-search', searchVariables);\n }\n\n const injectedService = this.injector.get(config.service);\n configsAndServices.push({\n configuration: config,\n injectedService: injectedService,\n variablesManager: variablesManager,\n });\n }\n\n return configsAndServices;\n }\n\n /**\n * Return models matching given FlatNodes\n * Returns a Literal of models grouped by their configuration attribute \"selectableAtKey\"\n */\n public toOrganizedSelection(\n nodes: ModelNode[],\n configurations: NaturalHierarchicConfiguration[],\n ): OrganizedModelSelection {\n const selection = configurations.reduce<Literal>((group, config) => {\n if (config.selectableAtKey) {\n group[config.selectableAtKey] = [];\n }\n return group;\n }, {});\n\n for (const node of nodes) {\n if (node.config.selectableAtKey) {\n selection[node.config.selectableAtKey].push(node.model);\n }\n }\n\n return selection;\n }\n\n /**\n * Transforms an OrganizedModelSelection into a list of ModelNodes\n */\n public fromOrganizedSelection(\n organizedModelSelection: OrganizedModelSelection,\n configurations: NaturalHierarchicConfiguration[],\n ): ModelNode[] {\n if (!organizedModelSelection) {\n return [];\n }\n\n const result: ModelNode[] = [];\n for (const selectableAtKey of Object.keys(organizedModelSelection)) {\n const config = this.getConfigurationBySelectableKey(selectableAtKey, configurations);\n if (config) {\n for (const model of organizedModelSelection[selectableAtKey]) {\n result.push(this.getOrCreateNode(model, config));\n }\n }\n }\n return result;\n }\n\n /**\n * Checks that each configuration.selectableAtKey attribute is unique\n */\n public validateConfiguration(configurations: NaturalHierarchicConfiguration[]): void {\n const selectableAtKeyAttributes: string[] = [];\n for (const config of configurations) {\n if (config.selectableAtKey) {\n const keyIndex = selectableAtKeyAttributes.indexOf(config.selectableAtKey);\n\n if (keyIndex === -1 && config.selectableAtKey) {\n selectableAtKeyAttributes.push(config.selectableAtKey);\n }\n\n // This behavior maybe dangerous in case we re-open hierarchical selector with the last returned config\n // having non-unique keys\n if (keyIndex < -1) {\n console.warn('Invalid hierarchic configuration : selectableAtKey attribute should be unique');\n }\n }\n }\n }\n\n /**\n * Return configurations setup in the list after the given one\n */\n private getNextConfigs(\n nodeConfig: NaturalHierarchicConfiguration,\n configurations: NaturalHierarchicConfiguration[],\n ): NaturalHierarchicConfiguration[] {\n const configIndex = configurations.findIndex(c => c === nodeConfig);\n return configurations.slice(configIndex);\n }\n\n /**\n * Builds queryVariables filter for children query\n */\n private getServiceFilter(\n node: ModelNode | null,\n config: NaturalHierarchicConfiguration,\n contextFilter: HierarchicFilterConfiguration['filter'] | null = null,\n allDeeps = false,\n ): HierarchicFilterConfiguration['filter'] | null {\n const fieldCondition: FilterGroupCondition = {};\n\n // if no parent, filter empty elements\n if (!node) {\n if (!config.parentsRelationNames) {\n return contextFilter ? contextFilter : {};\n }\n\n if (!allDeeps) {\n config.parentsRelationNames.forEach(f => {\n fieldCondition[f] = {empty: {}};\n });\n }\n } else {\n if (!node.config.childrenRelationNames || !config.parentsRelationNames) {\n return null;\n }\n\n const matchingFilters = intersection(node.config.childrenRelationNames, config.parentsRelationNames);\n if (!matchingFilters.length) {\n return null;\n }\n fieldCondition[matchingFilters[0]] = {have: {values: [node.model.id]}};\n }\n\n const filters = {groups: [{conditions: [fieldCondition]}]};\n\n // todo : is it right ? shouldn't it be managed with QueryVariablesManager's channels ? ?\n if (contextFilter) {\n filters.groups.push(...contextFilter.groups);\n }\n\n return filters;\n }\n\n /**\n * Return a context filter applicable to the service for given config\n *\n * @param config Applicable config\n * @param contextFilters List of context filters\n */\n private getFilterByService(\n config: NaturalHierarchicConfiguration,\n contextFilters: HierarchicFilterConfiguration[] | null,\n ): HierarchicFilterConfiguration['filter'] | null {\n if (!contextFilters || !config) {\n return null;\n }\n\n const filter = contextFilters.find(f => f.service === config.service);\n return filter ? filter.filter : null;\n }\n\n /**\n * Search in configurations.selectableAtKey attribute to find given key and return the configuration\n */\n private getConfigurationBySelectableKey(\n key: NaturalHierarchicConfiguration['selectableAtKey'],\n configurations: NaturalHierarchicConfiguration[],\n ): NaturalHierarchicConfiguration | null {\n if (!configurations) {\n return null;\n }\n\n return configurations.find(conf => conf.selectableAtKey === key) || null;\n }\n\n private getOrCreateNode(model: HierarchicModel, configurations: NaturalHierarchicConfiguration): ModelNode {\n const key = this.getCacheKey(model);\n let node = this.nodeCache.get(key);\n\n if (node) {\n return node;\n }\n\n node = new ModelNode(model, configurations);\n this.nodeCache.set(key, node);\n return node;\n }\n\n /**\n * Returns an identifier key for map cache\n * As many object types can be used, this function considers typename and ID to return something like document-123\n */\n private getCacheKey(model: HierarchicModel): string {\n return model.__typename + '-' + model.id;\n }\n\n public getAllFetchedNodes(): ModelNode[] {\n return Array.from(this.nodeCache.values());\n }\n}\n","import {SelectionModel} from '@angular/cdk/collections';\nimport {Component, inject, input, OnChanges, OnInit, output, SimpleChanges} from '@angular/core';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {MatCheckbox} from '@angular/material/checkbox';\nimport {MatChipAvatar, MatChipListbox, MatChipOption, MatChipRemove} from '@angular/material/chips';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatProgressSpinner} from '@angular/material/progress-spinner';\nimport {MatRadioButton} from '@angular/material/radio';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {\n MatNestedTreeNode,\n MatTree,\n MatTreeNestedDataSource,\n MatTreeNodeDef,\n MatTreeNodeOutlet,\n MatTreeNodePadding,\n MatTreeNodeToggle,\n} from '@angular/material/tree';\nimport {Observable} from 'rxjs';\nimport {finalize} from 'rxjs/operators';\nimport {QueryVariables} from '../../../classes/query-variable-manager';\nimport {replaceObjectKeepingReference} from '../../../classes/utility';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {toGraphQLDoctrineFilter} from '../../search/classes/graphql-doctrine';\nimport {NaturalSearchComponent} from '../../search/search/search.component';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {ModelNode} from '../classes/model-node';\nimport {NaturalHierarchicSelectorService, OrganizedModelSelection} from './hierarchic-selector.service';\nimport {NgTemplateOutlet} from '@angular/common';\n\n@Component({\n selector: 'natural-hierarchic-selector',\n imports: [\n NaturalSearchComponent,\n MatProgressSpinner,\n MatNestedTreeNode,\n MatTreeNodeDef,\n MatTreeNodePadding,\n MatTreeNodeToggle,\n MatTree,\n MatTreeNodeOutlet,\n MatButton,\n MatIconButton,\n MatIcon,\n NaturalIconDirective,\n MatCheckbox,\n MatChipAvatar,\n MatChipListbox,\n MatChipOption,\n MatChipRemove,\n MatTooltip,\n MatRadioButton,\n NgTemplateOutlet,\n ],\n templateUrl: './hierarchic-selector.component.html',\n styleUrl: './hierarchic-selector.component.scss',\n providers: [NaturalHierarchicSelectorService],\n})\nexport class NaturalHierarchicSelectorComponent implements OnInit, OnChanges {\n protected readonly hierarchicSelectorService = inject(NaturalHierarchicSelectorService);\n\n /**\n * Function that receives a model and returns a string for display value\n */\n public readonly displayWith = input<(item: any) => string>();\n\n /**\n * Config for items and relations arrangement\n */\n public readonly config = input.required<NaturalHierarchicConfiguration[]>();\n\n /**\n * If multiple or single item selection\n */\n public readonly multiple = input(false);\n\n /**\n * Selected items\n * Organized by key, containing each an array of selected items of same type\n */\n public readonly selected = input<OrganizedModelSelection>({});\n\n /**\n * Filters that apply to each query\n */\n public readonly filters = input<HierarchicFiltersConfiguration | null>();\n\n /**\n * Search facets\n */\n public readonly searchFacets = input<NaturalSearchFacets>([]);\n\n /**\n * Selections to apply on natural-search on component initialisation\n */\n public readonly searchSelections = input<NaturalSearchSelections>([]);\n\n /**\n * Select all fetched items of the current search result\n *\n * Use very carefully as recursivity is ignored. The selection includes children (if any) even if the child list has been closed\n *\n * Should be used __only__ for non-recursive use cases. Avoid with recursive because it's not intuitive for end user\n */\n public readonly allowSelectAll = input(false);\n\n /**\n * Emits when natural-search selections change\n */\n public readonly searchSelectionChange = output<NaturalSearchSelections>();\n\n /**\n * Emits selection change\n * Returns a Literal where selected models are organized by key\n */\n public readonly selectionChange = output<OrganizedModelSelection>();\n\n /**\n * List selected items (right listing)\n */\n protected selection!: SelectionModel<ModelNode>;\n\n /**\n * Data source for result listing (left listing)\n */\n protected readonly dataSource = new MatTreeNestedDataSource<ModelNode>();\n\n public loading = false;\n\n /**\n * Angular OnChange implementation\n */\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.selected && !changes.selected.firstChange) {\n this.updateInnerSelection(this.selected());\n }\n\n if (changes.filters && !changes.filters.firstChange) {\n this.loadRoot();\n }\n }\n\n public ngOnInit(): void {\n this.hierarchicSelectorService.validateConfiguration(this.config());\n\n this.selection = new SelectionModel<any>(this.multiple());\n\n // Prevent empty screen on first load and init NaturalHierarchicSelectorService with inputted configuration\n let variables;\n const searchSelections = this.searchSelections();\n if (searchSelections.some(s => s.length)) {\n variables = {filter: toGraphQLDoctrineFilter(this.searchFacets(), searchSelections)};\n }\n\n this.loadRoot(variables);\n\n // OrganizedSelection into list usable by template\n this.updateInnerSelection(this.selected());\n }\n\n /**\n * Toggle selection of a node, considering if multiple selection is activated or not\n */\n public toggleSelection(node: ModelNode): void {\n this.selection.toggle(node);\n this.updateSelection();\n }\n\n protected selectAll(): void {\n this.hierarchicSelectorService.getAllFetchedNodes().forEach(node => {\n this.selection.select(node);\n });\n this.updateSelection();\n }\n\n /**\n * When unselecting an element from the mat-chips, it can be deep in the hierarchy, and the tree element may not\n * exist...\n * ... but we still need to remove the element from the mat-chips list.\n */\n public unselect(node: ModelNode): void {\n this.selection.deselect(node);\n this.updateSelection();\n }\n\n protected getDisplayFn(config: NaturalHierarchicConfiguration): (item: any) => string {\n if (config.displayWith) {\n return config.displayWith;\n }\n\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return item => (item ? item.fullName || item.name : '');\n }\n\n private loadRoot(searchVariables?: QueryVariables): void {\n this.loading = true;\n this.hierarchicSelectorService\n .getList(null, this.filters(), searchVariables, this.config())\n .pipe(finalize(() => (this.loading = false)))\n .subscribe(items => {\n this.dataSource.data = items;\n });\n }\n\n public search(selections: NaturalSearchSelections): void {\n this.searchSelectionChange.emit(selections);\n if (selections.some(s => s.length)) {\n const variables = {filter: toGraphQLDoctrineFilter(this.searchFacets(), selections)};\n this.hierarchicSelectorService.getList(null, this.filters(), variables, this.config()).subscribe(items => {\n this.dataSource.data = items;\n });\n } else {\n this.loadRoot();\n }\n }\n\n /**\n * Get list of children, considering given FlatNode id as a parent.\n * Mark loading status individually on nodes.\n */\n public loadChildren(node: ModelNode): void {\n if (node.hasChildren) {\n return;\n }\n\n node.isLoading = true;\n this.hierarchicSelectorService\n .getList(node, this.filters(), null, this.config())\n .pipe(finalize(() => (node.isLoading = false)))\n .subscribe(items => node.childrenChange.next(items));\n }\n\n protected childrenAccessor = (node: ModelNode): Observable<ModelNode[]> => {\n return node.children;\n };\n\n /**\n * Sync inner selection (tree and mat-chips) according to selected input attribute\n */\n private updateInnerSelection(selected: OrganizedModelSelection): void {\n // Transform an OrganizedModelSelection into a ModelNode list that is used in the selected zone of the component (see template)\n const selectedNodes = this.hierarchicSelectorService.fromOrganizedSelection(selected, this.config());\n this.selection.clear();\n for (const node of selectedNodes) {\n this.selection.select(node);\n }\n }\n\n /**\n * Transform the given elements into the organized selection that is emitted to output\n */\n private updateSelection(): void {\n const organizedFlatNodesSelection = this.hierarchicSelectorService.toOrganizedSelection(\n this.selection.selected,\n this.config(),\n );\n replaceObjectKeepingReference(this.selected(), organizedFlatNodesSelection);\n this.selectionChange.emit(organizedFlatNodesSelection);\n }\n}\n","<ng-template #displayTemplate let-node>\n <div class=\"nat-horizontal nat-gap-5\">\n @if (node.config.icon) {\n <mat-icon [naturalIcon]=\"node.config.icon\" />\n }\n <span>{{ getDisplayFn(node.config)(node.model) }}</span>\n </div>\n</ng-template>\n\n<div [style.margin-bottom.px]=\"20\">\n <natural-search [facets]=\"searchFacets()\" [selections]=\"searchSelections()\" (selectionChange)=\"search($event)\" />\n</div>\n\n@if (allowSelectAll() && multiple()) {\n <div\n class=\"select-all\"\n i18n-matTooltip\n matTooltip=\"Trop de résultats, veuillez affiner la recherche\"\n [matTooltipDisabled]=\"!hierarchicSelectorService.isTooBig()\"\n >\n <a i18n mat-button [disabled]=\"hierarchicSelectorService.isTooBig()\" (click)=\"selectAll()\">Tout sélectionner</a>\n </div>\n}\n\n<div class=\"body\">\n @if (loading) {\n <mat-progress-spinner mode=\"indeterminate\" style=\"margin: 10px\" [diameter]=\"36\" />\n }\n\n <mat-tree #tree [dataSource]=\"dataSource\" [childrenAccessor]=\"childrenAccessor\">\n <mat-nested-tree-node\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [class.leaf]=\"!node.isExpandable\"\n (expandedChange)=\"$event ? loadChildren(node) : null\"\n >\n <div class=\"wrapper nat-horizontal nat-align\" [class.unexpandable]=\"!node.isExpandable\">\n @if (node.isExpandable) {\n <button matIconButton matTreeNodeToggle [attr.aria-label]=\"`toggle ${node.model.name}`\">\n @if (node.isLoading) {\n <mat-progress-spinner mode=\"indeterminate\" [diameter]=\"24\" [strokeWidth]=\"5\" />\n } @else {\n <mat-icon [naturalIcon]=\"tree.isExpanded(node) ? 'expand_more' : 'chevron_right'\" />\n }\n </button>\n }\n\n @if (multiple()) {\n <mat-checkbox\n class=\"selection\"\n [checked]=\"selection.isSelected(node)\"\n [disabled]=\"!node.isSelectable\"\n (change)=\"toggleSelection(node)\"\n >\n <ng-template *ngTemplateOutlet=\"displayTemplate; context: {$implicit: node}\" />\n </mat-checkbox>\n } @else {\n <mat-radio-button\n class=\"selection\"\n [checked]=\"selection.isSelected(node)\"\n [disabled]=\"!node.isSelectable\"\n (change)=\"toggleSelection(node)\"\n >\n <ng-template *ngTemplateOutlet=\"displayTemplate; context: {$implicit: node}\" />\n </mat-radio-button>\n }\n </div>\n <div class=\"children\" [class.invisible]=\"!tree.isExpanded(node)\">\n <ng-container matTreeNodeOutlet />\n </div>\n </mat-nested-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n @for (node of selection.selected; track node.model.id) {\n <mat-chip-option [removable]=\"true\" [selectable]=\"false\" (removed)=\"unselect(node)\">\n @if (node.config.icon) {\n <mat-icon matChipAvatar [naturalIcon]=\"node.config.icon\" />\n }\n {{ node.model.name || node.model.fullName }}\n <button matChipRemove>\n <mat-icon naturalIcon=\"cancel\" />\n </button>\n </mat-chip-option>\n } @empty {\n <p class=\"mat-body nat-padding-horizontal\" i18n>Aucune sélection</p>\n }\n </mat-chip-listbox>\n</div>\n\n@if (!loading && !dataSource.data.length) {\n <div i18n>Aucun résultat</div>\n}\n","import {Component} from '@angular/core';\nimport {NaturalQueryVariablesManager} from '../../../classes/query-variable-manager';\nimport {Literal, UntypedModelService} from '../../../types/types';\nimport {NaturalHierarchicConfiguration} from '../../hierarchic-selector/classes/hierarchic-configuration';\nimport {OrganizedModelSelection} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {AbstractAssociationSelectComponent} from '../abstract-association-select-component.directive';\nimport {EMPTY, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {NaturalHierarchicSelectorComponent} from '../../hierarchic-selector/hierarchic-selector/hierarchic-selector.component';\nimport {MatOption} from '@angular/material/core';\nimport {MatSelect} from '@angular/material/select';\nimport {MatFormField, MatLabel} from '@angular/material/form-field';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\n\nexport type HierarchicFilterConfiguration<T = Literal> = {\n service: NaturalHierarchicConfiguration['service'];\n filter: T;\n};\n\nexport type HierarchicFiltersConfiguration<T = Literal> = HierarchicFilterConfiguration<T>[];\n\nexport type TypeHierarchicSelectorConfiguration = {\n key: string;\n service: UntypedModelService;\n config: NaturalHierarchicConfiguration[];\n filters?: HierarchicFiltersConfiguration;\n};\n\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n NaturalHierarchicSelectorComponent,\n ],\n templateUrl: './type-hierarchic-selector.component.html',\n})\nexport class TypeHierarchicSelectorComponent extends AbstractAssociationSelectComponent<TypeHierarchicSelectorConfiguration> {\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n const ids: string[] =\n this.valueCtrl.value?.[this.configuration.key].map((item: any) => {\n return item.id;\n }) ?? [];\n\n return this.operatorKeyToCondition(this.operatorCtrl.value, ids);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n protected reloadValue(condition: FilterGroupConditionField): Observable<unknown | null> {\n if (!condition.have) {\n return EMPTY;\n }\n\n const ids = condition.have.values;\n const qvm = new NaturalQueryVariablesManager();\n qvm.set('a', {\n filter: {\n groups: [{conditions: [{id: {in: {values: ids}}}]}],\n },\n });\n\n return this.configuration.service.getAll(qvm).pipe(\n map(v => {\n const selection: OrganizedModelSelection = {};\n\n selection[this.configuration.key] = v.items;\n\n return this.noEmptySelection(selection);\n }),\n );\n }\n\n protected renderValueWithoutOperator(): string {\n const items = this.valueCtrl.value?.[this.configuration.key];\n if (!items) {\n return '';\n }\n\n return items\n .map((item: any) => {\n return item.fullName || item.name;\n })\n .join(', ');\n }\n\n public selectionChange(selection: OrganizedModelSelection): void {\n this.valueCtrl.setValue(this.noEmptySelection(selection));\n this.valueCtrl.markAsDirty();\n }\n\n /**\n * We need to keep `null` in our valueCtrl so the required validator works properly, so\n * filter here\n */\n private noEmptySelection(selection: OrganizedModelSelection): OrganizedModelSelection | null {\n return selection[this.configuration.key].length ? selection : null;\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field style=\"max-width: 7em; margin-right: 1em\" subscriptSizing=\"dynamic\">\n <mat-label i18n=\"Mathematical operator < > =\">Opérateur</mat-label>\n <mat-select panelWidth=\"\" [formControl]=\"operatorCtrl\" [required]=\"true\">\n @for (item of operators; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @if (requireValueCtrl) {\n <natural-hierarchic-selector\n style=\"margin-right: 20px\"\n [config]=\"configuration.config\"\n [filters]=\"configuration.filters\"\n [multiple]=\"true\"\n [selected]=\"valueCtrl.value || {}\"\n (selectionChange)=\"selectionChange($event)\"\n />\n }\n</form>\n","import {Component, inject} from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n FormGroupDirective,\n FormsModule,\n NgForm,\n ReactiveFormsModule,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {DateAdapter, ErrorStateMatcher, MAT_DATE_FORMATS} from '@angular/material/core';\nimport {BehaviorSubject, merge} from 'rxjs';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {dateMax, dateMin, serialize} from '../utils';\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle} from '@angular/material/datepicker';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatSuffix} from '@angular/material/form-field';\n\nexport type TypeDateRangeConfiguration<D = any> = {\n min?: D | null;\n max?: D | null;\n};\n\nclass InvalidWithValueStateMatcher implements ErrorStateMatcher {\n public isErrorState(control: FormControl<unknown> | null, form: FormGroupDirective | NgForm | null): boolean {\n return (form && form.invalid && (form.value.to || form.value.from)) || control?.invalid;\n }\n}\n\nfunction parseFromControl<D>(control: AbstractControl, key: string): D | null {\n const c = control.get(key);\n if (!c) {\n return null;\n }\n\n return c.value;\n}\n\n/**\n * From >= To\n */\nfunction toGreaterThanFrom<D>(dateAdapter: DateAdapter<D>): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const from = parseFromControl<D>(control, 'from');\n const to = parseFromControl<D>(control, 'to');\n\n if (from && to && dateAdapter.compareDate(from, to) > 0) {\n return {toGreaterThanFrom: true};\n }\n\n return null;\n };\n}\n\n/**\n * Date range with mandatory bounding dates.\n *\n * If you need optional bounding date, then use `TypeDateComponent` instead.\n */\n@Component({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatFormField,\n MatError,\n MatSuffix,\n MatInput,\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n ],\n templateUrl: './type-date-range.component.html',\n})\nexport class TypeDateRangeComponent<D = any> implements DropdownComponent {\n private dateAdapter = inject<DateAdapter<D>>(DateAdapter);\n private dateFormats = inject(MAT_DATE_FORMATS);\n\n public readonly renderedValue = new BehaviorSubject<string>('');\n public readonly configuration: Required<TypeDateRangeConfiguration<D>>;\n public readonly matcher = new InvalidWithValueStateMatcher();\n public readonly fromCtrl = new FormControl<D | null>(null);\n public readonly toCtrl = new FormControl<D | null>(null);\n public readonly form = new FormGroup({\n from: this.fromCtrl,\n to: this.toCtrl,\n });\n\n private readonly defaults: Required<TypeDateRangeConfiguration<D>> = {\n min: null,\n max: null,\n };\n\n public constructor() {\n const data = inject<NaturalDropdownData<TypeDateRangeConfiguration<D>>>(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n merge(this.fromCtrl.valueChanges, this.toCtrl.valueChanges).subscribe(() => {\n this.renderedValue.next(this.getRenderedValue());\n });\n\n this.initValidators();\n this.reloadCondition(data.condition);\n }\n\n public getCondition(): FilterGroupConditionField {\n const from = serialize<D>(this.dateAdapter, this.fromCtrl.value);\n const to = serialize<D>(this.dateAdapter, this.toCtrl.value);\n\n if (from && to) {\n return {between: {from, to}};\n } else {\n return {};\n }\n }\n\n public isValid(): boolean {\n return this.form.valid;\n }\n\n public isDirty(): boolean {\n return this.form.dirty;\n }\n\n private reloadCondition(condition: FilterGroupConditionField | null): void {\n if (!condition) {\n return;\n }\n\n const value = {\n from: null as D | null,\n to: null as D | null,\n };\n\n if (condition.between) {\n value.from = this.dateAdapter.parse(condition.between.from, null);\n value.to = this.dateAdapter.parse(condition.between.to, null);\n }\n\n this.form.setValue(value);\n }\n\n private initValidators(): void {\n const validators: ValidatorFn[] = [Validators.required];\n if (this.configuration.min) {\n validators.push(dateMin<D>(this.dateAdapter, this.configuration.min));\n }\n\n if (this.configuration.max) {\n validators.push(dateMax<D>(this.dateAdapter, this.configuration.max));\n }\n\n this.fromCtrl.setValidators(validators);\n this.toCtrl.setValidators(validators);\n\n this.form.setValidators([\n toGreaterThanFrom<D>(this.dateAdapter), // From < To\n ]);\n }\n\n public render(value: D | null): string {\n return value ? this.dateAdapter.format(value, this.dateFormats.display.dateInput) : '';\n }\n\n private getRenderedValue(): string {\n const from = this.render(this.fromCtrl.value);\n const to = this.render(this.toCtrl.value);\n\n if (from && to) {\n return from + ' - ' + to;\n } else {\n return '';\n }\n }\n}\n","<form [formGroup]=\"form\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <input\n matInput\n placeholder=\"De\"\n i18n-placeholder\n [matDatepicker]=\"from\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"from\" />\n <mat-datepicker #from />\n @if (form.hasError('toGreaterThanFrom')) {\n <mat-error>{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</mat-error>\n }\n @if (fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')) {\n <mat-error>< {{ configuration.min }}</mat-error>\n }\n @if (fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')) {\n <mat-error>> {{ configuration.max }}</mat-error>\n }\n @if (fromCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n </mat-form-field>\n\n <mat-form-field subscriptSizing=\"dynamic\">\n <input\n matInput\n placeholder=\"à\"\n i18n-placeholder\n [matDatepicker]=\"to\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matIconSuffix [for]=\"to\" />\n <mat-datepicker #to />\n @if (toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')) {\n <mat-error> < {{ configuration.min }}</mat-error>\n }\n @if (toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')) {\n <mat-error> > {{ configuration.max }}</mat-error>\n }\n @if (toCtrl.hasError('required')) {\n <mat-error>*</mat-error>\n }\n </mat-form-field>\n</form>\n","import {Component, inject} from '@angular/core';\nimport {FormControl, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {MatButtonToggle, MatButtonToggleGroup} from '@angular/material/button-toggle';\nimport {BehaviorSubject} from 'rxjs';\nimport {Literal} from '../../../types/types';\nimport {FilterGroupConditionField} from '../../search/classes/graphql-doctrine.types';\nimport {NaturalDropdownRef} from '../../search/dropdown-container/dropdown-ref';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {isEqual} from 'es-toolkit/compat';\n\nexport type TypeOption = {\n display: string;\n condition: Literal;\n};\n\nexport type TypeOptionsConfiguration = {\n options: TypeOption[];\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatButtonToggleGroup, MatButtonToggle],\n templateUrl: './type-options.component.html',\n})\nexport class TypeOptionsComponent implements DropdownComponent {\n public readonly renderedValue = new BehaviorSubject<string>('');\n\n public readonly formControl = new FormControl<TypeOption>({} as TypeOption, {nonNullable: true});\n\n public readonly configuration: Required<TypeOptionsConfiguration>;\n\n private readonly defaults: Required<TypeOptionsConfiguration> = {\n options: [],\n };\n protected readonly dropdownRef = inject(NaturalDropdownRef);\n public constructor() {\n const data: NaturalDropdownData<TypeOptionsConfiguration> = inject(NATURAL_DROPDOWN_DATA);\n\n this.configuration = {...this.defaults, ...data.configuration};\n\n if (!this.configuration.options.length) {\n throw new Error('TypeOptions need options, empty array or null given');\n }\n\n this.formControl.setValidators([Validators.required]);\n\n if (data.condition) {\n const option = this.configuration.options.find(option => isEqual(option.condition, data.condition));\n\n if (option) {\n this.formControl.setValue(option);\n this.renderedValue.next(option.display);\n }\n }\n\n // Update rendered value\n this.formControl.valueChanges.subscribe(option => {\n if (option) {\n this.renderedValue.next(option.display);\n this.dropdownRef.close(option);\n }\n });\n }\n\n public getCondition(): FilterGroupConditionField {\n if (!this.isValid()) {\n return {};\n }\n\n return this.formControl.value.condition;\n }\n\n public isValid(): boolean {\n return this.formControl.valid && !!this.formControl.value?.condition;\n }\n\n public isDirty(): boolean {\n return this.formControl.dirty;\n }\n}\n","<mat-button-toggle-group [formControl]=\"formControl\">\n @for (option of configuration.options; track option) {\n <mat-button-toggle [value]=\"option\">{{ option.display }}</mat-button-toggle>\n }\n</mat-button-toggle-group>\n","import {Component, inject} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NATURAL_DROPDOWN_DATA, NaturalDropdownData} from '../../search/dropdown-container/dropdown.service';\nimport {DropdownComponent} from '../../search/types/dropdown-component';\nimport {TypeOptionsComponent, TypeOptionsConfiguration} from '../type-options/type-options.component';\nimport {MatButtonToggle, MatButtonToggleGroup} from '@angular/material/button-toggle';\n\nexport type TypeBooleanConfiguration = {\n displayWhenActive: string;\n displayWhenInactive: string;\n};\n\n@Component({\n imports: [FormsModule, ReactiveFormsModule, MatButtonToggleGroup, MatButtonToggle],\n templateUrl: '../type-options/type-options.component.html',\n providers: [\n {\n provide: NATURAL_DROPDOWN_DATA,\n useFactory: (): NaturalDropdownData<TypeOptionsConfiguration> => {\n const data = inject<NaturalDropdownData<TypeBooleanConfiguration>>(NATURAL_DROPDOWN_DATA, {\n skipSelf: true,\n });\n\n // Set up options from hardcoded conditions with custom labels from config\n return {\n ...data,\n configuration: {\n options: [\n {\n display: data.configuration.displayWhenActive,\n condition: {equal: {value: true}},\n },\n {\n display: data.configuration.displayWhenInactive,\n condition: {equal: {value: false}},\n },\n ],\n },\n };\n },\n },\n ],\n})\nexport class TypeBooleanComponent extends TypeOptionsComponent implements DropdownComponent {}\n","/*\n * Public API Surface of natural-search dropdown components\n */\nexport {\n type TypeSelectConfiguration,\n type TypeSelectItem,\n TypeSelectComponent,\n} from './type-select/type-select.component';\n\nexport {\n type TypeSelectNaturalConfiguration,\n TypeNaturalSelectComponent,\n} from './type-natural-select/type-natural-select.component';\n\nexport {type TypeNumberConfiguration, TypeNumberComponent} from './type-number/type-number.component';\n\nexport {\n type TypeHierarchicSelectorConfiguration,\n TypeHierarchicSelectorComponent,\n} from './type-hierarchic-selector/type-hierarchic-selector.component';\n\nexport {type TypeDateConfiguration, TypeDateComponent} from './type-date/type-date.component';\n\nexport {type TypeDateRangeConfiguration, TypeDateRangeComponent} from './type-date-range/type-date-range.component';\n\nexport {TypeTextComponent, InvalidWithValueStateMatcher} from './type-text/type-text.component';\n\nexport {type TypeBooleanConfiguration, TypeBooleanComponent} from './type-boolean/type-boolean.component';\nexport {\n type TypeOptionsConfiguration,\n type TypeOption,\n TypeOptionsComponent,\n} from './type-options/type-options.component';\nexport {\n possibleComparableOperators,\n possibleNullComparableOperators,\n type PossibleComparableOperator,\n type PossibleComparableOperatorKeys,\n} from './types';\n","/**\n * Common image mime type that are supported by Felix out of the box.\n *\n * Should be kept in sync with `\\Ecodev\\Felix\\Model\\Traits\\Image::getAcceptedMimeTypes`\n */\nexport const commonImageMimeTypes =\n 'image/avif,image/bmp,image/x-ms-bmp,image/gif,image/heic,image/heif,image/jpeg,image/pjpeg,image/png,image/svg+xml,image/svg,image/webp';\n\nexport function acceptType(accept: string, type: string, filename: string): boolean {\n const mimeAndExtensions = accept\n .trim()\n .toLowerCase()\n .split(',')\n .map(s => s.trim())\n .filter(s => s);\n\n if (!mimeAndExtensions.length) {\n return true;\n }\n\n type = type.toLowerCase();\n filename = filename.toLowerCase();\n\n const mimeAsExtensions = mimeAndExtensions\n .map(s => /^[^/]+\\/(.*)$/.exec(s)?.[1])\n .filter(s => s)\n .map(s => '.' + s);\n\n return [...mimeAndExtensions, ...mimeAsExtensions].some(mimeOrExtension => {\n if (mimeOrExtension.startsWith('.')) {\n return filename.endsWith(mimeOrExtension);\n } else {\n // Transform `*` into `.*`\n const pattern = mimeOrExtension.replace(/\\*/g, '.*');\n\n return type.match(pattern);\n }\n });\n}\n\nexport function isFileInput(elm: HTMLElement): elm is HTMLInputElement {\n const type = elm.getAttribute('type');\n\n return elm.tagName.toLowerCase() === 'input' && !!type && type.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\n\nexport function detectSwipe(event: Event | TouchEvent): boolean {\n const touches = 'changedTouches' in event ? event.changedTouches : null;\n if (!touches) {\n return false;\n }\n\n if (event.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (event.type === 'touchend') {\n const currentX = touches[0].clientX;\n const currentY = touches[0].clientY;\n if (Math.abs(currentX - initialTouchStartX) > 20 || Math.abs(currentY - initialTouchStartY) > 20) {\n event.stopPropagation();\n if (event.cancelable) {\n event.preventDefault();\n }\n\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport function createInvisibleFileInputWrap(document: Document): HTMLLabelElement {\n const fileElem = createFileInput(document);\n const label = document.createElement('label');\n label.innerHTML = 'upload';\n label.style.visibility = 'hidden';\n label.style.position = 'absolute';\n label.style.overflow = 'hidden';\n label.style.width = '0px';\n label.style.height = '0px';\n label.style.border = 'none';\n label.style.margin = '0px';\n label.style.padding = '0px';\n label.setAttribute('tabindex', '-1');\n\n label.appendChild(fileElem);\n\n return label;\n}\n\nfunction createFileInput(document: Document): HTMLInputElement {\n const fileElem = document.createElement('input');\n fileElem.type = 'file';\n\n return fileElem;\n}\n\nexport function isDirectory(file: File): Promise<boolean> {\n return blobText(file.slice(0, 1)).then(\n text => {\n // Firefox will return empty string for a folder, so we must check that special case.\n // That means that any empty file will incorrectly be interpreted as a folder on all\n // browsers, but that's tolerable because there is no real use-case to upload an empty file.\n return text !== '';\n },\n () => false,\n );\n}\n\n/**\n * This is a ponyfill for `Blob.text()`, because Safari 13 and 14 do not support it, https://caniuse.com/?search=blob.text,\n * and we try our best not to break iPhone users too much.\n */\nfunction blobText(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result as string);\n };\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n}\n\nexport function stopEvent(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport function fileListToArray(fileList: FileList): File[] {\n const result: File[] = [];\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList.item(i);\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nfunction dataTransferItemListToArray(items: DataTransferItemList): File[] {\n const result: File[] = [];\n\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < items.length; i++) {\n const file = items[i].getAsFile();\n if (file) {\n result.push(file);\n }\n }\n\n return result;\n}\n\nexport function eventToFiles(event: Event | DragEvent): File[] {\n const transfer = 'dataTransfer' in event ? event.dataTransfer : null;\n if (transfer?.files?.length) {\n return fileListToArray(transfer.files);\n }\n\n if (transfer) {\n return dataTransferItemListToArray(transfer.items);\n }\n\n return [];\n}\n","import {DOCUMENT, inject, Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {FileSelection} from './abstract-file';\nimport {FileModel} from './types';\n\n// @dynamic\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalFileService {\n private readonly document = inject(DOCUMENT);\n\n /**\n * Allow to subscribe to selected files in the entire application. So a\n * child component is able to receive a file that was dropped on a parent\n * component.\n *\n * Typically useful to drop a file on the entire screen, instead of a precise\n * component.\n */\n public readonly filesChanged = new Subject<FileSelection>();\n\n public getDownloadLink(model: FileModel | null): null | string {\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Cannot build download link because `window` is undefined');\n }\n\n const hostname = window.location.protocol + '//' + window.location.hostname;\n\n if (model?.__typename === 'File') {\n return hostname + '/api/file/' + model.id;\n } else if (model?.__typename === 'AccountingDocument') {\n return hostname + '/api/accounting-document/' + model.id;\n } else if (model?.__typename === 'Image') {\n return hostname + '/api/image/' + model.id;\n }\n\n return null;\n }\n}\n","import {\n Directive,\n DOCUMENT,\n ElementRef,\n HostListener,\n inject,\n Input,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {\n acceptType,\n createInvisibleFileInputWrap,\n detectSwipe,\n eventToFiles,\n fileListToArray,\n isDirectory,\n isFileInput,\n stopEvent,\n} from './utils';\nimport {NaturalFileService} from './file.service';\nimport {forkJoin, map, Observable, ObservableInput, of, Subject, tap} from 'rxjs';\nimport {outputFromObservable} from '@angular/core/rxjs-interop';\n\nexport type InvalidFile = {\n file: File;\n error: string;\n};\n\nexport type FileSelection = {\n /**\n * The list of files that have been selected.\n */\n valid: File[];\n\n /**\n * The list of files that have been selected but are invalid according to validators.\n */\n invalid: InvalidFile[];\n};\n\n/**\n * A master base set of logic intended to support file select/drag/drop operations\n *\n * In most cases you probably want click-to-select and drag-to-select, so you should use:\n *\n * <div naturalFileDrop [selectable]=\"true\"></div>\n *\n * @dynamic\n */\n@Directive()\nexport abstract class NaturalAbstractFile implements OnInit, OnDestroy, OnChanges {\n private fileElement?: HTMLInputElement;\n\n /**\n * Whether we should accept a single file or multiple files\n */\n public readonly multiple = input(false);\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element,\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n public readonly accept = input('');\n\n /**\n * Maximum file size in bytes. 0 means no validation at all.\n */\n public readonly maxSize = input(0);\n\n /**\n * Disable the file selection entirely\n */\n public readonly fileSelectionDisabled = input(false);\n\n /**\n * Whether the user can click on the element to select something\n *\n * This has only effect during initialization. Subsequent changes will have\n * no effect.\n */\n public readonly selectable = input(false);\n\n /**\n * If true, the file selection will be broadcast through `NaturalFileService.filesChanged`.\n *\n * It is useful to set this to false if there are two uploads on a page with different purposes,\n * and the second upload should not be confused with the first one.\n */\n @Input() public broadcast = true;\n\n private readonly fileChange$ = new Subject<File>();\n\n /**\n * The single valid file that has been selected.\n *\n * It is for convenience of use, and will only emit if there is at least one\n * valid file. See `filesChange` for a more complete output.\n */\n public readonly fileChange = outputFromObservable(this.fileChange$);\n\n private readonly filesChange$ = new Subject<FileSelection>();\n\n /**\n * The list of files that have been selected.\n */\n public readonly filesChange = outputFromObservable(this.filesChange$);\n\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly naturalFileService = inject(NaturalFileService);\n private readonly document = inject(DOCUMENT);\n\n public ngOnDestroy(): void {\n delete this.fileElement; // faster memory release of dom element\n }\n\n public ngOnInit(): void {\n if (this.selectable()) {\n this.enableSelecting();\n }\n\n this.getFileElement().multiple = this.multiple();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.accept) {\n this.getFileElement().setAttribute('accept', changes.accept.currentValue || '*');\n }\n }\n\n private getFileElement(): HTMLInputElement {\n if (this.fileElement) {\n return this.fileElement;\n }\n\n // elm is a file input\n if (isFileInput(this.element.nativeElement)) {\n this.fileElement = this.element.nativeElement;\n\n return this.fileElement;\n }\n\n // create foo file input\n const label = createInvisibleFileInputWrap(this.document);\n this.fileElement = label.getElementsByTagName('input')[0];\n this.fileElement.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild(label);\n\n return this.fileElement;\n }\n\n private enableSelecting(): void {\n const elm = this.element.nativeElement;\n\n if (isFileInput(elm)) {\n const bindedHandler = (): void => this.beforeSelect();\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n return;\n } else {\n const bindedHandler = (event: Event): boolean => this.clickHandler(event);\n elm.addEventListener('click', bindedHandler);\n elm.addEventListener('touchstart', bindedHandler);\n elm.addEventListener('touchend', bindedHandler);\n }\n }\n\n protected handleFiles(files: File[]): void {\n const selection: FileSelection = {\n valid: [],\n invalid: [],\n };\n\n forkJoin(\n files.map(file =>\n this.validate(file).pipe(\n tap(error => {\n if (error) {\n selection.invalid.push({\n file: file,\n error: error,\n });\n } else {\n selection.valid.push(file);\n }\n }),\n ),\n ),\n ).subscribe(() => {\n if (selection.valid.length) {\n this.fileChange$.next(selection.valid[0]);\n }\n\n if (selection.valid.length || selection.invalid.length) {\n this.filesChange$.next(selection);\n\n if (this.broadcast) {\n this.naturalFileService.filesChanged.next(selection);\n }\n }\n\n this.getFileElement().value = '';\n });\n }\n\n /**\n * Called when input has files\n */\n private changeFn(event: Event): void {\n if (!(event.target instanceof HTMLInputElement)) {\n return;\n }\n\n const fileList = event.target.files;\n\n if (!fileList) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(fileListToArray(fileList));\n }\n\n private clickHandler(event: Event): boolean {\n const elm = this.element.nativeElement;\n if (elm.getAttribute('disabled') || this.fileSelectionDisabled()) {\n return false;\n }\n\n // prevent the click if it is a swipe\n if (detectSwipe(event)) {\n return true;\n }\n\n const fileElm = this.getFileElement();\n fileElm.click();\n this.beforeSelect();\n\n return false;\n }\n\n private beforeSelect(): void {\n if (!this.fileElement) {\n return;\n }\n\n // if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElement.value = '';\n }\n\n @HostListener('change', ['$event'])\n public onChange(event: Event): void {\n const fileList = this.getFileElement().files;\n const files: File[] = fileList ? fileListToArray(fileList) : eventToFiles(event);\n\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n private validate(file: File): Observable<string | null> {\n const maxSize = this.maxSize();\n return forkJoin<Record<string, ObservableInput<boolean>>>({\n accept: of(acceptType(this.accept(), file.type, file.name)),\n fileSize: of(!(maxSize && file.size > maxSize)),\n directory: isDirectory(file),\n }).pipe(\n map(result => {\n for (const [key, value] of Object.entries(result)) {\n if (!value) {\n return key;\n }\n }\n\n return null;\n }),\n );\n }\n\n protected hasObservers(): boolean {\n return (\n this.fileChange$.observed ||\n this.filesChange$.observed ||\n (this.broadcast && this.naturalFileService.filesChanged.observed)\n );\n }\n}\n","import {DestroyRef, Directive, HostBinding, HostListener, inject, OnInit, output} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\nimport {eventToFiles, stopEvent} from './utils';\nimport {asyncScheduler, Subject} from 'rxjs';\nimport {throttleTime} from 'rxjs/operators';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * This directive has all options to select files, and adds support for drag'n'drop.\n *\n * It will add the CSS class `natural-file-over` on the component when a file is\n * dragged over. It is up to the component to have some specific styling by using\n * this class.\n *\n * In most cases you probably also want click-to-select, so you should use:\n *\n * ```html\n * <div naturalFileDrop [selectable]=\"true\"></div>\n * ```\n */\n@Directive({\n selector: ':not([naturalFileSelect])[naturalFileDrop]',\n})\nexport class NaturalFileDropDirective extends NaturalAbstractFile implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n @HostBinding('class.natural-file-over') public fileOverClass = false;\n\n /**\n * Emits whenever files are being dragged over\n */\n public readonly fileOver = output<boolean>();\n\n private readonly rawFileOver = new Subject<boolean>();\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n // Automatically change the class, but not too often to avoid visual\n // flickering in Chrome when hovering across child HTML element of our host.\n // It's not absolutely perfect and if dragging slowly and precisely we can\n // still see flicker, but it should be better for most normal usages.\n this.rawFileOver\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n throttleTime(200, asyncScheduler, {\n leading: true,\n trailing: true,\n }),\n )\n .subscribe(fileOver => {\n this.fileOver.emit(fileOver);\n this.fileOverClass = fileOver;\n });\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(event: DragEvent): void {\n if (this.fileSelectionDisabled()) {\n return;\n }\n\n this.closeDrags();\n\n const files = eventToFiles(event);\n if (!files.length) {\n return;\n }\n\n stopEvent(event);\n this.handleFiles(files);\n }\n\n @HostListener('dragover', ['$event'])\n public onDragOver(event: DragEvent): void {\n if (!this.hasObservers()) {\n return;\n }\n\n if (this.fileSelectionDisabled()) {\n return;\n }\n\n stopEvent(event);\n\n // Change cursor\n const transfer = event.dataTransfer;\n if (transfer) {\n transfer.dropEffect = 'copy';\n }\n\n this.rawFileOver.next(true);\n }\n\n private closeDrags(): void {\n this.rawFileOver.next(false);\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(event: DragEvent): void {\n if (this.fileSelectionDisabled()) {\n return;\n }\n\n stopEvent(event);\n this.closeDrags();\n }\n}\n","import {Directive, input} from '@angular/core';\nimport {NaturalAbstractFile} from './abstract-file';\n\n/**\n * This directive has all options to select files, except drag'n'drop.\n */\n@Directive({\n selector: ':not([naturalFileDrop])[naturalFileSelect]',\n})\nexport class NaturalFileSelectDirective extends NaturalAbstractFile {\n /**\n * Whether the user can click on the element to select something\n *\n * Override parent to enable it by default\n */\n public override readonly selectable = input(true);\n}\n","import {\n Component,\n computed,\n DOCUMENT,\n inject,\n input,\n Input,\n OnChanges,\n OnInit,\n output,\n SimpleChanges,\n} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\nimport {Observable, of, Subject, tap} from 'rxjs';\nimport {NaturalFileService} from '../file.service';\nimport {UpperCasePipe} from '@angular/common';\nimport {FileModel} from '../types';\nimport {NaturalAlertService} from '../../alert/alert.service';\nimport {NaturalCapitalizePipe} from '../../common/pipes/capitalize.pipe';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatRipple} from '@angular/material/core';\nimport {NaturalFileDropDirective} from '../file-drop.directive';\nimport {NaturalBackgroundDensityDirective} from '../../common/directives/background-density.directive';\nimport {commonImageMimeTypes} from '../utils';\n\n// @dynamic\n@Component({\n selector: 'natural-file',\n imports: [\n NaturalFileDropDirective,\n MatRipple,\n UpperCasePipe,\n MatIcon,\n NaturalIconDirective,\n NaturalCapitalizePipe,\n NaturalBackgroundDensityDirective,\n ],\n templateUrl: './file.component.html',\n styleUrl: './file.component.scss',\n host: {\n '[style.height.px]': 'height()',\n },\n})\nexport class NaturalFileComponent implements OnInit, OnChanges {\n private readonly naturalFileService = inject(NaturalFileService);\n private readonly alertService = inject(NaturalAlertService);\n private readonly document = inject(DOCUMENT);\n\n public readonly height = input(250);\n public readonly iconHeight = computed(() => Math.min(this.height() * 0.66, 120));\n public readonly fontSize = computed(() => Math.min(this.height() * 0.3, 36));\n\n public readonly action = input<'upload' | 'download' | null>(null);\n\n public readonly backgroundSize = input('contain');\n\n /**\n * Comma-separated list of unique file type specifiers. Like the native element,\n * it can be a mix of mime-type and file extensions.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept\n */\n public readonly accept = input(commonImageMimeTypes);\n\n /**\n * If given, it will be called when a new file is selected. The callback should typically upload the file\n * to the server and link the newly uploaded file to the existing related object.\n *\n * The callback **must** be able to run even if the calling component has been destroyed. That means in most\n * cases you **must** `bind()` the callback explicitly, like so:\n *\n * ```html\n * <natural-file [uploader]=\"myCallback.bind(this)\" />\n * ```\n *\n * Also, you probably **should** set a `[formCtrl]` so that the form is updated automatically, instead of doing\n * it manually within the callback.\n */\n public readonly uploader = input<(file: File) => Observable<FileModel>>();\n\n @Input() public model: FileModel | null = null;\n\n /**\n * If provided, its value will get updated when the model changes.\n * But its value is never read, so if you want to set a value use `[model]` instead.\n */\n public readonly formCtrl = input<AbstractControl | null | undefined>(null);\n\n /**\n * This **must not** be used to mutate the server, because it is very likely it will never be called if the\n * human navigates away from the page before the upload is finished. Instead, you should use `[uploader]`.\n */\n public readonly modelChange = output<FileModel>();\n\n public imagePreview = '';\n public filePreview: string | null = null;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.model && changes.model.previousValue !== changes.model.currentValue) {\n this.updateImage();\n }\n }\n\n public ngOnInit(): void {\n this.updateImage();\n }\n\n public upload(file: File): void {\n this.model = {file: file};\n this.updateImage();\n\n const formCtrl = this.formCtrl();\n if (formCtrl) {\n formCtrl.setValue(this.model);\n }\n\n const observable =\n this.uploader()?.(file).pipe(tap(() => this.alertService.info($localize`Mis à jour`))) ?? of(this.model);\n\n observable.subscribe(result => {\n this.model = result;\n const formCtrlValue = this.formCtrl();\n if (formCtrlValue) {\n formCtrlValue.setValue(this.model);\n }\n\n this.modelChange.emit(this.model);\n this.updateImage();\n });\n }\n\n public getDownloadLink(): null | string {\n if (this.action() !== 'download') {\n return null;\n }\n\n return this.naturalFileService.getDownloadLink(this.model);\n }\n\n private updateImage(): void {\n this.imagePreview = '';\n this.filePreview = null;\n if (!this.model) {\n return;\n }\n\n if (this.model.file?.type.startsWith('image/')) {\n // Model from upload (before saving)\n this.getBase64(this.model.file).subscribe(result => {\n if (this.model?.file?.type) {\n const content = 'url(data:' + this.model?.file?.type + ';base64,' + result + ')';\n this.imagePreview = content;\n }\n });\n } else if (this.model.file) {\n this.filePreview = this.model.file.type.split('/')[1];\n } else if (this.model.__typename === 'Image' && this.model.id) {\n // Model image with id, use specific API to render image by size\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not show image preview because `window` is undefined');\n }\n\n const loc = window.location;\n const height = this.height() ? '/' + this.height() : '';\n\n // create image url without port to stay compatible with dev mode\n const image = loc.protocol + '//' + loc.hostname + '/api/image/' + this.model.id + height;\n this.imagePreview = image;\n } else if (this.model?.mime && ['File', 'AccountingDocument'].includes(this.model.__typename || '')) {\n this.filePreview = this.model.mime.split('/')[1];\n } else if (this.model.src) {\n // external url\n this.imagePreview = this.model.src;\n }\n }\n\n private getBase64(file: File | null): Observable<string> {\n if (!file) {\n return of('');\n }\n\n const subject = new Subject<string>();\n\n const reader = new FileReader();\n reader.addEventListener('load', (ev: any) => {\n subject.next(btoa(ev.target.result));\n subject.complete();\n });\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n reader.readAsBinaryString(file);\n\n return subject.asObservable();\n }\n}\n","<a\n naturalFileDrop\n matRipple\n target=\"_blank\"\n [selectable]=\"true\"\n [accept]=\"accept()\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action()\"\n [class.suggest-upload]=\"!model && action() === 'upload'\"\n [fileSelectionDisabled]=\"action() !== 'upload'\"\n [matRippleDisabled]=\"!action()\"\n [naturalBackgroundDensity]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize()\"\n (fileChange)=\"upload($event)\"\n>\n @if (filePreview) {\n <div class=\"file-preview\" [style.font-size.px]=\"fontSize()\">\n <mat-icon naturalIcon=\"attachment\" [size]=\"iconHeight()\" />\n {{ filePreview | uppercase }}\n </div>\n }\n\n <div class=\"action-overlay\" [style.font-size.px]=\"fontSize()\">\n @if (action() === 'upload') {\n <mat-icon naturalIcon=\"cloud_upload\" [size]=\"iconHeight()\" />\n }\n @if (action() === 'download') {\n <mat-icon naturalIcon=\"get_app\" [size]=\"iconHeight()\" />\n }\n {{ action() | capitalize }}\n </div>\n</a>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './file-drop.directive';\nexport * from './file-select.directive';\nexport * from './file.service';\nexport type {InvalidFile, FileSelection} from './abstract-file';\nexport * from './component/file.component';\nexport * from './types';\nexport {commonImageMimeTypes} from './utils';\n","import {Component, input} from '@angular/core';\nimport {RouterLink} from '@angular/router';\nimport {NaturalPalette} from '../../types/types';\n\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatFabButton} from '@angular/material/button';\n\n@Component({\n selector: 'natural-fixed-button',\n imports: [MatFabButton, RouterLink, MatIcon, NaturalIconDirective],\n templateUrl: './fixed-button.component.html',\n styleUrl: './fixed-button.component.scss',\n})\nexport class NaturalFixedButtonComponent {\n public readonly icon = input.required<string>();\n public readonly link = input<RouterLink['routerLink'] | null>(null);\n public readonly color = input<NaturalPalette>('tertiary');\n public readonly disabled = input(false);\n}\n","<button mat-fab [color]=\"color()\" [disabled]=\"disabled()\" [routerLink]=\"link()\">\n <mat-icon [naturalIcon]=\"icon()\" />\n</button>\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button.component';\n","import {Component, inject, Input, output} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {NaturalFixedButtonComponent} from '../fixed-button/fixed-button.component';\n\ntype Model = {\n id?: string;\n permissions?: {\n delete: boolean;\n };\n};\n\n@Component({\n selector: 'natural-fixed-button-detail',\n imports: [NaturalFixedButtonComponent, MatTooltip],\n templateUrl: './fixed-button-detail.component.html',\n styleUrl: './fixed-button-detail.component.scss',\n})\nexport class NaturalFixedButtonDetailComponent {\n private canChange = true;\n public isCreation = false;\n\n public get model(): Model {\n return this._model;\n }\n\n @Input({required: true})\n public set model(value: Model) {\n this._model = value;\n if (this.canChange) {\n this.isCreation = !this._model.id;\n this.canChange = false;\n }\n }\n\n private _model!: Model;\n\n @Input({required: true}) public form!: FormGroup;\n\n public readonly create = output();\n public readonly delete = output();\n\n public constructor() {\n const route = inject(ActivatedRoute);\n\n route.params.pipe(takeUntilDestroyed()).subscribe(() => (this.canChange = true));\n }\n\n public clickCreate(): void {\n if (this.form.enabled) {\n this.create.emit();\n }\n }\n\n public clickDelete(): void {\n if (this.form.enabled) {\n this.delete.emit();\n }\n }\n}\n","@if (isCreation) {\n <natural-fixed-button\n class=\"detail-speed-dial\"\n icon=\"save\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'tertiary' : 'error'\"\n (click)=\"clickCreate()\"\n />\n}\n\n@if (!isCreation && (!model.permissions || model.permissions.delete)) {\n <natural-fixed-button\n class=\"detail-speed-dial\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer définitivement\"\n matTooltipPosition=\"left\"\n [disabled]=\"form.disabled\"\n (click)=\"clickDelete()\"\n />\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './fixed-button-detail.component';\n","import {Component, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogModule, MatDialogRef} from '@angular/material/dialog';\nimport {clone} from 'es-toolkit';\nimport {defaults} from 'es-toolkit/compat';\nimport {NaturalSearchFacets} from '../../search/types/facet';\nimport {NaturalSearchSelections} from '../../search/types/values';\nimport {NaturalHierarchicConfiguration} from '../classes/hierarchic-configuration';\nimport {HierarchicFiltersConfiguration} from '../classes/hierarchic-filters-configuration';\nimport {OrganizedModelSelection} from '../hierarchic-selector/hierarchic-selector.service';\nimport {MatButton} from '@angular/material/button';\nimport {NaturalHierarchicSelectorComponent} from '../hierarchic-selector/hierarchic-selector.component';\n\nexport type HierarchicDialogResult = {\n hierarchicSelection?: OrganizedModelSelection;\n searchSelections?: NaturalSearchSelections | null;\n};\n\nexport type HierarchicDialogConfig = {\n /**\n * Configuration to setup rules of hierarchy\n */\n hierarchicConfig: NaturalHierarchicConfiguration[];\n\n /**\n * Selected items when HierarchicComponent initializes\n */\n hierarchicSelection?: OrganizedModelSelection;\n\n /**\n * Filters to apply on queries (when opening new level of hierarchy)\n */\n hierarchicFilters?: HierarchicFiltersConfiguration | null;\n\n /**\n * Multiple selection if true or single selection if false\n */\n multiple?: boolean;\n\n /**\n * Allow to select all items with dedicated button\n */\n allowSelectAll?: boolean;\n\n /**\n * Facets for natural-search in HierarchicComponent\n */\n searchFacets?: NaturalSearchFacets;\n\n /**\n * Selections of natural search to initialize on HierarchicComponent initialisation\n */\n searchSelections?: NaturalSearchSelections | null;\n};\n\n@Component({\n imports: [MatDialogModule, NaturalHierarchicSelectorComponent, MatButton],\n templateUrl: './hierarchic-selector-dialog.component.html',\n styleUrl: './hierarchic-selector-dialog.component.scss',\n})\nexport class NaturalHierarchicSelectorDialogComponent {\n private dialogRef =\n inject<MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult>>(MatDialogRef);\n\n /**\n * Set of hierarchic configurations to pass as attribute to HierarchicComponent\n */\n public config: HierarchicDialogConfig;\n\n /**\n * Natural search selections after initialisation\n */\n public searchSelectionsOutput: NaturalSearchSelections | undefined | null;\n\n public constructor() {\n const data = inject<HierarchicDialogConfig>(MAT_DIALOG_DATA);\n\n this.config = defaults(data, {multiple: true});\n this.searchSelectionsOutput = this.config.searchSelections;\n }\n\n public close(selected: OrganizedModelSelection | undefined): void {\n const result: HierarchicDialogResult = {\n hierarchicSelection: clone(selected),\n searchSelections: clone(this.searchSelectionsOutput),\n };\n\n this.dialogRef.close(result);\n }\n}\n","<h2 i18n mat-dialog-title>Sélection</h2>\n\n<mat-dialog-content>\n <natural-hierarchic-selector\n [selected]=\"config.hierarchicSelection ?? {}\"\n [config]=\"config.hierarchicConfig\"\n [filters]=\"config.hierarchicFilters\"\n [multiple]=\"config.multiple ?? false\"\n [allowSelectAll]=\"config.allowSelectAll ?? false\"\n [searchFacets]=\"config.searchFacets ?? []\"\n [searchSelections]=\"config.searchSelections ?? []\"\n (selectionChange)=\"config.hierarchicSelection = $event\"\n (searchSelectionChange)=\"searchSelectionsOutput = $event\"\n />\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button mat-dialog-close mat-button i18n>Annuler</button>\n <button color=\"primary\" matButton=\"filled\" (click)=\"close(config.hierarchicSelection)\"\n ><span i18n>Valider</span>\n </button>\n</mat-dialog-actions>\n","import {inject, Injectable} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {defaults} from 'es-toolkit/compat';\nimport {\n HierarchicDialogConfig,\n HierarchicDialogResult,\n NaturalHierarchicSelectorDialogComponent,\n} from './hierarchic-selector-dialog.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalHierarchicSelectorDialogService {\n private readonly dialog = inject(MatDialog);\n\n public open(\n hierarchicConfig: HierarchicDialogConfig,\n dialogConfig?: MatDialogConfig,\n ): MatDialogRef<NaturalHierarchicSelectorDialogComponent, HierarchicDialogResult> {\n const defaultDialogConfig = {\n width: '700px',\n data: hierarchicConfig,\n };\n\n return this.dialog.open<\n NaturalHierarchicSelectorDialogComponent,\n HierarchicDialogConfig,\n HierarchicDialogResult\n >(NaturalHierarchicSelectorDialogComponent, defaults(dialogConfig, defaultDialogConfig));\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './classes/hierarchic-configuration';\nexport * from './classes/hierarchic-filters-configuration';\nexport * from './hierarchic-selector/hierarchic-selector.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nexport * from './hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nexport * from './hierarchic-selector/hierarchic-selector.service';\n","import {EnvironmentProviders, inject, provideAppInitializer, Provider} from '@angular/core';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {NATURAL_ICONS_CONFIG, NaturalIconsConfig} from './icon.directive';\n\n/**\n * Configure Material Symbols, instead of Material Icons, and configure custom Natural icons.\n *\n * This means that `https://fonts.googleapis.com/icon?family=Material+Icons` must be\n * replaced by `https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@1`.\n */\nexport function provideIcons(config: NaturalIconsConfig): (EnvironmentProviders | Provider)[] {\n return [\n {\n provide: NATURAL_ICONS_CONFIG,\n useValue: config,\n },\n provideAppInitializer(() => {\n const iconRegistry = inject(MatIconRegistry);\n // Replace the old Material Icons by the new Material Symbols\n const defaultFontSetClasses = iconRegistry.getDefaultFontSetClass();\n const outlinedFontSetClasses = defaultFontSetClasses\n .filter(fontSetClass => fontSetClass !== 'material-icons')\n .concat(['material-symbols-outlined']);\n iconRegistry.setDefaultFontSetClass(...outlinedFontSetClasses);\n }),\n ];\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './icon.directive';\nexport {provideIcons} from './icon.module';\n","import {ComponentType} from '@angular/cdk/portal';\nimport {InjectionToken, Injector} from '@angular/core';\nimport {UrlSegment} from '@angular/router';\nimport {Literal} from '../../types/types';\nimport {Observable} from 'rxjs';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {LinkableObject} from '../../services/link-mutation.service';\n\n/**\n * Kind of snapshot of the instance of a panel activated route\n */\nexport type NaturalPanelsRouteConfig = {\n segments: UrlSegment[];\n path: string;\n};\n\n/**\n * Config required to manage url and instantiate component correctly\n */\nexport type NaturalPanelConfig = {\n component: ComponentType<NaturalAbstractPanel>;\n injector: Injector | null;\n resolve: NaturalPanelResolves;\n params: Literal;\n rule: NaturalPanelsRouterRule;\n route: NaturalPanelsRouteConfig;\n};\n\n/**\n * Data provided to instantiated components in context of a panel/dialog\n */\nexport type NaturalPanelData = {\n config: NaturalPanelConfig;\n data: Literal;\n\n /**\n * Related objects that should be linked to the object shown in the panel after its creation\n */\n linkableObjects: LinkableObject[];\n};\n\n/**\n * Similar to Angular functional resolver interface, but simpler for our panels' needs\n */\ntype NaturalPanelResolve<T> = (route: NaturalPanelConfig) => Observable<T>;\nexport type NaturalPanelResolves = Record<string, NaturalPanelResolve<unknown>>;\n/**\n * Configuration for a route\n */\nexport type NaturalPanelsRouterRule = {\n path: string;\n component: ComponentType<NaturalAbstractPanel>;\n resolve?: NaturalPanelResolves;\n};\n\nexport type NaturalPanelsBeforeOpenPanel = {\n itemData: NaturalPanelData;\n panelConfig: NaturalPanelConfig;\n fullPanelsConfig: NaturalPanelConfig[];\n resolvedResult: any; // todo : Generic or NaturalAbstractModelService\n};\n\nexport type NaturalPanelsHooksConfig = {\n beforeOpenPanel?: (\n injector: Injector,\n naturalPanelsBeforeOpenPanel: NaturalPanelsBeforeOpenPanel,\n ) => NaturalPanelData;\n};\n\n// Array of NaturalPanelsRouterRule\nexport type NaturalPanelsRoutesConfig = NaturalPanelsRouterRule[];\n\nexport const PanelsHooksConfig = new InjectionToken<NaturalPanelsHooksConfig>('NaturalPanelsHooksConfig');\n","import {Provider} from '@angular/core';\nimport {NaturalPanelsHooksConfig, PanelsHooksConfig} from './types';\n\nexport function providePanels(hooks: NaturalPanelsHooksConfig): Provider[] {\n return [\n {\n provide: PanelsHooksConfig,\n useValue: hooks,\n },\n ];\n}\n","import {Injector} from '@angular/core';\nimport {Route, UrlMatcher, UrlMatchResult, UrlSegment, UrlSegmentGroup} from '@angular/router';\nimport {flatten, merge} from 'es-toolkit';\nimport {NaturalPanelConfig, NaturalPanelsRouterRule} from './types';\nimport {Literal} from '../../types/types';\n\nfunction getConsumedSegments(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): UrlSegment[] {\n return flatten(getStackConfig(segments, routes).map(conf => conf.route.segments));\n}\n\n/**\n * Return a list of items specifying the component, the service and the optional id of url segments\n */\nexport function getStackConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig[] {\n if (!routes) {\n return [];\n }\n\n const comp = getComponentConfig(segments, routes, injector);\n\n if (comp) {\n return [comp].concat(getStackConfig(segments.slice(comp.route.segments.length), routes, injector));\n }\n\n return [];\n}\n\n/**\n * Returns an object with a component class, a service and an optional id from current and next url segments\n */\nfunction getComponentConfig(\n segments: UrlSegment[],\n routes: NaturalPanelsRouterRule[],\n injector: Injector | null = null,\n): NaturalPanelConfig | null {\n if (!segments.length) {\n return null;\n }\n\n // For each config\n for (const routeConfig of routes) {\n const params: Literal = {};\n const configSegments = routeConfig.path.split('/');\n let match = true;\n\n // For each current url segment\n for (let i = 0; i < segments.length; i++) {\n if (!configSegments[i]) {\n match = false;\n break;\n }\n\n // If find variable, store it\n if (configSegments[i].includes(':') && +segments[i].path > 0) {\n params[configSegments[i].replace(':', '')] = segments[i].path;\n } else if (configSegments[i] !== segments[i].path) {\n // If segments are different, url does not match\n match = false;\n break;\n }\n }\n\n if (match) {\n const matrixParams = segments.reduce((groupedParams, segment) => {\n return merge(groupedParams, segment.parameters);\n }, {});\n\n return {\n component: routeConfig.component,\n injector: injector,\n resolve: routeConfig.resolve ?? {},\n params: merge(params, matrixParams),\n rule: routeConfig,\n route: {\n segments: segments,\n path: segments.map(s => s.path).join('/'),\n },\n };\n }\n }\n\n if (segments.length > 1) {\n return getComponentConfig(segments.slice(0, -1), routes, injector);\n }\n\n return null;\n}\n\nexport const naturalPanelsUrlMatcher: UrlMatcher = (\n segments: UrlSegment[],\n group: UrlSegmentGroup,\n route: Route,\n): UrlMatchResult | null => {\n const matchedSegments = getConsumedSegments(segments, route.data ? route.data.panelsRoutes : []);\n\n if (matchedSegments.length) {\n return {consumed: matchedSegments};\n }\n\n return null;\n};\n","import {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {ComponentType} from '@angular/cdk/portal';\nimport {inject, Injectable, Injector, runInInjectionContext} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {MatDialog, MatDialogConfig} from '@angular/material/dialog';\nimport {ActivatedRoute, DefaultUrlSerializer, NavigationError, Router, UrlSegment} from '@angular/router';\nimport {differenceWith, flatten} from 'es-toolkit';\nimport {isEqual} from 'es-toolkit/compat';\nimport {forkJoin, Observable, of, Subject, Subscription} from 'rxjs';\nimport {NaturalAbstractPanel} from './abstract-panel';\nimport {getStackConfig} from './panels.urlmatcher';\nimport {\n NaturalPanelConfig,\n NaturalPanelData,\n NaturalPanelsBeforeOpenPanel,\n NaturalPanelsRouterRule,\n PanelsHooksConfig,\n} from './types';\n\nfunction segmentsToString(segments: UrlSegment[]): string {\n return segments.map(s => s.toString()).join('/');\n}\n\nfunction compareConfigs(a: NaturalPanelConfig, b: NaturalPanelConfig): boolean {\n return a.route.path === b.route.path && a.rule === b.rule && isEqual(a.params, b.params);\n}\n\n/**\n * TODO: implement route update when closing dialog with escape\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalPanelsService {\n private readonly router = inject(Router);\n private readonly dialog = inject(MatDialog);\n private readonly injector = inject(Injector);\n private hooksConfig = inject(PanelsHooksConfig);\n\n private readonly panelWidth = '960px';\n\n /**\n * Because of this static property Panels are **not** compatible with SSR.\n * And we cannot make it non-static, because `UrlMatcher` cannot be injected.\n */\n private static _opened = false;\n public static get opened(): boolean {\n return this._opened;\n }\n\n /**\n * Stream that emits when all open dialog have finished closing\n */\n public readonly afterAllClosed = new Subject<void>();\n /**\n * Cache for panels counter. Works more like an ID.\n * Is used to give an unique identifier to multiple similar panels configurations\n */\n private counter = 1;\n /**\n * Class applied to dialog overlay related with panels\n * If change, change CSS too\n */\n private panelClass = 'panel';\n\n /**\n * Cache for panels setup before navigation change.\n * Used to detect panels openings/closings and adapt for new configuration\n */\n private oldFullConfig: NaturalPanelConfig[] = [];\n\n /**\n * Cache for subscription stop\n */\n private routeSub?: Subscription;\n\n /**\n * Cache for subscription stop\n */\n private navSub?: Subscription;\n\n /**\n * Horizontal gaps between panels\n */\n private panelsOffsetH = 35;\n\n /**\n * Vertical gaps between panels\n */\n private panelsOffsetV = 40;\n\n /**\n * Cache of previous screen size\n * Used to change panels stack orientation on small screens\n */\n private isVertical = false;\n\n public constructor() {\n const breakpointObserver = inject(BreakpointObserver);\n\n // Watch media to know if display panels horizontally or vertically\n breakpointObserver\n .observe(Breakpoints.XSmall)\n .pipe(takeUntilDestroyed())\n .subscribe(result => {\n this.isVertical = result.matches;\n this.updateComponentsPosition();\n });\n }\n\n /**\n * Notify the service to start listening to route changes to open panels\n *\n * @internal\n */\n public start(route: ActivatedRoute): void {\n NaturalPanelsService._opened = true;\n this.routeSub = route.url.subscribe(segments => {\n this.updatePanels(segments, route.snapshot.data.panelsRoutes);\n });\n\n this.navSub = this.router.events.subscribe(ev => {\n if (!(ev instanceof NavigationError)) {\n return;\n }\n\n // Abort and propagate navigation error\n if (ev.url.endsWith('/')) {\n this.stop();\n\n // This is a bit hackish: we hardcode an impossible url to trigger normal navigation error mechanism\n this.router.navigateByUrl('panels-reached-invalid-url');\n\n return;\n }\n\n this.counter++;\n\n // pc stands for \"panel counter\", required to give an identification to panels with exact same config\n // E.g /new\n const wantedUrl = ev.url + ';pc=' + this.counter;\n\n // Segments matching from wanted url. E.g ~ ['new']\n const wantedUrSegments = new DefaultUrlSerializer().parse(wantedUrl).root.children.primary.segments;\n\n // Don't match any config\n const wantedConfig = getStackConfig(wantedUrSegments, route.snapshot.data.panelsRoutes, this.injector);\n\n if (wantedConfig.length) {\n return this.appendConfigToCurrentUrl(wantedConfig);\n }\n\n // Currently activated routes. E.g ['objective', 'objective', 123, 'risk']\n const currentSegments = flatten(\n this.dialog.openDialogs.map(d => d.componentInstance.panelData.config.route.segments),\n );\n\n // Last segment. E.g ['risk']\n const lastOfCurrentSegments = currentSegments.slice(-1);\n\n // Config for ['risk', 'new']\n const currentAndWantedConfig = getStackConfig(\n lastOfCurrentSegments.concat(wantedUrSegments),\n route.snapshot.data.panelsRoutes,\n this.injector,\n );\n\n return this.appendConfigToCurrentUrl(currentAndWantedConfig);\n });\n }\n\n /**\n * Uses given configuration to add at the end of current url\n */\n private appendConfigToCurrentUrl(config: NaturalPanelConfig[]): void {\n // Navigate to the same url + /risk/new Result : /risk/risk/new\n const newUrl = config.map(conf => segmentsToString(conf.route.segments)).join('/');\n\n this.router.navigateByUrl(this.router.url + '/' + newUrl);\n }\n\n /**\n * Notify the service that all panels were closed\n *\n * @internal\n */\n public stop(): void {\n NaturalPanelsService._opened = false;\n this.routeSub?.unsubscribe();\n this.navSub?.unsubscribe();\n this.dialog.closeAll();\n this.oldFullConfig = [];\n this.afterAllClosed.next();\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n *\n * @internal\n */\n public goToPanelByComponent(component: NaturalAbstractPanel): void {\n this.goToPanelByIndex(this.getPanelIndex(component));\n }\n\n /**\n * Go to panel matching given component. Causes an url change.\n */\n public goToPenultimatePanel(): void {\n this.goToPanelByIndex(this.dialog.openDialogs.length - 2);\n }\n\n /**\n * Calls the new url that only includes the segments from the panels we want to stay open\n */\n private goToPanelByIndex(index: number): void {\n // Extracts url segments from next panel until last one\n const url = this.dialog.openDialogs\n .slice(index + 1)\n .map(dialog => {\n return segmentsToString(dialog.componentInstance.panelData.config.route.segments);\n })\n .join('/');\n\n // Remove extra segments and redirects to root\n this.router.navigateByUrl(this.router.url.replace('/' + url, ''));\n }\n\n /**\n * Selecting a panel is equivalent to close all those that are in front of him\n * @param index of panel in stack. The most behind (the first one) is 0.\n */\n private selectPanelByIndex(index: number): Observable<void> {\n const lastDialog = this.dialog.openDialogs[this.dialog.openDialogs.length - 1];\n\n // Update new panels set positions\n this.updateComponentsPosition();\n\n for (let i = this.dialog.openDialogs.length - 1; i >= index + 1; i--) {\n this.dialog.openDialogs[i].close();\n }\n\n return lastDialog.afterClosed();\n }\n\n /**\n * Open new panels if url has changed with new segments\n */\n private updatePanels(segments: UrlSegment[], routes: NaturalPanelsRouterRule[]): void {\n // Transform url segments into a config with component name and ID if provided in next segment\n // Returns an array of configs, each config represents the content relative to a panel\n const newFullConfig = getStackConfig(segments, routes, this.injector);\n const configsToRemove = differenceWith(this.oldFullConfig, newFullConfig, compareConfigs);\n const configsToAdd = differenceWith(newFullConfig, this.oldFullConfig, compareConfigs);\n\n const indexOfNextPanel = this.oldFullConfig.length - configsToRemove.length - 1;\n\n if (configsToRemove.length && configsToAdd.length) {\n // Add and remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => {\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n });\n } else if (configsToRemove.length && !configsToAdd.length) {\n // only remove panels\n this.selectPanelByIndex(indexOfNextPanel).subscribe(() => this.updateComponentsPosition());\n } else if (!configsToRemove.length && configsToAdd.length) {\n // only add panels\n this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());\n }\n\n this.oldFullConfig = newFullConfig;\n }\n\n /**\n * Resolve all services, then open panels\n */\n private openPanels(\n newItemsConfig: NaturalPanelConfig[],\n fullConfig: NaturalPanelConfig[],\n ): Observable<Observable<any> | null> {\n const subject = new Subject<Observable<any> | null>();\n\n // Resolve everything before opening a single panel\n const resolves = newItemsConfig.map(conf => this.getResolvedData(conf));\n\n // ForkJoin emits when all promises are executed;\n forkJoin(resolves).subscribe(resolvedResult => {\n // For each new config entry, open a new panel\n for (let i = 0; i < newItemsConfig.length; i++) {\n const config = newItemsConfig[i];\n let itemData: NaturalPanelData = {\n // Config of actual panel route\n config: config,\n\n // Data resolved by service\n // Use in component by calling this.panelData.data.xyz\n data: resolvedResult[i],\n linkableObjects: [],\n };\n\n if (this.hooksConfig?.beforeOpenPanel) {\n const event: NaturalPanelsBeforeOpenPanel = {\n itemData: itemData,\n panelConfig: config,\n resolvedResult: resolvedResult,\n fullPanelsConfig: fullConfig,\n };\n\n itemData = this.hooksConfig.beforeOpenPanel(this.injector, event);\n }\n\n this.openPanel(config.component, itemData);\n }\n\n this.dialog.openDialogs[this.dialog.openDialogs.length - 1].afterOpened().subscribe(() => {\n subject.next(null);\n });\n });\n\n return subject;\n }\n\n private getResolvedData(config: NaturalPanelConfig): Observable<Record<string, unknown>> {\n if (!config.resolve || (config.resolve && Object.keys(config.resolve).length === 0)) {\n return of({});\n }\n\n const resolveKeys = Object.keys(config.resolve);\n const resolvedData: Record<string, Observable<unknown>> = {};\n const injector = config.injector;\n\n if (injector) {\n resolveKeys.forEach(key => {\n resolvedData[key] = runInInjectionContext(injector, () => config.resolve[key](config));\n });\n }\n\n return forkJoin(resolvedData);\n }\n\n private openPanel(componentOrTemplateRef: ComponentType<NaturalAbstractPanel>, data: NaturalPanelData): void {\n const conf: MatDialogConfig = {\n panelClass: this.panelClass,\n closeOnNavigation: false,\n hasBackdrop: this.dialog.openDialogs.length === 0,\n height: '100%',\n width: this.panelWidth,\n position: {\n top: '0',\n right: '0',\n },\n };\n\n const dialogRef = this.dialog.open<NaturalAbstractPanel>(componentOrTemplateRef, conf);\n\n // Panelisable interface attributes/functions\n dialogRef.componentInstance.initPanel(data);\n\n dialogRef.beforeClosed().subscribe(() => {\n const index = this.getPanelIndex(dialogRef.componentInstance);\n this.goToPanelByIndex(index - 1);\n });\n }\n\n /**\n * Return panel position (index) by searching matching component\n */\n private getPanelIndex(component: NaturalAbstractPanel): number {\n if (!component) {\n return -1;\n }\n\n return this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance === component);\n }\n\n /**\n * Whether the given panel is currently the top, visible, panel. If there are no panels opened at all, then any panel given is considered top, visible, panel.\n */\n public isTopPanel(component: NaturalAbstractPanel): boolean {\n const length = this.dialog.openDialogs.length;\n return !length || this.dialog.openDialogs[length - 1]?.componentInstance === component;\n }\n\n /**\n * Repositions panels from start until given index\n */\n private updateComponentsPosition(): void {\n if (!this.dialog.openDialogs.length) {\n return;\n }\n\n // Select the panels that are still opened, ignore the others because they'll be closed\n const affectedElements = this.dialog.openDialogs;\n for (let i = 0; i < affectedElements.length; i++) {\n const dialog = affectedElements[i];\n\n // Set all panels as \"hidden\" except last one. IsFrontPanel attribute causes a CSS that hides body via hostbinding\n dialog.componentInstance.isFrontPanel = i === affectedElements.length - 1;\n dialog.componentInstance.panelService = this;\n\n // Assign offset\n const deep = affectedElements.length - 1 - i;\n\n let position: any = {right: deep * this.panelsOffsetH + 'px'};\n if (this.isVertical && affectedElements.length > 1) {\n const top = i * this.panelsOffsetV + 'px';\n position = {top: top, right: '0px'};\n dialog.updateSize(this.panelWidth, `calc(100% - ${top})`); // call before updatePosition\n } else {\n dialog.updateSize(this.panelWidth, `100%`);\n }\n\n dialog.updatePosition(position);\n }\n }\n}\n","import {Component, inject, OnDestroy} from '@angular/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n@Component({\n selector: 'natural-panels',\n template: '',\n})\nexport class NaturalPanelsComponent implements OnDestroy {\n private readonly panelsService = inject(NaturalPanelsService);\n\n // PanelsComponent is kind of a \"ghost\" component to respond to an url matcher in route config,\n // An UrlMatcher (matcher attribute) is required to catch urls with an undefined number of params in url after a given param /panels/\n public constructor() {\n const route = inject(ActivatedRoute);\n\n this.panelsService.start(route);\n }\n\n public ngOnDestroy(): void {\n this.panelsService.stop();\n }\n}\n","import {UrlMatcher, UrlMatchResult, UrlSegment} from '@angular/router';\nimport {NaturalPanelsService} from './panels.service';\n\n/**\n * Url fallback matcher to be used instead of `path: '**'` when Panel system\n * is used in the project.\n */\nexport const fallbackIfNoOpenedPanels: UrlMatcher = (segments: UrlSegment[]): UrlMatchResult | null => {\n if (!NaturalPanelsService.opened) {\n return {consumed: segments};\n }\n\n return null;\n};\n","/*\n * Public API Surface of natural\n */\n\nexport {providePanels} from './panels.module';\nexport * from './panels.component';\nexport * from './panels.service';\nexport {naturalPanelsUrlMatcher} from './panels.urlmatcher';\nexport {fallbackIfNoOpenedPanels} from './fallback-if-no-opened-panels.urlmatcher';\nexport * from './abstract-panel';\nexport * from './types';\n","import {\n Component,\n contentChild,\n DestroyRef,\n inject,\n Input,\n input,\n OnChanges,\n OnInit,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport {MatPaginator, PageEvent} from '@angular/material/paginator';\nimport {NaturalDataSource, PaginatedData} from '../../classes/data-source';\nimport {NaturalQueryVariablesManager, PaginationInput, QueryVariables} from '../../classes/query-variable-manager';\nimport {HierarchicFiltersConfiguration} from '../hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {LinkableObject, NaturalLinkMutationService} from '../../services/link-mutation.service';\nimport {NaturalHierarchicConfiguration} from '../hierarchic-selector/classes/hierarchic-configuration';\nimport {HierarchicDialogConfig} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component';\nimport {NaturalHierarchicSelectorDialogService} from '../hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service';\nimport {NaturalSelectComponent} from '../select/select/select.component';\nimport {NaturalAbstractModelService} from '../../services/abstract-model.service';\nimport {ExtractTallOne, ExtractVall} from '../../types/types';\nimport {MatProgressSpinner} from '@angular/material/progress-spinner';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable,\n} from '@angular/material/table';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {finalize, forkJoin, tap} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Custom template usage :\n *\n * ```html\n * <natural-relations [main]=\"owner\" [service]=\"svc\" [filter]=\"{}\" placeholder=\"Select an item\">\n * <ng-template let-item=\"item\">\n * <span>{{ item.xxx }}</span>\n * </ng-template>\n * </natural-relations>\n * ```\n */\n@Component({\n selector: 'natural-relations',\n imports: [\n NgTemplateOutlet,\n MatTable,\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatHeaderCell,\n MatCell,\n MatHeaderRow,\n MatRow,\n MatButton,\n MatIconButton,\n MatTooltip,\n MatIcon,\n NaturalIconDirective,\n MatPaginator,\n MatProgressSpinner,\n NaturalSelectComponent,\n ],\n templateUrl: './relations.component.html',\n styleUrl: './relations.component.scss',\n})\nexport class NaturalRelationsComponent<\n TService extends NaturalAbstractModelService<\n unknown,\n any,\n PaginatedData<LinkableObject>,\n QueryVariables,\n unknown,\n any,\n unknown,\n any,\n unknown,\n any\n >,\n >\n implements OnInit, OnChanges\n{\n private readonly destroyRef = inject(DestroyRef);\n private readonly linkMutationService = inject(NaturalLinkMutationService);\n private readonly hierarchicSelectorDialog = inject(NaturalHierarchicSelectorDialogService);\n private readonly select = viewChild<NaturalSelectComponent<TService>>(NaturalSelectComponent);\n public readonly itemTemplate = contentChild<TemplateRef<unknown>>(TemplateRef);\n\n private _service!: TService;\n\n public get service(): TService {\n return this._service;\n }\n\n @Input({required: true})\n public set service(service: TService) {\n this._service = service;\n this.loading = true;\n const items$ = this._service.watchAll(this.variablesManager).pipe(\n takeUntilDestroyed(this.destroyRef),\n tap({\n next: () => (this.loading = false),\n complete: () => (this.loading = false),\n error: () => (this.loading = false),\n }),\n );\n\n this.dataSource = new NaturalDataSource(items$);\n }\n\n /**\n * The placeholder used in the button to add a new relation\n */\n public readonly placeholder = input('');\n\n /**\n * Filter for autocomplete selector\n */\n public readonly autocompleteSelectorFilter = input<ExtractVall<TService>['filter'] | null>();\n\n /**\n * Function to customize the rendering of the selected item as text in input\n */\n public readonly displayWith = input<(item: ExtractTallOne<TService> | null) => string>();\n\n /**\n * Whether the relations can be changed\n */\n @Input() public disabled = false;\n\n /**\n * The main object to which all relations belong to\n */\n @Input({required: true}) public main!: LinkableObject & {permissions?: {update: boolean}};\n\n /**\n * Emits after relations were successfully added on the server\n */\n public readonly selectionChange = output();\n\n /**\n * Filters for hierarchic selector\n */\n public readonly hierarchicSelectorFilters = input<HierarchicFiltersConfiguration | null>();\n\n /**\n * Configuration in case we prefer hierarchic selection over autocomplete selection\n */\n public readonly hierarchicSelectorConfig = input<NaturalHierarchicConfiguration[]>();\n\n /**\n * Link mutation semantic\n */\n @Input() public otherName?: string | null;\n\n /**\n * Listing service instance\n */\n public dataSource!: NaturalDataSource<PaginatedData<LinkableObject>>;\n public loading = false;\n\n /**\n * Table columns\n */\n public displayedColumns = ['name'];\n\n public readonly pageSizeOptions = [5, 25, 50, 100];\n protected readonly defaultPagination = {\n pageIndex: 0,\n pageSize: 25,\n };\n\n /**\n * Observable variables/options for listing service usage and apollo watchQuery\n */\n private variablesManager = new NaturalQueryVariablesManager<QueryVariables>();\n\n public readonly removing = new Set<LinkableObject>();\n\n /**\n * The filter used to filter relations\n *\n * So if the relations are from one action -> to many objectives, then the filter must filter\n * the objectives that have indeed a relation to the particular action.\n */\n @Input()\n public set filter(filter: ExtractVall<TService>['filter']) {\n this.variablesManager.set('relations-filter', {filter: filter});\n }\n\n /**\n * The sorting used to sort relations\n *\n * So if the relations are from one action -> to many objectives, then the sorting must sort\n * the objectives that have indeed a relation to the particular action.\n */\n @Input()\n public set sorting(sorting: ExtractVall<TService>['sorting']) {\n this.variablesManager.set('relations-sorting', {sorting: sorting});\n }\n\n public ngOnChanges(): void {\n if (this.disabled && this.displayedColumns.includes('unlink')) {\n this.displayedColumns.pop();\n } else if (!this.disabled && !this.displayedColumns.includes('unlink')) {\n this.displayedColumns.push('unlink');\n }\n }\n\n public ngOnInit(): void {\n this.pagination();\n\n // Force disabled if cannot update object\n if (this.main && this.main.permissions) {\n this.disabled = this.disabled || !this.main.permissions.update;\n }\n }\n\n /**\n * Unlink action\n * Refetch result to display it in table\n */\n public removeRelation(relation: LinkableObject): void {\n this.removing.add(relation);\n\n this.linkMutationService\n .unlink(this.main, relation, this.otherName)\n .pipe(finalize(() => this.removing.delete(relation)))\n .subscribe(() => this.dataSource?.remove(relation));\n }\n\n /**\n * Link action\n * Refetch result to display it in table\n * TODO : could maybe use \"update\" attribute of apollo.mutate function to update table faster (but hard to do it here)\n */\n public addRelations(relations: (LinkableObject | ExtractTallOne<TService> | string | null)[]): void {\n const observables = relations\n .filter((relation): relation is LinkableObject => !!relation && typeof relation === 'object')\n .map(relation => this.linkMutationService.link(this.main, relation, this.otherName));\n\n forkJoin(observables).subscribe(() => {\n this.selectionChange.emit();\n this.select()?.clear();\n });\n }\n\n public pagination(event?: PageEvent): void {\n let pagination: PaginationInput | null = null;\n if (\n event &&\n (event.pageIndex !== this.defaultPagination.pageIndex || event.pageSize !== this.defaultPagination.pageSize)\n ) {\n pagination = {\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n };\n }\n\n this.variablesManager.set('pagination', {pagination: pagination ? pagination : this.defaultPagination});\n }\n\n public getDisplayFn(): (item: ExtractTallOne<TService> | null) => string {\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return (item: any) => (item ? item.fullName || item.name : '');\n }\n\n public openNaturalHierarchicSelector(): void {\n const selectAtKey = this.getSelectKey();\n\n const hierarchicSelectorConfig = this.hierarchicSelectorConfig();\n if (!selectAtKey || !hierarchicSelectorConfig) {\n return;\n }\n\n const selected = {};\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: hierarchicSelectorConfig,\n hierarchicSelection: selected,\n hierarchicFilters: this.hierarchicSelectorFilters(),\n multiple: true,\n };\n\n this.hierarchicSelectorDialog\n .open(hierarchicConfig)\n .afterClosed()\n .subscribe(result => {\n if (result?.hierarchicSelection !== undefined) {\n const selection = result.hierarchicSelection[selectAtKey];\n if (selection.length) {\n this.addRelations(selection);\n }\n }\n });\n }\n\n private getSelectKey(): string | undefined {\n const hierarchicSelectorConfig = this.hierarchicSelectorConfig();\n if (!hierarchicSelectorConfig) {\n return;\n }\n\n return hierarchicSelectorConfig.find(c => !!c.selectableAtKey)?.selectableAtKey;\n }\n}\n","<div class=\"body\">\n <ng-template #defaultNameCell let-item=\"item\">\n {{ getDisplayFn()(item) }}\n </ng-template>\n\n <table class=\"natural-row-click\" mat-table [dataSource]=\"dataSource\">\n <tr *matHeaderRowDef=\"displayedColumns\" mat-header-row style=\"display: none\"></tr>\n <tr *matRowDef=\"let row; columns: displayedColumns\" mat-row></tr>\n\n <ng-container matColumnDef=\"name\">\n <th *matHeaderCellDef i18n mat-header-cell>Titre</th>\n <td *matCellDef=\"let item\" mat-cell>\n @let customTemplate = itemTemplate();\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"customTemplate ? customTemplate : defaultNameCell\"\n />\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"unlink\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let element\" mat-cell>\n @if (!disabled) {\n <button\n color=\"error\"\n matIconButton\n i18n-matTooltip\n matTooltip=\"Dissocier\"\n [disabled]=\"removing.has(element)\"\n (click)=\"removeRelation(element)\"\n >\n <mat-icon naturalIcon=\"link_off\" />\n </button>\n }\n </td>\n </ng-container>\n </table>\n\n @if (dataSource.data && (dataSource.data.length || 0) > (dataSource.data.pageSize || 0)) {\n <mat-paginator\n [length]=\"dataSource.data.length || 0\"\n [pageIndex]=\"dataSource.data.pageIndex || 0\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [pageSize]=\"dataSource.data.pageSize || 0\"\n (page)=\"pagination($event)\"\n />\n }\n\n @if (!loading && dataSource.data?.length === 0) {\n <div class=\"nat-margin-vertical mat-body\">\n <span i18n>Aucun résultat</span>\n </div>\n }\n\n @if (loading) {\n <mat-progress-spinner class=\"loading\" mode=\"indeterminate\" [diameter]=\"40\" />\n }\n</div>\n\n@if (!disabled) {\n @if (hierarchicSelectorConfig()) {\n <div>\n <button color=\"primary\" mat-flat-button (click)=\"openNaturalHierarchicSelector()\">{{\n placeholder()\n }}</button>\n </div>\n } @else {\n <natural-select\n [displayWith]=\"$any(getDisplayFn())\"\n [filter]=\"autocompleteSelectorFilter()\"\n [placeholder]=\"placeholder()\"\n [service]=\"service\"\n [showIcon]=\"false\"\n (selectionChange)=\"addRelations([$event])\"\n />\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './relations.component';\n","import {Component, inject, Input, input, OnInit} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {IEnum, NaturalEnumService} from '../../../services/enum.service';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {MatOption} from '@angular/material/core';\nimport {AsyncPipe} from '@angular/common';\nimport {MatSelect} from '@angular/material/select';\nimport {MatError, MatFormField, MatHint, MatLabel} from '@angular/material/form-field';\n\ntype Value = IEnum['value'] | IEnum['value'][];\n\n@Component({\n selector: 'natural-select-enum',\n imports: [\n MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatSelect,\n FormsModule,\n ReactiveFormsModule,\n AsyncPipe,\n MatOption,\n ],\n templateUrl: './select-enum.component.html',\n styleUrl: './select-enum.component.scss',\n})\nexport class NaturalSelectEnumComponent extends AbstractSelect<Value, Value> implements OnInit, ControlValueAccessor {\n private readonly enumService = inject(NaturalEnumService);\n\n /**\n * The name of the enum type, eg: `\"ActionStatus\"`\n */\n public readonly enumName = input.required<string>();\n\n /**\n * If given an extra option is added to select `null` with given label\n */\n @Input() public nullLabel?: string;\n\n /**\n * Functions that receives an enum value and returns whether that value is disabled\n */\n @Input() public optionDisabled?: (item: IEnum) => boolean;\n\n /**\n * Whether the user should be allowed to select multiple options\n */\n public readonly multiple = input(false);\n\n public items?: Observable<IEnum[]>;\n\n public override ngOnInit(): void {\n super.ngOnInit();\n this.items = this.enumService.get(this.enumName());\n }\n\n public getDisplayFn(): (item: Value | null) => string {\n throw new Error('This should never be called');\n }\n}\n","<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder() }}</mat-label>\n <mat-select\n [formControl]=\"internalCtrl\"\n [errorStateMatcher]=\"matcher\"\n [multiple]=\"multiple()\"\n (selectionChange)=\"propagateValue($event.value)\"\n (blur)=\"onBlur()\"\n >\n @if (nullLabel) {\n <mat-option [value]=\"null\">{{ nullLabel }}</mat-option>\n }\n @for (item of items | async; track item.value) {\n <mat-option [value]=\"item.value\" [disabled]=\"optionDisabled ? optionDisabled(item) : false\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n","import {Component, inject, Input, input, OnInit} from '@angular/core';\nimport {ControlValueAccessor, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatDialogConfig} from '@angular/material/dialog';\nimport {Literal} from '../../../types/types';\nimport {HierarchicFiltersConfiguration} from '../../hierarchic-selector/classes/hierarchic-filters-configuration';\nimport {\n HierarchicDialogConfig,\n NaturalHierarchicConfiguration,\n NaturalHierarchicSelectorDialogService,\n OrganizedModelSelection,\n} from '../../hierarchic-selector/public-api';\nimport {AbstractSelect} from '../abstract-select.component';\nimport {RouterLink} from '@angular/router';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport {NaturalIconDirective} from '../../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatInput} from '@angular/material/input';\nimport {MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix} from '@angular/material/form-field';\n\nfunction defaultDisplayFn(item: Literal | null): string {\n if (!item) {\n return '';\n }\n\n return item.fullName || item.name || item.iban || item.id || item;\n}\n\n/**\n * Default usage:\n *\n * ```html\n * <natural-select\n * [config]=\"myConfig\"\n * [(ngModel)]=\"amazingModel\"\n * (ngModelChange)=amazingChangeFn($event)\n * />\n * ```\n *\n * `[(ngModel)]` and `(ngModelChange)` are optional.\n *\n * Placeholder :\n *\n * ```html\n * <natural-select placeholder=\"amazing placeholder\" />\n * ```\n */\n@Component({\n selector: 'natural-select-hierarchic',\n imports: [\n MatFormField,\n MatLabel,\n MatError,\n MatHint,\n MatPrefix,\n MatSuffix,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatIcon,\n NaturalIconDirective,\n MatButton,\n MatIconButton,\n MatTooltip,\n RouterLink,\n ],\n templateUrl: './select-hierarchic.component.html',\n styleUrl: './select-hierarchic.component.scss',\n})\nexport class NaturalSelectHierarchicComponent\n extends AbstractSelect<Literal, string>\n implements OnInit, ControlValueAccessor\n{\n private readonly hierarchicSelectorDialogService = inject(NaturalHierarchicSelectorDialogService);\n\n /**\n * If provided cause a new select button to appear\n */\n @Input() public selectLabel?: string;\n\n /**\n * Configuration for hierarchic relations\n *\n * It should be an array with at least one element with `selectableAtKey` configured, otherwise the selector will never open.\n */\n @Input() public config: NaturalHierarchicConfiguration[] | null = null;\n\n /**\n * Filters formatted for hierarchic selector\n */\n public readonly filters = input<HierarchicFiltersConfiguration>();\n\n /**\n * The selected value as an object. The internal value is `internalCtrl.value`, and that is a string.\n */\n private value: Literal | null = null;\n\n /**\n * On Firefox, the combination of <input (focus)> event and dialog opening cause some strange bug where focus event is called multiple\n * times This prevents it.\n */\n private lockOpenDialog = false;\n\n /**\n * Very important to return something, above all if [select]='displayedValue' attribute value is used\n */\n public getDisplayFn(): (item: Literal | null) => string {\n const displayWith = this.displayWith();\n if (displayWith) {\n return displayWith;\n }\n\n return defaultDisplayFn;\n }\n\n /**\n * Override parent because our internalCtrl store the textual representation as string instead of raw Literal\n */\n public override writeValue(value: Literal | string | null): void {\n this.value = value as Literal;\n this.internalCtrl.setValue(this.getDisplayFn()(this.value));\n }\n\n public openDialog(): void {\n if (this.internalCtrl.disabled) {\n return;\n }\n\n if (this.lockOpenDialog) {\n return;\n }\n\n const selectAtKey = this.getSelectKey();\n if (!selectAtKey || !this.config) {\n return;\n }\n\n this.lockOpenDialog = true;\n\n if (this.onTouched) {\n this.onTouched();\n }\n\n const selected: OrganizedModelSelection = {};\n\n if (this.internalCtrl.value) {\n selected[selectAtKey] = [this.value];\n }\n\n const hierarchicConfig: HierarchicDialogConfig = {\n hierarchicConfig: this.config,\n hierarchicSelection: selected,\n hierarchicFilters: this.filters(),\n multiple: false,\n };\n\n const dialogFocus: MatDialogConfig = {restoreFocus: false};\n\n this.hierarchicSelectorDialogService\n .open(hierarchicConfig, dialogFocus)\n .afterClosed()\n .subscribe(result => {\n this.lockOpenDialog = false;\n if (result?.hierarchicSelection) {\n const selection = result.hierarchicSelection;\n // Find the only selection amongst all possible keys\n const keyWithSelection = Object.keys(selection).find(key => selection[key][0]);\n const singleSelection = keyWithSelection ? selection[keyWithSelection][0] : null;\n\n this.writeValue(singleSelection);\n this.propagateValue(singleSelection);\n }\n });\n }\n\n public showSelectButton(): boolean {\n return !!(this.internalCtrl?.enabled && this.selectLabel && this.getSelectKey());\n }\n\n private getSelectKey(): string | undefined {\n return this.config?.find(c => !!c.selectableAtKey)?.selectableAtKey;\n }\n}\n","<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder() }}</mat-label>\n\n <!-- Input for hierarchical selector -->\n <input\n aria-label=\"Recherche et sélection\"\n i18n-aria-label\n matInput\n [formControl]=\"internalCtrl\"\n [errorStateMatcher]=\"matcher\"\n (blur)=\"blur.emit()\"\n (focus)=\"openDialog()\"\n />\n\n <!-- Meta data -->\n @if (showIcon()) {\n <mat-icon matIconPrefix [naturalIcon]=\"icon()\" />\n }\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.value && internalCtrl.enabled && !clearLabel()) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Désélectionner\"\n (click)=\"clear(); $event.stopPropagation()\"\n >\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.value && navigateTo) {\n <button\n matIconButton\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showSelectButton() || showClearButton()) {\n <div class=\"external-buttons\">\n @if (showSelectButton()) {\n <button color=\"primary\" mat-flat-button (click)=\"openDialog()\">{{ selectLabel }}</button>\n }\n @if (showClearButton()) {\n <button color=\"error\" mat-button (click)=\"clear()\">{{ clearLabel() }}</button>\n }\n </div>\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './select-enum/select-enum.component';\nexport * from './select-hierarchic/select-hierarchic.component';\nexport * from './select/select.component';\n","import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\n\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavStackService {\n /**\n * The stack of all currently living sidenavs\n */\n private readonly sidenavs: NaturalSidenavContainerComponent[] = [];\n\n /**\n * Emits the most recent living SidenavContainer whenever it changes. So it's\n * either the SidenavContainer that was just added, or the one \"before\" the\n * SidenavContainer that was just removed\n */\n public readonly currentSidenav = new Subject<NaturalSidenavContainerComponent | undefined>();\n\n /**\n * For internal use only\n * @internal\n */\n public register(sidenav: NaturalSidenavContainerComponent): void {\n const exists = this.sidenavs.some(s => s.name() === sidenav.name());\n\n // Prevent duplicated name, and so on local storage or further access conflicts\n if (exists) {\n throw new Error('Duplicated side nav name: ' + sidenav.name());\n }\n\n this.sidenavs.push(sidenav);\n this.next();\n }\n\n /**\n * For internal use only\n * @internal\n */\n public unregister(sidenav: NaturalSidenavContainerComponent): void {\n const index = this.sidenavs.indexOf(sidenav);\n if (index === -1) {\n throw Error('Trying to remove a SidenavContainer that was never registered');\n }\n\n this.sidenavs.splice(index, 1);\n this.next();\n }\n\n private next(): void {\n this.currentSidenav.next(this.sidenavs[this.sidenavs.length - 1]);\n }\n}\n","import {DestroyRef, inject, Injectable} from '@angular/core';\nimport {MatDrawerMode} from '@angular/material/sidenav';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {filter} from 'rxjs/operators';\nimport {NaturalSidenavContainerComponent} from './sidenav-container/sidenav-container.component';\nimport {SESSION_STORAGE} from '../common/services/memory-storage';\nimport {NaturalSidenavStackService} from './sidenav-stack.service';\nimport {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\n/**\n * Assert that given value is not null\n */\nfunction assert(value: unknown): asserts value {\n if (!value) {\n throw new Error('Must call NaturalSidenavService.init() before using the service');\n }\n}\n\n/**\n * TODO: Fix nav minimize and maximize resize\n * Since Material 2 beta 10, when nav is resized the body is not resized\n * https://github.com/angular/material2/issues/6743\n * Maybe the better is to wait next release\n */\n@Injectable({providedIn: 'root'})\nexport class NaturalSidenavService {\n private readonly destroyRef = inject(DestroyRef);\n private readonly breakpointObserver = inject(BreakpointObserver);\n private readonly router = inject(Router);\n private readonly sessionStorage = inject(SESSION_STORAGE);\n private readonly naturalSidenavStackService = inject(NaturalSidenavStackService);\n\n /**\n * Navigation modes\n * First is for desktop view\n * Second is for mobile view\n */\n private modes: MatDrawerMode[] = ['side', 'push'];\n\n /**\n * Activated mode\n * Default to desktop view\n */\n private mode: MatDrawerMode = this.modes[0];\n\n /**\n * Whether nav is opened or not\n */\n private opened = true;\n\n /**\n * Stores the opened status during mobile view, to restore if we come back to desktop view\n */\n private tmpOpened: boolean = this.opened;\n\n /**\n * Whether nav is minimized or not\n */\n private minimized = false;\n\n /**\n * LocalStorage key that stores the minimized status\n */\n private readonly minimizedStorageKey = 'menu-minimized';\n\n /**\n * LocalStorage key that stores the opened status\n */\n private readonly openedStorageKey = 'menu-opened';\n\n private minimizedStorageKeyWithName: string | null = null;\n private openedStorageKeyWithName: string | null = null;\n private _isMobileView = false;\n\n public get activeMode(): MatDrawerMode {\n return this.mode;\n }\n\n public get isOpened(): boolean {\n return this.opened;\n }\n\n public get isMinimized(): boolean {\n return this.minimized;\n }\n\n public destroy(component: NaturalSidenavContainerComponent): void {\n this.naturalSidenavStackService.unregister(component);\n }\n\n public init(name: string, component: NaturalSidenavContainerComponent, autoClose = false): void {\n if (!name || name === '') {\n throw new Error('No sidenav name provided, use <natural-sidenav-container name=\"menu\">');\n }\n\n this.naturalSidenavStackService.register(component);\n\n this.minimizedStorageKeyWithName = name + '-' + this.minimizedStorageKey;\n this.openedStorageKeyWithName = name + '-' + this.openedStorageKey;\n\n // Init from LocalStorage\n this.minimized = this.getMinimizedStatus();\n this.opened = this.getMenuOpenedStatus();\n this.tmpOpened = this.opened;\n\n let oldIsBig: boolean | null = null;\n\n this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(r => {\n this._isMobileView = r.matches;\n const isBig = !this._isMobileView;\n this.mode = isBig ? this.modes[0] : this.modes[1];\n\n if (oldIsBig === null || isBig !== oldIsBig) {\n oldIsBig = isBig;\n\n // If decrease window size, save status of menu before closing it\n if (!isBig) {\n this.tmpOpened = this.opened;\n this.opened = false;\n }\n\n // If increase window size, and sidebar was open before, re-open it.\n if (isBig && this.tmpOpened) {\n this.opened = true;\n this.minimized = this.getMinimizedStatus();\n }\n }\n });\n\n if (autoClose) {\n this.router.events\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(e => e instanceof NavigationEnd),\n )\n .subscribe(() => {\n this.navItemClicked();\n });\n }\n }\n\n public isMobileView(): boolean {\n return this._isMobileView;\n }\n\n /**\n * Close nav on mobile view after a click\n */\n public navItemClicked(): void {\n if (this._isMobileView) {\n this.close();\n }\n }\n\n /**\n * Change minimized status and stores the new value\n */\n public setMinimized(value: boolean): void {\n this.minimized = value;\n assert(this.minimizedStorageKeyWithName);\n this.sessionStorage.setItem(this.minimizedStorageKeyWithName, value ? 'true' : 'false');\n }\n\n public minimize(): void {\n this.setMinimized(true);\n }\n\n public expand(): void {\n this.setMinimized(false);\n }\n\n public toggleMinimized(): void {\n this.setMinimized(!this.minimized);\n }\n\n /**\n * Get the stored minimized status\n */\n public getMinimizedStatus(): boolean {\n assert(this.minimizedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.minimizedStorageKeyWithName);\n\n return value === null ? false : value === 'true';\n }\n\n /**\n * Get the stored opened status\n * Default on an opened status if nothing is stored\n */\n public getMenuOpenedStatus(): boolean {\n assert(this.openedStorageKeyWithName);\n const value = this.sessionStorage.getItem(this.openedStorageKeyWithName);\n\n if (value === null) {\n return !this._isMobileView;\n } else {\n return value === 'true';\n }\n }\n\n /**\n * Toggle menu but expand it if mobile mode is activated\n * Stores the status in local storage\n */\n public toggle(): void {\n this.setOpened(!this.opened);\n }\n\n public close(): void {\n this.setOpened(false);\n }\n\n public open(): void {\n this.setOpened(true);\n }\n\n public setOpened(value: boolean): void {\n this.opened = value;\n\n if (this.opened && this._isMobileView) {\n this.minimized = false;\n } else if (!this._isMobileView) {\n assert(this.openedStorageKeyWithName);\n this.sessionStorage.setItem(this.openedStorageKeyWithName, this.opened ? 'true' : 'false');\n }\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav',\n template: '<ng-content />',\n})\nexport class NaturalSidenavComponent {}\n","import {Component, HostBinding, inject, Input, input, OnDestroy, OnInit, viewChild} from '@angular/core';\nimport {MatDrawer, MatSidenav, MatSidenavContainer, MatSidenavContent} from '@angular/material/sidenav';\nimport {NaturalSidenavService} from '../sidenav.service';\n\n@Component({\n selector: 'natural-sidenav-container',\n imports: [MatSidenav, MatSidenavContainer, MatSidenavContent],\n templateUrl: './sidenav-container.component.html',\n styleUrl: './sidenav-container.component.scss',\n providers: [NaturalSidenavService],\n})\nexport class NaturalSidenavContainerComponent implements OnInit, OnDestroy {\n public readonly sidenavService = inject(NaturalSidenavService);\n\n /**\n * Unique identifier used for the local storage\n */\n public readonly name = input.required<string>();\n\n /**\n * The side that the drawer is attached to\n */\n public readonly position = input<MatDrawer['position']>('start');\n\n /**\n * If true listens to route changes to close side nav after a route change if mobile view is active\n * Actually a navigation to current route does not emit a route change, and the sidenav don't close.\n */\n public readonly mobileAutoClose = input(true);\n\n /**\n * Width of the minimized menu\n */\n public readonly minimizedWidth = input(125);\n\n /**\n * If true, prevents \"native\" material sidenav to scroll at container level and delegates the scroll responsability to the transcluded\n * content\n */\n @HostBinding('attr.no-scroll') @Input() public noScroll = false;\n\n /**\n * Inner \"native\" material sidenav\n */\n public readonly menuSidenav = viewChild.required(MatSidenav);\n\n public get isMinimized(): boolean {\n return this.sidenavService.isMinimized;\n }\n\n public get isMobileView(): boolean {\n return this.sidenavService.isMobileView();\n }\n\n public ngOnInit(): void {\n this.sidenavService.init(this.name(), this, this.mobileAutoClose());\n }\n\n public ngOnDestroy(): void {\n this.sidenavService.destroy(this);\n }\n\n public toggle(): void {\n this.sidenavService.toggle();\n }\n\n public close(): void {\n this.sidenavService.close();\n }\n\n public open(): void {\n this.sidenavService.open();\n }\n\n public minimize(): void {\n this.sidenavService.minimize();\n }\n\n public expand(): void {\n this.sidenavService.expand();\n }\n\n public toggleMinimized(): void {\n this.sidenavService.toggleMinimized();\n }\n}\n","<mat-sidenav-container (backdropClick)=\"sidenavService.setOpened(false)\">\n <mat-sidenav\n [mode]=\"sidenavService.activeMode\"\n [class.menuMinimized]=\"sidenavService.isMinimized\"\n [class.mode-side]=\"sidenavService.activeMode === 'side'\"\n [opened]=\"sidenavService.isOpened\"\n [style.min-width.px]=\"sidenavService.isMinimized && minimizedWidth() ? minimizedWidth() : null\"\n [style.width.px]=\"sidenavService.isMinimized && minimizedWidth() ? minimizedWidth() : null\"\n [position]=\"position()\"\n >\n <ng-content select=\"natural-sidenav\" />\n </mat-sidenav>\n\n <mat-sidenav-content>\n <ng-content select=\"natural-sidenav-content\" />\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'natural-sidenav-content',\n template: '<ng-content />',\n styleUrl: './sidenav-content.component.scss',\n})\nexport class NaturalSidenavContentComponent {}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './sidenav.service';\nexport * from './sidenav-stack.service';\nexport * from './sidenav/sidenav.component';\nexport * from './sidenav-container/sidenav-container.component';\nexport * from './sidenav-content/sidenav-content.component';\n","import {ChangeDetectionStrategy, Component, computed, input} from '@angular/core';\nimport {NameOrFullName} from '../../types/types';\nimport {NaturalTimeAgoPipe} from '../common/pipes/time-ago.pipe';\nimport {DatePipe} from '@angular/common';\n\ntype Stamped = {\n creator: NameOrFullName | null;\n updater: NameOrFullName | null;\n creationDate: string | null;\n updateDate: string | null;\n};\n\n@Component({\n selector: 'natural-stamp',\n imports: [DatePipe, NaturalTimeAgoPipe],\n templateUrl: './stamp.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NaturalStampComponent {\n public readonly item = input.required<Stamped>();\n\n protected readonly showUpdate = computed(() => {\n const item = this.item();\n const same = item.updater?.id === item.creator?.id && item.updateDate && item.updateDate === item.creationDate;\n\n return !same && (!!item.updateDate || !!item.updater);\n });\n}\n","@let theItem = item();\n@if (theItem.creationDate || theItem.creator) {\n <div>\n <span class=\"mat-subtitle-2\" i18n>Création</span>\n :\n @if (theItem.creator) {\n <span>{{ theItem.creator.fullName || theItem.creator.name }}</span>\n }\n @if (theItem.creator && theItem.creationDate) {\n <span>, </span>\n }\n @if (theItem.creationDate) {\n <span>{{ theItem.creationDate | date }} ({{ theItem.creationDate | timeAgo }})</span>\n }\n </div>\n}\n\n@if (showUpdate()) {\n <div>\n <span class=\"mat-subtitle-2\" i18n>Modification</span>\n :\n @if (theItem.updater) {\n <span>{{ theItem.updater.fullName || theItem.updater.name }}</span>\n }\n @if (theItem.updater && theItem.updateDate) {\n <span>, </span>\n }\n @if (theItem.updateDate) {\n <span>{{ theItem.updateDate | date }} ({{ theItem.updateDate | timeAgo }})</span>\n }\n </div>\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './stamp.component';\n","import {ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation} from '@angular/core';\nimport {Params, QueryParamsHandling, RouterLink, UrlTree} from '@angular/router';\n\nimport {MatButton, type MatButtonAppearance, MatIconButton} from '@angular/material/button';\nimport {NaturalPalette} from '../../types/types';\nimport {NaturalIconDirective} from '../icon/icon.directive';\nimport {MatIcon} from '@angular/material/icon';\nimport {Subject} from 'rxjs';\nimport {outputFromObservable} from '@angular/core/rxjs-interop';\n\n/**\n * Button that fits well in a `<mat-table>` and support either\n * route navigation via `navigate`, or external URL via `href`,\n * or callback via `buttonClick`.\n *\n * If neither `navigate` nor `href` nor `buttonClick` have a meaningful value, then\n * it will show the icon and/or label in a `<span>` instead of a button.\n *\n * External URL will always be opened in new tab.\n */\n@Component({\n selector: 'natural-table-button',\n imports: [MatIcon, NaturalIconDirective, MatButton, MatIconButton, RouterLink],\n templateUrl: './table-button.component.html',\n styleUrl: './table-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/use-component-view-encapsulation\n encapsulation: ViewEncapsulation.None,\n})\nexport class NaturalTableButtonComponent {\n public readonly queryParams = input<Params>({});\n public readonly queryParamsHandling = input<QueryParamsHandling>('');\n public readonly label = input<string | null | undefined>();\n public readonly icon = input<string | null | undefined>();\n public readonly href = input<string | null | undefined>();\n public readonly navigate = input<RouterLink['routerLink']>(null);\n public readonly fragment = input<string | undefined>();\n public readonly preserveFragment = input(false);\n public readonly disabled = input(false);\n public readonly appearance = input<MatButtonAppearance>('text');\n public readonly color = input<NaturalPalette>();\n\n protected readonly buttonClick$ = new Subject<MouseEvent>();\n public readonly buttonClick = outputFromObservable(this.buttonClick$);\n\n protected readonly type = computed(() => {\n const navigate = this.navigate();\n if (\n navigate instanceof UrlTree ||\n navigate?.length ||\n Object.keys(this.queryParams()).length ||\n this.buttonClick$.observed\n ) {\n return 'routerLinkOrClick';\n } else if (this.href()) {\n return 'href';\n } else {\n return 'none';\n }\n });\n}\n","<!-- eslint-disable @angular-eslint/template/cyclomatic-complexity -->\n<!-- Because directives can't be applied conditionally (routerLink, mat-button and matIconButton), we have to use different elements -->\n@let theIcon = icon();\n\n<!-- Edge case of a button without any kind of link at all -->\n@if (type() === 'none') {\n <span>\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n @if (label()) {\n <span>{{ label() }}</span>\n }\n </span>\n} @else {\n @switch (type()) {\n <!-- App routed link -->\n @case ('routerLinkOrClick') {\n @if (label()) {\n <a\n [matButton]=\"appearance()\"\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [queryParams]=\"queryParams()\"\n [queryParamsHandling]=\"queryParamsHandling()\"\n [routerLink]=\"navigate()\"\n [fragment]=\"fragment()\"\n [preserveFragment]=\"preserveFragment()\"\n (click)=\"buttonClick$.next($event)\"\n >\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n <span>{{ label() }}</span>\n </a>\n } @else {\n <a\n matIconButton\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n [queryParams]=\"queryParams()\"\n [queryParamsHandling]=\"queryParamsHandling()\"\n [routerLink]=\"navigate()\"\n [fragment]=\"fragment()\"\n [preserveFragment]=\"preserveFragment()\"\n (click)=\"buttonClick$.next($event)\"\n >\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n </a>\n }\n }\n <!-- External link -->\n @case ('href') {\n @if (label()) {\n <a\n target=\"_blank\"\n [matButton]=\"appearance()\"\n [attr.href]=\"href()\"\n [color]=\"color()\"\n [disabled]=\"disabled()\"\n >\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n <span>{{ label() }}</span>\n </a>\n } @else {\n <a matIconButton target=\"_blank\" [attr.href]=\"href()\" [color]=\"color()\" [disabled]=\"disabled()\">\n @if (theIcon) {\n <mat-icon [naturalIcon]=\"theIcon\" />\n }\n </a>\n }\n }\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport * from './table-button.component';\n","/*\n * Public API Surface of natural\n */\n\nexport * from './dialog-trigger.component';\n","/**\n * A creator interface used to instantiate source implementation\n */\nexport type SourceCreator = new (sourceValue: string) => Source;\n\n/**\n * Contract of all Sources.\n * Every source must implements the fetch method\n * in order to provide the avatar source.\n */\nexport abstract class Source {\n public constructor(private readonly value: string) {\n this.value = value;\n }\n\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Gets the avatar that usually is a URL, but,\n * for example it can also be a string of initials from the name.\n */\n public abstract getAvatar(size: number): Promise<string>;\n\n /**\n * Whether the avatar is purely textual or an URL for an image\n */\n public abstract isTextual(): boolean;\n}\n","function bufferToHexa(hashBuffer: ArrayBuffer): string {\n const hashArray = new Uint8Array(hashBuffer); // convert buffer to byte array\n return hashArray.reduce((result, byte) => result + byte.toString(16).padStart(2, '0'), ''); // convert bytes to hex string\n}\n\n/**\n * Thin wrapper around browsers' native SubtleCrypto for convenience of use\n */\nexport async function sha256(message: string): Promise<string> {\n const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8); // hash the message\n\n return bufferToHexa(hashBuffer);\n}\n\n/**\n * Thin wrapper around browsers' native SubtleCrypto for convenience of use\n */\nexport async function hmacSha256(secret: string, payload: string): Promise<string> {\n const encoder = new TextEncoder();\n const algorithm: HmacKeyGenParams = {name: 'HMAC', hash: 'SHA-256'};\n\n const key = await crypto.subtle.importKey('raw', encoder.encode(secret), algorithm, false, ['sign']);\n const signature = await crypto.subtle.sign(algorithm.name, key, encoder.encode(payload));\n\n return bufferToHexa(signature);\n}\n","import {Source} from './source';\nimport {sha256} from '../../../classes/crypto';\n\nexport function isRetina(): boolean {\n // We cannot reasonably inject `DOCUMENT` here, but we are extra\n // careful about usage of `window` and its possible non-existence in SSR,\n // so we should be fine.\n // eslint-disable-next-line no-restricted-globals\n const myWindow: Window | undefined = window;\n\n if (myWindow?.devicePixelRatio > 1.25) {\n return true;\n }\n\n const mediaQuery =\n '(-webkit-min-device-pixel-ratio: 1.25), (min--moz-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 1.25dppx)';\n\n return myWindow?.matchMedia(mediaQuery).matches;\n}\n\n/**\n * Return URL to Gravatar image from either an email or a MD5 or SHA-256 of an email\n */\nexport class Gravatar extends Source {\n public async getAvatar(size: number): Promise<string> {\n const value = this.getValue();\n const hash = /^([a-f0-9]{32}|[a-f0-9]{64})$/.exec(value) ? value : await sha256(value.trim().toLowerCase());\n\n const avatarSize = isRetina() ? size * 2 : size;\n return `https://secure.gravatar.com/avatar/${hash}?s=${avatarSize}&d=404`;\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Source} from './source';\n\n/**\n * Get the initials of each word in uppercase.\n */\nfunction getInitials(name: string, size: number): string {\n // Drop all text in parentheses, because assumed less important\n name = name.replace(/\\([^)]*\\)/g, '');\n name = name.trim();\n\n // Deliberately short name is kept intact\n if (name.length <= size) {\n return name.toUpperCase();\n }\n\n // Only letters (including unicode), numbers, and whitespace\n name = name.replace(/[^\\p{L}\\p{N}\\s]/gu, '');\n\n if (!name) {\n return '';\n }\n\n let words = name.split(/\\s+/);\n if (size && size < words.length) {\n words = words.slice(0, size);\n }\n\n return words\n .filter(element => element.length > 0)\n .map(element => element[0])\n .join('')\n .toUpperCase();\n}\n\n/**\n * Return the initials of the given value as avatar\n */\nexport class Initials extends Source {\n public getAvatar(size: number): Promise<string> {\n return Promise.resolve(getInitials(this.getValue(), size));\n }\n\n public isTextual(): boolean {\n return true;\n }\n}\n","import {Source} from './source';\n\n/**\n * Return custom image URL as avatar\n */\nexport class Image extends Source {\n public getAvatar(): Promise<string> {\n return Promise.resolve(this.getValue());\n }\n\n public isTextual(): boolean {\n return false;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Source, SourceCreator} from '../sources/source';\nimport {Gravatar} from '../sources/gravatar';\nimport {Initials} from '../sources/initials';\nimport {Image} from '../sources/image';\n\ntype SourceType = 'gravatar' | 'image' | 'initials';\n\n/**\n * Provides utilities methods related to Avatar component\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AvatarService {\n /**\n * Ordered pairs of possible sources. First in the list is the highest priority.\n * And key must match one the input of AvatarComponent.\n */\n private readonly sourceCreators = new Map<SourceType, SourceCreator>([\n ['gravatar', Gravatar],\n ['image', Image],\n ['initials', Initials],\n ]);\n\n private readonly avatarColors = [\n '#e37900', // 2.99 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=e37900\n '#e6b102', // 2.26 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=c7ab00\n '#00bbbb', // 2.37 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=00bbbb\n '#008cff', // 3.38 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=008cff\n '#d9138c', // 4.51 pass https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=d901b8\n '#7321d1', // 4.28 fail https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=c800ff\n '#3b3b3b', // 11.2 pass https://webaim.org/resources/contrastchecker/?fcolor=FFFFFF&bcolor=3b3b3b\n ];\n\n private readonly failedSources = new Map<string, true>();\n\n public getRandomColor(avatarText: string): string {\n if (!avatarText) {\n return 'transparent';\n }\n const asciiCodeSum = this.calculateAsciiCode(avatarText);\n\n return this.avatarColors[asciiCodeSum % this.avatarColors.length];\n }\n\n public getCreators(): IterableIterator<[SourceType, SourceCreator]> {\n return this.sourceCreators.entries();\n }\n\n private getSourceKey(source: Source): string {\n return source.constructor.name + '-' + source.getValue();\n }\n\n public sourceHasFailedBefore(source: Source): boolean {\n return this.failedSources.has(this.getSourceKey(source));\n }\n\n public markSourceAsFailed(source: Source): void {\n this.failedSources.set(this.getSourceKey(source), true);\n }\n\n private calculateAsciiCode(value: string): number {\n return value\n .split('')\n .map(letter => letter.charCodeAt(0))\n .reduce((previous, current) => previous + current);\n }\n}\n","import {ChangeDetectionStrategy, Component, computed, inject, input, linkedSignal} from '@angular/core';\nimport {Source} from '../sources/source';\nimport {AvatarService} from '../service/avatar.service';\nimport {AsyncPipe, NgStyle} from '@angular/common';\n\ntype Style = Partial<CSSStyleDeclaration>;\n\n/**\n * Show an avatar from different sources\n */\n@Component({\n selector: 'natural-avatar',\n imports: [NgStyle, AsyncPipe],\n template: `\n @let source = currentSource();\n <div class=\"avatar-container\" [style.height.px]=\"size()\" [style.width.px]=\"size()\">\n @if (source && source?.isTextual()) {\n <div class=\"avatar-content\" [class.natural-elevation]=\"decorated()\" [ngStyle]=\"textualStyle()\">\n {{ textAvatar() | async }}\n </div>\n } @else if (source) {\n @if (imageAvatar() | async; as src) {\n <img\n class=\"avatar-content\"\n loading=\"lazy\"\n [src]=\"src\"\n [width]=\"size()\"\n [height]=\"size()\"\n [ngStyle]=\"imageStyle()\"\n (error)=\"tryNextSource()\"\n />\n }\n }\n </div>\n `,\n styles: `\n :host {\n display: block;\n\n &.decorated {\n position: relative;\n\n .avatar-container::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: 50%;\n background: linear-gradient(345deg, rgba(255, 255, 255, 0) 25%, rgba(255, 255, 255, 0.33) 100%);\n content: '';\n }\n\n .avatar-content {\n text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);\n }\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[style.height.px]': 'size()',\n '[style.width.px]': 'size()',\n '[class.decorated]': 'decorated()',\n },\n})\nexport class NaturalAvatarComponent {\n private readonly avatarService = inject(AvatarService);\n\n public readonly image = input<string | null>();\n public readonly initials = input<string | null>();\n public readonly gravatar = input<string | null>();\n public readonly size = input(50);\n public readonly decorated = input(true);\n public readonly textSizeRatio = input(2.25);\n public readonly bgColor = input<string | undefined>();\n public readonly fgColor = input('#FFF');\n public readonly borderRadius = input('');\n public readonly textMaximumLength = input(2);\n\n private readonly sources = linkedSignal<{currentIndex: number; sources: Source[]}>(() => {\n const sources: Source[] = [];\n for (const [propName, creator] of this.avatarService.getCreators()) {\n const value = this[propName]();\n if (value) {\n sources.push(new creator(value));\n }\n }\n\n return {\n currentIndex: this.findNextNonFailingIndex(-1, sources),\n sources,\n };\n });\n\n protected readonly currentSource = computed<Source | undefined>(() => {\n const sources = this.sources();\n\n return sources.sources[sources.currentIndex];\n });\n\n protected readonly imageAvatar = computed(() => this.currentSource()?.getAvatar(this.size()));\n\n protected readonly textAvatar = computed(() => this.currentSource()?.getAvatar(this.textMaximumLength()));\n\n /**\n * Try to use the next available avatar source that has not already failed in the past\n */\n public tryNextSource(): void {\n const previousSource = this.currentSource();\n if (previousSource) {\n this.avatarService.markSourceAsFailed(previousSource);\n }\n\n const {currentIndex, sources} = this.sources();\n this.sources.set({\n currentIndex: this.findNextNonFailingIndex(currentIndex, sources),\n sources,\n });\n }\n\n private findNextNonFailingIndex(currentIndex: number, sources: Source[]): number {\n while (++currentIndex < sources.length) {\n const source = sources[currentIndex];\n if (source && !this.avatarService.sourceHasFailedBefore(source)) {\n return currentIndex;\n }\n }\n\n return currentIndex;\n }\n\n /**\n * Returns initials style\n */\n protected readonly textualStyle = computed<Style>(() => {\n const bgColor = this.bgColor();\n\n const backgroundColor = bgColor\n ? bgColor\n : this.avatarService.getRandomColor(this.currentSource()?.getValue() ?? '');\n\n return {\n textAlign: 'center',\n borderRadius: this.borderRadius() || '100%',\n textTransform: 'uppercase',\n color: this.fgColor(),\n backgroundColor: backgroundColor,\n font: Math.floor(this.size() / this.textSizeRatio()) + 'px Helvetica, Arial, sans-serif',\n lineHeight: this.size() + 'px',\n width: this.size() + 'px',\n height: this.size() + 'px',\n };\n });\n\n /**\n * Returns image style\n */\n protected readonly imageStyle = computed<Style>(() => {\n return {\n maxWidth: '100%',\n borderRadius: this.borderRadius() || '100%',\n width: this.size() + 'px',\n height: this.size() + 'px',\n };\n });\n}\n","/*\n * Public API Surface of ngx-avatar\n */\nexport * from './component/avatar.component';\nexport * from './service/avatar.service';\n","import {DOCUMENT, inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {NavigationEnd, Router} from '@angular/router';\nimport {isPlatformBrowser} from '@angular/common';\nimport {Subscription} from 'rxjs';\nimport {Title} from '@angular/platform-browser';\n\n/**\n * Incomplete list of Matomo functions. But it should be enough\n * for our basic needs.\n *\n * To complete this list, maybe see https://developer.matomo.org/guides/tracking-javascript-guide\n */\ntype MatomoFunction =\n | 'setCustomUrl'\n | 'setCustomDimension'\n | 'setDocumentTitle'\n | 'setReferrerUrl'\n | 'setSiteId'\n | 'setTrackerUrl'\n | 'trackPageView';\n\nexport type PaqItem = [MatomoFunction, ...(number | string | null)[]];\n\ntype Paq = {\n push: (item: PaqItem) => void;\n};\n\n/**\n * Service to track visitors via Matomo.\n *\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalMatomoService {\n private readonly router = inject(Router);\n private readonly document = inject(DOCUMENT);\n private readonly titleService = inject(Title);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly window: WindowProxy & typeof globalThis & {_paq?: Paq};\n\n private subscription: Subscription | null = null;\n private referrerUrl = '';\n\n public constructor() {\n const window = this.document.defaultView;\n if (!window) {\n throw new Error('Could not init MatomoService `window` is undefined');\n }\n\n this.window = window;\n }\n\n /**\n * Inject Matomo script and start tracking all page navigation\n */\n public startTracking(url: string | null, site: number | null): void {\n // Abort because no tracking info or doing SSR\n if (!url || !site || !this.isBrowser) {\n return;\n }\n\n this.push('setTrackerUrl', url + '/matomo.php');\n this.push('setSiteId', site);\n\n this.injectTrackingCode(url);\n this.listenForRouteChanges();\n }\n\n public stopTracking(): void {\n this.subscription?.unsubscribe();\n this.subscription = null;\n delete this.window._paq;\n }\n\n /**\n * Push a Matomo command on the stack\n *\n * It can be called at any time, including before Matomo is even loaded.\n *\n * Also see https://developer.matomo.org/guides/tracking-javascript-guide\n */\n public push(functionName: PaqItem[0], ...args: PaqItem[1][]): void {\n if (!this.window._paq) {\n this.window._paq = [] as any[];\n }\n\n // Here we must always get `_paq` freshly from window, because Matomo\n // might have changed the object after we created it\n this.window._paq.push([functionName, ...args]);\n }\n\n private injectTrackingCode(url: string): void {\n try {\n const script = this.document.createElement('script');\n script.async = true;\n script.defer = true;\n script.src = url + '/matomo.js';\n this.document.head.appendChild(script);\n } catch (ex) {\n console.error('Error appending Matomo analytics');\n console.error(ex);\n }\n }\n\n private listenForRouteChanges(): void {\n this.subscription = this.router.events.subscribe(event => {\n if (!(event instanceof NavigationEnd)) {\n return;\n }\n\n const currentUrl = this.window.location.href;\n\n this.push('setCustomUrl', currentUrl);\n this.push('setDocumentTitle', this.titleService.getTitle());\n if (this.referrerUrl) {\n this.push('setReferrerUrl', this.referrerUrl);\n }\n\n this.push('trackPageView');\n\n this.referrerUrl = currentUrl;\n });\n }\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalMatomoService} from './matomo.service';\n","import {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DOCUMENT, ErrorHandler, inject, Injectable, InjectionToken} from '@angular/core';\nimport {catchError, EMPTY, first, Observable, of} from 'rxjs';\n\nexport type NaturalLoggerType = {\n message: string;\n stacktrace?: string;\n href?: string;\n host?: string;\n path?: string;\n agent?: string;\n status?: number;\n referrer?: string;\n url?: string;\n userId?: string;\n user?: string;\n\n [key: string]: any;\n};\n\nexport type NaturalLoggerExtra = {\n /**\n * Return an observable of extra data that will be logged. Those data will be merged into\n * the original data, and so it can override things.\n *\n * Only the first emitted value will be used.\n */\n getExtras(error: unknown): Observable<Partial<NaturalLoggerType>>;\n};\n\nexport const NaturalLoggerConfigUrl = new InjectionToken<string>('Absolute URL of the log server');\nexport const NaturalLoggerConfigExtra = new InjectionToken<NaturalLoggerExtra>(\n 'Class that may provide extra data to log',\n);\n\n/**\n * Replace Angular's error handler to also send the log to a remote server via HTTP POST.\n *\n * Usage is automatic as soon as we provide it via:\n *\n * ```ts\n * provideErrorHandler('http://example.com', ExtraService),\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NaturalErrorHandler extends ErrorHandler {\n private readonly http = inject(HttpClient);\n private readonly document = inject(DOCUMENT);\n private readonly url = inject(NaturalLoggerConfigUrl, {optional: true});\n private readonly loggerExtra = inject(NaturalLoggerConfigExtra, {optional: true});\n\n public constructor() {\n super();\n }\n\n public override handleError(error: any): void {\n console.error(error);\n\n const params: NaturalLoggerType = {\n message: this.toMessage(error),\n href: this.document.defaultView?.window.location.href,\n host: this.document.defaultView?.window.location.hostname,\n path: this.document.defaultView?.window.location.pathname,\n agent: this.document.defaultView?.window.navigator.userAgent,\n level: 'error',\n };\n\n if (error?.stack) {\n params.stacktrace = error.stack;\n }\n\n if (typeof error?.status !== 'undefined') {\n params.status = error.status;\n }\n\n if (error?.referrer) {\n params.referrer = error.referrer;\n }\n\n if (error?.url) {\n params.url = error.url;\n }\n\n if (this.loggerExtra) {\n this.loggerExtra\n .getExtras(error)\n .pipe(\n catchError(e => of({getExtrasErrorMessage: this.toMessage(e)})),\n first(),\n )\n .subscribe(result => {\n this.postLog(Object.assign(params, result));\n });\n } else {\n this.postLog(params);\n }\n }\n\n private toMessage(error: any): string {\n if (error && typeof error === 'object' && 'message' in error) {\n return '' + error.message;\n } else {\n return '' + error;\n }\n }\n\n /**\n * Send parameters to remote log\n */\n private postLog(params: NaturalLoggerType): void {\n if (this.url) {\n this.http\n .post(this.url, params, {headers: new HttpHeaders().set('content-type', 'application/json')})\n .pipe(catchError(() => EMPTY))\n .subscribe();\n }\n }\n}\n","import {ErrorHandler, Provider, Type} from '@angular/core';\nimport {\n NaturalErrorHandler,\n NaturalLoggerConfigExtra,\n NaturalLoggerConfigUrl,\n NaturalLoggerExtra,\n} from './error-handler';\n\nexport function provideErrorHandler(url: string | null, extraService?: Type<NaturalLoggerExtra>): Provider[] {\n const providers: Provider[] = [\n {\n provide: ErrorHandler,\n useClass: NaturalErrorHandler,\n },\n {\n provide: NaturalLoggerConfigUrl,\n useValue: url,\n },\n ];\n\n if (extraService) {\n providers.push({\n provide: NaturalLoggerConfigExtra,\n useClass: extraService,\n });\n }\n\n return providers;\n}\n","/*\n * Public API Surface of natural\n */\n\nexport {provideErrorHandler} from './error.module';\n\nexport {NaturalErrorHandler, NaturalLoggerConfigExtra, NaturalLoggerConfigUrl} from './error-handler';\nexport type {NaturalLoggerExtra, NaturalLoggerType} from './error-handler';\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {MatIconButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {ColorScheme, NaturalThemeService} from '../../services/theme.service';\nimport {NaturalIconDirective} from '../icon/icon.directive';\n\n@Component({\n selector: 'natural-color-schemer',\n imports: [MatIconButton, MatTooltip, NaturalIconDirective, FormsModule, MatIcon],\n templateUrl: './color-schemer.component.html',\n styleUrl: './color-schemer.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NaturalColorSchemerComponent {\n protected readonly themeService = inject(NaturalThemeService);\n protected readonly ColorScheme = ColorScheme;\n}\n","<div class=\"nat-horizontal wrapper\">\n <button\n matIconButton\n matTooltip=\"Thème de l'appareil\"\n i18n-matTooltip\n matTooltipPosition=\"below\"\n (click)=\"themeService.setColorScheme(ColorScheme.Auto)\"\n >\n <mat-icon naturalIcon=\"routine\" />\n </button>\n <button\n matIconButton\n matTooltip=\"Thème clair\"\n i18n-matTooltip\n matTooltipPosition=\"below\"\n (click)=\"themeService.setColorScheme(ColorScheme.Light)\"\n >\n <mat-icon naturalIcon=\"light_mode\" />\n </button>\n <button\n matIconButton\n matTooltip=\"Thème sombre\"\n i18n-matTooltip\n matTooltipPosition=\"below\"\n (click)=\"themeService.setColorScheme(ColorScheme.Dark)\"\n >\n <mat-icon naturalIcon=\"dark_mode\" />\n </button>\n</div>\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalColorSchemerComponent} from './color-schemer.component';\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {MatButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu';\nimport {NATURAL_THEMES_CONFIG, NaturalThemeService} from '../../services/theme.service';\nimport {NaturalIconDirective} from '../icon/icon.directive';\n\n@Component({\n selector: 'natural-theme-changer',\n imports: [MatButton, MatMenuTrigger, MatMenu, MatMenuItem, MatIcon, NaturalIconDirective],\n templateUrl: './theme-changer.component.html',\n styleUrl: './theme-changer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NaturalThemeChangerComponent {\n protected readonly themeService = inject(NaturalThemeService);\n protected readonly allThemes = inject(NATURAL_THEMES_CONFIG);\n}\n","<button matButton=\"filled\" [matMenuTriggerFor]=\"menu\"\n ><mat-icon naturalIcon=\"colors\" /> {{ themeService.theme() }}</button\n>\n<mat-menu #menu=\"matMenu\">\n @for (theme of allThemes; track $index) {\n <button mat-menu-item (click)=\"themeService.setTheme(theme)\">\n <mat-icon [fontIcon]=\"themeService.theme() === theme ? 'check' : ''\" />\n {{ theme }}</button\n >\n }\n</mat-menu>\n","/*\n * Public API Surface of natural\n */\n\nexport {NaturalThemeChangerComponent} from './theme-changer.component';\n","import {Directive, HostListener, input} from '@angular/core';\nimport {AbstractControl} from '@angular/forms';\n\n/**\n * Need to add http:// prefix if we don't have prefix already AND we don't have part of it\n */\nexport function ensureHttpPrefix(value: string | null): string | null {\n if (!value) {\n return value;\n }\n\n const completePrefix = /^(https?):\\/\\//i.test(value);\n const startingPrefix = 'https://'.startsWith(value) || 'http://'.startsWith(value);\n\n if (!completePrefix && !startingPrefix) {\n return 'http://' + value;\n } else {\n return value;\n }\n}\n\n/**\n * This directive only supports ReactiveForms due to ngModel/ngControl encapsulation and changes emissions.\n */\n@Directive({\n selector: '[naturalHttpPrefix]',\n})\nexport class NaturalHttpPrefixDirective {\n public readonly naturalHttpPrefix = input<AbstractControl | null>(null);\n\n @HostListener('ngModelChange', ['$event'])\n public httpize($event: string): void {\n const naturalHttpPrefix = this.naturalHttpPrefix();\n if (naturalHttpPrefix) {\n const newValue = ensureHttpPrefix($event) || $event;\n if ($event !== newValue) {\n naturalHttpPrefix.setValue(newValue);\n }\n }\n }\n}\n","import {ApplicationConfig, importProvidersFrom} from '@angular/core';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {localStorageProvider, sessionStorageProvider} from '../modules/common/services/memory-storage';\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\nimport {provideThemes} from '../services/theme.service';\n\n/**\n * Minimal, global providers for Natural to work\n */\nexport const naturalProviders: ApplicationConfig['providers'] = [\n importProvidersFrom([MatDialogModule, MatSnackBarModule]),\n sessionStorageProvider,\n localStorageProvider,\n provideThemes(['natural']),\n];\n","import {HttpInterceptorFn, HttpRequest} from '@angular/common/http';\nimport {hmacSha256} from './crypto';\nimport {from, switchMap, throwError} from 'rxjs';\n\nfunction getOperations(req: HttpRequest<unknown>): string {\n if (req.body instanceof FormData) {\n const operations = req.body.get('operations');\n if (typeof operations !== 'string') {\n throw new Error(\n 'Cannot sign a GraphQL query that is using FormData but that is missing the key `operations`',\n );\n }\n return operations;\n } else {\n return JSON.stringify(req.body);\n }\n}\n\n/**\n * Sign all HTTP POST requests that are GraphQL queries against `/graphql` endpoint with a custom signature.\n *\n * The server will validate the signature before executing the GraphQL query.\n */\nexport function graphqlQuerySigner(key: string): HttpInterceptorFn {\n // Validates the configuration exactly 1 time (not for\n // every query), and if not reject **all** HTTP requests\n if (!key) {\n return () =>\n throwError(\n () =>\n new Error(\n 'graphqlQuerySigner requires a non-empty key. Configure it in local.php under signedQueries.',\n ),\n );\n }\n\n return (req, next) => {\n const mustSign = req.method === 'POST' && /\\/graphql(\\?|$)/.exec(req.url);\n if (!mustSign) {\n return next(req);\n }\n\n const operations = getOperations(req);\n const timestamp = Math.round(Date.now() / 1000);\n const payload = timestamp + operations;\n\n return from(hmacSha256(key, payload)).pipe(\n switchMap(hash => {\n const header = `v1.${timestamp}.${hash}`;\n const signedRequest = req.clone({\n headers: req.headers.set('X-Signature', header),\n });\n\n return next(signedRequest);\n }),\n );\n };\n}\n","/// <reference types=\"@angular/localize\" />\n\n/*\n * Public API Surface of natural\n */\n\nexport * from './lib/classes/abstract-detail';\nexport * from './lib/classes/abstract-editable-list';\nexport * from './lib/classes/abstract-list';\nexport * from './lib/classes/abstract-navigable-list';\nexport {createHttpLink, hasFilesAndProcessDate} from './lib/classes/apollo-utils';\nexport * from './lib/classes/data-source';\nexport * from './lib/classes/query-variable-manager';\nexport {cancellableTimeout, debug} from './lib/classes/rxjs';\nexport * from './lib/classes/utility';\nexport * from './lib/classes/validators';\nexport {NetworkActivityService, activityInterceptor} from './lib/classes/network-activity.service';\nexport {validTlds} from './lib/classes/tld';\n\nexport * from './lib/services/abstract-model.service';\nexport {NaturalDebounceService} from './lib/services/debounce.service';\nexport * from './lib/services/enum.service';\nexport * from './lib/services/link-mutation.service';\nexport {NaturalPersistenceService, NATURAL_PERSISTENCE_VALIDATOR} from './lib/services/persistence.service';\nexport {provideThemes, ColorScheme, NaturalThemeService} from './lib/services/theme.service';\nexport type {PersistenceValidator} from './lib/services/persistence.service';\nexport * from './lib/services/swiss-parsing-date-adapter.service';\n\nexport type {\n ExtractResolve,\n ExtractTall,\n ExtractTallOne,\n ExtractTcreate,\n ExtractTdelete,\n ExtractTone,\n ExtractTupdate,\n ExtractVall,\n ExtractVcreate,\n ExtractVdelete,\n ExtractVone,\n ExtractVupdate,\n Literal,\n NameOrFullName,\n ResolvedData,\n NaturalPalette,\n} from './lib/types/types';\n\nexport * from './lib/modules/alert/public-api';\nexport * from './lib/modules/columns-picker/public-api';\nexport * from './lib/modules/common/public-api';\nexport * from './lib/modules/detail-header/public-api';\nexport * from './lib/modules/dropdown-components/public-api';\nexport * from './lib/modules/file/public-api';\nexport * from './lib/modules/fixed-button/public-api';\nexport * from './lib/modules/fixed-button-detail/public-api';\nexport * from './lib/modules/hierarchic-selector/public-api';\nexport * from './lib/modules/icon/public-api';\nexport * from './lib/modules/panels/public-api';\nexport * from './lib/modules/relations/public-api';\nexport * from './lib/modules/search/public-api';\nexport * from './lib/modules/select/public-api';\nexport * from './lib/modules/sidenav/public-api';\nexport * from './lib/modules/stamp/public-api';\nexport * from './lib/modules/table-button/public-api';\nexport * from './lib/modules/dialog-trigger/public-api';\nexport * from './lib/modules/avatar/public-api';\nexport * from './lib/modules/matomo/public-api';\nexport * from './lib/modules/logger/public-api';\nexport * from './lib/modules/color-schemer/public-api';\nexport * from './lib/modules/theme-changer/public-api';\n\nexport * from './lib/directives/http-prefix.directive';\nexport {naturalProviders} from './lib/classes/providers';\nexport {graphqlQuerySigner} from './lib/classes/signing';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["switchMap","merge","i1","first","takeUntil","map","debounceTime","tap","shareReplay","startWith","pick","filter","finalize","InvalidWithValueStateMatcher","isEqual"],"mappings":"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"}
|