chrv-components 1.10.39 → 1.10.40

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.
@@ -1 +1 @@
1
- {"version":3,"file":"chrv-components.mjs","sources":["../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.ts","../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.html","../../../projects/chrv-components/src/lib/models/colors.ts","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.ts","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.html","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.ts","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.html","../../../projects/chrv-components/src/lib/animations/rotation.animation.ts","../../../projects/chrv-components/src/lib/models/chr-validators/required-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/type-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/decimal-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/max-date-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/max-file-size-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/min-file-size-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/maxlength-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/minlength-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/base-validator.ts","../../../projects/chrv-components/src/lib/directives/autofocus.directive.ts","../../../projects/chrv-components/src/lib/chr-form/chr-base-input/chr-base-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-base-input/chr-base-input.component.html","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.ts","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.html","../../../projects/chrv-components/src/lib/chr-tag-select/chr-tag-select.component.ts","../../../projects/chrv-components/src/lib/chr-tag-select/chr-tag-select.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-color-input/chr-color-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-color-input/chr-color-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-date-input/chr-date-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-date-input/chr-date-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-datetime-input/chr-datetime-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-datetime-input/chr-datetime-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-toggle-input/chr-toggle-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-toggle-input/chr-toggle-input.component.html","../../../projects/chrv-components/src/lib/services/files.service.ts","../../../projects/chrv-components/src/lib/services/toast.service.ts","../../../projects/chrv-components/src/lib/chr-form/chr-file-input/chr-file-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-file-input/chr-file-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-textarea-input/chr-textarea-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-textarea-input/chr-textarea-input.component.html","../../../projects/chrv-components/src/lib/directives/tab-input-only-handler.directive.ts","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.html","../../../projects/chrv-components/src/lib/services/cookie.service.ts","../../../projects/chrv-components/src/lib/services/data.service.ts","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.ts","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.html","../../../projects/chrv-components/src/lib/chr-table-new/chr-table-new.component.ts","../../../projects/chrv-components/src/lib/chr-table-new/chr-table-new.component.html","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.ts","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.html","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.ts","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.html","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.ts","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.html","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.ts","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.html","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.ts","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.html","../../../projects/chrv-components/src/lib/models/live-update-message.ts","../../../projects/chrv-components/src/lib/services/loader.service.ts","../../../projects/chrv-components/src/lib/config/interceptors/SpinnerInterceptor.ts","../../../projects/chrv-components/src/lib/config/interceptors/XsrfInterceptor.ts","../../../projects/chrv-components/src/lib/config/providers/xsrf-provider.ts","../../../projects/chrv-components/src/lib/services/live-update.service.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.html","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.ts","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.html","../../../projects/chrv-components/src/lib/chr-default-modal/chr-default-modal.component.ts","../../../projects/chrv-components/src/lib/chr-default-modal/chr-default-modal.component.html","../../../projects/chrv-components/src/lib/directives/tab-to-enter-handler.directive.ts","../../../projects/chrv-components/src/lib/animations/in-out.animation.ts","../../../projects/chrv-components/src/lib/services/dialog.service.ts","../../../projects/chrv-components/src/public-api.ts","../../../projects/chrv-components/src/chrv-components.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MatButton } from '@angular/material/button';\n\nexport interface Breadcrumb {\n display: string;\n link?: string;\n callback?: Function;\n}\n\n@Component({\n selector: 'app-chr-breadcrumb',\n templateUrl: './chr-breadcrumb.component.html',\n styleUrls: [\n './chr-breadcrumb.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [MatButton],\n})\nexport class BreadcrumbComponent {\n @Input() crumbs?: Breadcrumb[];\n\n constructor(public router: Router) {}\n\n navigateTo = (uri: string, data?: any) => {\n this.router.navigate([uri], { state: data });\n };\n}\n","<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n @for (crumb of crumbs; track crumb) {\n <div class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n }\n</div>","export type Color =\r\n | 'primary'\r\n | 'primary-contrast'\r\n | 'secondary'\r\n | 'secondary-contrast'\r\n | 'tertiary'\r\n | 'tertiary-contrast'\r\n | 'warn'\r\n | 'warn-contrast'\r\n | 'error'\r\n | 'error-contrast'\r\n | 'black'\r\n | 'white'\r\n | 'none';\r\n\r\nexport const Colors: { [key: string]: string } = {\r\n primary: 'primary',\r\n 'primary-contrast': 'primary-contrast',\r\n secondary: 'secondary',\r\n 'secondary-contrast': 'secondary-contrast',\r\n tertiary: 'tertiary',\r\n 'tertiary-contrast': 'tertiary-contrast',\r\n warn: 'warn',\r\n 'warn-contrast': 'warn-contrast',\r\n error: 'error',\r\n 'error-contrast': 'error-contrast',\r\n white: 'white',\r\n black: 'black',\r\n};\r\n\r\nexport function getTextColor(color: Color = 'none') {\r\n return `text-${Colors[color] || Colors['black']}`;\r\n}\r\n\r\nexport function getContrastTextColor(color: Color) {\r\n return getTextColor(`${color}-contrast` as Color);\r\n}\r\n\r\nexport function getBackgroundColor(color: Color = 'none') {\r\n return `bg-${Colors[color] || Colors['black']}`;\r\n}\r\n\r\nexport function getContrastBackgroundColor(color: Color) {\r\n return getContrastBackgroundColor(`${color}-contrast` as Color);\r\n}\r\n\r\nexport function getBorderColor(color: Color = 'none') {\r\n return `border-${Colors[color] || Colors['black']}`;\r\n}\r\n\r\nexport function getContrastBorderColor(color: Color = 'none') {\r\n return getBorderColor(`${color}-contrast` as Color);\r\n}\r\n","import { Component, Input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule, MatFabButton } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\nimport {\n Color,\n getBackgroundColor,\n getContrastTextColor,\n getTextColor,\n} from '../models/colors';\n\n@Component({\n selector: 'app-chr-button',\n templateUrl: './chr-button.component.html',\n styleUrls: [\n './chr-button.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [MatTooltipModule, MatIconModule, MatButtonModule, CommonModule],\n})\nexport class ChrButtonComponent {\n @Input() display?: string = '';\n @Input() icon?: string = '';\n @Input() click?: Function;\n @Input() clickWhileDisabled?: Function;\n @Input() color: Color = 'primary';\n @Input() textColor?: Color = 'primary-contrast';\n @Input() flat: boolean = false;\n\n @Input() predicate?: boolean = true;\n @Input() type: 'responsive' | 'table' | 'full' | 'fixed' | 'small' | 'none' =\n 'none';\n @Input() href?: string;\n @Input() target?: '_blank' | '_parent' | '_self' | '_top';\n @Input() disabled: boolean = false;\n @Input() tooltip?: string;\n @Input() tooltipPosition?:\n | 'above'\n | 'below'\n | 'left'\n | 'right'\n | 'before'\n | 'after';\n\n constructor() {}\n\n setDisabled = (is: boolean) => {\n this.disabled = is;\n };\n\n doClick = () => {\n if (!this.disabled) this.click?.();\n else this.clickWhileDisabled?.();\n };\n\n getBackgroundColor = (color: Color) => getBackgroundColor(color);\n\n getTextColor = (color: Color) => getContrastTextColor(color);\n\n getWidth = () => {\n switch (this.type) {\n case 'fixed':\n return 'w-36';\n case 'full':\n return 'w-full';\n case 'responsive':\n return 'w-full';\n case 'small':\n return 'w-9';\n case 'table':\n return 'w-full';\n default:\n return 'w-min';\n }\n };\n\n getShadow = () => {\n if (this.flat) return '';\n return 'button-shadow';\n };\n}\n","<a class=\"flex flex-row cursor-pointer items-center justify-center align-middle h-9 m-0 p-2 rounded-md\"\n style=\"--color: {{getBackgroundColor(color)}};\" [ngClass]=\"[getBackgroundColor(color), getWidth(), getShadow()]\"\n [attr.disabled]=\"disabled || false\" (click)=\"doClick()\" [attr.href]=\"href && href\" [attr.target]=\"target && target\"\n [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n <span *ngIf=\"display\" [ngClass]=\"getTextColor(color)\"\n class=\"text-nowrap overflow-hidden text-ellipsis\">{{display}}</span>\n <mat-icon *ngIf=\"icon\" class=\"!m-0\" [ngClass]=\"getTextColor(color)\">{{ icon }}</mat-icon>\n</a>","import { Component } from '@angular/core';\nimport {\n MatDialogRef,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,\n} from '@angular/material/dialog';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\n\n@Component({\n selector: 'app-chr-delete-modal',\n templateUrl: './chr-delete-modal.component.html',\n styleUrls: [\n './chr-delete-modal.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n ChrButtonComponent,\n MatDialogClose,\n MatTooltip,\n ],\n})\nexport class ChrDeleteModalComponent {\n public valid: boolean = false;\n\n constructor(public dialogRef: MatDialogRef<ChrDeleteModalComponent>) {}\n\n ngOnInit() {}\n\n public cancel = () => {\n this.dialogRef.close();\n };\n\n public close = () => {\n this.dialogRef.close(true);\n };\n}\n","<div class=\"w-full overflow-auto overflow-x-hidden\" style=\"background-color: var(--background-color);\">\n <h2 mat-dialog-title class=\"\">Supprimer un élément</h2>\n <mat-dialog-content class=\"mat-typography \">\n Attention:\n <br>\n <br>\n La suppression d'un élément est irréversible.\n <br>\n <br>\n Vous allez supprimer un élément et sa référence sera effacée dans toute l'application.\n <br>\n Si d'autres éléments y sont liés, il est possible qu'ils soient supprimés en même temps.\n <br>\n <br>\n En effectuant cette action et cliquant sur \"Confirmer\" vous certifiez que vous avez pris connaissance des\n conséquences possibles et souhaitez tout de même poursuivre.\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"w-full flex flex-row justify-between\">\n <app-chr-button display=\"Annuler\" type=\"fixed\" color=\"secondary\" [click]=\"cancel\"></app-chr-button>\n <app-chr-button display=\"Confirmer\" type=\"fixed\" color=\"error\" [click]=\"close\"\n [matTooltip]=\"'Attention: cette action est irréversible !'\" matTooltipPosition=\"above\"></app-chr-button>\n </div>\n </mat-dialog-actions>\n</div>","import {\r\n animate,\r\n style,\r\n transition,\r\n trigger,\r\n state,\r\n} from '@angular/animations';\r\n\r\nexport const rotationAnimation = (\r\n initialAngle: number = 0,\r\n endAngle: number = 360,\r\n duration: number = 500\r\n) =>\r\n trigger('rotationAnimation', [\r\n state(\r\n 'initial',\r\n style({\r\n transform: `rotate(${initialAngle}deg)`,\r\n })\r\n ),\r\n state(\r\n 'rotated',\r\n style({\r\n transform: `rotate(${endAngle}deg)`,\r\n })\r\n ),\r\n transition('initial => rotated', [\r\n //style({ opacity: 0 }),\r\n animate(`${duration}ms ease`),\r\n ]),\r\n transition('rotated => initial', [\r\n //style({ opacity: 1 }),\r\n animate(`${duration}ms ease`),\r\n ]),\r\n ]);\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-required]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: RequiredValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class RequiredValidatorDirective implements Validator {\r\n @Input() required?: boolean = true;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.required ? required(this.required)(control) : null;\r\n }\r\n}\r\n\r\nexport function required(required: boolean = true): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n const isBoolean = typeof value === 'boolean';\r\n const isValueValidBoolean = value === true || value === false;\r\n\r\n if (isBoolean && isValueValidBoolean) return null;\r\n\r\n if (value === 0) return null;\r\n\r\n // Technically this should only send the error if the value is null, undefined or if it is a falsy value that isn't handled\r\n return !control.value\r\n ? ({\r\n required: true,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-type]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: TypeValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class TypeValidatorDirective implements Validator {\r\n @Input() type?: string;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.type ? type(this.type)(control) : null;\r\n }\r\n}\r\n\r\nexport function type(type: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isType = typeof value === type;\r\n\r\n if (type === 'array')\r\n isType =\r\n typeof value !== 'string' &&\r\n (value as any[])?.length !== undefined &&\r\n (value as any[])?.length !== null;\r\n\r\n return !isType\r\n ? ({\r\n type: true,\r\n requiredType: type,\r\n actualType: typeof value,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-decimal]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: DecimalValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class DecimalValidatorDirective implements Validator {\r\n @Input() amount?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.amount ? decimal(this.amount)(control) : null;\r\n }\r\n}\r\n\r\nexport function decimal(amount: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = false;\r\n\r\n const str = `${value}`;\r\n isTooLong =\r\n str.indexOf(',') != -1\r\n ? (str.split(',')[1] ? str.split(',')[1].length : 0) > amount\r\n : str.indexOf('.') != -1\r\n ? (str.split('.')[1] ? str.split('.')[1].length : 0) > amount\r\n : false;\r\n\r\n return isTooLong\r\n ? ({\r\n decimal: true,\r\n max: amount,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport moment from 'moment';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-max-date]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxDateValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxDateValidatorDirective implements Validator {\r\n @Input() date?: Date;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.date ? maxDate(this.date)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxDate(date: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const maxDate = moment(date);\r\n const inputDate = moment(value);\r\n\r\n return !(inputDate.isValid() && inputDate.isBefore(maxDate))\r\n ? ({\r\n maxdate: true,\r\n max: maxDate.toDate(),\r\n actual: value,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { IFile } from '../file';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-max-file-size]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxFileSizeValidator,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxFileSizeValidator implements Validator {\r\n @Input() max: number = 0;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.max ? maxFileSize(this.max)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxFileSize(maxSize: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: IFile | IFile[] = control.value;\r\n const sizeInBytes = maxSize * 1024 * 1024;\r\n let isSizeCompliant = true;\r\n const errors: { [index: number]: boolean } = {};\r\n let fileSize: number | null = null;\r\n\r\n if (value === null) return null;\r\n\r\n if (Array.isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n if (!value[i].file) continue;\r\n\r\n if (value[i].file!.size > sizeInBytes) {\r\n errors[i] = true;\r\n isSizeCompliant = false;\r\n }\r\n }\r\n } else {\r\n if (!value.file) return null;\r\n\r\n fileSize =\r\n (value instanceof File ? value.size : value.file?.size) ?? null;\r\n\r\n isSizeCompliant = fileSize !== null && fileSize < sizeInBytes;\r\n }\r\n\r\n return !isSizeCompliant\r\n ? ({\r\n maxfilesize: true,\r\n max: sizeInBytes,\r\n actual: fileSize,\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { IFile } from '../file';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-min-file-size]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MinFileSizeValidator,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MinFileSizeValidator implements Validator {\r\n @Input() min: number = 0;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.min ? minFileSize(this.min)(control) : null;\r\n }\r\n}\r\n\r\nexport function minFileSize(minSize: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: IFile | IFile[] = control.value;\r\n const sizeInBytes = minSize * 1024 * 1024;\r\n let isSizeCompliant = true;\r\n const errors: { [index: number]: boolean } = {};\r\n let fileSize: number | null = null;\r\n\r\n //console.log(value);\r\n\r\n if (value === null) return null;\r\n\r\n if (Array.isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n if (!value[i].file) continue;\r\n\r\n if (value[i].file!.size <= sizeInBytes) {\r\n errors[i] = true;\r\n isSizeCompliant = false;\r\n }\r\n }\r\n } else {\r\n if (!value.file) return null;\r\n\r\n fileSize =\r\n (value instanceof File ? value.size : value.file?.size) ?? null;\r\n\r\n isSizeCompliant = fileSize !== null && fileSize >= sizeInBytes;\r\n }\r\n\r\n return !isSizeCompliant\r\n ? ({\r\n minfilesize: true,\r\n min: sizeInBytes,\r\n actual: fileSize,\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-maxlength]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxLengthValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxLengthValidatorDirective implements Validator {\r\n @Input() treshold?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.treshold ? maxLength(this.treshold)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxLength(treshold: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: string | any[] = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = value.length > treshold;\r\n\r\n return isTooLong\r\n ? ({\r\n maxlength: true,\r\n max: treshold,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-minlength]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MinLengthValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MinLengthValidatorDirective implements Validator {\r\n @Input() treshold?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.treshold ? minLength(this.treshold)(control) : null;\r\n }\r\n}\r\n\r\nexport function minLength(treshold: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: string | any[] = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = value.length < treshold;\r\n\r\n return isTooLong\r\n ? ({\r\n minlength: true,\r\n min: treshold,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import {\r\n AbstractControl,\r\n AsyncValidatorFn,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { required } from './required-validator';\r\nimport { type } from './type-validator';\r\nimport { decimal } from './decimal-validator';\r\nimport { maxDate } from './max-date-validator';\r\nimport { map, Observable } from 'rxjs';\r\nimport { maxFileSize } from './max-file-size-validator';\r\nimport { minFileSize } from './min-file-size-validator';\r\nimport { maxLength } from './maxlength-validator';\r\nimport { minLength } from './minlength-validator';\r\n\r\nexport interface IControlValidation {\r\n rule: string;\r\n validator?: (control: AbstractControl) => ValidationErrors | null;\r\n key?: string;\r\n value?: any;\r\n display?: string;\r\n}\r\n\r\nexport function SyncValidatorToAsync(validator: ValidatorFn): AsyncValidatorFn {\r\n // COPILOT Generated. Switch to observable and try to replace regular validators.\r\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n const obs = new Observable().pipe(map((res) => validator(control)));\r\n return obs;\r\n };\r\n}\r\n\r\nexport function getValidators(rules?: IControlValidation[]): ValidatorFn[] {\r\n return getSyncValidators(rules);\r\n}\r\n\r\nexport function getAsyncValidators(\r\n rules?: IControlValidation[]\r\n): AsyncValidatorFn[] {\r\n return getSyncValidators(rules).map((validator) =>\r\n SyncValidatorToAsync(validator)\r\n );\r\n}\r\n\r\nexport function getSyncValidators(rules?: IControlValidation[]) {\r\n const validators: ValidatorFn[] = [];\r\n if (!rules) return validators;\r\n //Switch case breaks the mobile app so we'll do if statements\r\n for (const validation of rules) {\r\n if (validation.validator !== undefined) {\r\n validators.push(validation.validator);\r\n continue;\r\n }\r\n const rule = validation.rule?.toLocaleLowerCase();\r\n if (rule == 'min') {\r\n validation.display = `Cette valeur est trop petite (min: ${validation.value})!`;\r\n validators.push(Validators.min(validation.value));\r\n }\r\n if (rule == 'max') {\r\n validation.display = `Cette valeur est trop grande (max: ${validation.value})!`;\r\n validators.push(Validators.max(validation.value));\r\n }\r\n if (rule == 'required') {\r\n validation.display = 'Ce champs est requis !';\r\n validators.push(required());\r\n }\r\n if (rule == 'email') {\r\n validation.display = \"Cette adresse email n'est pas valide !\";\r\n validators.push(Validators.email);\r\n }\r\n if (rule == 'minlength') {\r\n validation.display = `Cette valeur est trop petite (min: ${validation.value})!`;\r\n validators.push(minLength(validation.value));\r\n }\r\n if (rule == 'maxlength') {\r\n validation.display = `Cette valeur est trop grande (max: ${validation.value})!`;\r\n validators.push(maxLength(validation.value));\r\n }\r\n if (rule == 'type') {\r\n validation.display = \"Cette valeur n'est pas valide !\";\r\n validators.push(type(validation.value));\r\n }\r\n if (rule == 'decimal') {\r\n validation.display = `Le nombre de décimal n'est pas valide (max: ${validation.value}) !`;\r\n validators.push(decimal(validation.value));\r\n }\r\n if (rule == 'maxdate') {\r\n validation.display = `Cette date est trop grande (max: ${validation.value}) !`;\r\n validators.push(maxDate(validation.value));\r\n }\r\n if (rule == 'maxfilesize') {\r\n validation.display = `Ce fichier est trop grand (max: ${validation.value} Mb) !`;\r\n validators.push(maxFileSize(validation.value));\r\n }\r\n if (rule == 'minfilesize') {\r\n validation.display = `Ce fichier est trop petit (min: ${validation.value} Mb) !`;\r\n validators.push(minFileSize(validation.value));\r\n }\r\n }\r\n return validators;\r\n}\r\n","import { Directive, HostListener, ElementRef, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[chrAutofocus]',\r\n})\r\nexport class AutofocusDirective {\r\n @Input() chrAutofocus?: boolean | '' | null = false;\r\n constructor(private host: ElementRef) {}\r\n\r\n ngAfterViewInit() {\r\n if (this.chrAutofocus === true) this.host.nativeElement.focus();\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NgControl,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport {\r\n getSyncValidators,\r\n getValidators,\r\n IControlValidation,\r\n} from '../../models/chr-validators/base-validator';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n BehaviorSubject,\r\n debounceTime,\r\n distinctUntilChanged,\r\n skip,\r\n Subscription,\r\n} from 'rxjs';\r\nimport { InputType } from '../../models/controls';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-base-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n CommonModule,\r\n MatError,\r\n FormsModule,\r\n MatIcon,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-base-input.component.html',\r\n styleUrls: [\r\n './chr-base-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // REMOVED FROM PROVIDERS TO AVOID A CYCLIC DEPENDENCY. We will manually bind the controlValueAccessor of the NgControl when we receive it from the DI Context.\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrBaseInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n})\r\n/**\r\n * BaseInput Component. Gives signature and default funtionnalities required for a basic input with debounce time.\r\n *\r\n * Any class inheriting BaseInput and being used outside a ReactiveForm will genereate it's own FormControl for validation's sake.\r\n * Ensure you are correctly using [form] | [formGroup] | [formControlName] otherwise.\r\n *\r\n * Any class inheriting BaseInput should implements, at least, the ControlValueAccessor, OnInit, AfterViewInit and OnDestroy interfaces.\r\n * Any child class that override the OnInit, AfterViewInit, OnDestroy interfaces should call the assaociated super method.\r\n */\r\nexport class ChrBaseInputComponent\r\n implements OnInit, ControlValueAccessor, AfterViewInit, OnDestroy\r\n{\r\n /**\r\n * The label that will be shown to the user for this input.\r\n */\r\n @Input() label: string | null = null;\r\n\r\n /**\r\n * The type of the input. The BaseInput class is designed to be used for the basic text/number/password/hidden types. Any other kind of input would probably benefit of a custom component inheriting BaseInput.\r\n */\r\n @Input() type: InputType = 'text';\r\n\r\n /**\r\n * The id of the input.\r\n */\r\n @Input() id: string | null = null;\r\n\r\n /**\r\n * The name of the input. It's the model's property name or the key that will be set to the value object\r\n */\r\n @Input() name: string | null = null;\r\n\r\n public value: any | null = null;\r\n\r\n private valueSubject: BehaviorSubject<any | null> = new BehaviorSubject(null);\r\n\r\n private valueSubscription: Subscription | null = null;\r\n\r\n /**\r\n * The value change event. This will be triggered both by onChange and by onValueChange (they technically should not be fired together as onValueChange ends up calling onChange)\r\n */\r\n @Output() valueChanges: EventEmitter<any> = new EventEmitter();\r\n\r\n /**\r\n * Whether or not the input is required\r\n */\r\n protected required: boolean = false;\r\n\r\n /**\r\n * Span that will be shown under the input\r\n */\r\n @Input() span: string | null = null;\r\n\r\n /**\r\n * Name of the material icon that will be displayed\r\n */\r\n @Input() icon: string | null = null;\r\n\r\n /**\r\n * A callback function that will be triggered on the input's icon click with the current value of the input\r\n */\r\n @Input() iconCallback: ((value: any) => string) | null = null;\r\n\r\n /**\r\n * Whether or not the icon's callback is enabled\r\n */\r\n @Input() iconCallbackDisabled: boolean = false;\r\n\r\n /**\r\n * Tooltip that will be displayed when hovering the input's icon\r\n */\r\n @Input() iconTooltip: string | null = null;\r\n\r\n /**\r\n * Tooltip that will be displayed on hover\r\n */\r\n @Input() tooltip: string | null = null;\r\n\r\n /**\r\n * Debounce time that will be used by the input before throwing the new value event\r\n */\r\n @Input() debounceTime?: number | null;\r\n\r\n /**\r\n * Validations that will be evaluated for the input. In the case of custom validator function, the return object needs to contain a key with the 'rule' and it's value needs to be 'true'\r\n */\r\n @Input() validations: IControlValidation[] = [];\r\n\r\n /**\r\n * Indicates whether or not this input is being used outside a ReactiveForm. Default is false. If this is false, the input will create it's own FormControl as to enable it's complex behaviors\r\n */\r\n @Input() standalone: boolean = false;\r\n\r\n /**\r\n * Indicates whether or not this input should try catching the focus on page load\r\n */\r\n @Input() autofocus: boolean = false;\r\n\r\n private _disabled: boolean = false;\r\n\r\n /**\r\n * Getter and setter that allow the control of the FormControl's state from the template\r\n */\r\n @Input() get disabled() {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (value) this.control?.control?.disable();\r\n else this.control?.control?.enable();\r\n }\r\n\r\n /**\r\n * Whether or not the input starts as disabled. This can then be changed through the form control.\r\n */\r\n isDisabled: boolean = false;\r\n\r\n /**\r\n * Array of string representing the input's siblings' FormControl's name. This will be used to trigger the validity of the siblings when this input's value changes\r\n */\r\n @Input() siblings: string[] = [];\r\n\r\n onChange: any = () => {};\r\n\r\n onTouch: any = () => {};\r\n\r\n /**\r\n * Whether or not the input is touched\r\n */\r\n isTouched: boolean = false;\r\n\r\n /**\r\n * The NgControl associated with this input\r\n */\r\n protected control: NgControl | null = null;\r\n\r\n /**\r\n * The validity status of the related FormControl\r\n */\r\n isValid: boolean | null = this.control ? this.control.valid : null;\r\n\r\n /**\r\n * Every child should either call super(ngControl) or implement the logic for the input to bind the control to the FormControl.\r\n * @param ngControl the FormControl binded to this CVA\r\n */\r\n constructor(@Optional() ngControl: NgControl | null) {\r\n this.control = ngControl;\r\n if (this.control != null) {\r\n this.control.valueAccessor = this;\r\n }\r\n }\r\n\r\n /**\r\n * A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.\r\n * In the case of the BaseInput class, this methods also subscribes to the onValueChange's subject as to register the debounce time.\r\n *\r\n * To use in any component inheriting the BaseInput Class, please call super.ngOnInit() at any point within the overriden ngOnInit() method.\r\n */\r\n ngOnInit(): void {\r\n //We start by configuring the control. This will set missing NgControl and validators if required\r\n this.configureFormControl();\r\n //Configure the listener that will trigger on OnValueChange call to write value and replicate events\r\n this.configureDebouncing();\r\n //Configure the listener that will trigger when OnTouch is called\r\n this.configureTouchBehavior();\r\n //Configure the listener that will trigger a validity check for this input's siblings\r\n this.configureValidityReplication();\r\n //We compute the required-ness of the input only once\r\n this.required = this.isControlRequired();\r\n }\r\n\r\n /**\r\n * A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.\r\n *\r\n * To use in any component inheriting the BaseInput Class, please call super.ngAfterViewInit() at any point within the overriden ngAfterViewInit() method.\r\n */\r\n ngAfterViewInit(): void {\r\n // const ngControl: NgControl | null = this.injector.get(NgControl, null);\r\n // console.log(ngControl);\r\n }\r\n\r\n /**\r\n * A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.\r\n * In the case of the BaseInput class, this methods also unsubscribe to the onValueChange's subject as to avoid leaving a stray observable.\r\n *\r\n * To use in any component inheriting the BaseInput Class, please call super.ngOnDestroy() at any point within the overriden ngOnDestroy() method.\r\n */\r\n ngOnDestroy(): void {\r\n this.valueSubscription?.unsubscribe();\r\n }\r\n\r\n /**\r\n * A method that returns the input's value. If it's linked to a formcontrol returns the formcontrol's value otherwise the local value\r\n * @returns value any\r\n */\r\n getValue = () => {\r\n return this.control ? this.control.value : this.value;\r\n };\r\n\r\n /**\r\n * A method that can be used instead of onChange(value). It will pass the new value to an observable that will in turn add a debounce time then call the onchange function.\r\n *\r\n * In short, using this method instead of onChange will add a debounce time.\r\n * @param value The new value of the input\r\n * @returns the value observable\r\n */\r\n onValueChange = (value: any) => {\r\n this.valueSubject.next(value);\r\n return this.valueSubscription!;\r\n };\r\n\r\n writeValue(obj: any): void {\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = () => {\r\n this.isTouched = true;\r\n fn();\r\n };\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n protected updateValueAndValidity = () => {\r\n this.control?.control?.updateValueAndValidity();\r\n };\r\n\r\n /**\r\n * Despite it's name, this method returns a single validation error's display (even if there are multiple). And that is the first error found.\r\n * @returns display of the last error\r\n */\r\n protected getLastError = () => {\r\n for (const validation of this.validations ?? []) {\r\n if (this.control?.errors?.[validation.rule.toLowerCase()]) {\r\n return validation.display || \"Cette valeur n'est pas valide !\";\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Returns a boolean describing whether or not the control is required\r\n * @returns\r\n */\r\n protected isControlRequired = () => {\r\n return (\r\n this.validations?.some((v) =>\r\n v.rule?.toLowerCase().includes('required')\r\n ) || false\r\n );\r\n };\r\n\r\n /**\r\n * Returns the current error status of the input.\r\n * @returns\r\n */\r\n protected hasError = () => {\r\n return this.control?.errors !== undefined && this.control?.errors !== null;\r\n };\r\n\r\n private configureDebouncing = () => {\r\n this.valueSubscription = this.valueSubject\r\n .pipe(\r\n // The Behavior Subject always has an initial value. Which means that subscribing to it will make it look like the input has a new value (initially null).\r\n // Which is false, because we're only instanciating the object. This is why we need to skip the first value. Otherwise the form will receive a random null when this\r\n // observable is subscribed to and set the value to said null.\r\n skip(1),\r\n debounceTime(this.debounceTime ?? 200),\r\n distinctUntilChanged()\r\n )\r\n .subscribe((res) => {\r\n // If the value is an empty string, set the value to null to trigger validation and prevent an inconsitent value to be set (ex: for number type input)\r\n let value = res !== '' ? res : null;\r\n // If we use the input type numbe, we cast the value to a number because for some reason, it may sometimes be a string.\r\n if (this.type === 'number') value = Number(value);\r\n this.onChange(value);\r\n this.valueChanges.emit(value);\r\n });\r\n };\r\n\r\n private configureTouchBehavior = () => {\r\n //We ensure that the control is marked as touched when it's status changes. We could probably limit the onTouch to one or two specifics statuses but I did not test further\r\n //As it seems to work fine. This is made to work around the fact that trigger the markAsTouched function via the form doesn't trigger the onTouch of the ControlValueAccessor\r\n this.control?.statusChanges?.subscribe((res) => {\r\n if (this.control?.touched) this.onTouch();\r\n });\r\n };\r\n\r\n private configureValidityReplication = () => {\r\n this.control?.valueChanges?.subscribe((value) => {\r\n for (const sibling of this.siblings) {\r\n this.control?.control?.parent?.get(sibling)?.updateValueAndValidity();\r\n }\r\n });\r\n };\r\n\r\n private configureFormControl = () => {\r\n if (this.control !== null && this.standalone)\r\n throw \"You should not use 'BaseInput' or it's derivative in standalone mode within a ReactiveForm\";\r\n\r\n //If the input is standalone and no control has been injected we create one\r\n if (this.control === null && this.standalone) {\r\n this.control = this.buildFormControl() as any as NgControl;\r\n\r\n //We define this component as the control's value accessor\r\n this.control.valueAccessor = this;\r\n }\r\n\r\n // This code allow the correct binding of the standalone input with the FormControl. However it causes unhandleable validation errors\r\n // This behavior is hacky and should not be supported anyway.\r\n // if (this.control !== null && this.isStandalone) {\r\n // const formControlName = this.control as FormControlName;\r\n // const formDirective = formControlName.formDirective as FormGroupDirective;\r\n // const form = formDirective.form;\r\n // const control = this.buildFormControl();\r\n // form.addControl(this.name!, control);\r\n // formDirective.addControl(formControlName);\r\n // }\r\n\r\n //If the input is not standlone, we should have had a NgControl injected in the constructor\r\n if (!this.standalone) {\r\n //We add the validators to the input.\r\n this.control?.control?.setValidators(getValidators(this.validations));\r\n }\r\n\r\n //The input's validity is evaluated once on HTML and FormControl binding. As we are acting outside this behavior, we trigger the validation once here\r\n this.updateValueAndValidity();\r\n };\r\n\r\n private buildFormControl = () => {\r\n return new FormControl(null, getSyncValidators(this.validations));\r\n };\r\n\r\n protected doCallback = () => {\r\n if (this.iconCallbackDisabled) return;\r\n this.iconCallback?.(this.getValue());\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\" [chrAutofocus]=\"autofocus || false\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n (ngModelChange)=\"onValueChange($event)\" [type]=\"type\" [id]=\"name\" [name]=\"name ?? ''\"\r\n [attr.autocomplete]=\"type == 'password' ? 'current-password':''\" placeholder=\" \" [value]=\"value || ''\"\r\n class=\"block input pt-2 pb-0.5 px-0 w-full height-normalized text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':'cursor-pointer'\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\" (click)=\"doCallback()\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError() ? 'text-span text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span }}\r\n </span>\r\n }\r\n</div>","import {\n Component,\n Input,\n ViewChild,\n OnInit,\n OnDestroy,\n Injector,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteModule,\n} from '@angular/material/autocomplete';\nimport { Observable, startWith, map, BehaviorSubject, Subject } from 'rxjs';\nimport { MatOption } from '@angular/material/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { rotationAnimation } from '../animations/rotation.animation';\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\nimport { MatError } from '@angular/material/form-field';\nimport { AutofocusDirective } from '../directives/autofocus.directive';\n\nexport interface IInputSearchFilter {\n display: string;\n callback?: Function;\n tooltip?: string;\n}\n\n@Component({\n selector: 'app-chr-search-select, [app-chr-search-select]',\n templateUrl: './chr-search-select.component.html',\n styleUrls: [\n './chr-search-select.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n providers: [\n // {\n // provide: NG_VALUE_ACCESSOR,\n // multi: true,\n // useExisting: ChrSearchSelectComponent,\n // },\n ],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MatTooltip,\n MatAutocompleteModule,\n MatOption,\n AsyncPipe,\n MatIconModule,\n MatError,\n CommonModule,\n MatError,\n AutofocusDirective,\n ],\n animations: [rotationAnimation(180, 90, 200)],\n})\nexport class ChrSearchSelectComponent\n extends ChrBaseInputComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n public predicate: boolean = true;\n\n public filteredModelOptions?: Observable<any>;\n\n private values: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n @ViewChild('auto') autocomplete!: MatAutocomplete;\n\n @Input() placeholder?: string;\n @Input() data: any[] | null = [];\n @Input() display?: (entry: any) => string;\n @Input() filters?: IInputSearchFilter[];\n\n /**\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\n * If this callback returns null, the entry will NOT be added.\n * This lets you update the value before it's added.\n */\n @Input() addCallback?:\n | ((entry: any, subject: Subject<any>) => any | null | void)\n | null = null;\n //Subject used in callback methods to update the value when received.\n private addSubject: Subject<any> = new Subject();\n /**\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\n * This defaults to false.\n * If there are neither data nor display function, this defaults to true.\n */\n @Input() acceptText: boolean | null = null;\n protected filterIndex: number = 0;\n protected overrideShowResults: boolean = false;\n\n constructor(@Optional() ngControl: NgControl) {\n super(ngControl);\n this.type = 'searchSelect';\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.registerFilters();\n this.addSubject.subscribe((entry) => {\n if (this.value != entry) {\n this.value = entry;\n this.onValueChange(this.value);\n }\n });\n }\n\n /**\n * Reset the input's text and sets the value to null as to invalidate the input\n */\n protected reset = () => {\n this.value = '';\n this.values.next('');\n this.onValueChange(null);\n };\n\n /**\n * Set's the input's text's value and set the value to null as to invalidate the input\n * @param input text input\n */\n protected inputChange = (input: string) => {\n this.value = input;\n this.values.next(input);\n this.onValueChange(null);\n };\n\n /**\n * Returns the model's textual value using the display function display passed as callback. If there is no display, returns the model's default string value.\n * @param model the data's entry for which we want the textual value\n * */\n protected getModelDisplay = (model: any) => {\n return this.display ? this.display?.(model) : model;\n };\n\n /**\n * Start filtering the autocomplete's list based on the input's textual value\n */\n protected registerFilters = () => {\n this.filteredModelOptions = this.values.pipe(\n startWith(''),\n map((value) => this._filterModel(value! || -1)),\n map((values) => {\n return this.filters && this.filters[this.filterIndex].callback\n ? values.filter((r) => this.filters![this.filterIndex].callback!(r))\n : values;\n })\n );\n };\n\n /**\n * Increments the filter and focus the filtered input. It also sets the value to null as to force the user to choose a filtered value.\n * @param input the input in which the user should type\n */\n protected increment = (input: any) => {\n this.onValueChange(null);\n this.value = '';\n\n input.blur();\n\n const modulo = this.filters ? this.filters.length : 1;\n this.filterIndex = (this.filterIndex + 1) % modulo;\n\n setTimeout(() => {\n input.focus();\n }, 1000);\n };\n\n protected void = () => {};\n\n protected enableShowPanel = (input: any) => {\n //this.value = ' ';\n this.overrideShowResults = true;\n this.values.next(' ');\n\n input.focus();\n };\n\n protected disableShowPanel = () => {\n //this.searchSelect.setValue('', { emitViewToModelChange: false });\n this.overrideShowResults = false;\n };\n\n protected addFromText = (event: any) => {\n if (this.acceptText && this.value?.trim()) {\n const value = this.addCallback\n ? this.addCallback(this.value, this.addSubject)\n : this.value;\n if (this.addCallback && (value === null || value === undefined)) {\n this.value = '';\n return;\n }\n this.addSubject.next(value);\n }\n };\n\n private _filterModel = (value: number | string): any[] => {\n return typeof value == 'string'\n ? this._doFilterModelString(`${value}`)\n : this._doFilterModelInt(value);\n };\n\n private _doFilterModelInt = (id: number) => {\n const tmp = this.data?.find((r) => r.id == id);\n return tmp ? tmp : [];\n };\n\n private _doFilterModelString = (input: string) => {\n return this.data?.filter((r) => this._filterValues(r, input));\n };\n\n private _filterValues = (value: any, input: string) => {\n //Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\n if (input == ' ') return true;\n //Sinon, on ne renvoie true que pour les éléments qui matchent son input\n return `${this.getModelDisplay(value)}`\n .trim()\n .toLowerCase()\n .includes(input.trim().toLowerCase());\n };\n}\n","@if (predicate) {\n<div style=\"position: relative;\">\n <div style=\"position: relative;\">\n <input [matTooltip]=\"isDisabled ? '': (tooltip ? tooltip: 'Entrez un espace pour voir les choix disponibles')\"\n [chrAutofocus]=\"autofocus || false\" matTooltipPosition=\"above\" #input type=\"text\" name=\"{{name}}\"\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\"\n class=\"block input pt-2 pb-0.5 px-0 w-full text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\"\n placeholder=\"{{ placeholder || ' ' }}\" (keyup.backspace)=\"reset()\" [ngModel]=\"value\"\n (keyup.enter)=\"addFromText($event)\" (ngModelChange)=\"inputChange($event)\" [matAutocomplete]=\"auto\"\n (blur)=\"onTouch()\" (blur)=\"disableShowPanel()\" />\n\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\n label\n }}\n @if(label && label.trim() != ''){\n @if (required) {\n <span class=\"text-error\">*</span>\n }\n :\n }\n @if (\n isTouched && hasError()) {\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\n }\n </label>\n <ng-content></ng-content>\n <div\n class=\"absolute top-0.5 right-0 flex flex-row h-[calc(100%_-_2px)] justify-center content-center items-center align-middle overflow-hidden\">\n <mat-icon [@rotationAnimation]=\"overrideShowResults ? 'rotated' : 'initial'\" matTooltipPosition=\"above\"\n class=\"cursor-pointer\" (click)=\"enableShowPanel(input)\">\n arrow_right\n </mat-icon>\n @if (filters) {\n <span [matTooltip]=\"filters[filterIndex].tooltip || ''\" matTooltipPosition=\"above\"\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center \n align-middle items-center\" (click)=\"filters ? increment(input) : void()\">\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{ filters[filterIndex].display }}\n </p>\n </span>\n }\n </div>\n </div>\n <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id}}-auto\"\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"onValueChange($event.option.value)\">\n @for (model of filteredModelOptions | async; track model) {\n <mat-option class=\"\" [value]=\"model\" selected>\n {{ getModelDisplay(model) }}\n </mat-option>\n }\n </mat-autocomplete>\n @if (span != null) {\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\n }}\n </span>\n }\n</div>\n}","import {\n Component,\n Input,\n ViewChild,\n AfterViewInit,\n OnInit,\n OnDestroy,\n Injector,\n Optional,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteModule,\n} from '@angular/material/autocomplete';\nimport { Observable, startWith, map, BehaviorSubject, Subject } from 'rxjs';\nimport { MatOption } from '@angular/material/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { rotationAnimation } from '../animations/rotation.animation';\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\nimport { MatError } from '@angular/material/form-field';\nimport { IInputSearchFilter } from '../chr-search-select/chr-search-select.component';\nimport { AutofocusDirective } from '../directives/autofocus.directive';\n\n@Component({\n selector: 'app-chr-tag-select, [app-chr-tag-select]',\n templateUrl: './chr-tag-select.component.html',\n styleUrls: [\n './chr-tag-select.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n providers: [\n // {\n // provide: NG_VALUE_ACCESSOR,\n // multi: true,\n // useExisting: ChrTagSelectComponent,\n // },\n ],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MatTooltip,\n MatAutocompleteModule,\n MatChipsModule,\n MatOption,\n AsyncPipe,\n MatIconModule,\n MatError,\n CommonModule,\n MatError,\n AutofocusDirective,\n ],\n animations: [rotationAnimation(180, 90, 200)],\n})\nexport class ChrTagSelectComponent\n extends ChrBaseInputComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n public predicate: boolean = true;\n\n @ViewChild('auto') autocomplete!: MatAutocomplete;\n\n protected overrideShowResults: boolean = false;\n\n public filteredModelOptions?: Observable<any>;\n\n override value: any[] | null = null;\n\n protected textInputValue: string = '';\n\n private values: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n @Input() placeholder?: string;\n @Input() data: any[] | null = [];\n @Input() display?: (entry: any) => string;\n @Input() filters?: IInputSearchFilter[];\n /**\n * Callback that will be called on click of a chips. The entry will be passed as parameter.\n * If this callback returns null, the entry will be removed.\n * If this callback returns a different value (by reference (ex: different object)) the entry will be replaced by the new value.\n */\n @Input() editCallback?:\n | ((entry: any, subject: Subject<any>) => any | null | void)\n | null = null;\n //Subject used in callback methods to update the value when received.\n private editSubject: Subject<any> = new Subject();\n /**\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\n * If this callback returns null, the entry will NOT be added.\n * This lets you update the value before it's added.\n */\n @Input() addCallback?:\n | ((entry: any, subject: Subject<any>) => any | null | void)\n | null = null;\n //Subject used in callback methods to update the value when received.\n private addSubject: Subject<any> = new Subject();\n\n /**\n * Callback that will be called during the removal of the value. This will be called with the deleted value passed as parameter.\n */\n @Input() removeCallback: ((entry: any) => any | null | void) | null = null;\n\n /**\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\n * This defaults to false.\n * If there are neither data nor display function, this defaults to true.\n */\n @Input() acceptText: boolean | null = null;\n\n constructor(@Optional() ngControl: NgControl) {\n super(ngControl);\n this.type = 'tagSelect';\n }\n\n protected filterIndex: number = 0;\n\n override ngOnInit() {\n super.ngOnInit();\n this.registerFilters();\n if (this.acceptText === null)\n this.acceptText = this.display === null && this.data === null;\n\n //Register subject listeners\n this.addSubject.subscribe((entry) => {\n if (!this.value?.find((v) => v == entry)) {\n this.value = [...(this.value ?? []), entry];\n this.onValueChange(this.value);\n }\n });\n this.editSubject.subscribe((entry) => {\n const index = this.value?.indexOf(entry)!;\n this.value![index] = entry;\n this.value = [...(this.value ?? [])];\n return this.onValueChange(this.value);\n });\n }\n\n override writeValue(obj: any): void {\n super.writeValue(obj);\n }\n\n protected reset = () => {\n this.textInputValue = '';\n this.values.next(' ');\n };\n\n protected inputChange = (input: string) => {\n this.textInputValue = input;\n this.values.next(input);\n };\n\n protected getModelDisplay = (model: any) => {\n return this.display ? this.display?.(model) : model;\n };\n\n protected addFromText = (event: any) => {\n if (this.acceptText && this.textInputValue?.trim()) {\n const value = this.addCallback\n ? this.addCallback(this.textInputValue, this.addSubject)\n : this.textInputValue;\n if (this.addCallback && (value === null || value === undefined)) {\n this.textInputValue = '';\n return;\n }\n this.addSubject.next(value);\n }\n };\n\n protected add = (event: any) => {\n const value = this.addCallback\n ? this.addCallback(event, this.addSubject)\n : event;\n if (this.addCallback && (value === null || value === undefined)) {\n this.textInputValue = '';\n return;\n }\n\n this.textInputValue = '';\n this.addSubject.next(value);\n };\n\n protected edit = (entry: any) => {\n //If no callback, return;\n if (this.editCallback === undefined || this.editCallback === null) return;\n //Call the callback and retrive it's return value\n const res = this.editCallback(entry, this.editSubject);\n //If the callback returns null, we remove the value.\n if (res === null && this.value !== null) {\n this.remove(entry);\n }\n //If the callback returns a different value (different by reference (ex: different object)), we replace the edited entry by the returned entry.\n // if (entry != res) {\n return this.editSubject.next(res);\n // }\n // this.value![this.value!.indexOf(entry)] = entry;\n // return this.onValueChange(this.value);\n };\n\n protected remove(value: any): void {\n if (this.value !== null) this.value = this.value?.filter((v) => v != value);\n if (this.value?.length === 0) this.value = null;\n this.onValueChange(this.value);\n this.removeCallback?.(value);\n }\n\n protected registerFilters = () => {\n this.filteredModelOptions = this.values.pipe(\n startWith(''),\n map((value) => this._filterModel(this.textInputValue || -1)),\n map((values) => {\n return this.filters && this.filters[this.filterIndex].callback\n ? values.filter((r) => this.filters![this.filterIndex].callback!(r))\n : values;\n })\n );\n };\n\n protected increment = (input: any) => {\n this.textInputValue = '';\n\n input.blur();\n\n const modulo = this.filters ? this.filters.length : 1;\n this.filterIndex = (this.filterIndex + 1) % modulo;\n\n input.focus();\n };\n\n protected void = () => {};\n\n protected enableShowPanel = (input: any) => {\n this.overrideShowResults = true;\n this.textInputValue = ' ';\n this.values.next(' ');\n\n input.focus();\n };\n\n protected disableShowPanel = () => {\n this.overrideShowResults = false;\n };\n\n protected getTooltip = () => {\n if (this.isDisabled) return '';\n if (this.display === undefined)\n return \"Appuyez sur 'Enter' pour ajouter la valeur du champs à la liste\";\n return 'Entrez un espace pour voir les choix disponibles';\n };\n\n private _filterModel = (value: number | string): any[] => {\n return typeof value == 'string'\n ? this._doFilterModelString(`${value}`)\n : this._doFilterModelInt(value);\n };\n\n private _doFilterModelInt = (id: number) => {\n const tmp = this.data?.find((r) => r.id == id);\n return tmp ? tmp : [];\n };\n\n private _doFilterModelString = (input: string) => {\n return this.data?.filter((r) => this._filterValues(r, input));\n };\n\n private _filterValues = (value: any, input: string) => {\n //Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\n if (input == ' ') return true;\n //Sinon, on ne renvoie true que pour les éléments qui matchent son input\n return `${this.getModelDisplay(value)}`\n .trim()\n .toLowerCase()\n .includes(input.trim().toLowerCase());\n };\n}\n","@if (predicate) {\n<div style=\"position: relative;\">\n <div style=\"position: relative;\">\n <input [matTooltip]=\"isDisabled ? '': (tooltip ? tooltip: 'Entrez un espace pour voir les choix disponibles')\"\n [matChipInputFor]=\"chipGrid\" matTooltipPosition=\"above\" #input type=\"text\" name=\"{{name}}\"\n [chrAutofocus]=\"autofocus || false\" [ngClass]=\"(isTouched && hasError()) ? 'error':''\"\n class=\"block input pt-2 pb-0.5 px-0 w-full text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\"\n placeholder=\"{{ placeholder || ' ' }}\" (keyup.backspace)=\"reset()\" (keyup.enter)=\"addFromText($event)\"\n [ngModel]=\"textInputValue\" (ngModelChange)=\"inputChange($event)\" [matAutocomplete]=\"auto\" (blur)=\"onTouch()\"\n (blur)=\"disableShowPanel()\" />\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\n label\n }}\n @if(label && label.trim() != ''){\n @if (required) {\n <span class=\"text-red-500\">*</span>\n }\n :\n }\n @if (\n isTouched && hasError()) {\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\n }\n </label>\n <ng-content></ng-content>\n <div *ngIf=\"data && data.length > 0\"\n class=\"absolute top-1.5 right-0 flex flex-row justify-center content-center items-center align-middle overflow-hidden\">\n <mat-icon [@rotationAnimation]=\"overrideShowResults ? 'rotated' : 'initial'\" matTooltipPosition=\"above\"\n class=\"cursor-pointer\" (click)=\"enableShowPanel(input)\">\n arrow_right\n </mat-icon>\n @if (filters) {\n <span [matTooltip]=\"filters[filterIndex].tooltip || ''\" matTooltipPosition=\"above\"\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center \n align-middle items-center\" (click)=\"filters ? increment(input) : void()\">\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{ filters[filterIndex].display }}\n </p>\n </span>\n }\n </div>\n </div>\n <mat-chip-grid #chipGrid class=\"w-full margin-0\">\n @for (entry of value ?? []; track entry) {\n <mat-chip-row (removed)=\"remove(entry)\">\n <div (click)=\"edit(entry)\">{{getModelDisplay(entry)}}</div>\n <button matChipRemove [attr.aria-label]=\"'Supprimer ' + getModelDisplay(entry)\">\n <mat-icon class=\"mat-chip-icon\">cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id}}-auto\"\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"add($event.option.value)\">\n @for (model of filteredModelOptions | async; track model) {\n <mat-option class=\"\" [value]=\"model\" selected>\n {{ getModelDisplay(model) }}\n </mat-option>\n }\n </mat-autocomplete>\n @if (span != null) {\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\n }}\n </span>\n }\n</div>\n}","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-color-input',\r\n imports: [\r\n CommonModule,\r\n MatIcon,\r\n FormsModule,\r\n MatError,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n // providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrColorInputComponent),\r\n // multi: true,\r\n // },\r\n // ],\r\n templateUrl: './chr-color-input.component.html',\r\n styleUrls: [\r\n './chr-color-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class ChrColorInputComponent\r\n extends ChrBaseInputComponent\r\n implements OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl) {\r\n super(ngControl);\r\n this.type = 'color';\r\n }\r\n\r\n parseColor = (event: string) => {\r\n // On récupère la valeur de l'input\r\n this.value = event;\r\n\r\n if (/^#[0-9A-F]{6}$/i.test(event)) this.onValueChange(event);\r\n else this.onValueChange(null);\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input [required]=\"required\" class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n (ngModelChange)=\"parseColor($event)\" [type]=\"type\" [id]=\"name\" [name]=\"name ?? ''\" placeholder=\" \"\r\n [chrAutofocus]=\"autofocus || false\" [value]=\"value || ''\"\r\n class=\"block input pt-1 pb-0.5 m-0 px-0 w-full height-normalized border-0 border-b-2 focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n <div class=\"color-text-input-container\">\r\n <input type=\"text\" max=\"6\" [ngModel]=\"value ?? '#000000'\" (ngModelChange)=\"parseColor($event)\"\r\n style=\"background-color: var(--background-color); margin-bottom: 1px;\" class=\"focus:outline-none input bg-opacity-90 bg-transparent border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-20 px-1 text-center opacity-100 flex justify-center align-middle items-center\" />\r\n </div>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n ViewChild,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n DatePipe,\r\n} from '@angular/common';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-date-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n MatError,\r\n MatIcon,\r\n MatTooltipModule,\r\n CommonModule,\r\n FormsModule,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-date-input.component.html',\r\n styleUrls: [\r\n './chr-date-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrDateInputComponent),\r\n // multi: true,\r\n // },\r\n DatePipe,\r\n {\r\n provide: DATE_PIPE_DEFAULT_OPTIONS,\r\n useValue: { dateFormat: 'shortDate' },\r\n },\r\n ],\r\n})\r\nexport class ChrDateInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl, private datePipe: DatePipe) {\r\n super(ngControl);\r\n this.type = 'date';\r\n }\r\n\r\n override writeValue(obj: any): void {\r\n const formatted = this.dateToString(obj);\r\n this.value = formatted;\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n const parsed = this.parseDate(this.value);\r\n\r\n if (parsed !== null) this.value = this.dateToString(parsed);\r\n }\r\n\r\n onInputChange = (value: any) => {\r\n //console.log(`[DateInput] StringDate: `, value);\r\n const date = this.parseDate(value);\r\n //console.log(`[DateInput] ParsedDate: `, date);\r\n if (date != null) this.value = this.dateToString(date);\r\n // Si la date est invalide, on envoie le null, sinon on envoie l'objet date\r\n this.onValueChange(date);\r\n };\r\n\r\n parseDate = (event: string): Date | null => {\r\n // On récupère la valeur de l'input\r\n this.value = event;\r\n // On essaie de la convertir en date\r\n const date = new Date(Date.parse(event));\r\n // Si la date est valide, on retourne la date, sinon null.\r\n if (date instanceof Date && !isNaN(date as any)) return date;\r\n else return null;\r\n };\r\n\r\n dateToString = (value: Date) => {\r\n return this.datePipe.transform(value, 'yyyy-MM-dd');\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input [required]=\"required\" class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n [chrAutofocus]=\"autofocus || false\" (ngModelChange)=\"onInputChange($event)\" [type]=\"type\" [id]=\"name\"\r\n [name]=\"name ?? ''\" placeholder=\" \" [value]=\"value || ''\"\r\n class=\"block input pt-1.5 px-0 w-full height-normalized text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Self,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n} from '@angular/forms';\r\nimport {\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n DatePipe,\r\n} from '@angular/common';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-datetime-input',\r\n imports: [\r\n CommonModule,\r\n MatIcon,\r\n MatError,\r\n FormsModule,\r\n MatTooltip,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-datetime-input.component.html',\r\n styleUrls: [\r\n './chr-datetime-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrDatetimeInputComponent),\r\n // multi: true,\r\n // },\r\n DatePipe,\r\n {\r\n provide: DATE_PIPE_DEFAULT_OPTIONS,\r\n useValue: { dateFormat: 'shortDate' },\r\n },\r\n ],\r\n})\r\nexport class ChrDatetimeInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl, private datePipe: DatePipe) {\r\n super(ngControl);\r\n this.type = 'date';\r\n }\r\n\r\n override writeValue(obj: any): void {\r\n const formatted = this.dateToString(obj);\r\n this.value = formatted;\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n const parsed = this.parseDate(this.value);\r\n\r\n if (parsed !== null) this.value = this.dateToString(parsed);\r\n }\r\n\r\n onInputChange = (value: any) => {\r\n const date = this.parseDate(value);\r\n\r\n if (date != null) this.value = this.dateToString(date);\r\n\r\n this.onValueChange(date);\r\n };\r\n\r\n parseDate = (event: string): Date | null => {\r\n // On récupère la valeur de l'input\r\n this.value = event;\r\n // On essaie de la convertir en date\r\n const date = new Date(Date.parse(event));\r\n // Si la date est valide, on propage le onChange jusqu'au formulaire\r\n if (date instanceof Date && !isNaN(date as any)) return date;\r\n else return null;\r\n };\r\n\r\n dateToString = (value: Date) => {\r\n return this.datePipe.transform(value, 'yyyy-MM-ddTHH:mm');\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input [required]=\"required\" class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n [chrAutofocus]=\"autofocus || false\" (ngModelChange)=\"onInputChange($event)\" type=\"datetime-local\" [id]=\"name\"\r\n [name]=\"name ?? ''\" placeholder=\" \" [value]=\"value || ''\"\r\n class=\"block input pt-1.5 px-0 w-full height-normalized text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error \">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">\r\n {{ span }}\r\n </span>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-toggle-input',\r\n imports: [\r\n FormsModule,\r\n CommonModule,\r\n MatError,\r\n MatIcon,\r\n MatTooltip,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-toggle-input.component.html',\r\n styleUrls: [\r\n './chr-toggle-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrToggleInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n})\r\nexport class ChrToggleInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl) {\r\n super(ngControl);\r\n this.type = 'toggle';\r\n }\r\n\r\n toggle = (event: any) => {\r\n //console.log(event, event.target.checked);\r\n this.value = event.target.checked;\r\n this.onValueChange(this.value);\r\n };\r\n}\r\n","<div class=\"height-normalized\" style=\"position: relative;\">\r\n <input #tgl type=\"checkbox\" class=\"hidden checkbox\" placeholder=\" \" [checked]=\"value\" (change)=\"toggle($event)\" />\r\n <div\r\n class=\"input pt-1.5 pb-0.5 px-0 w-full height-normalized relative toggle-wrapper flex align-middle input bg-transparent border-0 border-b-2 focus:outline-none focus:ring-0 peer/inputs\">\r\n <div (click)=\"tgl?.click()\" [chrAutofocus]=\"autofocus || false\" class=\"relative input toggle\">\r\n </div>\r\n </div>\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import { Injectable } from '@angular/core';\r\nimport {\r\n Observable,\r\n of,\r\n tap,\r\n Subject,\r\n BehaviorSubject,\r\n from,\r\n mergeMap,\r\n toArray,\r\n} from 'rxjs';\r\nimport { IFile } from '../models/file';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileService {\r\n constructor() {}\r\n\r\n public fileToBase64 = (file: File): Observable<IFile> => {\r\n return this.toBase64({\r\n file: file,\r\n url: window.URL.createObjectURL(file),\r\n });\r\n };\r\n\r\n public toBase64 = (file: IFile): Observable<IFile> => {\r\n return new Observable<IFile>((observer) => {\r\n const reader = new FileReader();\r\n const indexOfExtension = file?.file?.name.lastIndexOf('.');\r\n if (!indexOfExtension || indexOfExtension === -1)\r\n throw '[FileInput] Invalid file name: no file extension found.';\r\n reader.onloadend = () => {\r\n var [name, extension] = [\r\n ...(file?.file\r\n ? [\r\n file.file.name.slice(0, indexOfExtension),\r\n // +1 As to not include the dot\r\n file.file.name.slice(indexOfExtension + 1),\r\n ]\r\n : [null, null]),\r\n ];\r\n file = {\r\n ...file,\r\n name: name ?? undefined,\r\n data: reader.result as string,\r\n extension: extension ?? undefined,\r\n url: window.URL.createObjectURL(file.file!),\r\n };\r\n observer.next(file);\r\n observer.complete();\r\n };\r\n reader.onerror = (error) => {\r\n observer.error(error);\r\n };\r\n if (file.file) reader.readAsDataURL(file.file);\r\n });\r\n };\r\n\r\n public toBase64WithProgress = (\r\n file: IFile\r\n ): Observable<{ progress: number; file?: IFile }> => {\r\n return new Observable<{ progress: number; file?: IFile }>((observer) => {\r\n const reader = new FileReader();\r\n // Taille d'un chunk (90 Ko)\r\n // DOIT ETRE UN MULTIPLE DE 3\r\n // pour des raisons d'encodage Base64\r\n const chunkSize = 1024 * 90;\r\n const totalSize = file?.file?.size ?? 0;\r\n // Position\r\n let offset = 0;\r\n let base64Data = '';\r\n\r\n const indexOfExtension = file?.file?.name.lastIndexOf('.');\r\n if (!indexOfExtension || indexOfExtension === -1) {\r\n observer.error(\r\n '[FileService] Invalid file name: no file extension found.'\r\n );\r\n return;\r\n }\r\n\r\n const [name, extension] = [\r\n file.file!.name.slice(0, indexOfExtension),\r\n file.file!.name.slice(indexOfExtension + 1),\r\n ];\r\n\r\n file = {\r\n ...file,\r\n name: name ?? undefined,\r\n extension: extension ?? undefined,\r\n url: window.URL.createObjectURL(file.file!),\r\n };\r\n\r\n const readChunk = () => {\r\n const chunk = file.file!.slice(offset, offset + chunkSize);\r\n reader.readAsDataURL(chunk);\r\n };\r\n\r\n reader.onload = (event: any) => {\r\n const result = event.target.result as string;\r\n // Retire l'entête qui est rajoutée à chaque lecture\r\n const base64Chunk = result.split(',')[1];\r\n base64Data += base64Chunk;\r\n\r\n offset += chunkSize;\r\n const progress = Math.min(Math.round((offset / totalSize) * 100), 100);\r\n\r\n observer.next({ progress, file });\r\n\r\n if (offset < totalSize) {\r\n readChunk();\r\n } else {\r\n // On termine l'encodage en rajoutant les métadata et en mettant à jour la dataurl\r\n file.data = `data:${file.file!.type};base64,${base64Data}`;\r\n file.url = window.URL.createObjectURL(file.file!);\r\n observer.next({ progress: 100, file });\r\n observer.complete();\r\n }\r\n };\r\n\r\n reader.onerror = (error) => {\r\n console.log('[FileService] Error:', error);\r\n observer.error(error);\r\n };\r\n\r\n // Démarrer la lecture des chunks\r\n if (file.file) {\r\n readChunk();\r\n } else {\r\n observer.error('[FileService] No file provided.');\r\n }\r\n });\r\n };\r\n\r\n public batchToBase64 = (files: IFile[]): Observable<IFile[]> => {\r\n return from(files).pipe(\r\n mergeMap((file) => this.toBase64(file)),\r\n toArray()\r\n );\r\n };\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, Subject, timer, BehaviorSubject } from \"rxjs\";\r\nimport { concatMap, finalize, switchMap, takeUntil } from \"rxjs/operators\";\r\n\r\nexport interface Toast {\r\n\ttype: \"error\" | \"success\" | \"warning\";\r\n\tmessage: string;\r\n\tduration?: number;\r\n}\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class ToastService {\r\n\tprivate toastQueue = new Subject<Toast>();\r\n\tprivate currentToastSubject = new BehaviorSubject<Toast | null>(null);\r\n\tpublic currentToast$ = this.currentToastSubject.asObservable();\r\n\tprivate toastCloseSubject = new Subject<void>();\r\n\tprivate default_duration = 5000;\r\n\r\n\tconstructor() {\r\n\t\t//We are leveraging the power of RXJS to handle the delay between the\r\n\t\tthis.toastQueue\r\n\t\t\t.pipe(\r\n\t\t\t\tconcatMap((toast: Toast) => {\r\n\t\t\t\t\t//We reset the click subject to ensure rxjs doesn't beleive it's been clicked\r\n\t\t\t\t\tthis.toastCloseSubject = new Subject<void>();\r\n\t\t\t\t\t// We send the next toast\r\n\t\t\t\t\tthis.currentToastSubject.next(toast);\r\n\t\t\t\t\treturn timer(toast.duration || this.default_duration).pipe(\r\n\t\t\t\t\t\t//If the user click the next button, we stop the current emission and go to the next one\r\n\t\t\t\t\t\ttakeUntil(this.toastCloseSubject),\r\n\t\t\t\t\t\t//After the toast duration, we send a null value. If there is still a toast waiting, this null value will be overriden after the small delay.\r\n\t\t\t\t\t\t//Otherwise this null value allows us to notify the subscriber that there is no toast waiting.\r\n\t\t\t\t\t\tfinalize(() => {\r\n\t\t\t\t\t\t\tthis.currentToastSubject.next(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t//Small delay between toasts\r\n\t\t\t\t\t\tswitchMap(() => timer(500))\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\tpublic current = (): Observable<Toast | null> => {\r\n\t\treturn this.currentToastSubject;\r\n\t};\r\n\r\n\tpublic next = () => {\r\n\t\tthis.toastCloseSubject.next();\r\n\t};\r\n\r\n\tpublic setSuccess(message?: string, time?: number) {\r\n\t\tthis.set(\"success\", message || \"\", time);\r\n\t}\r\n\r\n\tpublic setError(message: string, time?: number) {\r\n\t\tthis.set(\"error\", message, time);\r\n\t}\r\n\r\n\tpublic setWarning(message: string, time?: number) {\r\n\t\tthis.set(\"warning\", message, time);\r\n\t}\r\n\r\n\tprivate set = async (\r\n\t\ttype: \"warning\" | \"error\" | \"success\",\r\n\t\tmessage: string,\r\n\t\tduration?: number\r\n\t) => {\r\n\t\tthis.toastQueue.next({\r\n\t\t\ttype: type,\r\n\t\t\tmessage: message,\r\n\t\t\tduration: duration || this.default_duration,\r\n\t\t});\r\n\t};\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FileService } from '../../services/files.service';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { catchError, forkJoin, Observable, skipWhile, take } from 'rxjs';\r\nimport { IFile } from '../../models/file';\r\nimport { ToastService } from '../../services/toast.service';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-file-input',\r\n imports: [\r\n MatIcon,\r\n CommonModule,\r\n FormsModule,\r\n MatError,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-file-input.component.html',\r\n styleUrls: [\r\n './chr-file-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrFileInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n})\r\nexport class ChrFileInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n @Input() accept: string[] = [];\r\n\r\n @Input() multiple: boolean = false;\r\n\r\n valueDisplay: string | null = null;\r\n\r\n @Input() editable: boolean = false;\r\n\r\n public errors: { [index: number]: boolean } | null = null;\r\n\r\n public files: Observable<{ progress: number; file?: IFile }>[] = [];\r\n\r\n constructor(\r\n @Optional() ngControl: NgControl,\r\n private fileService: FileService,\r\n private toastService: ToastService\r\n ) {\r\n super(ngControl);\r\n }\r\n\r\n override writeValue(obj: any | any[]): void {\r\n if (!obj) {\r\n this.valueDisplay = '';\r\n return;\r\n }\r\n if (Array.isArray(obj)) {\r\n const tmp = obj.map((f) => {\r\n return `${f.name}.${f.extension}`;\r\n });\r\n this.valueDisplay = tmp.join(',');\r\n } else this.valueDisplay = `${obj.name}.${obj.extension}`;\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.valueChanges\r\n .pipe(skipWhile((res) => res === null))\r\n .subscribe((res) => this.writeValue(res));\r\n this.control?.statusChanges?.subscribe((status) => {\r\n this.errors = this.control?.errors\r\n ? { ...this.control.errors['indexes'] }\r\n : null;\r\n });\r\n }\r\n\r\n protected onFileChange = (event: any) => {\r\n this.files = [];\r\n const files = event.target.files;\r\n const filesAsync = [];\r\n if (files.length <= 0) {\r\n this.valueDisplay = '';\r\n this.onValueChange(null);\r\n }\r\n for (const file of files) {\r\n const obs = this.fileService.toBase64WithProgress({\r\n file: file,\r\n url: window.URL.createObjectURL(file),\r\n });\r\n this.files = [...this.files, obs];\r\n filesAsync.push(obs);\r\n obs.pipe(\r\n catchError((err, source) => {\r\n this.toastService.setWarning(\r\n `Une erreur s'est produite pendant le téléchargement du fichier ${file.name} `\r\n );\r\n return err;\r\n })\r\n );\r\n }\r\n\r\n forkJoin(filesAsync)\r\n .pipe(take(1))\r\n .subscribe((res) => {\r\n const value = res.map((r) => r.file);\r\n this.onValueChange(this.multiple ? value : value[0]);\r\n this.writeValue(res.map((r) => r.file));\r\n });\r\n };\r\n\r\n protected acceptToString = () => {\r\n return this.accept?.map((type) => `.${type}`).join(', ') || '.*';\r\n };\r\n\r\n protected getToAccept = () => {\r\n return this.accept?.map((s) => s.toLocaleUpperCase()).join(', ');\r\n };\r\n\r\n protected changeFileName = (event: any, file?: IFile) => {\r\n if (!file) return;\r\n file.name = event.target.outerText?.trim();\r\n };\r\n\r\n protected openFile = (index: number, file?: IFile) => {\r\n forkJoin(this.files)\r\n .pipe(take(1))\r\n .subscribe((res) => {\r\n window.open(res[index].file!.url!, '_blank');\r\n });\r\n };\r\n\r\n protected removeFile = (index: number, file?: IFile) => {\r\n this.files.splice(index, 1);\r\n if (this.files.length <= 0) this.onValueChange(null);\r\n forkJoin(this.files)\r\n .pipe(take(1))\r\n .subscribe((files) => {\r\n const values = files.map((f) => f.file);\r\n this.onValueChange(this.multiple ? values : values[0]);\r\n });\r\n };\r\n}\r\n","<div class=\"\">\r\n <div style=\"position: relative;\" class=\"cursor-pointer\" (click)=\"finput.click()\" (click)=\"onTouch($event)\">\r\n <div class=\"absolute top-1 right-0 flex flex-row justify-center content-center items-center align-middle overflow-hidden opacity-100 bg-opacity-100\"\r\n style=\"background-color: inherit; opacity: 1;\">\r\n <mat-icon class=\"cursor-pointer rounded-full\"\r\n *ngIf=\"!errors && (files[0] | async)?.progress != 100\">add</mat-icon>\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--primary-color)\"\r\n *ngIf=\"!errors && (files[0] | async)?.progress == 100\">check</mat-icon>\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--error-color)\"\r\n *ngIf=\"errors !== null\">close</mat-icon>\r\n <div class=\"border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-100 flex justify-center \r\n align-middle items-center\" style=\"border-color: var(--neutral-color);\">\r\n {{getToAccept()}}\r\n </div>\r\n </div>\r\n <input class=\"relative input\" type=\"file\" class=\"hidden\" [attr.multiple]=\"multiple\" #finput\r\n [chrAutofocus]=\"autofocus || false\" [accept]=\"acceptToString()\" (change)=\"onFileChange($event)\" />\r\n <input class=\"relative input height-normalized\" [ngClass]=\"(isTouched && hasError()) ? 'error':''\" [id]=\"id\"\r\n [name]=\"name!\" placeholder=\" \" [ngModel]=\"valueDisplay\" disabled\r\n class=\"block input pt-1.5 m-0 mr-4 px-0 w-full overflow-hidden text-ellipsis bg-transparent border-0 border-b-2 focus:outline-none focus:ring-0 peer/inputs file:hidden\" />\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n <div *ngIf=\"files[0] | async as conversion\" class=\"progress-border border-t-2\"\r\n [style.width]=\"conversion.progress + '%'\" [ngClass]=\"{\r\n 'border-ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'border-finished': conversion.progress === 100,\r\n 'border-error': errors !== null && errors[0] !== undefined\r\n }\">\r\n <span *ngIf=\"!multiple && (conversion.progress < 100)\">{{conversion.progress}}%</span>\r\n </div>\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n </div>\r\n <div *ngIf=\"multiple === true && files.length > 0\" class=\"shadow-lg drop-shadow-lg pt-2 border-x-2 border-b-2\">\r\n @for(file of files; track file; let index = $index){\r\n <ng-container *ngIf=\"file | async as conversion \">\r\n <div class=\"progress-bar shadow-lg drop-shadow-lg\">\r\n <div class=\"progress\" [style.width]=\"conversion.progress + '%'\" [ngClass]=\"{\r\n 'ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'finished': !errors?.[index] && conversion.progress === 100,\r\n 'error': errors?.[index] === true\r\n }\"></div>\r\n <div class=\"progress-text-wrapper\">\r\n <span class=\"progress-text\" (input)=\"changeFileName($event, conversion.file)\"\r\n [attr.contenteditable]=\"editable\">{{conversion.file?.name}}</span>\r\n <div class=\"progress-icon-wrapper\">\r\n <span>{{conversion.progress}}%</span>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n (click)=\"openFile(index, conversion.file)\">visibility</mat-icon>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n (click)=\"removeFile(index, conversion.file)\">delete</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n</div>","import {\r\n AfterContentChecked,\r\n AfterViewChecked,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-textarea-input',\r\n imports: [\r\n CommonModule,\r\n MatIcon,\r\n FormsModule,\r\n MatError,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrTextareaInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n templateUrl: './chr-textarea-input.component.html',\r\n styleUrls: [\r\n './chr-textarea-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class ChrTextareaInputComponent\r\n extends ChrBaseInputComponent\r\n implements\r\n OnInit,\r\n AfterViewInit,\r\n OnDestroy,\r\n AfterViewChecked,\r\n AfterContentChecked\r\n{\r\n @ViewChild('input') input: ElementRef | null = null;\r\n\r\n constructor(@Optional() ngControl: NgControl) {\r\n super(ngControl);\r\n this.type = 'textArea';\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n // console.log('AfterViewInit', this.input);\r\n // this.resize(this.input?.nativeElement as HTMLTextAreaElement | undefined);\r\n }\r\n\r\n ngAfterContentChecked(): void {\r\n // console.log('AfterContentChecked', this.input);\r\n this.resize(this.input?.nativeElement as HTMLTextAreaElement | undefined);\r\n // this.resize(this.input as any);\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n // console.log('AfterViewChecked', this.input);\r\n //this.resize(this.input as any);\r\n }\r\n\r\n //On input, we resize the textarea so that it's always readable\r\n public resize = (textArea?: HTMLTextAreaElement) => {\r\n if (textArea === undefined) return;\r\n // For some reason, it needs to have 2px more than the intended height.\r\n textArea.style.height = '34px';\r\n textArea.style.height = `${textArea.scrollHeight}px`;\r\n };\r\n\r\n preventSubmit = (event: Event) => {\r\n event.stopPropagation();\r\n };\r\n}\r\n","<div style=\"position: relative;\" (keyup.enter)=\"preventSubmit($event)\">\r\n <textarea #input [required]=\"required\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\" required=\"true\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" (input)=\"resize(input)\" [ngModel]=\"value\"\r\n (ngModelChange)=\"onValueChange($event || null)\" [chrAutofocus]=\"autofocus || false\"\r\n class=\"no-scrollbar input !resize-none height-normalized block pt-1.5 px-0 w-full text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\"></textarea>\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import { Directive, HostListener, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tab-input-only]',\r\n standalone: true,\r\n})\r\nexport class TabToInputHandlerDirective {\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('keydown', ['$event'])\r\n handleTab(event: KeyboardEvent): void {\r\n if (event.key === 'Tab') {\r\n event.preventDefault();\r\n const inputs = Array.from(\r\n document.querySelectorAll<HTMLInputElement | HTMLTextAreaElement>(\r\n 'input:not([type=\"checkbox\"]), textarea'\r\n )\r\n );\r\n\r\n const currentIndex = inputs.indexOf(event.target as HTMLInputElement);\r\n if (currentIndex !== -1) {\r\n const nextElement = inputs[currentIndex + (event.shiftKey ? -1 : 1)];\r\n if (nextElement) {\r\n nextElement.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnInit,\n ElementRef,\n} from '@angular/core';\nimport { ReactiveFormsModule, FormsModule, ValidatorFn } from '@angular/forms';\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\nimport { MatError } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ChrSearchSelectComponent } from '../chr-search-select/chr-search-select.component';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n DatePipe,\n CommonModule,\n DATE_PIPE_DEFAULT_OPTIONS,\n} from '@angular/common';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TypeValidatorDirective } from '../models/chr-validators/type-validator';\nimport { ChrTagSelectComponent } from '../chr-tag-select/chr-tag-select.component';\nimport { ChrBaseInputComponent } from './chr-base-input/chr-base-input.component';\nimport { getValidators } from '../models/chr-validators/base-validator';\nimport { ChrColorInputComponent } from './chr-color-input/chr-color-input.component';\nimport { ChrDateInputComponent } from './chr-date-input/chr-date-input.component';\nimport { ChrDatetimeInputComponent } from './chr-datetime-input/chr-datetime-input.component';\nimport { ChrToggleInputComponent } from './chr-toggle-input/chr-toggle-input.component';\nimport { ChrFileInputComponent } from './chr-file-input/chr-file-input.component';\nimport { IControl, InputType } from '../models/controls';\nimport { ChrTextareaInputComponent } from './chr-textarea-input/chr-textarea-input.component';\nimport { ChrMultiFileInputComponent } from './chr-multi-file-input/chr-multi-file-input.component';\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\n\nexport interface IFormSection {\n title?: string;\n controls: IControl[];\n}\n\n@Component({\n selector: 'app-chr-form',\n templateUrl: './chr-form.component.html',\n styleUrls: [\n './chr-form.component.scss',\n '../../../../../tailwindbuild.css',\n './chr-form.component.scss',\n ],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MatTooltipModule,\n MatIconModule,\n MatSlideToggleModule,\n ChrTagSelectComponent,\n MatAutocompleteModule,\n CommonModule,\n MatTabsModule,\n ChrBaseInputComponent,\n ChrColorInputComponent,\n ChrDateInputComponent,\n ChrDatetimeInputComponent,\n ChrToggleInputComponent,\n ChrFileInputComponent,\n ChrSearchSelectComponent,\n ChrTextareaInputComponent,\n TabToInputHandlerDirective,\n ],\n providers: [\n DatePipe,\n {\n provide: DATE_PIPE_DEFAULT_OPTIONS,\n useValue: { dateFormat: 'shortDate' },\n },\n ],\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ChrFormComponent implements OnInit {\n @Input() sections?: IFormSection[];\n @Input() controls?: IControl[];\n @Input() validators?: ValidatorFn | ValidatorFn[] | null = null;\n\n @Input() valid?: boolean;\n @Output() validChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Input() model: any = null;\n @Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n\n @Input() disabled?: boolean;\n @Output() valuesChanges: EventEmitter<any> = new EventEmitter();\n\n @Input() submit?: Function;\n\n @Input() compact: boolean = false;\n\n @Input() debounceTime: number | null = null;\n\n @Output() formChange: EventEmitter<{ [key: string]: any }> =\n new EventEmitter<{ [key: string]: any }>();\n\n @Output() valueChanges: EventEmitter<{ [name: string]: any }> =\n new EventEmitter();\n\n @Input() tabDisplay: boolean = false;\n\n public formControls: { [key: string]: FormControl } = {};\n\n /**\n * The related ReactiveForm of the form group. This is exposed to allow form extension and usage of custom form controls while still maintaining centralised validation and validity\n */\n @Input() public form: FormGroup = this.builder.group({});\n @Output() public formChanges: EventEmitter<FormGroup | null> =\n new EventEmitter();\n\n private values: { [key: string]: any } = {};\n private controlTypes: { [key: string]: InputType } = {};\n private flattenedControls: { [key: string]: IControl } = {};\n private flattenedShownControl: { [key: string]: IControl } = {};\n private flattenedHiddenControls: { [key: string]: IControl } = {};\n public initialized: boolean = false;\n\n constructor(\n private builder: FormBuilder,\n private changeDetector: ChangeDetectorRef,\n private element: ElementRef\n ) {\n if (this.controls != null && this.sections != null)\n throw new Error(\n \"You can't use both controls and sections in the same form\"\n );\n }\n\n ngOnInit(): void {\n this.sections\n ?.map((s) => s.controls)\n .flat()\n .concat(this.controls ?? [])\n .forEach((s) => (this.flattenedControls[s.name] = s));\n\n for (const key in this.flattenedControls) {\n const control = this.flattenedControls[key];\n if (control.type === 'hidden')\n this.flattenedHiddenControls[key] = control;\n else this.flattenedShownControl[key] = control;\n }\n this.form = new FormGroup({}, { validators: this.validators });\n\n this.initModel();\n this.initValues();\n this.initControls();\n this.initListeners();\n this.initialized = true;\n\n this.formChanges.emit(this.form);\n }\n\n private initModel = () => {\n if (this.model === null) this.model = {};\n\n for (const key in this.flattenedControls) {\n const control = this.flattenedControls[key];\n if (this.model[key] === null || this.model[key] === undefined)\n this.model[key] = control.value;\n }\n };\n\n private initValues = () => {\n for (const key in this.flattenedControls) {\n if (this.values[key] === null || this.values[key] === undefined)\n this.values[key] = this.model[key];\n }\n };\n\n private initControls = () => {\n for (const key in this.flattenedShownControl) {\n const control = this.flattenedShownControl[key];\n const validators = getValidators(control.validations);\n this.initializeControl(\n control,\n new FormControl(this.values[key], validators)\n );\n }\n this.valid = this.form.valid;\n };\n\n private initListeners = () => {\n this.form.valueChanges.subscribe((values) => {\n this.form.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n this.valid = this.form.valid;\n this.validChange.emit(this.valid);\n });\n };\n\n /**\n * Methods that returns the FormControl for the given input. If no FormControl is found, return null.\n * @param name input's name\n * @returns the FormControl whose name matches the parameter\n */\n public getControl = (name: string) => {\n if (name) return this.form.controls[name];\n return null;\n };\n\n /**\n * Focus the input for the user to start typing in.\n * @param name input's name\n */\n public focus = (name: string) => {\n const el = this.element.nativeElement.querySelector(\n `input[name=\"${name}\"]`\n ) as HTMLInputElement;\n this.getControl(name)?.markAsTouched();\n this.changeDetector.detectChanges();\n setTimeout(() => {\n el?.focus();\n }, 10);\n };\n\n /**\n * Returns the value of the input whose name matches the parameter input.\n * If no input name is provided, returns the value of the form.\n * @param input name of the input\n * @returns the value of the input\n */\n public value = (input?: string) => this.getValue(input);\n\n /**\n * Returns the value of the input whose name matches the parameter input.\n * If no input name is provided, returns the value of the form.\n * @param input name of the input\n * @returns the value of the input\n */\n public getValue = (input?: string) => {\n if (input) return this.form.controls[input]?.value;\n return this.form.value;\n };\n\n /**\n * Returns the validity of the input.\n * If no input is provided, returns the validity of the form.\n * @param input name of the input\n * @returns\n */\n public isValid = (input?: string) => {\n if (input) return this.form.get(input)?.valid;\n return this.valid;\n };\n\n /**\n * Update the value of a control WITHOUT triggering the modelChange event\n * @param key input key (control name)\n * @param value value to set\n */\n public setValue = (key: string, value: any) => {\n if (this.formControls[key] === undefined) {\n //console.log('[Form] Could not find control with the following name: ', key);\n return;\n }\n this.formControls[key].setValue(value, {\n emitEvent: false,\n emitModelToViewChange: true,\n });\n this.formControls[key].markAsTouched();\n this.model[key] = value;\n };\n\n /**\n * Update the value of the form's model WITHOUT triggering the modelChange event\n * @param model the model to set\n */\n public set = (model: any) => {\n for (const key in this.flattenedControls) {\n this.setValue(key, model[key]);\n }\n };\n\n /**\n * Updates the value of a control. This WILL trigger the modelChange event\n * @param key input key (control name)\n * @param value value to set\n */\n public patchValue = (key: string, value: any) => {\n this.setValue$(key, value);\n this.setModel$(key, value);\n };\n\n /**\n * Updates the value of the form's model. This WILL trigger the modelChange event once for each input\n * @param model model to set\n */\n public patch = (model: any) => {\n for (const key in this.flattenedControls) {\n this.patchValue(key, model[key]);\n }\n };\n\n /**\n * Methods that checks the validity of each input of the form and updates their status. If the markAsTouched parameter si set to true, it will also mark the inputs as touched\n * so that the validation errors may be displayed to the user.\n * @param markAsTouched Boolean that describes whether or not the inputs of the form will be marked as touched.\n */\n public checkValidity = (markAsTouched: boolean = true) => {\n for (const key in this.flattenedControls) {\n if (markAsTouched) {\n this.formControls[key]?.markAsTouched({\n onlySelf: false,\n emitEvent: true,\n });\n }\n this.formControls[key]?.updateValueAndValidity({\n onlySelf: false,\n emitEvent: true,\n });\n }\n\n this.form.updateValueAndValidity({ onlySelf: false, emitEvent: true });\n this.valid = this.form.valid;\n };\n\n /**\n * Here for compatibility. Same thing as checkValidity.\n */\n public updateValueAndValidity = this.checkValidity;\n\n /**\n * Resets the form.\n */\n public reset = () => {\n this.form.reset();\n };\n\n protected get = (control: IControl) => {\n return this.form.get([control.name]);\n };\n\n private setValue$ = (key: string, value: any) => {\n if (this.formControls[key] === undefined) {\n //console.log('[Form] Could not find control with the following name: ', key);\n return;\n }\n this.formControls[key].patchValue(value);\n this.formControls[key].markAsTouched();\n this.values[key] = value;\n };\n\n private setModel$ = (key: string, value: any) => {\n this.model[key] = value;\n };\n\n /**\n * Triggers the submit method and pass the local values as its parameters. The local values will contain the values of every input. Not just those that match de model's property (ex: like those provided by the modelChanges event).\n */\n public doSubmit = () => {\n this.checkValidity();\n if (this.valid && this.form.valid) this.submit?.(this.values);\n };\n\n protected log = (el: any) => {\n console.log(el);\n };\n\n protected initializeControl = (\n control: IControl,\n formControl: FormControl\n ) => {\n // Add the control to the internal map\n this.formControls[control.name] = formControl;\n //Register the onChange listener that will emit the events associated with the input's update\n this.formControls[control.name].valueChanges.subscribe((value) => {\n //We dispatch the single value change event with the value\n this.valueChanges.emit({ [control.name]: value });\n //We update the local values\n this.values[control.name] = value;\n //If the model has a property, we update it with the value\n if (Object.hasOwn(this.model, control.name)) {\n this.model![control.name] = value;\n //Dispatch the whole model change event\n this.modelChange.emit(this.model);\n }\n // Whether or not there is a matching property in the model, we update the local values\n this.values[control.name] = value;\n });\n this.controlTypes[control.name] = control.type;\n // Add the control to the formgroup\n this.form.addControl(control.name, formControl);\n };\n\n alert = (s: string) => {\n alert(s);\n };\n}\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2 w-full\">\n <form [formGroup]=\"form\" *ngIf=\"initialized\" tab-input-only>\n <ng-container *ngIf=\"!tabDisplay || !sections\" [ngTemplateOutlet]=\"singleTemplate\"\n [ngTemplateOutletContext]=\"{controls: controls}\">\n </ng-container>\n <ng-container *ngIf=\"!tabDisplay && sections\" [ngTemplateOutlet]=\"sectionTemplate\"\n [ngTemplateOutletContext]=\"{sections: sections}\">\n </ng-container>\n <ng-container *ngIf=\"tabDisplay && sections\" [ngTemplateOutlet]=\"tabsTemplate\"\n [ngTemplateOutletContext]=\"{sects: sections}\">\n </ng-container>\n </form>\n</div>\n\n<ng-template #tabsTemplate let-sections='sects'>\n <fieldset [disabled]=\"disabled\">\n <mat-tab-group>\n @for (section of sections; track section; let index = $index) {\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\" class=\"custom-tab\">\n <div *ngIf=\"initialized\" class=\"mt-4\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (ctrl of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <!-- <p class=\"bg-purple-600\">{{ctrl.name}} ({{formControls[ctrl.name].touched}}) ->\n {{formControls[ctrl.name].valid}} :\n {{formControls[ctrl.name].errors?.['required']}}\n </p> -->\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </fieldset>\n</ng-template>\n\n<ng-template #singleTemplate let-controls=\"controls\">\n <fieldset [disabled]=\"disabled\">\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of controls; track control; let index = $index; let last = $last) {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: last}\">\n </ng-container>\n }\n </div>\n\n </fieldset>\n</ng-template>\n\n<ng-template #sectionTemplate let-sections='sections'>\n <fieldset [disabled]=\"disabled\">\n @for (section of sections; track section; let index = $index) {\n <div>\n @if (section.title) {\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\n {{ section.title }}\n </h2>\n }\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n @if (index != (sections||[]).length - 1 && !compact) {\n <div class=\"py-4\">\n <hr class=\"\" />\n </div>\n }\n </div>\n }\n </fieldset>\n</ng-template>\n\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\n <div class=\"relative h-min mt-2\" [formGroup]=\"form\" [ngClass]=\"{\n 'sm:col-span-2': (control.width == 'row' && !compact) || control.type=='textArea' && compact && control.width != 'row',\n 'sm:row-span-2': control.type == 'file' && control.multiple===true,\n 'sm:col-span-4': control.width =='row' && compact,\n }\" (keyup.enter)=\"last && this.doSubmit()\">\n @if (control.type=='searchSelect') {\n <app-chr-search-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\" [filters]=\"control.filters\"\n [debounceTime]=\"debounceTime\" [data]=\"control.data || []\" [addCallback]=\"control.addCallback\"\n [autofocus]=\"control?.autofocus\" [acceptText]=\"control.acceptText\"\n [validations]=\"control.validations\"></app-chr-search-select>\n }\n @if (control.type=='tagSelect') {\n <app-chr-tag-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [editCallback]=\"control.editCallback\" [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\"\n [debounceTime]=\"debounceTime\" [filters]=\"control.filters\" [data]=\"control.data || []\"\n [editCallback]=\"control.editCallback\" [addCallback]=\"control.addCallback\"\n [removeCallback]=\"control.removeCallback\" [validations]=\"control.validations\" [autofocus]=\"control?.autofocus\"\n [acceptText]=\"control.acceptText\"></app-chr-tag-select>\n }\n <div class=\"relative z-0 w-full group/inputs content\">\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\n <!--TEXT, PASSWORD AND NUMBER-->\n @if (control.type == 'text' || control.type == 'number' || control.type == 'password') {\n <chr-base-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-base-input>\n }\n <!--TEXT AREA-->\n @if (control.type == 'textArea') {\n <chr-textarea-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-textarea-input>\n }\n <!--DATE-->\n @if (control.type == 'date') {\n <chr-date-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-date-input>\n }\n @if (control.type == 'datetime') {\n <chr-datetime-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-datetime-input>\n }\n <!--COLOR-->\n @if (control.type == 'color') {\n <chr-color-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-color-input>\n }\n @if (control.type == 'toggle'){\n <chr-toggle-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-toggle-input>\n }\n @if (control.type == 'file'){\n <chr-file-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [iconTooltip]=\"control.iconTooltip\" [accept]=\"control.accept\" [debounceTime]=\"debounceTime\"\n [autofocus]=\"control?.autofocus\" [multiple]=\"control.multiple\"\n [validations]=\"control.validations\"></chr-file-input>\n }\n </div>\n </div>\n</ng-template>","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class CookiesService {\r\n\tconstructor() {}\r\n\r\n\t/**\r\n\t * delete cookie\r\n\t * @param name\r\n\t */\r\n\tpublic deleteCookie(name: string) {\r\n\t\tthis.setCookie(name, \"\", -1);\r\n\t}\r\n\r\n\t/**\r\n\t * get cookie\r\n\t * @param {string} name\r\n\t * @returns {string}\r\n\t */\r\n\tpublic getCookie(name: string) {\r\n\t\tconst ca: Array<string> = decodeURIComponent(document.cookie).split(\";\");\r\n\t\tconst caLen: number = ca.length;\r\n\t\tconst cookieName = `${name}=`;\r\n\t\tlet c: string;\r\n\r\n\t\tfor (let i = 0; i < caLen; i += 1) {\r\n\t\t\tc = ca[i].replace(/^\\s+/g, \"\");\r\n\t\t\tif (c.indexOf(cookieName) === 0) {\r\n\t\t\t\treturn c.substring(cookieName.length, c.length);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\t/**\r\n\t * set cookie\r\n\t * @param {string} name\r\n\t * @param {string} value\r\n\t * @param {number} expireDays\r\n\t * @param {string} path\r\n\t */\r\n\tpublic setCookie(\r\n\t\tname: string,\r\n\t\tvalue: string,\r\n\t\texpireDays: number,\r\n\t\tpath: string = \"\"\r\n\t) {\r\n\t\tconst d: Date = new Date();\r\n\t\td.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);\r\n\t\tconst expires = `expires=${d.toUTCString()}`;\r\n\t\tconst cpath = path ? `; path=${path}` : \"\";\r\n\t\tdocument.cookie = `${name}=${value}; ${expires}${cpath}; SameSite=Lax`;\r\n\t}\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { Observable, of, tap, Subject, BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DataService {\r\n private data = new Map<string, BehaviorSubject<any>>();\r\n private persistData: { [key: string]: any } = {};\r\n private syncData: { [key: string]: boolean } = {};\r\n\r\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\r\n this.load();\r\n }\r\n\r\n set = (key: string, value: any, persist: boolean = false): void => {\r\n const data = this.data.get(key);\r\n\r\n if (data === null || data === undefined)\r\n this.data.set(key, new BehaviorSubject(value));\r\n else data.next(value);\r\n\r\n this.syncData[key] = value;\r\n this.persistData[key] = persist;\r\n\r\n this.persist().subscribe();\r\n };\r\n\r\n get = (key: string): Observable<any> => {\r\n const data = this.data.get(key);\r\n if (!data) this.data.set(key, new BehaviorSubject(null));\r\n return this.data.get(key)!;\r\n };\r\n\r\n getSync = (key: string): any => {\r\n return this.syncData[key];\r\n };\r\n\r\n clear = (key: string): void => {\r\n return this.data.get(key)?.next(null);\r\n };\r\n\r\n remove = (key: string): boolean => {\r\n return this.data.delete(key);\r\n };\r\n\r\n private persist = () => {\r\n return new Observable((observer) => {\r\n const toPersist: { [key: string]: any } = {};\r\n this.data.forEach((value, key) => {\r\n if (this.persistData[key]) value.subscribe((r) => (toPersist[key] = r));\r\n });\r\n if (isPlatformBrowser(this.platformId)) {\r\n localStorage.setItem('_chr_data', JSON.stringify(toPersist));\r\n }\r\n observer.next('Opération terminée');\r\n observer.complete();\r\n });\r\n };\r\n\r\n private load = () => {\r\n if (isPlatformBrowser(this.platformId)) {\r\n const data = localStorage.getItem('_chr_data');\r\n if (data) {\r\n const value = JSON.parse(data) as { [key: string]: any };\r\n Object.keys(value).forEach((key) => {\r\n const subject = this.data.get(key);\r\n if (subject === undefined || subject === null) {\r\n this.data.set(key, new BehaviorSubject(value[key]));\r\n this.persistData[key] = true;\r\n } else {\r\n subject.next(value[key]);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n}\r\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { PaginationInstance, PaginationService } from 'ngx-pagination';\nimport { NgClass, CommonModule } from '@angular/common';\nimport { ChrFormComponent } from '../chr-form/chr-form.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CookiesService } from '../services/cookie.service';\nimport { DataService } from '../services/data.service';\n\n@Component({\n selector: 'app-chr-paginator',\n templateUrl: './chr-paginator.component.html',\n styleUrls: [\n './chr-paginator.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [ChrFormComponent, CommonModule, MatIconModule],\n})\nexport class ChrPaginatorComponent\n implements OnInit, AfterViewInit, AfterContentChecked\n{\n private _page: number | null = null;\n private _pageSize: number | null = null;\n\n @Input()\n get page() {\n return this._page || 1;\n }\n set page(value: number) {\n this._page = value;\n this.pageChange.emit(value);\n this.changeDetector.markForCheck();\n this.changeDetector.detectChanges();\n }\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Input()\n get pageSize() {\n return this._pageSize || 20;\n }\n set pageSize(value: number) {\n this._pageSize = value;\n this.pageSizeChange.emit(value);\n this.changeDetector.markForCheck();\n this.changeDetector.detectChanges();\n }\n\n get dataSize() {\n return this.instance?.totalItems ?? 0;\n }\n\n get currentlyShownSize() {\n const mult = this.page * this.pageSize;\n return mult > this.dataSize ? this.dataSize : mult;\n }\n\n @Output() pageSizeChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Input() id: string | undefined = 'chr_base-data-table';\n\n @Input() allowSizeChange: boolean | string = 'true';\n\n @ViewChild('pageSizeForm') pageSizeForm: ChrFormComponent | null = null;\n\n instance?: PaginationInstance;\n\n constructor(\n public service: PaginationService,\n private cookieService: CookiesService,\n private dataService: DataService,\n private changeDetector: ChangeDetectorRef\n ) {}\n\n ngAfterContentChecked(): void {\n this.instance = this.service.getInstance(\n `${this.id}`\n ) as PaginationInstance;\n }\n\n ngOnInit(): void {\n this.dataService.get(`${this.id}_pagesize`).subscribe((res) => {\n if (res) {\n this.pageSize = res;\n this.pageSizeChange.emit(res);\n }\n });\n this.dataService.get(`${this.id}_page`).subscribe((res) => {\n if (res) {\n this.page = res;\n this.pageChange.emit(res);\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.pageSizeForm?.patchValue('pageSize', this.pageSize);\n }\n\n public previous = () => {\n if (this.isFirstPage()) return;\n this.page--;\n this.pageChange.emit(this.page);\n this.dataService.set(`${this.id}_page`, this.page);\n };\n\n public next = () => {\n if (this.isLastPage()) return;\n this.page += 1;\n this.pageChange.emit(this.page);\n this.dataService.set(`${this.id}_page`, this.page);\n };\n\n public setPage = (page: number) => {\n if (page < 1 || page > this.lastPage()) return;\n this.page = page;\n this.dataService.set(`${this.id}_page`, page);\n this.emit();\n };\n\n public setPageEventHandler = (event: any) => {\n return this.setPage(event.target.value);\n };\n\n public isFirstPage = () => {\n return this.page == 1;\n };\n\n public setPageSize = (pageSize: number) => {\n this.setPage(1);\n if (this.instance) this.instance.itemsPerPage = pageSize;\n this.dataService.set(`${this.id}_pagesize`, pageSize);\n this.pageSizeChange.emit(pageSize);\n };\n\n public setPageSizeEventHandler = (event: any) => {\n return this.setPageSize(event.target.value);\n };\n\n public isLastPage = () => {\n if (!this.instance?.totalItems) return false;\n return (\n this.page >=\n Math.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n );\n };\n\n // public pageSize = () => this.instance.itemsPerPage;\n\n public lastPage = () =>\n this.instance?.totalItems\n ? Math.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n : 1;\n\n private emit = (page: number | undefined = undefined) => {\n if (!page) this.pageChange.emit(this.page);\n else this.pageChange.emit(page);\n };\n}\n","<div class=\"flex flex-row justify-between dark:text-gray-400\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n @if (allowSizeChange === true || allowSizeChange == 'true') {\n <div class=\"w-40\">\n <app-chr-form #pageSizeForm id=\"table-paginator-form\" (keyup.enter)=\"setPageSizeEventHandler($event)\"\n [sections]=\"[\n { \n controls: [\n {\n label:'Éléments par page',\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n iconTooltip: 'Cliquez ici pour mettre à jour le nombre d\\'éléments affichés'\n }]\n }]\">\n </app-chr-form>\n </div>\n }\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\n <span class=\"entry-indicator\">{{currentlyShownSize}} éléments sur\n {{dataSize}}</span>\n\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_left</mat-icon></button>\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n {{page}} / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\n (click)=\"!isLastPage() && next()\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_right</mat-icon></button>\n </div>\n</div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { IAction } from '../chr-table/chr-table.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DataService } from '../services/data.service';\r\nimport { ChrPaginatorComponent } from '../chr-paginator/chr-paginator.component';\r\nimport { NgxPaginationModule, PaginationService } from 'ngx-pagination';\r\nimport {\r\n Color,\r\n getBackgroundColor,\r\n getBorderColor,\r\n getContrastTextColor,\r\n getTextColor,\r\n} from '../models/colors';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { SortPipe } from 'chrv-pipes';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\r\nimport { IControlValidation } from '../models/chr-validators/base-validator';\r\nimport { ChrFormComponent } from '../chr-form/chr-form.component';\r\n\r\nexport type TColumn = {\r\n /**\r\n * Nom de la colonne\r\n */\r\n display: string;\r\n\r\n /**\r\n * Sélecteur qui représente la propriété ciblée. Ex: 'obj.id'.\r\n */\r\n properties?: string;\r\n\r\n /**\r\n * Méthode callback qui sera appelée avec la valeur de la propriété cible.\r\n * Elle est utilisée pour apporter un traitement personnalisé à la valeur.\r\n * @param value valeur de la propriété cible\r\n * @returns\r\n */\r\n callback?: (value: any | null | undefined) => string;\r\n\r\n /**\r\n * Type de la colonne: lien, chips, input, date, default\r\n */\r\n type?: TColumnType;\r\n\r\n /**\r\n * Format de la date pour les colonnes de type date\r\n */\r\n format?: string;\r\n\r\n /**\r\n * Url de base pour les colonnes de type lien\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Type d'input pour les colonnes de type input\r\n */\r\n inputType?:\r\n | 'text'\r\n | 'number'\r\n | 'password'\r\n | 'date'\r\n | 'datetime'\r\n | 'file'\r\n | 'color'\r\n | 'toggle';\r\n\r\n /**\r\n * Règles de validations pour les colonnes de type input\r\n */\r\n validations?: IControlValidation[];\r\n\r\n /**\r\n * Chips disponibles pour les colonnes de type chips\r\n */\r\n chips?: { [key: string]: IChip };\r\n\r\n /**\r\n * Méthode callback qui sera avec la valeur de la propriété cible.\r\n * Elle est utilisée comme clef pour sélectionner quel chips afficher\r\n * @param entry\r\n * @returns\r\n */\r\n chipsCallback?: (entry: any) => string;\r\n};\r\n\r\nexport interface IChip {\r\n /**\r\n * Le text qui sera affiché dans le chips\r\n */\r\n display: string;\r\n /**\r\n * La couleur du background du chips\r\n */\r\n color: Color;\r\n}\r\n\r\nexport type TColumnType = 'link' | 'chips' | 'input' | 'date' | 'default';\r\n\r\n@Component({\r\n selector: 'chr-table',\r\n imports: [\r\n CommonModule,\r\n ChrPaginatorComponent,\r\n NgxPaginationModule,\r\n ChrButtonComponent,\r\n ChrFormComponent,\r\n SortPipe,\r\n MatIcon,\r\n TabToInputHandlerDirective,\r\n ],\r\n templateUrl: './chr-table-new.component.html',\r\n styleUrl: './chr-table-new.component.scss',\r\n providers: [PaginationService],\r\n})\r\nexport class ChrDataTable {\r\n private _data: any[] | null = [];\r\n\r\n /**\r\n * Data to display.\r\n * @see If it's piped with | Async, please note that the input column may not work as expected\r\n */\r\n @Input() get data(): any[] | null {\r\n return this._data;\r\n }\r\n set data(value: any[] | null) {\r\n this._data = value || [];\r\n }\r\n /**\r\n * Whether or not the table will show a column with a checkbox to select entries. Default is false\r\n */\r\n @Input() selectable: boolean = false;\r\n\r\n /**\r\n * The selected entries\r\n */\r\n @Input() selection: any[] = [];\r\n /**\r\n * The selected entries change event. This will be triggered on each selection and contain the full array of selected entries\r\n */\r\n @Output() selectionChange: EventEmitter<any[]> = new EventEmitter();\r\n\r\n /**\r\n * The table's action column definition\r\n */\r\n @Input() actions?: IAction[];\r\n\r\n /**\r\n * Wheter or not the current sort is ascendant. Default is true\r\n */\r\n @Input() isAsc: boolean = true;\r\n @Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\r\n /**\r\n * The property by which the data will be sorted\r\n */\r\n @Input() sortBy?: string;\r\n @Output() sortByChange: EventEmitter<string> = new EventEmitter();\r\n\r\n /**\r\n * The page size for the table. Default is 20\r\n */\r\n @Input() pageSize: number = 20;\r\n @Output() pageSizeChange: EventEmitter<number> = new EventEmitter();\r\n\r\n /**\r\n * The current page of the table. Default is 1\r\n */\r\n @Input() currentPage: number = 1;\r\n @Output() currentPageChange: EventEmitter<number> = new EventEmitter();\r\n\r\n /**\r\n * The ID of the table. It's used to persist page size and currentpage when the user change pages\r\n */\r\n @Input() id?: string = 'chr_base-data-table';\r\n\r\n /**\r\n * The color to use for the table's header\r\n */\r\n @Input() color?: Color = 'primary';\r\n\r\n /**\r\n * The table's columns definitions\r\n */\r\n @Input() columns: TColumn[] = [];\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private changeDetector: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.dataService.get(`${this.id}_sortBy`).subscribe((res) => {\r\n if (res) this.sortBy = res;\r\n this.changeDetector.markForCheck();\r\n });\r\n this.dataService.get(`${this.id}_isAsc`).subscribe((res) => {\r\n if (res) this.isAsc = res;\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n protected emitIsAsc(isAsc: any) {\r\n this.dataService.set(`${this.id}_isAsc`, isAsc);\r\n this.isAscChange.emit(isAsc);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected emitSortBy(sortBy: any) {\r\n this.dataService.set(`${this.id}_sortBy`, sortBy);\r\n this.sortByChange.emit(sortBy);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected emitPageSize(pageSize: any) {\r\n this.pageSize = pageSize;\r\n this.pageSizeChange.emit(pageSize);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected emitCurrentPage(currentPage: any) {\r\n this.currentPage = currentPage;\r\n this.currentPageChange.emit(currentPage);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected getNestedProperty(obj: any, path?: string): any {\r\n if (path === null || path === undefined) return obj;\r\n const value = path.split('.').reduce((acc, key) => acc && acc[key], obj);\r\n return value;\r\n }\r\n\r\n protected select = (entry: any, event: MouseEvent) => {\r\n const pointer = <PointerEvent>event;\r\n const target = <HTMLInputElement>pointer.target;\r\n if (target.checked) {\r\n this.selection.push(entry);\r\n } else {\r\n this.selection = this.selection.filter((x) => x !== entry);\r\n }\r\n\r\n this.selectionChange.emit(this.selection);\r\n };\r\n\r\n public getSelection = () => {\r\n return this.selection;\r\n };\r\n\r\n public setSelection = (data: any[]) => {\r\n this.selection = data;\r\n this.selectionChange.emit(this.selection);\r\n this.changeDetector.markForCheck();\r\n };\r\n\r\n protected contains = (entry: any) => {\r\n return this.selection.includes(entry);\r\n };\r\n\r\n updateModel = (entry: any, properties: string, value: { key: any }) => {\r\n var pList = properties.split('.');\r\n var len = pList.length;\r\n for (var i = 0; i < len - 1; i++) {\r\n var elem = pList[i];\r\n if (!entry[elem]) entry[elem] = {};\r\n entry = entry[elem];\r\n }\r\n\r\n entry[pList[len - 1]] = value.key;\r\n };\r\n\r\n protected getTextColor = (color: Color = 'none') => {\r\n return getTextColor(color);\r\n };\r\n\r\n protected getBackgroundColor = (color: Color = 'none') => {\r\n return getBackgroundColor(color);\r\n };\r\n\r\n protected getContrastTextColor = (color: Color = 'black') => {\r\n return getContrastTextColor(color);\r\n };\r\n\r\n protected getBorderColor = (color: Color = 'none') => {\r\n return getBorderColor(color);\r\n };\r\n\r\n protected sort = (properties?: string) => {\r\n if (properties === null || properties === undefined) return;\r\n const alreadySorted = this.sortBy == properties;\r\n if (alreadySorted) {\r\n this.isAsc = !this.isAsc;\r\n this.isAscChange.emit(this.isAsc);\r\n } else {\r\n this.sortBy = properties;\r\n this.sortByChange.emit(this.sortBy);\r\n this.isAsc = true;\r\n this.isAscChange.emit(true);\r\n }\r\n };\r\n}\r\n","<table class=\"hidden md:!table chr-table\">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"selectable\" [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\" class=\"w-min\">\r\n </th>\r\n <th *ngFor=\"let column of columns || []\" class=\"header-cell\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\" (click)=\"sort(column.properties)\">\r\n <div class=\"header-cell-content-wrapper\">\r\n <p class=\"header-cell-content\">{{column.display}}</p>\r\n <mat-icon class=\"header-cell-content\"\r\n *ngIf=\"column.properties && sortBy == column.properties && isAsc\">arrow_upward</mat-icon>\r\n <!-- 🡱 🡳 -->\r\n <mat-icon class=\"header-cell-content\"\r\n *ngIf=\"column.properties && sortBy == column.properties && !isAsc\">arrow_downward</mat-icon>\r\n </div>\r\n </th>\r\n <th *ngIf=\"actions\" class=\"actions-header-cell\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngIf=\"data === null || data === undefined || data.length <= 0\">\r\n <td *ngIf=\"selectable\"></td>\r\n <td>Pas de données</td>\r\n </tr>\r\n <tr [ngClass]=\"getBorderColor(color)\"\r\n *ngFor=\"let entry of (data || []) | sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id};\">\r\n <td *ngIf=\"selectable\" class=\"w-min\">\r\n <input type=\"checkbox\" (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" />\r\n </td>\r\n <td *ngFor=\"let column of columns || []\" [ngSwitch]=\"column.type\" tab-input-only>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\" [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'input'\" [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'chips'\" [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n </td>\r\n <td *ngIf=\"actions\">\r\n <div class=\"actions-cell\">\r\n <app-chr-button *ngFor=\"let action of actions\" [display]=\"action.display\" [icon]=\"action.icon\"\r\n [click]=\"action.callback.bind(null, entry)\" [color]=\"action.color\" [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(entry)\r\n : action.disabled || false\">\r\n </app-chr-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tfoot></tfoot>\r\n</table>\r\n\r\n<div class=\"md:!hidden chr-mobile-table\">\r\n <div class=\"entry\"\r\n *ngFor=\"let entry of (data || []) | sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id};\">\r\n <div class=\"entry-row\" [ngClass]=\"getBorderColor(color)\">\r\n <div class=\"entry-header\" *ngIf=\"selectable\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">\r\n\r\n </div>\r\n <div *ngIf=\"selectable\" class=\"entry-content flex flex-row justify-center\">\r\n <input class=\"\" type=\"checkbox\" (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" />\r\n </div>\r\n </div>\r\n <div class=\"entry-row\" *ngFor=\"let column of columns || []\" [ngClass]=\"getBorderColor(color)\">\r\n <div class=\"entry-header\" [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">\r\n {{column.display}}\r\n </div>\r\n <div class=\"entry-content\" [ngSwitch]=\"column.type\" tab-input-only>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\" [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'input'\" [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'chips'\" [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"entry-row\">\r\n <div class=\"entry-header\" *ngIf=\"actions\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">\r\n Actions\r\n </div>\r\n <div *ngIf=\"actions\" class=\"entry-content actions-cell\">\r\n <app-chr-button class=\"w-full\" *ngFor=\"let action of actions\" [display]=\"action.display\"\r\n [icon]=\"action.icon\" type=\"full\" [click]=\"action.callback.bind(null, entry)\" [color]=\"action.color\"\r\n [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(entry)\r\n : action.disabled || false\">\r\n </app-chr-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-chr-paginator [id]=\"this.id\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\" (pageSizeChange)=\"emitPageSize($event)\"\r\n (pageChange)=\"emitCurrentPage($event)\"></app-chr-paginator>\r\n\r\n<!-- CELL TEMPLATES -->\r\n<ng-template #default let-column='column' let-value=\"value\">\r\n <p *ngIf=\"column.callback? column.callback(value) : value as val\">{{val}}</p>\r\n</ng-template>\r\n<ng-template #date let-column='column' let-value=\"value\">\r\n <p *ngIf=\"column.callback? column.callback(value) : value as val\">{{val | date: column.format}}</p>\r\n</ng-template>\r\n<ng-template #link let-column='column' let-value=\"value\">\r\n <a *ngIf=\"column.callback? column.callback(value) : value as val\" target=\"_blank\"\r\n [href]=\"column.url + '/'+ val\">{{val}}</a>\r\n</ng-template>\r\n<ng-template #input let-entry=\"entry\" let-column='column' let-value=\"value\" class=\"w-full\">\r\n <app-chr-form class=\"form-wrapper w-full\" [model]=\"{key: value}\"\r\n (modelChange)=\"updateModel(entry, column.properties, $event)\" [sections]=\"[\r\n {\r\n controls:[\r\n {\r\n name: 'key',\r\n type: column.inputType || 'text',\r\n validations: column.validations,\r\n width: 'row'\r\n }\r\n ]\r\n }\r\n ]\">\r\n </app-chr-form>\r\n</ng-template>\r\n<ng-template #chip let-column='column' let-value=\"value\">\r\n <div *ngIf=\"column.callback? column.callback(value) : value as val\"\r\n class=\"w-full h-full flex flex-row items-center align-middle\">\r\n <span *ngIf=\"column.chips?.[val] as chip\"\r\n class=\"w-full flex text-center content-center align-middle items-center justify-center text-xs font-medium py-0.5 rounded-full\"\r\n [ngClass]=\"[getBackgroundColor(chip.color), getContrastTextColor(chip.color)]\">\r\n {{ chip.display }}\r\n </span>\r\n </div>\r\n</ng-template>","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-chr-searchbar',\n templateUrl: './chr-searchbar.component.html',\n styleUrls: [\n './chr-searchbar.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [ReactiveFormsModule],\n})\nexport class ChrSearchbarComponent {\n @Input() model?: string | null;\n @Output() modelChange: EventEmitter<string> = new EventEmitter();\n @Input() placeholder?: string | null;\n @Input() label?: string | null;\n public searchBy = new FormControl<string>('');\n\n constructor() {\n this.searchBy.valueChanges.subscribe((value) => this.emit(value));\n }\n\n emit(event: any) {\n this.modelChange.emit(event);\n }\n}\n","<div class=\"w-full relative z-0 group/inputs\">\n <input matInput [formControl]=\"searchBy\" placeholder=\" \" type=\"text\"\n class=\"block py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n <label\n class=\"peer/inputs-focus:font-medium absolute text-sm text-gray-500 dark:text-gray-400 duration-300 transform -translate-y-6 scale-75 top-3 -z-10 origin-[0] peer-focus/inputs:start-0 rtl:peer-focus/inputs:translate-x-1/4 rtl:peer-focus/inputs:left-auto peer-focus/inputs:text-chrdblue peer-focus/inputs:dark:text-chrlblue 0 peer-placeholder-shown/inputs:scale-100 peer-placeholder-shown/inputs:translate-y-0 peer-focus/inputs:scale-75 peer-focus/inputs:-translate-y-6\">{{\n label\n }}\n <!--\n @for (validation of control.validations; track validation) {\n @if (\n control?.touched &&\n form.hasError(validation.rule.toLowerCase(), name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n -->\n </label>\n</div>","import {\n Component,\n Input,\n Output,\n EventEmitter,\n Directive,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgClass } from '@angular/common';\n/**\n * This should only be used as a directive\n */\n@Component({\n selector: 'app-chr-table-header-cell, [app-chr-table-header-cell]',\n templateUrl: './chr-table-header-cell.component.html',\n styleUrls: [\n './chr-table-header-cell.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [NgClass, MatIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChrTableHeaderCellComponent {\n @Input() display?: string;\n @Input() column?: string[];\n @Input() alignment?: string;\n @Input() isAsc: boolean = true;\n @Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n @Input() sortBy?: string[];\n @Output() sortByChange: EventEmitter<string[]> = new EventEmitter();\n\n public constructor(private changeDetector: ChangeDetectorRef) {}\n\n orderBy = (column?: string[]) => {\n if (!this.sortBy) this.sortBy = column;\n\n if (this.sortBy == column) {\n this.isAsc = !this.isAsc;\n this.sortBy = column;\n this.isAscChange.emit(this.isAsc);\n this.sortByChange.emit(this.sortBy);\n } else {\n this.isAsc = true;\n this.sortBy = column;\n this.isAscChange.emit(this.isAsc);\n this.sortByChange.emit(this.sortBy);\n }\n this.changeDetector.markForCheck();\n };\n}\n","<div class=\"relative w-full cursor-pointer flex flex-row align-middle self-center\" [ngClass]=\"\n alignment == 'left' ? 'justify-start' : \n alignment == 'center' ? 'justify-center' : \n alignment == 'right' ? 'justify-end' : \n 'justify-left'\" (click)=\"orderBy(column)\">\n <p>{{ display }}</p>\n @if (sortBy) {\n <div class=\"absolute right-3 top-0 h-0 w-0\">\n @if (sortBy == column && isAsc) {\n <mat-icon>arrow_upward</mat-icon>\n }\n @if (sortBy == column && !isAsc) {\n <mat-icon>arrow_downward</mat-icon>\n }\n </div>\n }\n</div>\n<ng-content></ng-content>","import {\n Component,\n Input,\n AfterViewInit,\n EventEmitter,\n Output,\n ChangeDetectorRef,\n OnInit,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { ChrPaginatorComponent } from '../chr-paginator/chr-paginator.component';\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\nimport { ChrTableHeaderCellComponent } from '../chr-table-header-cell/chr-table-header-cell.component';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport {\n CommonModule,\n DATE_PIPE_DEFAULT_OPTIONS,\n DatePipe,\n NgFor,\n} from '@angular/common';\nimport { DataService } from '../services/data.service';\n\nimport { SortPipe } from 'chrv-pipes';\nimport { getContrastTextColor } from '../models/colors';\nimport {\n Color,\n getBackgroundColor,\n getBorderColor,\n getTextColor,\n} from '../models/colors';\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\n\nexport type Alignment = 'left' | 'center' | 'right';\n\nexport const Aligments: { [key: string]: string } = {\n left: 'text-left justify-start',\n center: 'text-center justify-center',\n right: 'text-right justify-end',\n};\n\nexport interface IChips {\n display: string;\n name: string;\n callback: (entry: any) => string | boolean;\n textColor?: Color;\n backgroundColor?: Color;\n}\n\nexport interface IColumn {\n display: string;\n alignment?: 'left' | 'center' | 'right';\n chips?: IChips[];\n properties?: string[];\n callback?: Function;\n date?: string;\n isLink?: boolean;\n linkStaticUrl?: string;\n}\n\nexport interface IComputedRow {\n columns: IComputedColumn[];\n}\n\nexport interface IComputedColumn {\n label?: string;\n value?: any;\n callback?: Function;\n alignment?: 'left' | 'center' | 'right';\n after?: string;\n}\n\nexport interface IAction {\n display?: string;\n icon?: string;\n callback: Function;\n disabled?: boolean;\n disabledCallback?: Function;\n color: Color;\n}\n\n@Component({\n selector: 'app-chr-table, [app-chr-table]',\n templateUrl: './chr-table.component.html',\n styleUrls: ['./chr-table.component.scss', '../../../../../tailwindbuild.css'],\n imports: [\n ChrTableHeaderCellComponent,\n ChrButtonComponent,\n ChrPaginatorComponent,\n SortPipe,\n NgxPaginationModule,\n CommonModule,\n ],\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [\n DatePipe,\n {\n provide: DATE_PIPE_DEFAULT_OPTIONS,\n useValue: { dateFormat: 'shortDate' },\n },\n ],\n})\nexport class ChrTableComponent implements OnInit, AfterViewInit {\n @Input() computedRows?: IComputedRow[];\n @Input() columns?: IColumn[];\n\n private _data: any[] | null = [];\n @Input() get data(): any[] | null {\n return this._data;\n }\n set data(value: any[] | null) {\n this._data = value || [];\n this.changeDetector.markForCheck();\n this.currentPage = 1;\n }\n\n @Input() actions?: IAction[];\n\n @Input() isAsc: boolean = true;\n @Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n @Input() sortBy?: string[];\n @Output() sortByChange: EventEmitter<string[]> = new EventEmitter();\n\n @Input() pageSize: number = 50;\n @Output() pageSizeChange: EventEmitter<number> = new EventEmitter();\n\n @Input() currentPage: number = 1;\n @Output() currentPageChange: EventEmitter<number> = new EventEmitter();\n\n @Input() selectable: boolean = false;\n\n @Input() selection: any[] = [];\n @Output() selectionChange: EventEmitter<any[]> = new EventEmitter();\n\n @Input() id?: string = 'chr_base-data-table';\n\n @Input() color: Color = 'secondary';\n\n @Input() textColor: Color = 'secondary-contrast';\n\n private _page: number = 1;\n\n currentProperty: any | null = null;\n currentText: string | null = null;\n\n constructor(\n private _date: DatePipe,\n private dataService: DataService,\n private changeDetector: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.dataService.get(`${this.id}_sortBy`).subscribe((res) => {\n if (res) this.sortBy = res;\n this.changeDetector.markForCheck();\n });\n this.dataService.get(`${this.id}_isAsc`).subscribe((res) => {\n if (res) this.isAsc = res;\n this.changeDetector.markForCheck();\n });\n }\n ngAfterViewInit(): void {}\n\n protected emitIsAsc(isAsc: any) {\n this.dataService.set(`${this.id}_isAsc`, isAsc);\n this.isAscChange.emit(isAsc);\n this.changeDetector.markForCheck();\n }\n\n protected emitSortBy(sortBy: any) {\n this.dataService.set(`${this.id}_sortBy`, sortBy);\n this.sortByChange.emit(sortBy);\n this.changeDetector.markForCheck();\n }\n\n protected emitPageSize(pageSize: any) {\n this.pageSize = pageSize;\n this.pageSizeChange.emit(pageSize);\n this.changeDetector.markForCheck();\n }\n\n protected emitCurrentPage(currentPage: any) {\n this.currentPage = currentPage;\n this.currentPageChange.emit(currentPage);\n this.changeDetector.markForCheck();\n }\n\n protected getProperty = (entry: any, properties?: any[]) => {\n this.currentProperty = null;\n this.currentText = null;\n\n if (!properties) {\n this.currentProperty = entry;\n return entry;\n }\n let value = entry;\n for (const i of properties) {\n value = (value as any)?.[i];\n }\n this.currentProperty = value;\n return value;\n };\n\n protected getText = (property: any, column: IColumn) => {\n let text = null;\n\n if (column.callback) text = column.callback(property);\n\n if (text == null && column.date)\n text = this._date.transform(property, column.date);\n\n this.currentText = text || property;\n\n return text || property;\n // column.date\n // ? column.callback\n // \t? column.callback(property)\n // \t: (property | date : column.date)\n // : column.callback\n // \t? column.callback(property)\n // \t: property\n };\n\n protected select = (entry: any, event: MouseEvent) => {\n const pointer = <PointerEvent>event;\n const target = <HTMLInputElement>pointer.target;\n if (target.checked) {\n this.selection.push(entry);\n } else {\n this.selection = this.selection.filter((x) => x !== entry);\n }\n\n this.selectionChange.emit(this.selection);\n };\n\n public getSelection = () => {\n return this.selection;\n };\n\n public setSelection = (data: any[]) => {\n this.selection = data;\n this.selectionChange.emit(this.selection);\n this.changeDetector.markForCheck();\n };\n\n protected contains = (entry: any) => {\n return this.selection.includes(entry);\n };\n\n protected getIsAsc = () => {\n return this.isAsc;\n };\n\n protected getSortBy = () => {\n return this.sortBy;\n };\n\n protected getTextColor = (color: Color = 'none') => {\n return getTextColor(color);\n };\n\n protected getBackgroundColor = (color: Color = 'none') => {\n return getBackgroundColor(color);\n };\n\n protected getContrastTextColor = (color: Color = 'black') => {\n return getContrastTextColor(color);\n };\n\n protected getBorderColor = (color: Color = 'none') => {\n return getBorderColor(color);\n };\n\n protected getAlignment = (alignment: Alignment = 'center') => {\n return Aligments[alignment] || Aligments['left'];\n };\n}\n","<div class=\"h-full no-scrollbar\">\n <ng-content class=\"mt-5\"></ng-content>\n <div class=\"flex flex-col flex-1 overflow-auto no-scrollbar\">\n @if (data) {\n <!-- max-w-[75%] -->\n <table\n class=\"table-auto max-w-full border dark:border-none relative flex flex-row flex-no-wrap w-full rounded-lg sm:shadow-lg bg-transparent no-scrollbar\">\n <thead>\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0\"\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(textColor)]\">\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\n [(isAsc)]=\"isAsc\" (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\" (sortByChange)=\"emitSortBy($event)\">\n </th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track entry)\n {\n <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0 \"\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(textColor)]\">\n <th *ngIf=\"selectable\" class=\"p-3 h-14\"></th>\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\n [(isAsc)]=\"isAsc\" alignment=\"{{column.alignment}}\" (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\"\n (sortByChange)=\"emitSortBy($event)\"></th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle self-center sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n </thead>\n <tbody class=\"w-full\">\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no-wrap sm:table-row rounded-lg mb-0 sm:mb-2 \">\n <td class=\"p-3 h-14\">Pas de donnée(s)</td>\n @for (column of columns | slice: 1; track column) {\n <td class=\"p-3 h-14\"></td>\n }\n @if (actions) {\n <td class=\"p-3 h-14 grid gap-3 justify-center align-middle items-center\"\n [ngClass]=\"actions.length > 1 ? 'grid-cols-2' : 'grid-cols-1'\"></td>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track\n entry; let i = $index) {\n <tr [attr.data-index]=\"i\"\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 sm:border-t-2 sm:first:border-0\"\n [ngClass]=\"[getBorderColor(color)]\">\n <td *ngIf=\"selectable\"\n class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\n [ngClass]=\"getBorderColor(color)\"><input type=\"checkbox\" (click)=\"select(entry, $event)\"\n [checked]=\"contains(entry)\" /></td>\n @for (column of columns; track column;) {\n <td [ngClass]=\"\n column.chips\n ? ''\n : ''\n \" class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\n [ngClass]=\"getBorderColor(color)\">\n <ng-container [ngTemplateOutlet]=\"default\"\n [ngTemplateOutletContext]=\"{prop: getProperty(entry, column.properties), column: column}\">\n </ng-container>\n </td>\n }\n <ng-template #default let-column='column' let-property=\"prop\">\n @if (column.isLink) {\n <a target=\"_blank\" class=\"text-{{column.alignment}}\" href=\"{{column.linkStaticUrl}}{{\n getText(property, column)\n }}\">\n {{\n currentText\n }}\n </a>\n }\n @if (!column.isLink) {\n <div class=\"flex flex-row\" [ngClass]=\"{\n 'justify-start': column.alignment == 'left',\n 'justify-center': column.alignment == 'center',\n 'justify-end': column.alignment == 'right',\n 'gap-2': column.chipsDisplay && getText(property, column)\n }\">\n @if (column.chips && column.chips.length > 0) {\n <div>\n @for(chip of column.chips; track chip; let i = $index){\n <span *ngIf=\"chip.callback(entry) === true || chip.callback(entry) === chip.name\"\n class=\"w-24 flex text-center content-center align-middle items-center justify-center text-xs font-medium py-0.5 rounded-full\"\n [ngClass]=\"[getBackgroundColor(chip.backgroundColor), chip.backgroundColor != 'none' ? getContrastTextColor(chip.backgroundColor) : getTextColor(chip.textColor)]\">\n {{ chip.display }}\n </span>\n }\n </div>\n }@else {\n <p class=\"inline-block overflow-hidden text-nowrap text-ellipsis max-w-full\">\n {{\n currentText || getText(property, column)\n }}\n </p>\n }\n </div>\n }\n </ng-template>\n\n @if (actions) {\n <td class=\"p-3 h-14 flex gap-2 w-full sm:w-min justify-center\">\n @for (action of actions; track action) {\n <app-chr-button class=\"w-full\" [disabled]=\"\n action.disabledCallback\n ? action.disabledCallback(entry)\n : action.disabled || false\n \" [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry, i)\"\n [color]=\"action.color\" type=\"responsive\">\n </app-chr-button>\n }\n </td>\n }\n </tr>\n }\n @for (r of computedRows; track r) {\n <tr class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 \">\n @for (c of r.columns; track c) {\n <td [ngClass]=\"c.alignment && 'text-'+(c.alignment||'left')\" class=\"p-3 h-14\">\n {{c.label && c.label + ':'}} {{c.value || (c.callback && c.callback(data))}} {{c.after}}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <app-chr-paginator [id]=\"this.id\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\"\n (pageSizeChange)=\"emitPageSize($event)\" (pageChange)=\"emitCurrentPage($event)\"></app-chr-paginator>\n }\n </div>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'app-chr-checkbox',\n templateUrl: './chr-checkbox.component.html',\n styleUrls: [\n './chr-checkbox.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [MatIcon],\n})\nexport class ChrCheckboxComponent {\n public checked: boolean = false;\n\n @Input() type: 'info' | 'success' = 'info';\n\n @Input() disabled: boolean = false;\n\n @Output() change: EventEmitter<{ checked: boolean }> = new EventEmitter<{\n checked: boolean;\n }>();\n\n check(end: boolean) {\n if (this.disabled) return;\n if (end) {\n this.checked = true;\n this.change.emit({ checked: true });\n } else {\n this.checked = false;\n this.change.emit({ checked: false });\n }\n }\n}\n","<div>\n @if (checked) {\n <div (click)=\"check(false)\" [class.info]=\"type=='info'&&!disabled\"\n [class.bg-green-100]=\"type=='success'&&!disabled\" [class.cursor-pointer]=\"!disabled\"\n [class.bg-grey-400]=\"disabled\"\n class=\"box-border rounded-lg p-3 h-12 text-center border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>check-circle</mat-icon></div>\n </div>\n }\n @if (!checked) {\n <div (click)=\"check(true)\" [class.cursor-pointer]=\"!disabled\" [class.disabled]=\"disabled\"\n [class.bg-gray-200]=\"disabled\" [class.bg-red-100]=\"!disabled\"\n class=\"box-border p-3 h-12 text-center rounded-lg border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>close</mat-icon></div>\n </div>\n }\n</div>","import { Component } from \"@angular/core\";\n\n@Component({\n\tselector: \"app-chr-separator\",\n\ttemplateUrl: \"./chr-separator.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-separator.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n})\nexport class ChrSeparatorComponent {}\n","<div class=\"py-4\">\n <hr class=\"\" />\n</div>","export interface ILiveUpdateMessage {\r\n\tstatus: LiveUpdateStatus;\r\n\tmessage?: string | null;\r\n}\r\n\r\nexport enum LiveUpdateStatus {\r\n\tInfo,\r\n\tWarning,\r\n\tError,\r\n\tEnd,\r\n}\r\n\r\nexport const DEFAULTLIVEUPDATEMESSAGE: ILiveUpdateMessage = {\r\n\tstatus: LiveUpdateStatus.Info,\r\n\tmessage: \"Chargement...\",\r\n};\r\n\r\nexport const DefaultLiveUpdateMessage = DEFAULTLIVEUPDATEMESSAGE;\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoaderService {\r\n private is_loading: boolean = false;\r\n private is_loading$ = new BehaviorSubject<boolean>(this.is_loading);\r\n private requestStatckSize: number = 0;\r\n constructor() {}\r\n\r\n setLoading = (is: boolean) => {\r\n this.is_loading = is;\r\n this.is_loading$.next(this.is_loading);\r\n };\r\n\r\n isLoading = () => {\r\n return this.is_loading;\r\n };\r\n\r\n isLoadingAsync = () => {\r\n return this.is_loading$.asObservable();\r\n };\r\n\r\n getStackSize = () => this.requestStatckSize;\r\n\r\n incrementStackSize = () => this.requestStatckSize++;\r\n\r\n decrementStackSize = () => this.requestStatckSize--;\r\n\r\n setStackSize = (value: number) => (this.requestStatckSize = value);\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpInterceptorFn, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { catchError, Observable, throwError, tap } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { LoaderService } from '../../services/loader.service';\r\n\r\nexport const SpinnerInterceptor: HttpInterceptorFn = (req, next) => {\r\n const loader: LoaderService = inject(LoaderService);\r\n\r\n if (req.headers.get('skip') == 'true') {\r\n req = req.clone({ headers: req.headers.delete('skip') });\r\n return next(req);\r\n }\r\n req = req.clone({ headers: req.headers.delete('skip') });\r\n loader.incrementStackSize();\r\n loader.setLoading(true);\r\n return next(req).pipe(\r\n tap((data) => {\r\n if (data instanceof HttpResponse) {\r\n //Do something\r\n }\r\n }),\r\n finalize(() => {\r\n loader.decrementStackSize();\r\n if (loader.getStackSize() == 0) {\r\n loader.setLoading(false);\r\n }\r\n })\r\n );\r\n};\r\n","import { inject } from \"@angular/core\";\r\nimport { HttpContextToken, HttpEvent, HttpInterceptorFn, HttpResponse } from \"@angular/common/http\";\r\nimport { finalize, Observable, tap } from \"rxjs\";\r\nimport { LiveUpdateService } from \"../../services/live-update.service\";\r\nimport {\r\n\tHUBURL,\r\n\tXSRFCOOKIENAME,\r\n\tXSRFHEADERNAME,\r\n} from \"../providers/xsrf-provider\";\r\nimport { DataService } from \"../../services/data.service\";\r\n\r\nexport const XsrfInterceptor: HttpInterceptorFn = (req, next) => {\r\n\tconst headerName: string = inject(XSRFHEADERNAME);\r\n\tconst hubUrl: string = inject(HUBURL);\r\n\r\n\tconst liveUpdateService: LiveUpdateService | null =\r\n\t\thubUrl != null && hubUrl != undefined ? inject(LiveUpdateService) : null;\r\n\tconst dataService: DataService = inject(DataService);\r\n\tconst csrfToken = dataService.getSync(headerName);\r\n\r\n\tconst hasCsrfToken = csrfToken !== null && csrfToken !== undefined;\r\n\tconst shouldIntercept = [\"PUT\", \"POST\", \"DELETE\"].includes(req.method);\r\n\r\n\tconst isWebSocket = liveUpdateService\r\n\t\t? req.url.includes(liveUpdateService.getHubUrl())\r\n\t\t: false;\r\n\r\n\tif (hasCsrfToken && shouldIntercept && !isWebSocket) {\r\n\t\tconst cloned = req.clone({\r\n\t\t\theaders: req.headers.set(headerName, csrfToken),\r\n\t\t});\r\n\r\n\t\tliveUpdateService?.initConnection().subscribe();\r\n\t\treturn next(cloned).pipe(\r\n\t\t\tWaitAndStoreXsrfToken(headerName, dataService),\r\n\t\t\tfinalize(() => liveUpdateService?.closeConnection().subscribe())\r\n\t\t);\r\n\t} else {\r\n\t\treturn next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));\r\n\t}\r\n};\r\n\r\nexport const WaitAndStoreXsrfToken = (\r\n\theadername: string,\r\n\tdataService: DataService\r\n) => {\r\n\treturn (source: Observable<HttpEvent<any>>) => {\r\n\t\treturn source.pipe(\r\n\t\t\ttap((event) => {\r\n\t\t\t\tif (event instanceof HttpResponse) {\r\n\t\t\t\t\tconst xsrfToken = event.headers.get(headername);\r\n\t\t\t\t\tif (xsrfToken) {\r\n\t\t\t\t\t\tdataService.set(headername, xsrfToken);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn event;\r\n\t\t\t})\r\n\t\t);\r\n\t};\r\n};\r\n","import { HttpFeature, HttpInterceptorFn, provideHttpClient, withInterceptors, withXsrfConfiguration } from \"@angular/common/http\";\r\nimport { InjectionToken } from \"@angular/core\";\r\nimport { SpinnerInterceptor } from \"../interceptors/SpinnerInterceptor\";\r\nimport { XsrfInterceptor } from \"../interceptors/XsrfInterceptor\";\r\n\r\nexport interface IXsrfProviderParams {\r\n\txsrfHeader: string;\r\n\txsrfCookie?: string;\r\n\thubUrl?: string;\r\n\tinterceptors?: HttpInterceptorFn[];\r\n\tfeatures?: HttpFeature<any>[];\r\n}\r\n\r\nexport const provideXsrfHttpClient = (params: IXsrfProviderParams): any[] => {\r\n\treturn [\r\n\t\t{ provide: XSRFHEADERNAME, useValue: params.xsrfHeader },\r\n\t\t{\r\n\t\t\tprovide: XSRFCOOKIENAME,\r\n\t\t\tuseValue: params.xsrfCookie || params.xsrfHeader,\r\n\t\t},\r\n\t\t{ provide: HUBURL, useValue: params.hubUrl },\r\n\t\tprovideHttpClient(\r\n\t\t\twithInterceptors([\r\n\t\t\t\tSpinnerInterceptor,\r\n\t\t\t\tXsrfInterceptor,\r\n\t\t\t\t...(params?.interceptors || []),\r\n\t\t\t]),\r\n\t\t\twithXsrfConfiguration({\r\n\t\t\t\theaderName: params.xsrfHeader,\r\n\t\t\t\tcookieName: params.xsrfCookie || params.xsrfHeader,\r\n\t\t\t}),\r\n\t\t\t...(params?.features || [])\r\n\t\t),\r\n\t];\r\n};\r\n\r\nexport const XSRFHEADERNAME = new InjectionToken<string>(\"xsrfHeader\");\r\nexport const XSRFCOOKIENAME = new InjectionToken<string>(\"xsrfCookie\");\r\nexport const HUBURL = new InjectionToken<string>(\"hubUrl\");\r\n","import { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport {\r\n\tBehaviorSubject,\r\n\tdelay,\r\n\tfilter,\r\n\tfrom,\r\n\tObservable,\r\n\tReplaySubject,\r\n\tskipWhile,\r\n\tswitchMap,\r\n\ttap,\r\n\ttimer,\r\n} from \"rxjs\";\r\nimport {\r\n\tHttpClient,\r\n\tHttpTransportType,\r\n\tHubConnection,\r\n\tHubConnectionBuilder,\r\n\tHubConnectionState,\r\n\tIHttpConnectionOptions,\r\n\tLogLevel,\r\n} from \"@microsoft/signalr\";\r\nimport {\r\n\tDEFAULTLIVEUPDATEMESSAGE,\r\n\tILiveUpdateMessage,\r\n\tLiveUpdateStatus,\r\n} from \"../models/live-update-message\";\r\nimport { XSRFHEADERNAME, HUBURL } from \"../config/providers/xsrf-provider\";\r\nimport { DataService } from \"./data.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class LiveUpdateService {\r\n\tprivate _hubUrl: string;\r\n\tprivate _connection: HubConnection | null = null;\r\n\tprivate _xsrf: string | null;\r\n\tprivate _xsrfHeader: string | null;\r\n\t//private _client: HttpClient;\r\n\tprivate _message: BehaviorSubject<ILiveUpdateMessage> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE\r\n\t);\r\n\tprivate _update: BehaviorSubject<string> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t);\r\n\r\n\tconstructor(\r\n\t\t@Inject(HUBURL) @Optional() hubUrl: string,\r\n\t\t@Inject(XSRFHEADERNAME) @Optional() xsrfHeader: string,\r\n\t\t@Inject(DataService) private dataService: DataService\r\n\t) {\r\n\t\tthis._hubUrl = hubUrl;\r\n\t\tthis._xsrfHeader = xsrfHeader;\r\n\t\tthis._xsrf = dataService.getSync(this._xsrfHeader);\r\n\t}\r\n\r\n\tpublic initConnection = (): Observable<void> => {\r\n\t\tif (this._xsrfHeader == null) throw new Error(\"xsrfHeader is not set\");\r\n\t\tif (this._hubUrl == null) throw new Error(\"hubUrl is not set\");\r\n\r\n\t\tthis._xsrf = this.dataService.getSync(this._xsrfHeader);\r\n\t\tif (this._connection == null)\r\n\t\t\tthis._connection = new HubConnectionBuilder()\r\n\t\t\t\t.withUrl(this._hubUrl, {\r\n\t\t\t\t\ttransport: HttpTransportType.ServerSentEvents,\r\n\t\t\t\t\theaders: { [this._xsrfHeader]: this._xsrf },\r\n\t\t\t\t} as IHttpConnectionOptions)\r\n\t\t\t\t.configureLogging(LogLevel.None)\r\n\t\t\t\t.withAutomaticReconnect()\r\n\t\t\t\t.build();\r\n\r\n\t\treturn new Observable<void>((observer) => {\r\n\t\t\tif (this._connection?.state == HubConnectionState.Connected)\r\n\t\t\t\tthis._connection;\r\n\t\t\telse\r\n\t\t\t\tthis._connection\r\n\t\t\t\t\t?.start()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\tobserver.next();\r\n\t\t\t\t\t\tobserver.complete();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((error: any) => {\r\n\t\t\t\t\t\tobserver.error(error);\r\n\t\t\t\t\t});\r\n\r\n\t\t\tthis._connection?.on(\"UPDATE\", (message: ILiveUpdateMessage) => {\r\n\t\t\t\tthis.pushMessage(message);\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\tpublic onUpdate(): Observable<string> {\r\n\t\treturn this._update\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic closeConnection(): Observable<void> {\r\n\t\treturn from(this._connection!.stop()).pipe(\r\n\t\t\ttap(() => {\r\n\t\t\t\tthis._connection = null;\r\n\r\n\t\t\t\t//We push a null to flush the observable\r\n\t\t\t\tthis._message.next(DEFAULTLIVEUPDATEMESSAGE);\r\n\t\t\t\tthis._update.next(DEFAULTLIVEUPDATEMESSAGE?.message || \"\");\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getMessage(): Observable<ILiveUpdateMessage> {\r\n\t\treturn this._message\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic getHubUrl = (): string => this._hubUrl;\r\n\r\n\tprivate pushMessage(message: ILiveUpdateMessage) {\r\n\t\tthis._message.next(message);\r\n\t\tthis._update.next(\r\n\t\t\tmessage?.message || DEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t\t);\r\n\t\tif (message.status === LiveUpdateStatus.End) {\r\n\t\t\tthis._connection?.stop();\r\n\t\t}\r\n\t}\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n tap,\r\n pipe,\r\n Observable,\r\n takeUntil,\r\n BehaviorSubject,\r\n skipWhile,\r\n takeWhile,\r\n finalize,\r\n} from 'rxjs';\r\nimport {\r\n DefaultLiveUpdateMessage,\r\n ILiveUpdateMessage,\r\n LiveUpdateStatus,\r\n} from '../models/live-update-message';\r\nimport { LoaderService } from '../services/loader.service';\r\nimport { LiveUpdateService } from '../services/live-update.service';\r\n\r\n@Component({\r\n selector: 'app-chr-spinner',\r\n templateUrl: './chr-spinner.component.html',\r\n styleUrls: [\r\n './chr-spinner.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrSpinnerComponent implements OnInit {\r\n public message: ILiveUpdateMessage = DefaultLiveUpdateMessage;\r\n\r\n constructor(\r\n public loader: LoaderService,\r\n public liveUpdate: LiveUpdateService,\r\n private changeDetector: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.liveUpdate\r\n .getMessage()\r\n .pipe(\r\n finalize(() => {\r\n this.message = DefaultLiveUpdateMessage;\r\n console.error(\r\n \"Observable closed. This should not happen as further live update messages won't be received.\"\r\n );\r\n })\r\n )\r\n .subscribe((res) => {\r\n this.message = res;\r\n this.changeDetector.detectChanges();\r\n });\r\n this.loader.isLoadingAsync().subscribe((res) => {\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n display = (message: ILiveUpdateMessage | null) => {\r\n return message?.message;\r\n //return `${message?.status} \\n\\n ${message?.message}`;\r\n };\r\n}\r\n","@if (this.loader.isLoading()) {\r\n<div\r\n class=\"cssload-container flex flex-col justify-center content-center items-center bg-gray-200 dark:bg-slate-600 opacity-85\">\r\n <div class=\"wheel-wrapper\">\r\n <div class=\"cssload-speeding-wheel\">\r\n </div>\r\n </div>\r\n <div class=\"w-96 inset-full h-0 text-ellipsis text-wrap text-center\">\r\n {{display((message))}}\r\n </div>\r\n</div>\r\n}","import { Component, Input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToastService } from '../services/toast.service';\r\nimport { Color, getTextColor } from '../models/colors';\r\n\r\n@Component({\r\n selector: 'app-chr-toast',\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chr-toast.component.html',\r\n styleUrls: ['./chr-toast.component.scss', '../../../../../tailwindbuild.css'],\r\n})\r\nexport class ChrToastComponent {\r\n @Input() topmargin = '0px';\r\n public constructor(public toastService: ToastService) {}\r\n}\r\n","<div *ngIf=\"(toastService.current() | async); let toast;\" class=\"toast flex h-0\" style=\"--margin-top: {{topmargin}};\">\r\n <div class=\"toast-sticky-wrapper\">\r\n <div class=\"toast-content p-2\" style=\"cursor: default;\">\r\n <mat-icon class=\"toast-status-icon\">icon</mat-icon>\r\n <p class=\"toast-message\" [ngClass]=\"{\r\n 'text-primary':toast?.type == 'success',\r\n 'text-warn':toast?.type == 'warning',\r\n 'text-error':toast?.type == 'error',\r\n }\">{{toast?.message}}</p>\r\n <mat-icon class=\"toast-close-icon\" style=\"cursor: pointer;\" (click)=\"toastService.next()\">close</mat-icon>\r\n </div>\r\n </div>\r\n</div>","import { Component, Inject, Input } from '@angular/core';\nimport {\n MatDialogRef,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,\n MAT_DIALOG_DATA,\n MatDialogConfig,\n} from '@angular/material/dialog';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { IAction } from '../chr-table/chr-table.component';\n\nexport interface IDefaultDialogConfig extends MatDialogConfig<any> {\n config?: MatDialogConfig<any>;\n title: string;\n text: string;\n close?: string;\n actions?: IAction[];\n}\n\ninterface DialogConfig {\n _config: {\n title: string;\n text: string;\n close: string;\n actions: IAction[];\n };\n}\n\n@Component({\n selector: 'app-chr-default-modal',\n templateUrl: './chr-default-modal.component.html',\n styleUrls: [\n './chr-default-modal.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n ChrButtonComponent,\n ],\n})\nexport class ChrDefaultModalComponent {\n public valid: boolean = false;\n\n @Input() title?: string;\n @Input() text?: string;\n @Input() actions?: IAction[];\n @Input() close?: string;\n\n protected html: SafeHtml | null = null;\n\n constructor(\n public dialogRef: MatDialogRef<ChrDefaultModalComponent>,\n @Inject(MAT_DIALOG_DATA) public config: DialogConfig,\n private sanitizer: DomSanitizer\n ) {\n if (!this.title) this.title = config?._config.title || 'Attention: ';\n this.title = this.title.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n\n if (!this.text) this.text = config?._config.text || '';\n this.text = this.text.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n this.html = sanitizer.bypassSecurityTrustHtml(this.text);\n\n if (!this.close) this.close = config?._config.close || 'Fermer';\n\n if (!this.actions) this.actions = config?._config.actions || [];\n }\n\n ngOnInit() {}\n\n public closeModal = (callback?: Function) => {\n const value = callback?.();\n this.dialogRef.close(value || true);\n };\n}\n","<div class=\"w-full overflow-auto overflow-x-hidden\"\n style=\"background-color: var(--background-color); color:var(--text-color)\">\n <h2 mat-dialog-title class=\"0\">{{title}}</h2>\n <mat-dialog-content [innerHTML]=\"html\">\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"w-full flex flex-row justify-between\">\n <app-chr-button class=\"w-36\" [display]=\"close\" color=\"secondary\" [click]=\"closeModal\"></app-chr-button>\n @if (actions) {\n @for (action of actions; track action) {\n <app-chr-button class=\"w-36\" [disabled]=\"\n action.disabledCallback\n ? action.disabledCallback()\n : action.disabled || false\n \" [display]=\"action.display\" [icon]=\"action.icon\"\n [click]=\"closeModal.bind(null, action.callback.bind(null))\" [color]=\"action.color\">\n </app-chr-button>\n }\n }\n </div>\n </mat-dialog-actions>\n</div>","import { Directive, HostListener, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tab-enter]',\r\n standalone: true,\r\n})\r\nexport class TabToEnterHandlerDirective {\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('keydown', ['$event'])\r\n handleTab(event: KeyboardEvent): void {\r\n if (event.key === 'Tab') {\r\n const enter = new KeyboardEvent('keyup', {\r\n ...event,\r\n key: 'Enter',\r\n code: 'Enter',\r\n bubbles: true,\r\n keyCode: 13,\r\n });\r\n event.target?.dispatchEvent(enter);\r\n }\r\n }\r\n}\r\n","import { animate, style, transition, trigger } from '@angular/animations';\r\n\r\nexport const inOutAnimation = (duration: number = 500) =>\r\n trigger('inOutAnimation', [\r\n transition(':enter', [\r\n style({ opacity: 0 }),\r\n animate(`${duration}ms ease-out`, style({ opacity: 1 })),\r\n ]),\r\n transition(':leave', [\r\n style({ opacity: 1 }),\r\n animate(`${duration}ms ease-in`, style({ opacity: 0 })),\r\n ]),\r\n ]);\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { ChrDeleteModalComponent } from '../chr-delete-modal/chr-delete-modal.component';\r\nimport {\r\n ChrDefaultModalComponent,\r\n IDefaultDialogConfig,\r\n} from '../chr-default-modal/chr-default-modal.component';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogService {\r\n constructor(private dialog: MatDialog) {}\r\n\r\n openDelete = (callback?: Function, ...elements: Parameters<any>) => {\r\n const dialogRef = this.open(ChrDeleteModalComponent);\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result == true) callback?.(...elements);\r\n });\r\n };\r\n\r\n openDefault = (config?: IDefaultDialogConfig) => {\r\n const cfg = {\r\n ...config?.config,\r\n data: {\r\n ...config?.config?.data,\r\n _config: {\r\n title: config?.title,\r\n text: config?.text,\r\n close: config?.close,\r\n actions: config?.actions,\r\n },\r\n },\r\n };\r\n const dialogRef = this.open(ChrDefaultModalComponent, cfg);\r\n };\r\n\r\n open = (component: any, options?: MatDialogConfig<any> | undefined) => {\r\n return this.dialog.open(component, options);\r\n };\r\n}\r\n","/*\n * Public API Surface of chr-components\n */\n//COMPONENTS\nexport * from './lib/chr-breadcrumb/chr-breadcrumb.component';\nexport * from './lib/chr-button/chr-button.component';\nexport * from './lib/chr-delete-modal/chr-delete-modal.component';\n//export { ChrFormComponentLegacy } from './lib/chr-form-legacy/chr-form-legacy.component';\nexport * from './lib/chr-form/chr-form.component';\n// -- Form Input --\nexport * from './lib/chr-form/chr-base-input/chr-base-input.component';\nexport * from './lib/chr-form/chr-color-input/chr-color-input.component';\nexport * from './lib/chr-form/chr-date-input/chr-date-input.component';\nexport * from './lib/chr-form/chr-datetime-input/chr-datetime-input.component';\nexport * from './lib/chr-form/chr-file-input/chr-file-input.component';\nexport * from './lib/chr-form/chr-textarea-input/chr-textarea-input.component';\nexport * from './lib/chr-form/chr-toggle-input/chr-toggle-input.component';\nexport * from './lib/chr-search-select/chr-search-select.component';\nexport * from './lib/chr-tag-select/chr-tag-select.component';\nexport * from './lib/chr-table-new/chr-table-new.component';\n// -- From Input --\nexport * from './lib/chr-searchbar/chr-searchbar.component';\nexport * from './lib/chr-paginator/chr-paginator.component';\nexport * from './lib/chr-table/chr-table.component';\nexport * from './lib/chr-table-header-cell/chr-table-header-cell.component';\nexport * from './lib/chr-checkbox/chr-checkbox.component';\nexport * from './lib/chr-separator/chr-separator.component';\nexport * from './lib/models/chr-validators/decimal-validator';\nexport * from './lib/models/chr-validators/max-date-validator';\nexport * from './lib/models/chr-validators/type-validator';\nexport * from './lib/chr-spinner/chr-spinner.component';\nexport * from './lib/chr-toast/chr-toast.component';\nexport * from './lib/chr-default-modal/chr-default-modal.component';\n\n//DIRECTIVES\nexport * from './lib/directives/tab-input-only-handler.directive';\nexport * from './lib/directives/tab-to-enter-handler.directive';\n\n//ANIMATIONS\nexport * from './lib/animations/in-out.animation';\nexport * from './lib/animations/rotation.animation';\n//SERVICES\nexport * from './lib/services/dialog.service';\nexport * from './lib/services/data.service';\nexport * from './lib/services/live-update.service';\nexport * from './lib/services/loader.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/cookie.service';\nexport * from './lib/services/files.service';\n\n//MODELS\nexport * from './lib/models/live-update-message';\n\n//INTERCEPTORS\nexport * from './lib/config/interceptors/SpinnerInterceptor';\nexport * from './lib/config/interceptors/XsrfInterceptor';\n\n//PROVIDERS\nexport * from './lib/config/providers/xsrf-provider';\n\n//Functions\nexport * from './lib/models/chr-validators/base-validator';\nexport * from './lib/models/colors';\n\n//OTHERS\nexport * from 'ngx-pagination';\nexport * from 'chrv-pipes';\nexport * from '@angular/material/dialog';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","i6","i2.FileService","i3.ToastService","i2.CookiesService","i3.DataService","i1.DataService","i2.DataService","finalize","i1.LoaderService","i2.LiveUpdateService","i1.ToastService"],"mappings":"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"}
1
+ {"version":3,"file":"chrv-components.mjs","sources":["../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.ts","../../../projects/chrv-components/src/lib/chr-breadcrumb/chr-breadcrumb.component.html","../../../projects/chrv-components/src/lib/models/colors.ts","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.ts","../../../projects/chrv-components/src/lib/chr-button/chr-button.component.html","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.ts","../../../projects/chrv-components/src/lib/chr-delete-modal/chr-delete-modal.component.html","../../../projects/chrv-components/src/lib/animations/rotation.animation.ts","../../../projects/chrv-components/src/lib/models/chr-validators/required-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/type-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/decimal-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/max-date-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/max-file-size-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/min-file-size-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/maxlength-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/minlength-validator.ts","../../../projects/chrv-components/src/lib/models/chr-validators/base-validator.ts","../../../projects/chrv-components/src/lib/directives/autofocus.directive.ts","../../../projects/chrv-components/src/lib/chr-form/chr-base-input/chr-base-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-base-input/chr-base-input.component.html","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.ts","../../../projects/chrv-components/src/lib/chr-search-select/chr-search-select.component.html","../../../projects/chrv-components/src/lib/chr-tag-select/chr-tag-select.component.ts","../../../projects/chrv-components/src/lib/chr-tag-select/chr-tag-select.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-color-input/chr-color-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-color-input/chr-color-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-date-input/chr-date-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-date-input/chr-date-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-datetime-input/chr-datetime-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-datetime-input/chr-datetime-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-toggle-input/chr-toggle-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-toggle-input/chr-toggle-input.component.html","../../../projects/chrv-components/src/lib/services/files.service.ts","../../../projects/chrv-components/src/lib/services/toast.service.ts","../../../projects/chrv-components/src/lib/chr-form/chr-file-input/chr-file-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-file-input/chr-file-input.component.html","../../../projects/chrv-components/src/lib/chr-form/chr-textarea-input/chr-textarea-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-textarea-input/chr-textarea-input.component.html","../../../projects/chrv-components/src/lib/directives/tab-input-only-handler.directive.ts","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-form.component.html","../../../projects/chrv-components/src/lib/services/cookie.service.ts","../../../projects/chrv-components/src/lib/services/data.service.ts","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.ts","../../../projects/chrv-components/src/lib/chr-paginator/chr-paginator.component.html","../../../projects/chrv-components/src/lib/chr-table-new/chr-table-new.component.ts","../../../projects/chrv-components/src/lib/chr-table-new/chr-table-new.component.html","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.ts","../../../projects/chrv-components/src/lib/chr-searchbar/chr-searchbar.component.html","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.ts","../../../projects/chrv-components/src/lib/chr-table-header-cell/chr-table-header-cell.component.html","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.ts","../../../projects/chrv-components/src/lib/chr-table/chr-table.component.html","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.ts","../../../projects/chrv-components/src/lib/chr-checkbox/chr-checkbox.component.html","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.ts","../../../projects/chrv-components/src/lib/chr-separator/chr-separator.component.html","../../../projects/chrv-components/src/lib/models/live-update-message.ts","../../../projects/chrv-components/src/lib/services/loader.service.ts","../../../projects/chrv-components/src/lib/config/interceptors/SpinnerInterceptor.ts","../../../projects/chrv-components/src/lib/config/interceptors/XsrfInterceptor.ts","../../../projects/chrv-components/src/lib/config/providers/xsrf-provider.ts","../../../projects/chrv-components/src/lib/services/live-update.service.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.ts","../../../projects/chrv-components/src/lib/chr-spinner/chr-spinner.component.html","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.ts","../../../projects/chrv-components/src/lib/chr-toast/chr-toast.component.html","../../../projects/chrv-components/src/lib/chr-default-modal/chr-default-modal.component.ts","../../../projects/chrv-components/src/lib/chr-default-modal/chr-default-modal.component.html","../../../projects/chrv-components/src/lib/directives/tab-to-enter-handler.directive.ts","../../../projects/chrv-components/src/lib/animations/in-out.animation.ts","../../../projects/chrv-components/src/lib/services/dialog.service.ts","../../../projects/chrv-components/src/public-api.ts","../../../projects/chrv-components/src/chrv-components.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MatButton } from '@angular/material/button';\n\nexport interface Breadcrumb {\n display: string;\n link?: string;\n callback?: Function;\n}\n\n@Component({\n selector: 'app-chr-breadcrumb',\n templateUrl: './chr-breadcrumb.component.html',\n styleUrls: [\n './chr-breadcrumb.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [MatButton],\n})\nexport class BreadcrumbComponent {\n @Input() crumbs?: Breadcrumb[];\n\n constructor(public router: Router) {}\n\n navigateTo = (uri: string, data?: any) => {\n this.router.navigate([uri], { state: data });\n };\n}\n","<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n @for (crumb of crumbs; track crumb) {\n <div class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n }\n</div>","export type Color =\r\n | 'primary'\r\n | 'primary-contrast'\r\n | 'secondary'\r\n | 'secondary-contrast'\r\n | 'tertiary'\r\n | 'tertiary-contrast'\r\n | 'warn'\r\n | 'warn-contrast'\r\n | 'error'\r\n | 'error-contrast'\r\n | 'black'\r\n | 'white'\r\n | 'none';\r\n\r\nexport const Colors: { [key: string]: string } = {\r\n primary: 'primary',\r\n 'primary-contrast': 'primary-contrast',\r\n secondary: 'secondary',\r\n 'secondary-contrast': 'secondary-contrast',\r\n tertiary: 'tertiary',\r\n 'tertiary-contrast': 'tertiary-contrast',\r\n warn: 'warn',\r\n 'warn-contrast': 'warn-contrast',\r\n error: 'error',\r\n 'error-contrast': 'error-contrast',\r\n white: 'white',\r\n black: 'black',\r\n};\r\n\r\nexport function getTextColor(color: Color = 'none') {\r\n return `text-${Colors[color] || Colors['black']}`;\r\n}\r\n\r\nexport function getContrastTextColor(color: Color) {\r\n return getTextColor(`${color}-contrast` as Color);\r\n}\r\n\r\nexport function getBackgroundColor(color: Color = 'none') {\r\n return `bg-${Colors[color] || Colors['black']}`;\r\n}\r\n\r\nexport function getContrastBackgroundColor(color: Color) {\r\n return getContrastBackgroundColor(`${color}-contrast` as Color);\r\n}\r\n\r\nexport function getBorderColor(color: Color = 'none') {\r\n return `border-${Colors[color] || Colors['black']}`;\r\n}\r\n\r\nexport function getContrastBorderColor(color: Color = 'none') {\r\n return getBorderColor(`${color}-contrast` as Color);\r\n}\r\n","import { Component, Input } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule, MatFabButton } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\nimport {\n Color,\n getBackgroundColor,\n getContrastTextColor,\n getTextColor,\n} from '../models/colors';\n\n@Component({\n selector: 'app-chr-button',\n templateUrl: './chr-button.component.html',\n styleUrls: [\n './chr-button.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [MatTooltipModule, MatIconModule, MatButtonModule, CommonModule],\n})\nexport class ChrButtonComponent {\n @Input() display?: string = '';\n @Input() icon?: string = '';\n @Input() click?: Function;\n @Input() clickWhileDisabled?: Function;\n @Input() color: Color = 'primary';\n @Input() textColor?: Color = 'primary-contrast';\n @Input() flat: boolean = false;\n\n @Input() predicate?: boolean = true;\n @Input() type: 'responsive' | 'table' | 'full' | 'fixed' | 'small' | 'none' =\n 'none';\n @Input() href?: string;\n @Input() target?: '_blank' | '_parent' | '_self' | '_top';\n @Input() disabled: boolean = false;\n @Input() tooltip?: string;\n @Input() tooltipPosition?:\n | 'above'\n | 'below'\n | 'left'\n | 'right'\n | 'before'\n | 'after';\n\n constructor() {}\n\n setDisabled = (is: boolean) => {\n this.disabled = is;\n };\n\n doClick = () => {\n if (!this.disabled) this.click?.();\n else this.clickWhileDisabled?.();\n };\n\n getBackgroundColor = (color: Color) => getBackgroundColor(color);\n\n getTextColor = (color: Color) => getContrastTextColor(color);\n\n getWidth = () => {\n switch (this.type) {\n case 'fixed':\n return 'w-36';\n case 'full':\n return 'w-full';\n case 'responsive':\n return 'w-full';\n case 'small':\n return 'w-9';\n case 'table':\n return 'w-full';\n default:\n return 'w-min';\n }\n };\n\n getShadow = () => {\n if (this.flat) return '';\n return 'button-shadow';\n };\n}\n","<a class=\"flex flex-row cursor-pointer items-center justify-center align-middle h-9 m-0 p-2 rounded-md\"\n style=\"--color: {{getBackgroundColor(color)}};\" [ngClass]=\"[getBackgroundColor(color), getWidth(), getShadow()]\"\n [attr.disabled]=\"disabled || false\" (click)=\"doClick()\" [attr.href]=\"href && href\" [attr.target]=\"target && target\"\n [matTooltip]=\"tooltip||''\" [matTooltipPosition]=\"tooltipPosition||'above'\">\n <span *ngIf=\"display\" [ngClass]=\"getTextColor(color)\"\n class=\"text-nowrap overflow-hidden text-ellipsis\">{{display}}</span>\n <mat-icon *ngIf=\"icon\" class=\"!m-0\" [ngClass]=\"getTextColor(color)\">{{ icon }}</mat-icon>\n</a>","import { Component } from '@angular/core';\nimport {\n MatDialogRef,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,\n} from '@angular/material/dialog';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\n\n@Component({\n selector: 'app-chr-delete-modal',\n templateUrl: './chr-delete-modal.component.html',\n styleUrls: [\n './chr-delete-modal.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n ChrButtonComponent,\n MatDialogClose,\n MatTooltip,\n ],\n})\nexport class ChrDeleteModalComponent {\n public valid: boolean = false;\n\n constructor(public dialogRef: MatDialogRef<ChrDeleteModalComponent>) {}\n\n ngOnInit() {}\n\n public cancel = () => {\n this.dialogRef.close();\n };\n\n public close = () => {\n this.dialogRef.close(true);\n };\n}\n","<div class=\"w-full overflow-auto overflow-x-hidden\" style=\"background-color: var(--background-color);\">\n <h2 mat-dialog-title class=\"\">Supprimer un élément</h2>\n <mat-dialog-content class=\"mat-typography \">\n Attention:\n <br>\n <br>\n La suppression d'un élément est irréversible.\n <br>\n <br>\n Vous allez supprimer un élément et sa référence sera effacée dans toute l'application.\n <br>\n Si d'autres éléments y sont liés, il est possible qu'ils soient supprimés en même temps.\n <br>\n <br>\n En effectuant cette action et cliquant sur \"Confirmer\" vous certifiez que vous avez pris connaissance des\n conséquences possibles et souhaitez tout de même poursuivre.\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"w-full flex flex-row justify-between\">\n <app-chr-button display=\"Annuler\" type=\"fixed\" color=\"secondary\" [click]=\"cancel\"></app-chr-button>\n <app-chr-button display=\"Confirmer\" type=\"fixed\" color=\"error\" [click]=\"close\"\n [matTooltip]=\"'Attention: cette action est irréversible !'\" matTooltipPosition=\"above\"></app-chr-button>\n </div>\n </mat-dialog-actions>\n</div>","import {\r\n animate,\r\n style,\r\n transition,\r\n trigger,\r\n state,\r\n} from '@angular/animations';\r\n\r\nexport const rotationAnimation = (\r\n initialAngle: number = 0,\r\n endAngle: number = 360,\r\n duration: number = 500\r\n) =>\r\n trigger('rotationAnimation', [\r\n state(\r\n 'initial',\r\n style({\r\n transform: `rotate(${initialAngle}deg)`,\r\n })\r\n ),\r\n state(\r\n 'rotated',\r\n style({\r\n transform: `rotate(${endAngle}deg)`,\r\n })\r\n ),\r\n transition('initial => rotated', [\r\n //style({ opacity: 0 }),\r\n animate(`${duration}ms ease`),\r\n ]),\r\n transition('rotated => initial', [\r\n //style({ opacity: 1 }),\r\n animate(`${duration}ms ease`),\r\n ]),\r\n ]);\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-required]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: RequiredValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class RequiredValidatorDirective implements Validator {\r\n @Input() required?: boolean = true;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.required ? required(this.required)(control) : null;\r\n }\r\n}\r\n\r\nexport function required(required: boolean = true): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n const isBoolean = typeof value === 'boolean';\r\n const isValueValidBoolean = value === true || value === false;\r\n\r\n if (isBoolean && isValueValidBoolean) return null;\r\n\r\n if (value === 0) return null;\r\n\r\n // Technically this should only send the error if the value is null, undefined or if it is a falsy value that isn't handled\r\n return !control.value\r\n ? ({\r\n required: true,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-type]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: TypeValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class TypeValidatorDirective implements Validator {\r\n @Input() type?: string;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.type ? type(this.type)(control) : null;\r\n }\r\n}\r\n\r\nexport function type(type: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isType = typeof value === type;\r\n\r\n if (type === 'array')\r\n isType =\r\n typeof value !== 'string' &&\r\n (value as any[])?.length !== undefined &&\r\n (value as any[])?.length !== null;\r\n\r\n return !isType\r\n ? ({\r\n type: true,\r\n requiredType: type,\r\n actualType: typeof value,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-decimal]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: DecimalValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class DecimalValidatorDirective implements Validator {\r\n @Input() amount?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.amount ? decimal(this.amount)(control) : null;\r\n }\r\n}\r\n\r\nexport function decimal(amount: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = false;\r\n\r\n const str = `${value}`;\r\n isTooLong =\r\n str.indexOf(',') != -1\r\n ? (str.split(',')[1] ? str.split(',')[1].length : 0) > amount\r\n : str.indexOf('.') != -1\r\n ? (str.split('.')[1] ? str.split('.')[1].length : 0) > amount\r\n : false;\r\n\r\n return isTooLong\r\n ? ({\r\n decimal: true,\r\n max: amount,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport moment from 'moment';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-max-date]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxDateValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxDateValidatorDirective implements Validator {\r\n @Input() date?: Date;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.date ? maxDate(this.date)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxDate(date: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const maxDate = moment(date);\r\n const inputDate = moment(value);\r\n\r\n return !(inputDate.isValid() && inputDate.isBefore(maxDate))\r\n ? ({\r\n maxdate: true,\r\n max: maxDate.toDate(),\r\n actual: value,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { IFile } from '../file';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-max-file-size]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxFileSizeValidator,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxFileSizeValidator implements Validator {\r\n @Input() max: number = 0;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.max ? maxFileSize(this.max)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxFileSize(maxSize: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: IFile | IFile[] = control.value;\r\n const sizeInBytes = maxSize * 1024 * 1024;\r\n let isSizeCompliant = true;\r\n const errors: { [index: number]: boolean } = {};\r\n let fileSize: number | null = null;\r\n\r\n if (value === null) return null;\r\n\r\n if (Array.isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n if (!value[i].file) continue;\r\n\r\n if (value[i].file!.size > sizeInBytes) {\r\n errors[i] = true;\r\n isSizeCompliant = false;\r\n }\r\n }\r\n } else {\r\n if (!value.file) return null;\r\n\r\n fileSize =\r\n (value instanceof File ? value.size : value.file?.size) ?? null;\r\n\r\n isSizeCompliant = fileSize !== null && fileSize < sizeInBytes;\r\n }\r\n\r\n return !isSizeCompliant\r\n ? ({\r\n maxfilesize: true,\r\n max: sizeInBytes,\r\n actual: fileSize,\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { IFile } from '../file';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-min-file-size]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MinFileSizeValidator,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MinFileSizeValidator implements Validator {\r\n @Input() min: number = 0;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.min ? minFileSize(this.min)(control) : null;\r\n }\r\n}\r\n\r\nexport function minFileSize(minSize: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: IFile | IFile[] = control.value;\r\n const sizeInBytes = minSize * 1024 * 1024;\r\n let isSizeCompliant = true;\r\n const errors: { [index: number]: boolean } = {};\r\n let fileSize: number | null = null;\r\n\r\n //console.log(value);\r\n\r\n if (value === null) return null;\r\n\r\n if (Array.isArray(value)) {\r\n for (let i = 0; i < value.length; i++) {\r\n if (!value[i].file) continue;\r\n\r\n if (value[i].file!.size <= sizeInBytes) {\r\n errors[i] = true;\r\n isSizeCompliant = false;\r\n }\r\n }\r\n } else {\r\n if (!value.file) return null;\r\n\r\n fileSize =\r\n (value instanceof File ? value.size : value.file?.size) ?? null;\r\n\r\n isSizeCompliant = fileSize !== null && fileSize >= sizeInBytes;\r\n }\r\n\r\n return !isSizeCompliant\r\n ? ({\r\n minfilesize: true,\r\n min: sizeInBytes,\r\n actual: fileSize,\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-maxlength]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MaxLengthValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MaxLengthValidatorDirective implements Validator {\r\n @Input() treshold?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.treshold ? maxLength(this.treshold)(control) : null;\r\n }\r\n}\r\n\r\nexport function maxLength(treshold: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: string | any[] = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = value.length > treshold;\r\n\r\n return isTooLong\r\n ? ({\r\n maxlength: true,\r\n max: treshold,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Input, Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\n\r\n@Injectable({ providedIn: 'root' })\r\n@Directive({\r\n selector: '[app-minlength]',\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: MinLengthValidatorDirective,\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class MinLengthValidatorDirective implements Validator {\r\n @Input() treshold?: number;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.treshold ? minLength(this.treshold)(control) : null;\r\n }\r\n}\r\n\r\nexport function minLength(treshold: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value: string | any[] = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let isTooLong = value.length < treshold;\r\n\r\n return isTooLong\r\n ? ({\r\n minlength: true,\r\n min: treshold,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import {\r\n AbstractControl,\r\n AsyncValidatorFn,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { required } from './required-validator';\r\nimport { type } from './type-validator';\r\nimport { decimal } from './decimal-validator';\r\nimport { maxDate } from './max-date-validator';\r\nimport { map, Observable } from 'rxjs';\r\nimport { maxFileSize } from './max-file-size-validator';\r\nimport { minFileSize } from './min-file-size-validator';\r\nimport { maxLength } from './maxlength-validator';\r\nimport { minLength } from './minlength-validator';\r\n\r\nexport interface IControlValidation {\r\n rule: string;\r\n validator?: (control: AbstractControl) => ValidationErrors | null;\r\n key?: string;\r\n value?: any;\r\n display?: string;\r\n}\r\n\r\nexport function SyncValidatorToAsync(validator: ValidatorFn): AsyncValidatorFn {\r\n // COPILOT Generated. Switch to observable and try to replace regular validators.\r\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n const obs = new Observable().pipe(map((res) => validator(control)));\r\n return obs;\r\n };\r\n}\r\n\r\nexport function getValidators(rules?: IControlValidation[]): ValidatorFn[] {\r\n return getSyncValidators(rules);\r\n}\r\n\r\nexport function getAsyncValidators(\r\n rules?: IControlValidation[]\r\n): AsyncValidatorFn[] {\r\n return getSyncValidators(rules).map((validator) =>\r\n SyncValidatorToAsync(validator)\r\n );\r\n}\r\n\r\nexport function getSyncValidators(rules?: IControlValidation[]) {\r\n const validators: ValidatorFn[] = [];\r\n if (!rules) return validators;\r\n //Switch case breaks the mobile app so we'll do if statements\r\n for (const validation of rules) {\r\n if (validation.validator !== undefined) {\r\n validators.push(validation.validator);\r\n continue;\r\n }\r\n const rule = validation.rule?.toLocaleLowerCase();\r\n if (rule == 'min') {\r\n validation.display = `Cette valeur est trop petite (min: ${validation.value})!`;\r\n validators.push(Validators.min(validation.value));\r\n }\r\n if (rule == 'max') {\r\n validation.display = `Cette valeur est trop grande (max: ${validation.value})!`;\r\n validators.push(Validators.max(validation.value));\r\n }\r\n if (rule == 'required') {\r\n validation.display = 'Ce champs est requis !';\r\n validators.push(required());\r\n }\r\n if (rule == 'email') {\r\n validation.display = \"Cette adresse email n'est pas valide !\";\r\n validators.push(Validators.email);\r\n }\r\n if (rule == 'minlength') {\r\n validation.display = `Cette valeur est trop petite (min: ${validation.value})!`;\r\n validators.push(minLength(validation.value));\r\n }\r\n if (rule == 'maxlength') {\r\n validation.display = `Cette valeur est trop grande (max: ${validation.value})!`;\r\n validators.push(maxLength(validation.value));\r\n }\r\n if (rule == 'type') {\r\n validation.display = \"Cette valeur n'est pas valide !\";\r\n validators.push(type(validation.value));\r\n }\r\n if (rule == 'decimal') {\r\n validation.display = `Le nombre de décimal n'est pas valide (max: ${validation.value}) !`;\r\n validators.push(decimal(validation.value));\r\n }\r\n if (rule == 'maxdate') {\r\n validation.display = `Cette date est trop grande (max: ${validation.value}) !`;\r\n validators.push(maxDate(validation.value));\r\n }\r\n if (rule == 'maxfilesize') {\r\n validation.display = `Ce fichier est trop grand (max: ${validation.value} Mb) !`;\r\n validators.push(maxFileSize(validation.value));\r\n }\r\n if (rule == 'minfilesize') {\r\n validation.display = `Ce fichier est trop petit (min: ${validation.value} Mb) !`;\r\n validators.push(minFileSize(validation.value));\r\n }\r\n }\r\n return validators;\r\n}\r\n","import { Directive, HostListener, ElementRef, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[chrAutofocus]',\r\n})\r\nexport class AutofocusDirective {\r\n @Input() chrAutofocus?: boolean | '' | null = false;\r\n constructor(private host: ElementRef) {}\r\n\r\n ngAfterViewInit() {\r\n if (this.chrAutofocus === true) this.host.nativeElement.focus();\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NgControl,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport {\r\n getSyncValidators,\r\n getValidators,\r\n IControlValidation,\r\n} from '../../models/chr-validators/base-validator';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n BehaviorSubject,\r\n debounceTime,\r\n distinctUntilChanged,\r\n skip,\r\n Subscription,\r\n} from 'rxjs';\r\nimport { InputType } from '../../models/controls';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-base-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n CommonModule,\r\n MatError,\r\n FormsModule,\r\n MatIcon,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-base-input.component.html',\r\n styleUrls: [\r\n './chr-base-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // REMOVED FROM PROVIDERS TO AVOID A CYCLIC DEPENDENCY. We will manually bind the controlValueAccessor of the NgControl when we receive it from the DI Context.\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrBaseInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n})\r\n/**\r\n * BaseInput Component. Gives signature and default funtionnalities required for a basic input with debounce time.\r\n *\r\n * Any class inheriting BaseInput and being used outside a ReactiveForm will genereate it's own FormControl for validation's sake.\r\n * Ensure you are correctly using [form] | [formGroup] | [formControlName] otherwise.\r\n *\r\n * Any class inheriting BaseInput should implements, at least, the ControlValueAccessor, OnInit, AfterViewInit and OnDestroy interfaces.\r\n * Any child class that override the OnInit, AfterViewInit, OnDestroy interfaces should call the assaociated super method.\r\n */\r\nexport class ChrBaseInputComponent\r\n implements OnInit, ControlValueAccessor, AfterViewInit, OnDestroy\r\n{\r\n /**\r\n * The label that will be shown to the user for this input.\r\n */\r\n @Input() label: string | null = null;\r\n\r\n /**\r\n * The type of the input. The BaseInput class is designed to be used for the basic text/number/password/hidden types. Any other kind of input would probably benefit of a custom component inheriting BaseInput.\r\n */\r\n @Input() type: InputType = 'text';\r\n\r\n /**\r\n * The id of the input.\r\n */\r\n @Input() id: string | null = null;\r\n\r\n /**\r\n * The name of the input. It's the model's property name or the key that will be set to the value object\r\n */\r\n @Input() name: string | null = null;\r\n\r\n public value: any | null = null;\r\n\r\n private valueSubject: BehaviorSubject<any | null> = new BehaviorSubject(null);\r\n\r\n private valueSubscription: Subscription | null = null;\r\n\r\n /**\r\n * The value change event. This will be triggered both by onChange and by onValueChange (they technically should not be fired together as onValueChange ends up calling onChange)\r\n */\r\n @Output() valueChanges: EventEmitter<any> = new EventEmitter();\r\n\r\n /**\r\n * Whether or not the input is required\r\n */\r\n protected required: boolean = false;\r\n\r\n /**\r\n * Span that will be shown under the input\r\n */\r\n @Input() span: string | null = null;\r\n\r\n /**\r\n * Name of the material icon that will be displayed\r\n */\r\n @Input() icon: string | null = null;\r\n\r\n /**\r\n * A callback function that will be triggered on the input's icon click with the current value of the input\r\n */\r\n @Input() iconCallback: ((value: any) => string) | null = null;\r\n\r\n /**\r\n * Whether or not the icon's callback is enabled\r\n */\r\n @Input() iconCallbackDisabled: boolean = false;\r\n\r\n /**\r\n * Tooltip that will be displayed when hovering the input's icon\r\n */\r\n @Input() iconTooltip: string | null = null;\r\n\r\n /**\r\n * Tooltip that will be displayed on hover\r\n */\r\n @Input() tooltip: string | null = null;\r\n\r\n /**\r\n * Debounce time that will be used by the input before throwing the new value event\r\n */\r\n @Input() debounceTime?: number | null;\r\n\r\n /**\r\n * Validations that will be evaluated for the input. In the case of custom validator function, the return object needs to contain a key with the 'rule' and it's value needs to be 'true'\r\n */\r\n @Input() validations: IControlValidation[] = [];\r\n\r\n /**\r\n * Indicates whether or not this input is being used outside a ReactiveForm. Default is false. If this is false, the input will create it's own FormControl as to enable it's complex behaviors\r\n */\r\n @Input() standalone: boolean = false;\r\n\r\n /**\r\n * Indicates whether or not this input should try catching the focus on page load\r\n */\r\n @Input() autofocus: boolean = false;\r\n\r\n private _disabled: boolean = false;\r\n\r\n /**\r\n * Getter and setter that allow the control of the FormControl's state from the template\r\n */\r\n @Input() get disabled() {\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = value;\r\n if (value) this.control?.control?.disable();\r\n else this.control?.control?.enable();\r\n }\r\n\r\n /**\r\n * Whether or not the input starts as disabled. This can then be changed through the form control.\r\n */\r\n isDisabled: boolean = false;\r\n\r\n /**\r\n * Array of string representing the input's siblings' FormControl's name. This will be used to trigger the validity of the siblings when this input's value changes\r\n */\r\n @Input() siblings: string[] = [];\r\n\r\n onChange: any = () => {};\r\n\r\n onTouch: any = () => {};\r\n\r\n /**\r\n * Whether or not the input is touched\r\n */\r\n isTouched: boolean = false;\r\n\r\n /**\r\n * The NgControl associated with this input\r\n */\r\n protected control: NgControl | null = null;\r\n\r\n /**\r\n * The validity status of the related FormControl\r\n */\r\n isValid: boolean | null = this.control ? this.control.valid : null;\r\n\r\n /**\r\n * Every child should either call super(ngControl) or implement the logic for the input to bind the control to the FormControl.\r\n * @param ngControl the FormControl binded to this CVA\r\n */\r\n constructor(@Optional() ngControl: NgControl | null) {\r\n this.control = ngControl;\r\n if (this.control != null) {\r\n this.control.valueAccessor = this;\r\n }\r\n }\r\n\r\n /**\r\n * A callback method that is invoked immediately after the default change detector has checked the directive's data-bound properties for the first time, and before any of the view or content children have been checked. It is invoked only once when the directive is instantiated.\r\n * In the case of the BaseInput class, this methods also subscribes to the onValueChange's subject as to register the debounce time.\r\n *\r\n * To use in any component inheriting the BaseInput Class, please call super.ngOnInit() at any point within the overriden ngOnInit() method.\r\n */\r\n ngOnInit(): void {\r\n //We start by configuring the control. This will set missing NgControl and validators if required\r\n this.configureFormControl();\r\n //Configure the listener that will trigger on OnValueChange call to write value and replicate events\r\n this.configureDebouncing();\r\n //Configure the listener that will trigger when OnTouch is called\r\n this.configureTouchBehavior();\r\n //Configure the listener that will trigger a validity check for this input's siblings\r\n this.configureValidityReplication();\r\n //We compute the required-ness of the input only once\r\n this.required = this.isControlRequired();\r\n }\r\n\r\n /**\r\n * A callback method that is invoked immediately after Angular has completed initialization of a component's view. It is invoked only once when the view is instantiated.\r\n *\r\n * To use in any component inheriting the BaseInput Class, please call super.ngAfterViewInit() at any point within the overriden ngAfterViewInit() method.\r\n */\r\n ngAfterViewInit(): void {\r\n // const ngControl: NgControl | null = this.injector.get(NgControl, null);\r\n // console.log(ngControl);\r\n }\r\n\r\n /**\r\n * A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.\r\n * In the case of the BaseInput class, this methods also unsubscribe to the onValueChange's subject as to avoid leaving a stray observable.\r\n *\r\n * To use in any component inheriting the BaseInput Class, please call super.ngOnDestroy() at any point within the overriden ngOnDestroy() method.\r\n */\r\n ngOnDestroy(): void {\r\n this.valueSubscription?.unsubscribe();\r\n }\r\n\r\n /**\r\n * A method that returns the input's value. If it's linked to a formcontrol returns the formcontrol's value otherwise the local value\r\n * @returns value any\r\n */\r\n getValue = () => {\r\n return this.control ? this.control.value : this.value;\r\n };\r\n\r\n /**\r\n * A method that can be used instead of onChange(value). It will pass the new value to an observable that will in turn add a debounce time then call the onchange function.\r\n *\r\n * In short, using this method instead of onChange will add a debounce time.\r\n * @param value The new value of the input\r\n * @returns the value observable\r\n */\r\n onValueChange = (value: any) => {\r\n this.valueSubject.next(value);\r\n return this.valueSubscription!;\r\n };\r\n\r\n writeValue(obj: any): void {\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouch = () => {\r\n this.isTouched = true;\r\n fn();\r\n };\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled;\r\n }\r\n\r\n protected updateValueAndValidity = () => {\r\n this.control?.control?.updateValueAndValidity();\r\n };\r\n\r\n /**\r\n * Despite it's name, this method returns a single validation error's display (even if there are multiple). And that is the first error found.\r\n * @returns display of the last error\r\n */\r\n protected getLastError = () => {\r\n for (const validation of this.validations ?? []) {\r\n if (this.control?.errors?.[validation.rule.toLowerCase()]) {\r\n return validation.display || \"Cette valeur n'est pas valide !\";\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Returns a boolean describing whether or not the control is required\r\n * @returns\r\n */\r\n protected isControlRequired = () => {\r\n return (\r\n this.validations?.some((v) =>\r\n v.rule?.toLowerCase().includes('required')\r\n ) || false\r\n );\r\n };\r\n\r\n /**\r\n * Returns the current error status of the input.\r\n * @returns\r\n */\r\n protected hasError = () => {\r\n return this.control?.errors !== undefined && this.control?.errors !== null;\r\n };\r\n\r\n private configureDebouncing = () => {\r\n this.valueSubscription = this.valueSubject\r\n .pipe(\r\n // The Behavior Subject always has an initial value. Which means that subscribing to it will make it look like the input has a new value (initially null).\r\n // Which is false, because we're only instanciating the object. This is why we need to skip the first value. Otherwise the form will receive a random null when this\r\n // observable is subscribed to and set the value to said null.\r\n skip(1),\r\n debounceTime(this.debounceTime ?? 200),\r\n distinctUntilChanged()\r\n )\r\n .subscribe((res) => {\r\n // If the value is an empty string, set the value to null to trigger validation and prevent an inconsitent value to be set (ex: for number type input)\r\n let value = res !== '' ? res : null;\r\n // If we use the input type numbe, we cast the value to a number because for some reason, it may sometimes be a string.\r\n if (this.type === 'number') value = Number(value);\r\n this.onChange(value);\r\n this.valueChanges.emit(value);\r\n });\r\n };\r\n\r\n private configureTouchBehavior = () => {\r\n //We ensure that the control is marked as touched when it's status changes. We could probably limit the onTouch to one or two specifics statuses but I did not test further\r\n //As it seems to work fine. This is made to work around the fact that trigger the markAsTouched function via the form doesn't trigger the onTouch of the ControlValueAccessor\r\n this.control?.statusChanges?.subscribe((res) => {\r\n if (this.control?.touched) this.onTouch();\r\n });\r\n };\r\n\r\n private configureValidityReplication = () => {\r\n this.control?.valueChanges?.subscribe((value) => {\r\n for (const sibling of this.siblings) {\r\n this.control?.control?.parent?.get(sibling)?.updateValueAndValidity();\r\n }\r\n });\r\n };\r\n\r\n private configureFormControl = () => {\r\n if (this.control !== null && this.standalone)\r\n throw \"You should not use 'BaseInput' or it's derivative in standalone mode within a ReactiveForm\";\r\n\r\n //If the input is standalone and no control has been injected we create one\r\n if (this.control === null && this.standalone) {\r\n this.control = this.buildFormControl() as any as NgControl;\r\n\r\n //We define this component as the control's value accessor\r\n this.control.valueAccessor = this;\r\n }\r\n\r\n // This code allow the correct binding of the standalone input with the FormControl. However it causes unhandleable validation errors\r\n // This behavior is hacky and should not be supported anyway.\r\n // if (this.control !== null && this.isStandalone) {\r\n // const formControlName = this.control as FormControlName;\r\n // const formDirective = formControlName.formDirective as FormGroupDirective;\r\n // const form = formDirective.form;\r\n // const control = this.buildFormControl();\r\n // form.addControl(this.name!, control);\r\n // formDirective.addControl(formControlName);\r\n // }\r\n\r\n //If the input is not standlone, we should have had a NgControl injected in the constructor\r\n if (!this.standalone) {\r\n //We add the validators to the input.\r\n this.control?.control?.setValidators(getValidators(this.validations));\r\n }\r\n\r\n //The input's validity is evaluated once on HTML and FormControl binding. As we are acting outside this behavior, we trigger the validation once here\r\n this.updateValueAndValidity();\r\n };\r\n\r\n private buildFormControl = () => {\r\n return new FormControl(null, getSyncValidators(this.validations));\r\n };\r\n\r\n protected doCallback = () => {\r\n if (this.iconCallbackDisabled) return;\r\n this.iconCallback?.(this.getValue());\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\" [chrAutofocus]=\"autofocus || false\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n (ngModelChange)=\"onValueChange($event)\" [type]=\"type\" [id]=\"name\" [name]=\"name ?? ''\"\r\n [attr.autocomplete]=\"type == 'password' ? 'current-password':''\" placeholder=\" \" [value]=\"value || ''\"\r\n class=\"block input pt-2 pb-0.5 px-0 w-full height-normalized text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':'cursor-pointer'\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\" (click)=\"doCallback()\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError() ? 'text-span text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span }}\r\n </span>\r\n }\r\n</div>","import {\n Component,\n Input,\n ViewChild,\n OnInit,\n OnDestroy,\n Injector,\n Optional,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteModule,\n} from '@angular/material/autocomplete';\nimport { Observable, startWith, map, BehaviorSubject, Subject } from 'rxjs';\nimport { MatOption } from '@angular/material/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { rotationAnimation } from '../animations/rotation.animation';\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\nimport { MatError } from '@angular/material/form-field';\nimport { AutofocusDirective } from '../directives/autofocus.directive';\n\nexport interface IInputSearchFilter {\n display: string;\n callback?: Function;\n tooltip?: string;\n}\n\n@Component({\n selector: 'app-chr-search-select, [app-chr-search-select]',\n templateUrl: './chr-search-select.component.html',\n styleUrls: [\n './chr-search-select.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n providers: [\n // {\n // provide: NG_VALUE_ACCESSOR,\n // multi: true,\n // useExisting: ChrSearchSelectComponent,\n // },\n ],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MatTooltip,\n MatAutocompleteModule,\n MatOption,\n AsyncPipe,\n MatIconModule,\n MatError,\n CommonModule,\n MatError,\n AutofocusDirective,\n ],\n animations: [rotationAnimation(180, 90, 200)],\n})\nexport class ChrSearchSelectComponent\n extends ChrBaseInputComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n public predicate: boolean = true;\n\n public filteredModelOptions?: Observable<any>;\n\n private values: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n @ViewChild('auto') autocomplete!: MatAutocomplete;\n\n @Input() placeholder?: string;\n @Input() data: any[] | null = [];\n @Input() display?: (entry: any) => string;\n @Input() filters?: IInputSearchFilter[];\n\n /**\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\n * If this callback returns null, the entry will NOT be added.\n * This lets you update the value before it's added.\n */\n @Input() addCallback?:\n | ((entry: any, subject: Subject<any>) => any | null | void)\n | null = null;\n //Subject used in callback methods to update the value when received.\n private addSubject: Subject<any> = new Subject();\n /**\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\n * This defaults to false.\n * If there are neither data nor display function, this defaults to true.\n */\n @Input() acceptText: boolean | null = null;\n protected filterIndex: number = 0;\n protected overrideShowResults: boolean = false;\n\n constructor(@Optional() ngControl: NgControl) {\n super(ngControl);\n this.type = 'searchSelect';\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.registerFilters();\n this.addSubject.subscribe((entry) => {\n if (this.value != entry) {\n this.value = entry;\n this.onValueChange(this.value);\n }\n });\n }\n\n /**\n * Reset the input's text and sets the value to null as to invalidate the input\n */\n protected reset = () => {\n this.value = '';\n this.values.next('');\n this.onValueChange(null);\n };\n\n /**\n * Set's the input's text's value and set the value to null as to invalidate the input\n * @param input text input\n */\n protected inputChange = (input: string) => {\n this.value = input;\n this.values.next(input);\n this.onValueChange(null);\n };\n\n /**\n * Returns the model's textual value using the display function display passed as callback. If there is no display, returns the model's default string value.\n * @param model the data's entry for which we want the textual value\n * */\n protected getModelDisplay = (model: any) => {\n return this.display ? this.display?.(model) : model;\n };\n\n /**\n * Start filtering the autocomplete's list based on the input's textual value\n */\n protected registerFilters = () => {\n this.filteredModelOptions = this.values.pipe(\n startWith(''),\n map((value) => this._filterModel(value! || -1)),\n map((values) => {\n return this.filters && this.filters[this.filterIndex].callback\n ? values.filter((r) => this.filters![this.filterIndex].callback!(r))\n : values;\n })\n );\n };\n\n /**\n * Increments the filter and focus the filtered input. It also sets the value to null as to force the user to choose a filtered value.\n * @param input the input in which the user should type\n */\n protected increment = (input: any) => {\n this.onValueChange(null);\n this.value = '';\n\n input.blur();\n\n const modulo = this.filters ? this.filters.length : 1;\n this.filterIndex = (this.filterIndex + 1) % modulo;\n\n setTimeout(() => {\n input.focus();\n }, 1000);\n };\n\n protected void = () => {};\n\n protected enableShowPanel = (input: any) => {\n //this.value = ' ';\n this.overrideShowResults = true;\n this.values.next(' ');\n\n input.focus();\n };\n\n protected disableShowPanel = () => {\n //this.searchSelect.setValue('', { emitViewToModelChange: false });\n this.overrideShowResults = false;\n };\n\n protected addFromText = (event: any) => {\n if (this.acceptText && this.value?.trim()) {\n const value = this.addCallback\n ? this.addCallback(this.value, this.addSubject)\n : this.value;\n if (this.addCallback && (value === null || value === undefined)) {\n this.value = '';\n return;\n }\n this.addSubject.next(value);\n }\n };\n\n private _filterModel = (value: number | string): any[] => {\n return typeof value == 'string'\n ? this._doFilterModelString(`${value}`)\n : this._doFilterModelInt(value);\n };\n\n private _doFilterModelInt = (id: number) => {\n const tmp = this.data?.find((r) => r.id == id);\n return tmp ? tmp : [];\n };\n\n private _doFilterModelString = (input: string) => {\n return this.data?.filter((r) => this._filterValues(r, input));\n };\n\n private _filterValues = (value: any, input: string) => {\n //Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\n if (input == ' ') return true;\n //Sinon, on ne renvoie true que pour les éléments qui matchent son input\n return `${this.getModelDisplay(value)}`\n .trim()\n .toLowerCase()\n .includes(input.trim().toLowerCase());\n };\n}\n","@if (predicate) {\n<div style=\"position: relative;\">\n <div style=\"position: relative;\">\n <input [matTooltip]=\"isDisabled ? '': (tooltip ? tooltip: 'Entrez un espace pour voir les choix disponibles')\"\n [chrAutofocus]=\"autofocus || false\" matTooltipPosition=\"above\" #input type=\"text\" name=\"{{name}}\"\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\"\n class=\"block input pt-2 pb-0.5 px-0 w-full text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\"\n placeholder=\"{{ placeholder || ' ' }}\" (keyup.backspace)=\"reset()\" [ngModel]=\"value\"\n (keyup.enter)=\"addFromText($event)\" (ngModelChange)=\"inputChange($event)\" [matAutocomplete]=\"auto\"\n (blur)=\"onTouch()\" (blur)=\"disableShowPanel()\" />\n\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\n label\n }}\n @if(label && label.trim() != ''){\n @if (required) {\n <span class=\"text-error\">*</span>\n }\n :\n }\n @if (\n isTouched && hasError()) {\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\n }\n </label>\n <ng-content></ng-content>\n <div\n class=\"absolute top-0.5 right-0 flex flex-row h-[calc(100%_-_2px)] justify-center content-center items-center align-middle overflow-hidden\">\n <mat-icon [@rotationAnimation]=\"overrideShowResults ? 'rotated' : 'initial'\" matTooltipPosition=\"above\"\n class=\"cursor-pointer\" (click)=\"enableShowPanel(input)\">\n arrow_right\n </mat-icon>\n @if (filters) {\n <span [matTooltip]=\"filters[filterIndex].tooltip || ''\" matTooltipPosition=\"above\"\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center \n align-middle items-center\" (click)=\"filters ? increment(input) : void()\">\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{ filters[filterIndex].display }}\n </p>\n </span>\n }\n </div>\n </div>\n <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id}}-auto\"\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"onValueChange($event.option.value)\">\n @for (model of filteredModelOptions | async; track model) {\n <mat-option class=\"\" [value]=\"model\" selected>\n {{ getModelDisplay(model) }}\n </mat-option>\n }\n </mat-autocomplete>\n @if (span != null) {\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\n }}\n </span>\n }\n</div>\n}","import {\n Component,\n Input,\n ViewChild,\n AfterViewInit,\n OnInit,\n OnDestroy,\n Injector,\n Optional,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NgControl,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport {\n MatAutocomplete,\n MatAutocompleteModule,\n} from '@angular/material/autocomplete';\nimport { Observable, startWith, map, BehaviorSubject, Subject } from 'rxjs';\nimport { MatOption } from '@angular/material/core';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { rotationAnimation } from '../animations/rotation.animation';\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\nimport { MatError } from '@angular/material/form-field';\nimport { IInputSearchFilter } from '../chr-search-select/chr-search-select.component';\nimport { AutofocusDirective } from '../directives/autofocus.directive';\n\n@Component({\n selector: 'app-chr-tag-select, [app-chr-tag-select]',\n templateUrl: './chr-tag-select.component.html',\n styleUrls: [\n './chr-tag-select.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n providers: [\n // {\n // provide: NG_VALUE_ACCESSOR,\n // multi: true,\n // useExisting: ChrTagSelectComponent,\n // },\n ],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MatTooltip,\n MatAutocompleteModule,\n MatChipsModule,\n MatOption,\n AsyncPipe,\n MatIconModule,\n MatError,\n CommonModule,\n MatError,\n AutofocusDirective,\n ],\n animations: [rotationAnimation(180, 90, 200)],\n})\nexport class ChrTagSelectComponent\n extends ChrBaseInputComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n public predicate: boolean = true;\n\n @ViewChild('auto') autocomplete!: MatAutocomplete;\n\n protected overrideShowResults: boolean = false;\n\n public filteredModelOptions?: Observable<any>;\n\n override value: any[] | null = null;\n\n protected textInputValue: string = '';\n\n private values: BehaviorSubject<string> = new BehaviorSubject<string>('');\n\n @Input() placeholder?: string;\n @Input() data: any[] | null = [];\n @Input() display?: (entry: any) => string;\n @Input() filters?: IInputSearchFilter[];\n /**\n * Callback that will be called on click of a chips. The entry will be passed as parameter.\n * If this callback returns null, the entry will be removed.\n * If this callback returns a different value (by reference (ex: different object)) the entry will be replaced by the new value.\n */\n @Input() editCallback?:\n | ((entry: any, subject: Subject<any>) => any | null | void)\n | null = null;\n //Subject used in callback methods to update the value when received.\n private editSubject: Subject<any> = new Subject();\n /**\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\n * If this callback returns null, the entry will NOT be added.\n * This lets you update the value before it's added.\n */\n @Input() addCallback?:\n | ((entry: any, subject: Subject<any>) => any | null | void)\n | null = null;\n //Subject used in callback methods to update the value when received.\n private addSubject: Subject<any> = new Subject();\n\n /**\n * Callback that will be called during the removal of the value. This will be called with the deleted value passed as parameter.\n */\n @Input() removeCallback: ((entry: any) => any | null | void) | null = null;\n\n /**\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\n * This defaults to false.\n * If there are neither data nor display function, this defaults to true.\n */\n @Input() acceptText: boolean | null = null;\n\n constructor(@Optional() ngControl: NgControl) {\n super(ngControl);\n this.type = 'tagSelect';\n }\n\n protected filterIndex: number = 0;\n\n override ngOnInit() {\n super.ngOnInit();\n this.registerFilters();\n if (this.acceptText === null)\n this.acceptText = this.display === null && this.data === null;\n\n //Register subject listeners\n this.addSubject.subscribe((entry) => {\n if (!this.value?.find((v) => v == entry)) {\n this.value = [...(this.value ?? []), entry];\n this.onValueChange(this.value);\n }\n });\n this.editSubject.subscribe((entry) => {\n const index = this.value?.indexOf(entry)!;\n this.value![index] = entry;\n this.value = [...(this.value ?? [])];\n return this.onValueChange(this.value);\n });\n }\n\n override writeValue(obj: any): void {\n super.writeValue(obj);\n }\n\n protected reset = () => {\n this.textInputValue = '';\n this.values.next(' ');\n };\n\n protected inputChange = (input: string) => {\n this.textInputValue = input;\n this.values.next(input);\n };\n\n protected getModelDisplay = (model: any) => {\n return this.display ? this.display?.(model) : model;\n };\n\n protected addFromText = (event: any) => {\n if (this.acceptText && this.textInputValue?.trim()) {\n const value = this.addCallback\n ? this.addCallback(this.textInputValue, this.addSubject)\n : this.textInputValue;\n if (this.addCallback && (value === null || value === undefined)) {\n this.textInputValue = '';\n return;\n }\n this.addSubject.next(value);\n }\n };\n\n protected add = (event: any) => {\n const value = this.addCallback\n ? this.addCallback(event, this.addSubject)\n : event;\n if (this.addCallback && (value === null || value === undefined)) {\n this.textInputValue = '';\n return;\n }\n\n this.textInputValue = '';\n this.addSubject.next(value);\n };\n\n protected edit = (entry: any) => {\n //If no callback, return;\n if (this.editCallback === undefined || this.editCallback === null) return;\n //Call the callback and retrive it's return value\n const res = this.editCallback(entry, this.editSubject);\n //If the callback returns null, we remove the value.\n if (res === null && this.value !== null) {\n this.remove(entry);\n }\n //If the callback returns a different value (different by reference (ex: different object)), we replace the edited entry by the returned entry.\n // if (entry != res) {\n return this.editSubject.next(res);\n // }\n // this.value![this.value!.indexOf(entry)] = entry;\n // return this.onValueChange(this.value);\n };\n\n protected remove(value: any): void {\n if (this.value !== null) this.value = this.value?.filter((v) => v != value);\n if (this.value?.length === 0) this.value = null;\n this.onValueChange(this.value);\n this.removeCallback?.(value);\n }\n\n protected registerFilters = () => {\n this.filteredModelOptions = this.values.pipe(\n startWith(''),\n map((value) => this._filterModel(this.textInputValue || -1)),\n map((values) => {\n return this.filters && this.filters[this.filterIndex].callback\n ? values.filter((r) => this.filters![this.filterIndex].callback!(r))\n : values;\n })\n );\n };\n\n protected increment = (input: any) => {\n this.textInputValue = '';\n\n input.blur();\n\n const modulo = this.filters ? this.filters.length : 1;\n this.filterIndex = (this.filterIndex + 1) % modulo;\n\n input.focus();\n };\n\n protected void = () => {};\n\n protected enableShowPanel = (input: any) => {\n this.overrideShowResults = true;\n this.textInputValue = ' ';\n this.values.next(' ');\n\n input.focus();\n };\n\n protected disableShowPanel = () => {\n this.overrideShowResults = false;\n };\n\n protected getTooltip = () => {\n if (this.isDisabled) return '';\n if (this.display === undefined)\n return \"Appuyez sur 'Enter' pour ajouter la valeur du champs à la liste\";\n return 'Entrez un espace pour voir les choix disponibles';\n };\n\n private _filterModel = (value: number | string): any[] => {\n return typeof value == 'string'\n ? this._doFilterModelString(`${value}`)\n : this._doFilterModelInt(value);\n };\n\n private _doFilterModelInt = (id: number) => {\n const tmp = this.data?.find((r) => r.id == id);\n return tmp ? tmp : [];\n };\n\n private _doFilterModelString = (input: string) => {\n return this.data?.filter((r) => this._filterValues(r, input));\n };\n\n private _filterValues = (value: any, input: string) => {\n //Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\n if (input == ' ') return true;\n //Sinon, on ne renvoie true que pour les éléments qui matchent son input\n return `${this.getModelDisplay(value)}`\n .trim()\n .toLowerCase()\n .includes(input.trim().toLowerCase());\n };\n}\n","@if (predicate) {\n<div style=\"position: relative;\">\n <div style=\"position: relative;\">\n <input [matTooltip]=\"isDisabled ? '': (tooltip ? tooltip: 'Entrez un espace pour voir les choix disponibles')\"\n [matChipInputFor]=\"chipGrid\" matTooltipPosition=\"above\" #input type=\"text\" name=\"{{name}}\"\n [chrAutofocus]=\"autofocus || false\" [ngClass]=\"(isTouched && hasError()) ? 'error':''\"\n class=\"block input pt-2 pb-0.5 px-0 w-full text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\"\n placeholder=\"{{ placeholder || ' ' }}\" (keyup.backspace)=\"reset()\" (keyup.enter)=\"addFromText($event)\"\n [ngModel]=\"textInputValue\" (ngModelChange)=\"inputChange($event)\" [matAutocomplete]=\"auto\" (blur)=\"onTouch()\"\n (blur)=\"disableShowPanel()\" />\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\n label\n }}\n @if(label && label.trim() != ''){\n @if (required) {\n <span class=\"text-red-500\">*</span>\n }\n :\n }\n @if (\n isTouched && hasError()) {\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\n }\n </label>\n <ng-content></ng-content>\n <div *ngIf=\"data && data.length > 0\"\n class=\"absolute top-1.5 right-0 flex flex-row justify-center content-center items-center align-middle overflow-hidden\">\n <mat-icon [@rotationAnimation]=\"overrideShowResults ? 'rotated' : 'initial'\" matTooltipPosition=\"above\"\n class=\"cursor-pointer\" (click)=\"enableShowPanel(input)\">\n arrow_right\n </mat-icon>\n @if (filters) {\n <span [matTooltip]=\"filters[filterIndex].tooltip || ''\" matTooltipPosition=\"above\"\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center \n align-middle items-center\" (click)=\"filters ? increment(input) : void()\">\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{ filters[filterIndex].display }}\n </p>\n </span>\n }\n </div>\n </div>\n <mat-chip-grid #chipGrid class=\"w-full margin-0\">\n @for (entry of value ?? []; track entry) {\n <mat-chip-row (removed)=\"remove(entry)\">\n <div (click)=\"edit(entry)\">{{getModelDisplay(entry)}}</div>\n <button matChipRemove [attr.aria-label]=\"'Supprimer ' + getModelDisplay(entry)\">\n <mat-icon class=\"mat-chip-icon\">cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id}}-auto\"\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"add($event.option.value)\">\n @for (model of filteredModelOptions | async; track model) {\n <mat-option class=\"\" [value]=\"model\" selected>\n {{ getModelDisplay(model) }}\n </mat-option>\n }\n </mat-autocomplete>\n @if (span != null) {\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\n }}\n </span>\n }\n</div>\n}","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-color-input',\r\n imports: [\r\n CommonModule,\r\n MatIcon,\r\n FormsModule,\r\n MatError,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n // providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrColorInputComponent),\r\n // multi: true,\r\n // },\r\n // ],\r\n templateUrl: './chr-color-input.component.html',\r\n styleUrls: [\r\n './chr-color-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class ChrColorInputComponent\r\n extends ChrBaseInputComponent\r\n implements OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl) {\r\n super(ngControl);\r\n this.type = 'color';\r\n }\r\n\r\n parseColor = (event: string) => {\r\n // On récupère la valeur de l'input\r\n this.value = event;\r\n\r\n if (/^#[0-9A-F]{6}$/i.test(event)) this.onValueChange(event);\r\n else this.onValueChange(null);\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input [required]=\"required\" class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n (ngModelChange)=\"parseColor($event)\" [type]=\"type\" [id]=\"name\" [name]=\"name ?? ''\" placeholder=\" \"\r\n [chrAutofocus]=\"autofocus || false\" [value]=\"value || ''\"\r\n class=\"block input pt-1 pb-0.5 m-0 px-0 w-full height-normalized border-0 border-b-2 focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n <div class=\"color-text-input-container\">\r\n <input type=\"text\" max=\"6\" [ngModel]=\"value ?? '#000000'\" (ngModelChange)=\"parseColor($event)\"\r\n style=\"background-color: var(--background-color); margin-bottom: 1px;\" class=\"focus:outline-none input bg-opacity-90 bg-transparent border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-20 px-1 text-center opacity-100 flex justify-center align-middle items-center\" />\r\n </div>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n ViewChild,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n DatePipe,\r\n} from '@angular/common';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-date-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n MatError,\r\n MatIcon,\r\n MatTooltipModule,\r\n CommonModule,\r\n FormsModule,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-date-input.component.html',\r\n styleUrls: [\r\n './chr-date-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrDateInputComponent),\r\n // multi: true,\r\n // },\r\n DatePipe,\r\n {\r\n provide: DATE_PIPE_DEFAULT_OPTIONS,\r\n useValue: { dateFormat: 'shortDate' },\r\n },\r\n ],\r\n})\r\nexport class ChrDateInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl, private datePipe: DatePipe) {\r\n super(ngControl);\r\n this.type = 'date';\r\n }\r\n\r\n override writeValue(obj: any): void {\r\n const formatted = this.dateToString(obj);\r\n this.value = formatted;\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n const parsed = this.parseDate(this.value);\r\n\r\n if (parsed !== null) this.value = this.dateToString(parsed);\r\n }\r\n\r\n onInputChange = (value: any) => {\r\n //console.log(`[DateInput] StringDate: `, value);\r\n const date = this.parseDate(value);\r\n //console.log(`[DateInput] ParsedDate: `, date);\r\n if (date != null) this.value = this.dateToString(date);\r\n // Si la date est invalide, on envoie le null, sinon on envoie l'objet date\r\n this.onValueChange(date);\r\n };\r\n\r\n parseDate = (event: string): Date | null => {\r\n // On récupère la valeur de l'input\r\n this.value = event;\r\n // On essaie de la convertir en date\r\n const date = new Date(Date.parse(event));\r\n // Si la date est valide, on retourne la date, sinon null.\r\n if (date instanceof Date && !isNaN(date as any)) return date;\r\n else return null;\r\n };\r\n\r\n dateToString = (value: Date) => {\r\n return this.datePipe.transform(value, 'yyyy-MM-dd');\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input [required]=\"required\" class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n [chrAutofocus]=\"autofocus || false\" (ngModelChange)=\"onInputChange($event)\" [type]=\"type\" [id]=\"name\"\r\n [name]=\"name ?? ''\" placeholder=\" \" [value]=\"value || ''\"\r\n class=\"block input pt-1.5 px-0 w-full height-normalized text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Self,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n} from '@angular/forms';\r\nimport {\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n DatePipe,\r\n} from '@angular/common';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-datetime-input',\r\n imports: [\r\n CommonModule,\r\n MatIcon,\r\n MatError,\r\n FormsModule,\r\n MatTooltip,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-datetime-input.component.html',\r\n styleUrls: [\r\n './chr-datetime-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrDatetimeInputComponent),\r\n // multi: true,\r\n // },\r\n DatePipe,\r\n {\r\n provide: DATE_PIPE_DEFAULT_OPTIONS,\r\n useValue: { dateFormat: 'shortDate' },\r\n },\r\n ],\r\n})\r\nexport class ChrDatetimeInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl, private datePipe: DatePipe) {\r\n super(ngControl);\r\n this.type = 'date';\r\n }\r\n\r\n override writeValue(obj: any): void {\r\n const formatted = this.dateToString(obj);\r\n this.value = formatted;\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n const parsed = this.parseDate(this.value);\r\n\r\n if (parsed !== null) this.value = this.dateToString(parsed);\r\n }\r\n\r\n onInputChange = (value: any) => {\r\n const date = this.parseDate(value);\r\n\r\n if (date != null) this.value = this.dateToString(date);\r\n\r\n this.onValueChange(date);\r\n };\r\n\r\n parseDate = (event: string): Date | null => {\r\n // On récupère la valeur de l'input\r\n this.value = event;\r\n // On essaie de la convertir en date\r\n const date = new Date(Date.parse(event));\r\n // Si la date est valide, on propage le onChange jusqu'au formulaire\r\n if (date instanceof Date && !isNaN(date as any)) return date;\r\n else return null;\r\n };\r\n\r\n dateToString = (value: Date) => {\r\n return this.datePipe.transform(value, 'yyyy-MM-ddTHH:mm');\r\n };\r\n}\r\n","<div style=\"position: relative;\">\r\n <input [required]=\"required\" class=\"relative\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [ngModel]=\"value\"\r\n [chrAutofocus]=\"autofocus || false\" (ngModelChange)=\"onInputChange($event)\" type=\"datetime-local\" [id]=\"name\"\r\n [name]=\"name ?? ''\" placeholder=\" \" [value]=\"value || ''\"\r\n class=\"block input pt-1.5 px-0 w-full height-normalized text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\" />\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error \">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">\r\n {{ span }}\r\n </span>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-toggle-input',\r\n imports: [\r\n FormsModule,\r\n CommonModule,\r\n MatError,\r\n MatIcon,\r\n MatTooltip,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-toggle-input.component.html',\r\n styleUrls: [\r\n './chr-toggle-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrToggleInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n})\r\nexport class ChrToggleInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n constructor(@Optional() ngControl: NgControl) {\r\n super(ngControl);\r\n this.type = 'toggle';\r\n }\r\n\r\n toggle = (event: any) => {\r\n //console.log(event, event.target.checked);\r\n this.value = event.target.checked;\r\n this.onValueChange(this.value);\r\n };\r\n}\r\n","<div class=\"height-normalized\" style=\"position: relative;\">\r\n <input #tgl type=\"checkbox\" class=\"hidden checkbox\" placeholder=\" \" [checked]=\"value\" (change)=\"toggle($event)\" />\r\n <div\r\n class=\"input pt-1.5 pb-0.5 px-0 w-full height-normalized relative toggle-wrapper flex align-middle input bg-transparent border-0 border-b-2 focus:outline-none focus:ring-0 peer/inputs\">\r\n <div (click)=\"tgl?.click()\" [chrAutofocus]=\"autofocus || false\" class=\"relative input toggle\">\r\n </div>\r\n </div>\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import { Injectable } from '@angular/core';\r\nimport {\r\n Observable,\r\n of,\r\n tap,\r\n Subject,\r\n BehaviorSubject,\r\n from,\r\n mergeMap,\r\n toArray,\r\n} from 'rxjs';\r\nimport { IFile } from '../models/file';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FileService {\r\n constructor() {}\r\n\r\n public fileToBase64 = (file: File): Observable<IFile> => {\r\n return this.toBase64({\r\n file: file,\r\n url: window.URL.createObjectURL(file),\r\n });\r\n };\r\n\r\n public toBase64 = (file: IFile): Observable<IFile> => {\r\n return new Observable<IFile>((observer) => {\r\n const reader = new FileReader();\r\n const indexOfExtension = file?.file?.name.lastIndexOf('.');\r\n if (!indexOfExtension || indexOfExtension === -1)\r\n throw '[FileInput] Invalid file name: no file extension found.';\r\n reader.onloadend = () => {\r\n var [name, extension] = [\r\n ...(file?.file\r\n ? [\r\n file.file.name.slice(0, indexOfExtension),\r\n // +1 As to not include the dot\r\n file.file.name.slice(indexOfExtension + 1),\r\n ]\r\n : [null, null]),\r\n ];\r\n file = {\r\n ...file,\r\n name: name ?? undefined,\r\n data: reader.result as string,\r\n extension: extension ?? undefined,\r\n url: window.URL.createObjectURL(file.file!),\r\n };\r\n observer.next(file);\r\n observer.complete();\r\n };\r\n reader.onerror = (error) => {\r\n observer.error(error);\r\n };\r\n if (file.file) reader.readAsDataURL(file.file);\r\n });\r\n };\r\n\r\n public toBase64WithProgress = (\r\n file: IFile\r\n ): Observable<{ progress: number; file?: IFile }> => {\r\n return new Observable<{ progress: number; file?: IFile }>((observer) => {\r\n const reader = new FileReader();\r\n // Taille d'un chunk (90 Ko)\r\n // DOIT ETRE UN MULTIPLE DE 3\r\n // pour des raisons d'encodage Base64\r\n const chunkSize = 1024 * 90;\r\n const totalSize = file?.file?.size ?? 0;\r\n // Position\r\n let offset = 0;\r\n let base64Data = '';\r\n\r\n const indexOfExtension = file?.file?.name.lastIndexOf('.');\r\n if (!indexOfExtension || indexOfExtension === -1) {\r\n observer.error(\r\n '[FileService] Invalid file name: no file extension found.'\r\n );\r\n return;\r\n }\r\n\r\n const [name, extension] = [\r\n file.file!.name.slice(0, indexOfExtension),\r\n file.file!.name.slice(indexOfExtension + 1),\r\n ];\r\n\r\n file = {\r\n ...file,\r\n name: name ?? undefined,\r\n extension: extension ?? undefined,\r\n url: window.URL.createObjectURL(file.file!),\r\n };\r\n\r\n const readChunk = () => {\r\n const chunk = file.file!.slice(offset, offset + chunkSize);\r\n reader.readAsDataURL(chunk);\r\n };\r\n\r\n reader.onload = (event: any) => {\r\n const result = event.target.result as string;\r\n // Retire l'entête qui est rajoutée à chaque lecture\r\n const base64Chunk = result.split(',')[1];\r\n base64Data += base64Chunk;\r\n\r\n offset += chunkSize;\r\n const progress = Math.min(Math.round((offset / totalSize) * 100), 100);\r\n\r\n observer.next({ progress, file });\r\n\r\n if (offset < totalSize) {\r\n readChunk();\r\n } else {\r\n // On termine l'encodage en rajoutant les métadata et en mettant à jour la dataurl\r\n file.data = `data:${file.file!.type};base64,${base64Data}`;\r\n file.url = window.URL.createObjectURL(file.file!);\r\n observer.next({ progress: 100, file });\r\n observer.complete();\r\n }\r\n };\r\n\r\n reader.onerror = (error) => {\r\n console.log('[FileService] Error:', error);\r\n observer.error(error);\r\n };\r\n\r\n // Démarrer la lecture des chunks\r\n if (file.file) {\r\n readChunk();\r\n } else {\r\n observer.error('[FileService] No file provided.');\r\n }\r\n });\r\n };\r\n\r\n public batchToBase64 = (files: IFile[]): Observable<IFile[]> => {\r\n return from(files).pipe(\r\n mergeMap((file) => this.toBase64(file)),\r\n toArray()\r\n );\r\n };\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Observable, Subject, timer, BehaviorSubject } from \"rxjs\";\r\nimport { concatMap, finalize, switchMap, takeUntil } from \"rxjs/operators\";\r\n\r\nexport interface Toast {\r\n\ttype: \"error\" | \"success\" | \"warning\";\r\n\tmessage: string;\r\n\tduration?: number;\r\n}\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class ToastService {\r\n\tprivate toastQueue = new Subject<Toast>();\r\n\tprivate currentToastSubject = new BehaviorSubject<Toast | null>(null);\r\n\tpublic currentToast$ = this.currentToastSubject.asObservable();\r\n\tprivate toastCloseSubject = new Subject<void>();\r\n\tprivate default_duration = 5000;\r\n\r\n\tconstructor() {\r\n\t\t//We are leveraging the power of RXJS to handle the delay between the\r\n\t\tthis.toastQueue\r\n\t\t\t.pipe(\r\n\t\t\t\tconcatMap((toast: Toast) => {\r\n\t\t\t\t\t//We reset the click subject to ensure rxjs doesn't beleive it's been clicked\r\n\t\t\t\t\tthis.toastCloseSubject = new Subject<void>();\r\n\t\t\t\t\t// We send the next toast\r\n\t\t\t\t\tthis.currentToastSubject.next(toast);\r\n\t\t\t\t\treturn timer(toast.duration || this.default_duration).pipe(\r\n\t\t\t\t\t\t//If the user click the next button, we stop the current emission and go to the next one\r\n\t\t\t\t\t\ttakeUntil(this.toastCloseSubject),\r\n\t\t\t\t\t\t//After the toast duration, we send a null value. If there is still a toast waiting, this null value will be overriden after the small delay.\r\n\t\t\t\t\t\t//Otherwise this null value allows us to notify the subscriber that there is no toast waiting.\r\n\t\t\t\t\t\tfinalize(() => {\r\n\t\t\t\t\t\t\tthis.currentToastSubject.next(null);\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t//Small delay between toasts\r\n\t\t\t\t\t\tswitchMap(() => timer(500))\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\t}\r\n\r\n\tpublic current = (): Observable<Toast | null> => {\r\n\t\treturn this.currentToastSubject;\r\n\t};\r\n\r\n\tpublic next = () => {\r\n\t\tthis.toastCloseSubject.next();\r\n\t};\r\n\r\n\tpublic setSuccess(message?: string, time?: number) {\r\n\t\tthis.set(\"success\", message || \"\", time);\r\n\t}\r\n\r\n\tpublic setError(message: string, time?: number) {\r\n\t\tthis.set(\"error\", message, time);\r\n\t}\r\n\r\n\tpublic setWarning(message: string, time?: number) {\r\n\t\tthis.set(\"warning\", message, time);\r\n\t}\r\n\r\n\tprivate set = async (\r\n\t\ttype: \"warning\" | \"error\" | \"success\",\r\n\t\tmessage: string,\r\n\t\tduration?: number\r\n\t) => {\r\n\t\tthis.toastQueue.next({\r\n\t\t\ttype: type,\r\n\t\t\tmessage: message,\r\n\t\t\tduration: duration || this.default_duration,\r\n\t\t});\r\n\t};\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FileService } from '../../services/files.service';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { catchError, forkJoin, Observable, skipWhile, take } from 'rxjs';\r\nimport { IFile } from '../../models/file';\r\nimport { ToastService } from '../../services/toast.service';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-file-input',\r\n imports: [\r\n MatIcon,\r\n CommonModule,\r\n FormsModule,\r\n MatError,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n templateUrl: './chr-file-input.component.html',\r\n styleUrls: [\r\n './chr-file-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrFileInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n})\r\nexport class ChrFileInputComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n @Input() accept: string[] = [];\r\n\r\n @Input() multiple: boolean = false;\r\n\r\n valueDisplay: string | null = null;\r\n\r\n @Input() editable: boolean = false;\r\n\r\n public errors: { [index: number]: boolean } | null = null;\r\n\r\n public files: Observable<{ progress: number; file?: IFile }>[] = [];\r\n\r\n constructor(\r\n @Optional() ngControl: NgControl,\r\n private fileService: FileService,\r\n private toastService: ToastService\r\n ) {\r\n super(ngControl);\r\n }\r\n\r\n override writeValue(obj: any | any[]): void {\r\n if (!obj) {\r\n this.valueDisplay = '';\r\n return;\r\n }\r\n if (Array.isArray(obj)) {\r\n const tmp = obj.map((f) => {\r\n return `${f.name}.${f.extension}`;\r\n });\r\n this.valueDisplay = tmp.join(',');\r\n } else this.valueDisplay = `${obj.name}.${obj.extension}`;\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.valueChanges\r\n .pipe(skipWhile((res) => res === null))\r\n .subscribe((res) => this.writeValue(res));\r\n this.control?.statusChanges?.subscribe((status) => {\r\n this.errors = this.control?.errors\r\n ? { ...this.control.errors['indexes'] }\r\n : null;\r\n });\r\n }\r\n\r\n protected onFileChange = (event: any) => {\r\n this.files = [];\r\n const files = event.target.files;\r\n const filesAsync = [];\r\n if (files.length <= 0) {\r\n this.valueDisplay = '';\r\n this.onValueChange(null);\r\n }\r\n for (const file of files) {\r\n const obs = this.fileService.toBase64WithProgress({\r\n file: file,\r\n url: window.URL.createObjectURL(file),\r\n });\r\n this.files = [...this.files, obs];\r\n filesAsync.push(obs);\r\n obs.pipe(\r\n catchError((err, source) => {\r\n this.toastService.setWarning(\r\n `Une erreur s'est produite pendant le téléchargement du fichier ${file.name} `\r\n );\r\n return err;\r\n })\r\n );\r\n }\r\n\r\n forkJoin(filesAsync)\r\n .pipe(take(1))\r\n .subscribe((res) => {\r\n const value = res.map((r) => r.file);\r\n this.onValueChange(this.multiple ? value : value[0]);\r\n this.writeValue(res.map((r) => r.file));\r\n });\r\n };\r\n\r\n protected acceptToString = () => {\r\n return this.accept?.map((type) => `.${type}`).join(', ') || '.*';\r\n };\r\n\r\n protected getToAccept = () => {\r\n return this.accept?.map((s) => s.toLocaleUpperCase()).join(', ');\r\n };\r\n\r\n protected changeFileName = (event: any, file?: IFile) => {\r\n if (!file) return;\r\n file.name = event.target.outerText?.trim();\r\n };\r\n\r\n protected openFile = (index: number, file?: IFile) => {\r\n forkJoin(this.files)\r\n .pipe(take(1))\r\n .subscribe((res) => {\r\n window.open(res[index].file!.url!, '_blank');\r\n });\r\n };\r\n\r\n protected removeFile = (index: number, file?: IFile) => {\r\n this.files.splice(index, 1);\r\n if (this.files.length <= 0) this.onValueChange(null);\r\n forkJoin(this.files)\r\n .pipe(take(1))\r\n .subscribe((files) => {\r\n const values = files.map((f) => f.file);\r\n this.onValueChange(this.multiple ? values : values[0]);\r\n });\r\n };\r\n}\r\n","<div class=\"\">\r\n <div style=\"position: relative;\" class=\"cursor-pointer\" (click)=\"finput.click()\" (click)=\"onTouch($event)\">\r\n <div class=\"absolute top-1 right-0 flex flex-row justify-center content-center items-center align-middle overflow-hidden opacity-100 bg-opacity-100\"\r\n style=\"background-color: inherit; opacity: 1;\">\r\n <mat-icon class=\"cursor-pointer rounded-full\"\r\n *ngIf=\"!errors && (files[0] | async)?.progress != 100\">add</mat-icon>\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--primary-color)\"\r\n *ngIf=\"!errors && (files[0] | async)?.progress == 100\">check</mat-icon>\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--error-color)\"\r\n *ngIf=\"errors !== null\">close</mat-icon>\r\n <div class=\"border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-100 flex justify-center \r\n align-middle items-center\" style=\"border-color: var(--neutral-color);\">\r\n {{getToAccept()}}\r\n </div>\r\n </div>\r\n <input class=\"relative input\" type=\"file\" class=\"hidden\" [attr.multiple]=\"multiple\" #finput\r\n [chrAutofocus]=\"autofocus || false\" [accept]=\"acceptToString()\" (change)=\"onFileChange($event)\" />\r\n <input class=\"relative input height-normalized\" [ngClass]=\"(isTouched && hasError()) ? 'error':''\" [id]=\"id\"\r\n [name]=\"name!\" placeholder=\" \" [ngModel]=\"valueDisplay\" disabled\r\n class=\"block input pt-1.5 m-0 mr-4 px-0 w-full overflow-hidden text-ellipsis bg-transparent border-0 border-b-2 focus:outline-none focus:ring-0 peer/inputs file:hidden\" />\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg \">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (\r\n isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n <div *ngIf=\"files[0] | async as conversion\" class=\"progress-border border-t-2\"\r\n [style.width]=\"conversion.progress + '%'\" [ngClass]=\"{\r\n 'border-ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'border-finished': conversion.progress === 100,\r\n 'border-error': errors !== null && errors[0] !== undefined\r\n }\">\r\n <span *ngIf=\"!multiple && (conversion.progress < 100)\">{{conversion.progress}}%</span>\r\n </div>\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n </div>\r\n <div *ngIf=\"multiple === true && files.length > 0\" class=\"shadow-lg drop-shadow-lg pt-2 border-x-2 border-b-2\">\r\n @for(file of files; track file; let index = $index){\r\n <ng-container *ngIf=\"file | async as conversion \">\r\n <div class=\"progress-bar shadow-lg drop-shadow-lg\">\r\n <div class=\"progress\" [style.width]=\"conversion.progress + '%'\" [ngClass]=\"{\r\n 'ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'finished': !errors?.[index] && conversion.progress === 100,\r\n 'error': errors?.[index] === true\r\n }\"></div>\r\n <div class=\"progress-text-wrapper\">\r\n <span class=\"progress-text\" (input)=\"changeFileName($event, conversion.file)\"\r\n [attr.contenteditable]=\"editable\">{{conversion.file?.name}}</span>\r\n <div class=\"progress-icon-wrapper\">\r\n <span>{{conversion.progress}}%</span>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n (click)=\"openFile(index, conversion.file)\">visibility</mat-icon>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n (click)=\"removeFile(index, conversion.file)\">delete</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n</div>","import {\r\n AfterContentChecked,\r\n AfterViewChecked,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n forwardRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ChrBaseInputComponent } from '../chr-base-input/chr-base-input.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-textarea-input',\r\n imports: [\r\n CommonModule,\r\n MatIcon,\r\n FormsModule,\r\n MatError,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // useExisting: forwardRef(() => ChrTextareaInputComponent),\r\n // multi: true,\r\n // },\r\n ],\r\n templateUrl: './chr-textarea-input.component.html',\r\n styleUrls: [\r\n './chr-textarea-input.component.scss',\r\n '../../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class ChrTextareaInputComponent\r\n extends ChrBaseInputComponent\r\n implements\r\n OnInit,\r\n AfterViewInit,\r\n OnDestroy,\r\n AfterViewChecked,\r\n AfterContentChecked\r\n{\r\n @ViewChild('input') input: ElementRef | null = null;\r\n\r\n constructor(@Optional() ngControl: NgControl) {\r\n super(ngControl);\r\n this.type = 'textArea';\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n // console.log('AfterViewInit', this.input);\r\n // this.resize(this.input?.nativeElement as HTMLTextAreaElement | undefined);\r\n }\r\n\r\n ngAfterContentChecked(): void {\r\n // console.log('AfterContentChecked', this.input);\r\n this.resize(this.input?.nativeElement as HTMLTextAreaElement | undefined);\r\n // this.resize(this.input as any);\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n // console.log('AfterViewChecked', this.input);\r\n //this.resize(this.input as any);\r\n }\r\n\r\n //On input, we resize the textarea so that it's always readable\r\n public resize = (textArea?: HTMLTextAreaElement) => {\r\n if (textArea === undefined) return;\r\n // For some reason, it needs to have 2px more than the intended height.\r\n textArea.style.height = '34px';\r\n textArea.style.height = `${textArea.scrollHeight}px`;\r\n };\r\n\r\n preventSubmit = (event: Event) => {\r\n event.stopPropagation();\r\n };\r\n}\r\n","<div style=\"position: relative;\" (keyup.enter)=\"preventSubmit($event)\">\r\n <textarea #input [required]=\"required\" [matTooltip]=\"tooltip || ''\" matTooltipPosition=\"above\" required=\"true\"\r\n [ngClass]=\"(isTouched && hasError()) ? 'error':''\" (blur)=\"onTouch()\" (input)=\"resize(input)\" [ngModel]=\"value\"\r\n (ngModelChange)=\"onValueChange($event || null)\" [chrAutofocus]=\"autofocus || false\"\r\n class=\"no-scrollbar input !resize-none height-normalized block pt-1.5 px-0 w-full text-sm bg-transparent border-0 border-b-2 appearance-none focus:outline-none focus:ring-0 peer/inputs\"></textarea>\r\n\r\n <label *ngIf=\"label !== null\" class=\"label absolute text-lg\">{{\r\n label\r\n }}\r\n @if(label && label.trim() != ''){\r\n @if (required) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n :\r\n }\r\n @if (isTouched && hasError()) {\r\n <mat-error class=\"text-error\">{{ getLastError() }}</mat-error>\r\n }\r\n </label>\r\n\r\n @if (icon && !isDisabled) {\r\n <span [ngClass]=\"iconCallbackDisabled ? '':''\" class=\"absolute p-2.5 bottom-0 right-0\"\r\n [matTooltip]=\"iconTooltip || ''\" matTooltipPosition=\"above\"\r\n (click)=\"!iconCallbackDisabled && iconCallback?.(value)\"><mat-icon\r\n class=\"flex input justify-center align-middle items-center content-center text-lg\">{{icon}}</mat-icon>\r\n </span>\r\n }\r\n @if (span != null) {\r\n <span [ngClass]=\"isTouched && hasError()? 'text-error' : ''\" class=\"h-0 text-xs text-span\">{{ span\r\n }}\r\n </span>\r\n }\r\n</div>","import { Directive, HostListener, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tab-input-only]',\r\n standalone: true,\r\n})\r\nexport class TabToInputHandlerDirective {\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('keydown', ['$event'])\r\n handleTab(event: KeyboardEvent): void {\r\n if (event.key === 'Tab') {\r\n event.preventDefault();\r\n const inputs = Array.from(\r\n document.querySelectorAll<HTMLInputElement | HTMLTextAreaElement>(\r\n 'input:not([type=\"checkbox\"]), textarea'\r\n )\r\n );\r\n\r\n const currentIndex = inputs.indexOf(event.target as HTMLInputElement);\r\n if (currentIndex !== -1) {\r\n const nextElement = inputs[currentIndex + (event.shiftKey ? -1 : 1)];\r\n if (nextElement) {\r\n nextElement.focus();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnInit,\n ElementRef,\n} from '@angular/core';\nimport { ReactiveFormsModule, FormsModule, ValidatorFn } from '@angular/forms';\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\nimport { MatError } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ChrSearchSelectComponent } from '../chr-search-select/chr-search-select.component';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport {\n DatePipe,\n CommonModule,\n DATE_PIPE_DEFAULT_OPTIONS,\n} from '@angular/common';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TypeValidatorDirective } from '../models/chr-validators/type-validator';\nimport { ChrTagSelectComponent } from '../chr-tag-select/chr-tag-select.component';\nimport { ChrBaseInputComponent } from './chr-base-input/chr-base-input.component';\nimport { getValidators } from '../models/chr-validators/base-validator';\nimport { ChrColorInputComponent } from './chr-color-input/chr-color-input.component';\nimport { ChrDateInputComponent } from './chr-date-input/chr-date-input.component';\nimport { ChrDatetimeInputComponent } from './chr-datetime-input/chr-datetime-input.component';\nimport { ChrToggleInputComponent } from './chr-toggle-input/chr-toggle-input.component';\nimport { ChrFileInputComponent } from './chr-file-input/chr-file-input.component';\nimport { IControl, InputType } from '../models/controls';\nimport { ChrTextareaInputComponent } from './chr-textarea-input/chr-textarea-input.component';\nimport { ChrMultiFileInputComponent } from './chr-multi-file-input/chr-multi-file-input.component';\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\n\nexport interface IFormSection {\n title?: string;\n controls: IControl[];\n}\n\n@Component({\n selector: 'app-chr-form',\n templateUrl: './chr-form.component.html',\n styleUrls: [\n './chr-form.component.scss',\n '../../../../../tailwindbuild.css',\n './chr-form.component.scss',\n ],\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MatTooltipModule,\n MatIconModule,\n MatSlideToggleModule,\n ChrTagSelectComponent,\n MatAutocompleteModule,\n CommonModule,\n MatTabsModule,\n ChrBaseInputComponent,\n ChrColorInputComponent,\n ChrDateInputComponent,\n ChrDatetimeInputComponent,\n ChrToggleInputComponent,\n ChrFileInputComponent,\n ChrSearchSelectComponent,\n ChrTextareaInputComponent,\n TabToInputHandlerDirective,\n ],\n providers: [\n DatePipe,\n {\n provide: DATE_PIPE_DEFAULT_OPTIONS,\n useValue: { dateFormat: 'shortDate' },\n },\n ],\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ChrFormComponent implements OnInit {\n @Input() sections?: IFormSection[];\n @Input() controls?: IControl[];\n @Input() validators?: ValidatorFn | ValidatorFn[] | null = null;\n\n @Input() valid?: boolean;\n @Output() validChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Input() model: any = null;\n @Output() modelChange: EventEmitter<any> = new EventEmitter<any>();\n\n @Input() disabled?: boolean;\n @Output() valuesChanges: EventEmitter<any> = new EventEmitter();\n\n @Input() submit?: Function;\n\n @Input() compact: boolean = false;\n\n @Input() debounceTime: number | null = null;\n\n @Output() formChange: EventEmitter<{ [key: string]: any }> =\n new EventEmitter<{ [key: string]: any }>();\n\n @Output() valueChanges: EventEmitter<{ [name: string]: any }> =\n new EventEmitter();\n\n @Input() tabDisplay: boolean = false;\n\n public formControls: { [key: string]: FormControl } = {};\n\n /**\n * The related ReactiveForm of the form group. This is exposed to allow form extension and usage of custom form controls while still maintaining centralised validation and validity\n */\n @Input() public form: FormGroup = this.builder.group({});\n @Output() public formChanges: EventEmitter<FormGroup | null> =\n new EventEmitter();\n\n private values: { [key: string]: any } = {};\n private controlTypes: { [key: string]: InputType } = {};\n private flattenedControls: { [key: string]: IControl } = {};\n private flattenedShownControl: { [key: string]: IControl } = {};\n private flattenedHiddenControls: { [key: string]: IControl } = {};\n public initialized: boolean = false;\n\n constructor(\n private builder: FormBuilder,\n private changeDetector: ChangeDetectorRef,\n private element: ElementRef\n ) {\n if (this.controls != null && this.sections != null)\n throw new Error(\n \"You can't use both controls and sections in the same form\"\n );\n }\n\n ngOnInit(): void {\n this.sections\n ?.map((s) => s.controls)\n .flat()\n .concat(this.controls ?? [])\n .forEach((s) => (this.flattenedControls[s.name] = s));\n\n for (const key in this.flattenedControls) {\n const control = this.flattenedControls[key];\n if (control.type === 'hidden')\n this.flattenedHiddenControls[key] = control;\n else this.flattenedShownControl[key] = control;\n }\n this.form = new FormGroup({}, { validators: this.validators });\n\n this.initModel();\n this.initValues();\n this.initControls();\n this.initListeners();\n this.initialized = true;\n\n this.formChanges.emit(this.form);\n }\n\n private initModel = () => {\n if (this.model === null) this.model = {};\n\n for (const key in this.flattenedControls) {\n const control = this.flattenedControls[key];\n if (this.model[key] === null || this.model[key] === undefined)\n this.model[key] = control.value;\n }\n };\n\n private initValues = () => {\n for (const key in this.flattenedControls) {\n if (this.values[key] === null || this.values[key] === undefined)\n this.values[key] = this.model[key];\n }\n };\n\n private initControls = () => {\n for (const key in this.flattenedShownControl) {\n const control = this.flattenedShownControl[key];\n const validators = getValidators(control.validations);\n this.initializeControl(\n control,\n new FormControl(this.values[key], validators)\n );\n }\n this.valid = this.form.valid;\n };\n\n private initListeners = () => {\n this.form.valueChanges.subscribe((values) => {\n this.form.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n this.valid = this.form.valid;\n this.validChange.emit(this.valid);\n });\n };\n\n /**\n * Methods that returns the FormControl for the given input. If no FormControl is found, return null.\n * @param name input's name\n * @returns the FormControl whose name matches the parameter\n */\n public getControl = (name: string) => {\n if (name) return this.form.controls[name];\n return null;\n };\n\n /**\n * Focus the input for the user to start typing in.\n * @param name input's name\n */\n public focus = (name: string) => {\n const el = this.element.nativeElement.querySelector(\n `input[name=\"${name}\"]`\n ) as HTMLInputElement;\n this.getControl(name)?.markAsTouched();\n this.changeDetector.detectChanges();\n setTimeout(() => {\n el?.focus();\n }, 10);\n };\n\n /**\n * Returns the value of the input whose name matches the parameter input.\n * If no input name is provided, returns the value of the form.\n * @param input name of the input\n * @returns the value of the input\n */\n public value = (input?: string) => this.getValue(input);\n\n /**\n * Returns the value of the input whose name matches the parameter input.\n * If no input name is provided, returns the value of the form.\n * @param input name of the input\n * @returns the value of the input\n */\n public getValue = (input?: string) => {\n if (input) return this.form.controls[input]?.value;\n return this.form.value;\n };\n\n /**\n * Returns the validity of the input.\n * If no input is provided, returns the validity of the form.\n * @param input name of the input\n * @returns\n */\n public isValid = (input?: string) => {\n if (input) return this.form.get(input)?.valid;\n return this.valid;\n };\n\n /**\n * Update the value of a control WITHOUT triggering the modelChange event\n * @param key input key (control name)\n * @param value value to set\n */\n public setValue = (key: string, value: any) => {\n if (this.formControls[key] === undefined) {\n //console.log('[Form] Could not find control with the following name: ', key);\n return;\n }\n this.formControls[key].setValue(value, {\n emitEvent: false,\n emitModelToViewChange: true,\n });\n this.formControls[key].markAsTouched();\n this.model[key] = value;\n };\n\n /**\n * Update the value of the form's model WITHOUT triggering the modelChange event\n * @param model the model to set\n */\n public set = (model: any) => {\n for (const key in this.flattenedControls) {\n this.setValue(key, model[key]);\n }\n };\n\n /**\n * Updates the value of a control. This WILL trigger the modelChange event\n * @param key input key (control name)\n * @param value value to set\n */\n public patchValue = (key: string, value: any) => {\n this.setValue$(key, value);\n this.setModel$(key, value);\n };\n\n /**\n * Updates the value of the form's model. This WILL trigger the modelChange event once for each input\n * @param model model to set\n */\n public patch = (model: any) => {\n for (const key in this.flattenedControls) {\n this.patchValue(key, model[key]);\n }\n };\n\n /**\n * Methods that checks the validity of each input of the form and updates their status. If the markAsTouched parameter si set to true, it will also mark the inputs as touched\n * so that the validation errors may be displayed to the user.\n * @param markAsTouched Boolean that describes whether or not the inputs of the form will be marked as touched.\n */\n public checkValidity = (markAsTouched: boolean = true) => {\n for (const key in this.flattenedControls) {\n if (markAsTouched) {\n this.formControls[key]?.markAsTouched({\n onlySelf: false,\n emitEvent: true,\n });\n }\n this.formControls[key]?.updateValueAndValidity({\n onlySelf: false,\n emitEvent: true,\n });\n }\n\n this.form.updateValueAndValidity({ onlySelf: false, emitEvent: true });\n this.valid = this.form.valid;\n };\n\n /**\n * Here for compatibility. Same thing as checkValidity.\n */\n public updateValueAndValidity = this.checkValidity;\n\n /**\n * Resets the form.\n */\n public reset = () => {\n this.form.reset();\n };\n\n protected get = (control: IControl) => {\n return this.form.get([control.name]);\n };\n\n private setValue$ = (key: string, value: any) => {\n if (this.formControls[key] === undefined) {\n //console.log('[Form] Could not find control with the following name: ', key);\n return;\n }\n this.formControls[key].patchValue(value);\n this.formControls[key].markAsTouched();\n this.values[key] = value;\n };\n\n private setModel$ = (key: string, value: any) => {\n this.model[key] = value;\n };\n\n /**\n * Triggers the submit method and pass the local values as its parameters. The local values will contain the values of every input. Not just those that match de model's property (ex: like those provided by the modelChanges event).\n */\n public doSubmit = () => {\n this.checkValidity();\n if (this.valid && this.form.valid) this.submit?.(this.values);\n };\n\n protected log = (el: any) => {\n console.log(el);\n };\n\n protected initializeControl = (\n control: IControl,\n formControl: FormControl\n ) => {\n // Add the control to the internal map\n this.formControls[control.name] = formControl;\n //Register the onChange listener that will emit the events associated with the input's update\n this.formControls[control.name].valueChanges.subscribe((value) => {\n //We dispatch the single value change event with the value\n this.valueChanges.emit({ [control.name]: value });\n //We update the local values\n this.values[control.name] = value;\n //If the model has a property, we update it with the value\n if (Object.hasOwn(this.model, control.name)) {\n this.model![control.name] = value;\n //Dispatch the whole model change event\n this.modelChange.emit(this.model);\n }\n // Whether or not there is a matching property in the model, we update the local values\n this.values[control.name] = value;\n });\n this.controlTypes[control.name] = control.type;\n // Add the control to the formgroup\n this.form.addControl(control.name, formControl);\n };\n\n alert = (s: string) => {\n alert(s);\n };\n}\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2 w-full\">\n <form [formGroup]=\"form\" *ngIf=\"initialized\" tab-input-only>\n <ng-container *ngIf=\"!tabDisplay || !sections\" [ngTemplateOutlet]=\"singleTemplate\"\n [ngTemplateOutletContext]=\"{controls: controls}\">\n </ng-container>\n <ng-container *ngIf=\"!tabDisplay && sections\" [ngTemplateOutlet]=\"sectionTemplate\"\n [ngTemplateOutletContext]=\"{sections: sections}\">\n </ng-container>\n <ng-container *ngIf=\"tabDisplay && sections\" [ngTemplateOutlet]=\"tabsTemplate\"\n [ngTemplateOutletContext]=\"{sects: sections}\">\n </ng-container>\n </form>\n</div>\n\n<ng-template #tabsTemplate let-sections='sects'>\n <fieldset [disabled]=\"disabled\">\n <mat-tab-group>\n @for (section of sections; track section; let index = $index) {\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\" class=\"custom-tab\">\n <div *ngIf=\"initialized\" class=\"mt-4\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (ctrl of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <!-- <p class=\"bg-purple-600\">{{ctrl.name}} ({{formControls[ctrl.name].touched}}) ->\n {{formControls[ctrl.name].valid}} :\n {{formControls[ctrl.name].errors?.['required']}}\n </p> -->\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n </mat-tab>\n }\n </mat-tab-group>\n </fieldset>\n</ng-template>\n\n<ng-template #singleTemplate let-controls=\"controls\">\n <fieldset [disabled]=\"disabled\">\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of controls; track control; let index = $index; let last = $last) {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: last}\">\n </ng-container>\n }\n </div>\n\n </fieldset>\n</ng-template>\n\n<ng-template #sectionTemplate let-sections='sections'>\n <fieldset [disabled]=\"disabled\">\n @for (section of sections; track section; let index = $index) {\n <div>\n @if (section.title) {\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\n {{ section.title }}\n </h2>\n }\n <div *ngIf=\"initialized\"\n [ngClass]=\"compact ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\n @for (control of section.controls; track index; let index = $index; let\n last =\n $last)\n {\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\n </ng-container>\n }\n </div>\n @if (index != (sections||[]).length - 1 && !compact) {\n <div class=\"py-4\">\n <hr class=\"\" />\n </div>\n }\n </div>\n }\n </fieldset>\n</ng-template>\n\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\n <div class=\"relative h-min mt-2\" [formGroup]=\"form\" [ngClass]=\"{\n 'sm:col-span-2': (control.width == 'row' && !compact) || control.type=='textArea' && compact && control.width != 'row',\n 'sm:row-span-2': control.type == 'file' && control.multiple===true,\n 'sm:col-span-4': control.width =='row' && compact,\n }\" (keyup.enter)=\"last && this.doSubmit()\">\n @if (control.type=='searchSelect') {\n <app-chr-search-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\" [filters]=\"control.filters\"\n [debounceTime]=\"debounceTime\" [data]=\"control.data || []\" [addCallback]=\"control.addCallback\"\n [autofocus]=\"control?.autofocus\" [acceptText]=\"control.acceptText\"\n [validations]=\"control.validations\"></app-chr-search-select>\n }\n @if (control.type=='tagSelect') {\n <app-chr-tag-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [editCallback]=\"control.editCallback\" [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\"\n [debounceTime]=\"debounceTime\" [filters]=\"control.filters\" [data]=\"control.data || []\"\n [editCallback]=\"control.editCallback\" [addCallback]=\"control.addCallback\"\n [removeCallback]=\"control.removeCallback\" [validations]=\"control.validations\" [autofocus]=\"control?.autofocus\"\n [acceptText]=\"control.acceptText\"></app-chr-tag-select>\n }\n <div class=\"relative z-0 w-full group/inputs content\">\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\n <!--TEXT, PASSWORD AND NUMBER-->\n @if (control.type == 'text' || control.type == 'number' || control.type == 'password') {\n <chr-base-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-base-input>\n }\n <!--TEXT AREA-->\n @if (control.type == 'textArea') {\n <chr-textarea-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-textarea-input>\n }\n <!--DATE-->\n @if (control.type == 'date') {\n <chr-date-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-date-input>\n }\n @if (control.type == 'datetime') {\n <chr-datetime-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-datetime-input>\n }\n <!--COLOR-->\n @if (control.type == 'color') {\n <chr-color-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-color-input>\n }\n @if (control.type == 'toggle'){\n <chr-toggle-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [debounceTime]=\"debounceTime\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\n [validations]=\"control.validations\"></chr-toggle-input>\n }\n @if (control.type == 'file'){\n <chr-file-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\n [iconTooltip]=\"control.iconTooltip\" [accept]=\"control.accept\" [debounceTime]=\"debounceTime\"\n [autofocus]=\"control?.autofocus\" [multiple]=\"control.multiple\"\n [validations]=\"control.validations\"></chr-file-input>\n }\n </div>\n </div>\n</ng-template>","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class CookiesService {\r\n\tconstructor() {}\r\n\r\n\t/**\r\n\t * delete cookie\r\n\t * @param name\r\n\t */\r\n\tpublic deleteCookie(name: string) {\r\n\t\tthis.setCookie(name, \"\", -1);\r\n\t}\r\n\r\n\t/**\r\n\t * get cookie\r\n\t * @param {string} name\r\n\t * @returns {string}\r\n\t */\r\n\tpublic getCookie(name: string) {\r\n\t\tconst ca: Array<string> = decodeURIComponent(document.cookie).split(\";\");\r\n\t\tconst caLen: number = ca.length;\r\n\t\tconst cookieName = `${name}=`;\r\n\t\tlet c: string;\r\n\r\n\t\tfor (let i = 0; i < caLen; i += 1) {\r\n\t\t\tc = ca[i].replace(/^\\s+/g, \"\");\r\n\t\t\tif (c.indexOf(cookieName) === 0) {\r\n\t\t\t\treturn c.substring(cookieName.length, c.length);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\t/**\r\n\t * set cookie\r\n\t * @param {string} name\r\n\t * @param {string} value\r\n\t * @param {number} expireDays\r\n\t * @param {string} path\r\n\t */\r\n\tpublic setCookie(\r\n\t\tname: string,\r\n\t\tvalue: string,\r\n\t\texpireDays: number,\r\n\t\tpath: string = \"\"\r\n\t) {\r\n\t\tconst d: Date = new Date();\r\n\t\td.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);\r\n\t\tconst expires = `expires=${d.toUTCString()}`;\r\n\t\tconst cpath = path ? `; path=${path}` : \"\";\r\n\t\tdocument.cookie = `${name}=${value}; ${expires}${cpath}; SameSite=Lax`;\r\n\t}\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { Observable, of, tap, Subject, BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DataService {\r\n private data = new Map<string, BehaviorSubject<any>>();\r\n private persistData: { [key: string]: any } = {};\r\n private syncData: { [key: string]: boolean } = {};\r\n\r\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\r\n this.load();\r\n }\r\n\r\n set = (key: string, value: any, persist: boolean = false): void => {\r\n const data = this.data.get(key);\r\n\r\n if (data === null || data === undefined)\r\n this.data.set(key, new BehaviorSubject(value));\r\n else data.next(value);\r\n\r\n this.syncData[key] = value;\r\n this.persistData[key] = persist;\r\n\r\n this.persist().subscribe();\r\n };\r\n\r\n get = (key: string): Observable<any> => {\r\n const data = this.data.get(key);\r\n if (!data) this.data.set(key, new BehaviorSubject(null));\r\n return this.data.get(key)!;\r\n };\r\n\r\n getSync = (key: string): any => {\r\n return this.syncData[key];\r\n };\r\n\r\n clear = (key: string): void => {\r\n return this.data.get(key)?.next(null);\r\n };\r\n\r\n remove = (key: string): boolean => {\r\n return this.data.delete(key);\r\n };\r\n\r\n private persist = () => {\r\n return new Observable((observer) => {\r\n const toPersist: { [key: string]: any } = {};\r\n this.data.forEach((value, key) => {\r\n if (this.persistData[key]) value.subscribe((r) => (toPersist[key] = r));\r\n });\r\n if (isPlatformBrowser(this.platformId)) {\r\n localStorage.setItem('_chr_data', JSON.stringify(toPersist));\r\n }\r\n observer.next('Opération terminée');\r\n observer.complete();\r\n });\r\n };\r\n\r\n private load = () => {\r\n if (isPlatformBrowser(this.platformId)) {\r\n const data = localStorage.getItem('_chr_data');\r\n if (data) {\r\n const value = JSON.parse(data) as { [key: string]: any };\r\n Object.keys(value).forEach((key) => {\r\n const subject = this.data.get(key);\r\n if (subject === undefined || subject === null) {\r\n this.data.set(key, new BehaviorSubject(value[key]));\r\n this.persistData[key] = true;\r\n } else {\r\n subject.next(value[key]);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n}\r\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { PaginationInstance, PaginationService } from 'ngx-pagination';\nimport { NgClass, CommonModule } from '@angular/common';\nimport { ChrFormComponent } from '../chr-form/chr-form.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CookiesService } from '../services/cookie.service';\nimport { DataService } from '../services/data.service';\n\n@Component({\n selector: 'app-chr-paginator',\n templateUrl: './chr-paginator.component.html',\n styleUrls: [\n './chr-paginator.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [ChrFormComponent, CommonModule, MatIconModule],\n})\nexport class ChrPaginatorComponent\n implements OnInit, AfterViewInit, AfterContentChecked\n{\n private _page: number | null = null;\n private _pageSize: number | null = null;\n\n @Input()\n get page() {\n return this._page || 1;\n }\n set page(value: number) {\n this._page = value;\n this.pageChange.emit(value);\n this.changeDetector.markForCheck();\n this.changeDetector.detectChanges();\n }\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Input()\n get pageSize() {\n return this._pageSize || 20;\n }\n set pageSize(value: number) {\n this._pageSize = value;\n this.pageSizeChange.emit(value);\n this.changeDetector.markForCheck();\n this.changeDetector.detectChanges();\n }\n\n get dataSize() {\n return this.instance?.totalItems ?? 0;\n }\n\n get currentlyShownSize() {\n const mult = this.page * this.pageSize;\n return mult > this.dataSize ? this.dataSize : mult;\n }\n\n @Output() pageSizeChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Input() id: string | undefined = 'chr_base-data-table';\n\n @Input() allowSizeChange: boolean | string = 'true';\n\n @ViewChild('pageSizeForm') pageSizeForm: ChrFormComponent | null = null;\n\n instance?: PaginationInstance;\n\n constructor(\n public service: PaginationService,\n private cookieService: CookiesService,\n private dataService: DataService,\n private changeDetector: ChangeDetectorRef\n ) {}\n\n ngAfterContentChecked(): void {\n this.instance = this.service.getInstance(\n `${this.id}`\n ) as PaginationInstance;\n }\n\n ngOnInit(): void {\n this.dataService.get(`${this.id}_pagesize`).subscribe((res) => {\n if (res) {\n this.pageSize = res;\n this.pageSizeChange.emit(res);\n }\n });\n this.dataService.get(`${this.id}_page`).subscribe((res) => {\n if (res) {\n this.page = res;\n this.pageChange.emit(res);\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.pageSizeForm?.patchValue('pageSize', this.pageSize);\n }\n\n public previous = () => {\n if (this.isFirstPage()) return;\n this.page--;\n this.pageChange.emit(this.page);\n this.dataService.set(`${this.id}_page`, this.page);\n };\n\n public next = () => {\n if (this.isLastPage()) return;\n this.page += 1;\n this.pageChange.emit(this.page);\n this.dataService.set(`${this.id}_page`, this.page);\n };\n\n public setPage = (page: number) => {\n if (page < 1 || page > this.lastPage()) return;\n this.page = page;\n this.dataService.set(`${this.id}_page`, page);\n this.emit();\n };\n\n public setPageEventHandler = (event: any) => {\n return this.setPage(event.target.value);\n };\n\n public isFirstPage = () => {\n return this.page == 1;\n };\n\n public setPageSize = (pageSize: number) => {\n this.setPage(1);\n if (this.instance) this.instance.itemsPerPage = pageSize;\n this.dataService.set(`${this.id}_pagesize`, pageSize);\n this.pageSizeChange.emit(pageSize);\n };\n\n public setPageSizeEventHandler = (event: any) => {\n return this.setPageSize(event.target.value);\n };\n\n public isLastPage = () => {\n if (!this.instance?.totalItems) return false;\n return (\n this.page >=\n Math.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n );\n };\n\n // public pageSize = () => this.instance.itemsPerPage;\n\n public lastPage = () =>\n this.instance?.totalItems\n ? Math.ceil(this.instance.totalItems / this.instance.itemsPerPage)\n : 1;\n\n private emit = (page: number | undefined = undefined) => {\n if (!page) this.pageChange.emit(this.page);\n else this.pageChange.emit(page);\n };\n}\n","<div class=\"flex flex-row justify-between dark:text-gray-400\">\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\n @if (allowSizeChange === true || allowSizeChange == 'true') {\n <div class=\"w-40\">\n <app-chr-form #pageSizeForm id=\"table-paginator-form\" (keyup.enter)=\"setPageSizeEventHandler($event)\"\n [sections]=\"[\n { \n controls: [\n {\n label:'Éléments par page',\n type: 'number',\n name: 'pageSize',\n value: pageSize,\n width: 'row',\n icon: 'check',\n iconCallback: setPageSize,\n iconTooltip: 'Cliquez ici pour mettre à jour le nombre d\\'éléments affichés'\n }]\n }]\">\n </app-chr-form>\n </div>\n }\n </div>\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\n <span class=\"entry-indicator\">{{currentlyShownSize}} éléments sur\n {{dataSize}}</span>\n\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_left</mat-icon></button>\n <div class=\"flex flex-row items-center content-center mx-2 w-fit\">\n {{page}} / {{lastPage()}}\n </div>\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\n (click)=\"!isLastPage() && next()\"\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_right</mat-icon></button>\n </div>\n</div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { IAction } from '../chr-table/chr-table.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DataService } from '../services/data.service';\r\nimport { ChrPaginatorComponent } from '../chr-paginator/chr-paginator.component';\r\nimport { NgxPaginationModule, PaginationService } from 'ngx-pagination';\r\nimport {\r\n Color,\r\n getBackgroundColor,\r\n getBorderColor,\r\n getContrastTextColor,\r\n getTextColor,\r\n} from '../models/colors';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { SortPipe } from 'chrv-pipes';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\r\nimport { IControlValidation } from '../models/chr-validators/base-validator';\r\nimport { ChrFormComponent } from '../chr-form/chr-form.component';\r\n\r\nexport type TColumn = {\r\n /**\r\n * Nom de la colonne\r\n */\r\n display: string;\r\n\r\n /**\r\n * Sélecteur qui représente la propriété ciblée. Ex: 'obj.id'.\r\n */\r\n properties?: string;\r\n\r\n /**\r\n * Méthode callback qui sera appelée avec la valeur de la propriété cible.\r\n * Elle est utilisée pour apporter un traitement personnalisé à la valeur.\r\n * @param value valeur de la propriété cible\r\n * @returns\r\n */\r\n callback?: (value: any | null | undefined) => string;\r\n\r\n /**\r\n * Type de la colonne: lien, chips, input, date, default\r\n */\r\n type?: TColumnType;\r\n\r\n /**\r\n * Format de la date pour les colonnes de type date\r\n */\r\n format?: string;\r\n\r\n /**\r\n * Url de base pour les colonnes de type lien\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Type d'input pour les colonnes de type input\r\n */\r\n inputType?:\r\n | 'text'\r\n | 'number'\r\n | 'password'\r\n | 'date'\r\n | 'datetime'\r\n | 'file'\r\n | 'color'\r\n | 'toggle';\r\n\r\n /**\r\n * Règles de validations pour les colonnes de type input\r\n */\r\n validations?: IControlValidation[];\r\n\r\n /**\r\n * Chips disponibles pour les colonnes de type chips\r\n */\r\n chips?: { [key: string]: IChip };\r\n\r\n /**\r\n * Méthode callback qui sera avec la valeur de la propriété cible.\r\n * Elle est utilisée comme clef pour sélectionner quel chips afficher\r\n * @param entry\r\n * @returns\r\n */\r\n chipsCallback?: (entry: any) => string;\r\n};\r\n\r\nexport interface IChip {\r\n /**\r\n * Le text qui sera affiché dans le chips\r\n */\r\n display: string;\r\n /**\r\n * La couleur du background du chips\r\n */\r\n color: Color;\r\n}\r\n\r\nexport type TColumnType = 'link' | 'chips' | 'input' | 'date' | 'default';\r\n\r\n@Component({\r\n selector: 'chr-table',\r\n imports: [\r\n CommonModule,\r\n ChrPaginatorComponent,\r\n NgxPaginationModule,\r\n ChrButtonComponent,\r\n ChrFormComponent,\r\n SortPipe,\r\n MatIcon,\r\n TabToInputHandlerDirective,\r\n ],\r\n templateUrl: './chr-table-new.component.html',\r\n styleUrl: './chr-table-new.component.scss',\r\n providers: [PaginationService],\r\n})\r\nexport class ChrDataTable {\r\n private _data: any[] | null = [];\r\n\r\n /**\r\n * Data to display.\r\n * @see If it's piped with | Async, please note that the input column may not work as expected\r\n */\r\n @Input() get data(): any[] | null {\r\n return this._data;\r\n }\r\n set data(value: any[] | null) {\r\n this._data = value || [];\r\n this.currentPage = 1;\r\n }\r\n /**\r\n * Whether or not the table will show a column with a checkbox to select entries. Default is false\r\n */\r\n @Input() selectable: boolean = false;\r\n\r\n /**\r\n * The selected entries\r\n */\r\n @Input() selection: any[] = [];\r\n /**\r\n * The selected entries change event. This will be triggered on each selection and contain the full array of selected entries\r\n */\r\n @Output() selectionChange: EventEmitter<any[]> = new EventEmitter();\r\n\r\n /**\r\n * The table's action column definition\r\n */\r\n @Input() actions?: IAction[];\r\n\r\n /**\r\n * Wheter or not the current sort is ascendant. Default is true\r\n */\r\n @Input() isAsc: boolean = true;\r\n @Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\r\n /**\r\n * The property by which the data will be sorted\r\n */\r\n @Input() sortBy?: string;\r\n @Output() sortByChange: EventEmitter<string> = new EventEmitter();\r\n\r\n /**\r\n * The page size for the table. Default is 20\r\n */\r\n @Input() pageSize: number = 20;\r\n @Output() pageSizeChange: EventEmitter<number> = new EventEmitter();\r\n\r\n /**\r\n * The current page of the table. Default is 1\r\n */\r\n @Input() currentPage: number = 1;\r\n @Output() currentPageChange: EventEmitter<number> = new EventEmitter();\r\n\r\n /**\r\n * The ID of the table. It's used to persist page size and currentpage when the user change pages\r\n */\r\n @Input() id?: string = 'chr_base-data-table';\r\n\r\n /**\r\n * The color to use for the table's header\r\n */\r\n @Input() color?: Color = 'primary';\r\n\r\n /**\r\n * The table's columns definitions\r\n */\r\n @Input() columns: TColumn[] = [];\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private changeDetector: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.dataService.get(`${this.id}_sortBy`).subscribe((res) => {\r\n if (res) this.sortBy = res;\r\n this.changeDetector.markForCheck();\r\n });\r\n this.dataService.get(`${this.id}_isAsc`).subscribe((res) => {\r\n if (res) this.isAsc = res;\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n protected emitIsAsc(isAsc: any) {\r\n this.dataService.set(`${this.id}_isAsc`, isAsc);\r\n this.isAscChange.emit(isAsc);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected emitSortBy(sortBy: any) {\r\n this.dataService.set(`${this.id}_sortBy`, sortBy);\r\n this.sortByChange.emit(sortBy);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected emitPageSize(pageSize: any) {\r\n this.pageSize = pageSize;\r\n this.pageSizeChange.emit(pageSize);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected emitCurrentPage(currentPage: any) {\r\n this.currentPage = currentPage;\r\n this.currentPageChange.emit(currentPage);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n protected getNestedProperty(obj: any, path?: string): any {\r\n if (path === null || path === undefined) return obj;\r\n const value = path.split('.').reduce((acc, key) => acc && acc[key], obj);\r\n return value;\r\n }\r\n\r\n protected select = (entry: any, event: MouseEvent) => {\r\n const pointer = <PointerEvent>event;\r\n const target = <HTMLInputElement>pointer.target;\r\n if (target.checked) {\r\n this.selection.push(entry);\r\n } else {\r\n this.selection = this.selection.filter((x) => x !== entry);\r\n }\r\n\r\n this.selectionChange.emit(this.selection);\r\n };\r\n\r\n public getSelection = () => {\r\n return this.selection;\r\n };\r\n\r\n public setSelection = (data: any[]) => {\r\n this.selection = data;\r\n this.selectionChange.emit(this.selection);\r\n this.changeDetector.markForCheck();\r\n };\r\n\r\n protected contains = (entry: any) => {\r\n return this.selection.includes(entry);\r\n };\r\n\r\n updateModel = (entry: any, properties: string, value: { key: any }) => {\r\n var pList = properties.split('.');\r\n var len = pList.length;\r\n for (var i = 0; i < len - 1; i++) {\r\n var elem = pList[i];\r\n if (!entry[elem]) entry[elem] = {};\r\n entry = entry[elem];\r\n }\r\n\r\n entry[pList[len - 1]] = value.key;\r\n };\r\n\r\n protected getTextColor = (color: Color = 'none') => {\r\n return getTextColor(color);\r\n };\r\n\r\n protected getBackgroundColor = (color: Color = 'none') => {\r\n return getBackgroundColor(color);\r\n };\r\n\r\n protected getContrastTextColor = (color: Color = 'black') => {\r\n return getContrastTextColor(color);\r\n };\r\n\r\n protected getBorderColor = (color: Color = 'none') => {\r\n return getBorderColor(color);\r\n };\r\n\r\n protected sort = (properties?: string) => {\r\n if (properties === null || properties === undefined) return;\r\n const alreadySorted = this.sortBy == properties;\r\n if (alreadySorted) {\r\n this.isAsc = !this.isAsc;\r\n this.isAscChange.emit(this.isAsc);\r\n } else {\r\n this.sortBy = properties;\r\n this.sortByChange.emit(this.sortBy);\r\n this.isAsc = true;\r\n this.isAscChange.emit(true);\r\n }\r\n };\r\n}\r\n","<table class=\"hidden md:!table chr-table\">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"selectable\" [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\" class=\"w-min\">\r\n </th>\r\n <th *ngFor=\"let column of columns || []\" class=\"header-cell\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\" (click)=\"sort(column.properties)\">\r\n <div class=\"header-cell-content-wrapper\">\r\n <p class=\"header-cell-content\">{{column.display}}</p>\r\n <mat-icon class=\"header-cell-content\"\r\n *ngIf=\"column.properties && sortBy == column.properties && isAsc\">arrow_upward</mat-icon>\r\n <!-- 🡱 🡳 -->\r\n <mat-icon class=\"header-cell-content\"\r\n *ngIf=\"column.properties && sortBy == column.properties && !isAsc\">arrow_downward</mat-icon>\r\n </div>\r\n </th>\r\n <th *ngIf=\"actions\" class=\"actions-header-cell\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngIf=\"data === null || data === undefined || data.length <= 0\">\r\n <td *ngIf=\"selectable\"></td>\r\n <td>Pas de données</td>\r\n </tr>\r\n <tr [ngClass]=\"getBorderColor(color)\"\r\n *ngFor=\"let entry of (data || []) | sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id};\">\r\n <td *ngIf=\"selectable\" class=\"w-min\">\r\n <input type=\"checkbox\" (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" />\r\n </td>\r\n <td *ngFor=\"let column of columns || []\" [ngSwitch]=\"column.type\" tab-input-only>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\" [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'input'\" [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'chips'\" [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n </td>\r\n <td *ngIf=\"actions\">\r\n <div class=\"actions-cell\">\r\n <app-chr-button *ngFor=\"let action of actions\" [display]=\"action.display\" [icon]=\"action.icon\"\r\n [click]=\"action.callback.bind(null, entry)\" [color]=\"action.color\" [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(entry)\r\n : action.disabled || false\">\r\n </app-chr-button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tfoot></tfoot>\r\n</table>\r\n\r\n<div class=\"md:!hidden chr-mobile-table\">\r\n <div class=\"entry\"\r\n *ngFor=\"let entry of (data || []) | sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id};\">\r\n <div class=\"entry-row\" [ngClass]=\"getBorderColor(color)\">\r\n <div class=\"entry-header\" *ngIf=\"selectable\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">\r\n\r\n </div>\r\n <div *ngIf=\"selectable\" class=\"entry-content flex flex-row justify-center\">\r\n <input class=\"\" type=\"checkbox\" (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" />\r\n </div>\r\n </div>\r\n <div class=\"entry-row\" *ngFor=\"let column of columns || []\" [ngClass]=\"getBorderColor(color)\">\r\n <div class=\"entry-header\" [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">\r\n {{column.display}}\r\n </div>\r\n <div class=\"entry-content\" [ngSwitch]=\"column.type\" tab-input-only>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\" [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'input'\" [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'chips'\" [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"entry-row\">\r\n <div class=\"entry-header\" *ngIf=\"actions\"\r\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(color)]\">\r\n Actions\r\n </div>\r\n <div *ngIf=\"actions\" class=\"entry-content actions-cell\">\r\n <app-chr-button class=\"w-full\" *ngFor=\"let action of actions\" [display]=\"action.display\"\r\n [icon]=\"action.icon\" type=\"full\" [click]=\"action.callback.bind(null, entry)\" [color]=\"action.color\"\r\n [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(entry)\r\n : action.disabled || false\">\r\n </app-chr-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-chr-paginator [id]=\"this.id\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\" (pageSizeChange)=\"emitPageSize($event)\"\r\n (pageChange)=\"emitCurrentPage($event)\"></app-chr-paginator>\r\n\r\n<!-- CELL TEMPLATES -->\r\n<ng-template #default let-column='column' let-value=\"value\">\r\n <p *ngIf=\"column.callback? column.callback(value) : value as val\">{{val}}</p>\r\n</ng-template>\r\n<ng-template #date let-column='column' let-value=\"value\">\r\n <p *ngIf=\"column.callback? column.callback(value) : value as val\">{{val | date: column.format}}</p>\r\n</ng-template>\r\n<ng-template #link let-column='column' let-value=\"value\">\r\n <a *ngIf=\"column.callback? column.callback(value) : value as val\" target=\"_blank\"\r\n [href]=\"column.url + '/'+ val\">{{val}}</a>\r\n</ng-template>\r\n<ng-template #input let-entry=\"entry\" let-column='column' let-value=\"value\" class=\"w-full\">\r\n <app-chr-form class=\"form-wrapper w-full\" [model]=\"{key: value}\"\r\n (modelChange)=\"updateModel(entry, column.properties, $event)\" [sections]=\"[\r\n {\r\n controls:[\r\n {\r\n name: 'key',\r\n type: column.inputType || 'text',\r\n validations: column.validations,\r\n width: 'row'\r\n }\r\n ]\r\n }\r\n ]\">\r\n </app-chr-form>\r\n</ng-template>\r\n<ng-template #chip let-column='column' let-value=\"value\">\r\n <div *ngIf=\"column.callback? column.callback(value) : value as val\"\r\n class=\"w-full h-full flex flex-row items-center align-middle\">\r\n <span *ngIf=\"column.chips?.[val] as chip\"\r\n class=\"w-full flex text-center content-center align-middle items-center justify-center text-xs font-medium py-0.5 rounded-full\"\r\n [ngClass]=\"[getBackgroundColor(chip.color), getContrastTextColor(chip.color)]\">\r\n {{ chip.display }}\r\n </span>\r\n </div>\r\n</ng-template>","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-chr-searchbar',\n templateUrl: './chr-searchbar.component.html',\n styleUrls: [\n './chr-searchbar.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [ReactiveFormsModule],\n})\nexport class ChrSearchbarComponent {\n @Input() model?: string | null;\n @Output() modelChange: EventEmitter<string> = new EventEmitter();\n @Input() placeholder?: string | null;\n @Input() label?: string | null;\n public searchBy = new FormControl<string>('');\n\n constructor() {\n this.searchBy.valueChanges.subscribe((value) => this.emit(value));\n }\n\n emit(event: any) {\n this.modelChange.emit(event);\n }\n}\n","<div class=\"w-full relative z-0 group/inputs\">\n <input matInput [formControl]=\"searchBy\" placeholder=\" \" type=\"text\"\n class=\"block py-2.5 px-0 w-full text-sm text-gray-900 dark:text-white bg-transparent border-0 border-b-2 border-gray-300 appearance-none dark:border-gray-600 dark:focus:border-chrlblue focus:outline-none focus:ring-0 focus:border-chrdblue peer/inputs\" />\n <label\n class=\"peer/inputs-focus:font-medium absolute text-sm text-gray-500 dark:text-gray-400 duration-300 transform -translate-y-6 scale-75 top-3 -z-10 origin-[0] peer-focus/inputs:start-0 rtl:peer-focus/inputs:translate-x-1/4 rtl:peer-focus/inputs:left-auto peer-focus/inputs:text-chrdblue peer-focus/inputs:dark:text-chrlblue 0 peer-placeholder-shown/inputs:scale-100 peer-placeholder-shown/inputs:translate-y-0 peer-focus/inputs:scale-75 peer-focus/inputs:-translate-y-6\">{{\n label\n }}\n <!--\n @for (validation of control.validations; track validation) {\n @if (\n control?.touched &&\n form.hasError(validation.rule.toLowerCase(), name)\n ) {\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\n }\n }\n -->\n </label>\n</div>","import {\n Component,\n Input,\n Output,\n EventEmitter,\n Directive,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { NgClass } from '@angular/common';\n/**\n * This should only be used as a directive\n */\n@Component({\n selector: 'app-chr-table-header-cell, [app-chr-table-header-cell]',\n templateUrl: './chr-table-header-cell.component.html',\n styleUrls: [\n './chr-table-header-cell.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [NgClass, MatIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChrTableHeaderCellComponent {\n @Input() display?: string;\n @Input() column?: string[];\n @Input() alignment?: string;\n @Input() isAsc: boolean = true;\n @Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n @Input() sortBy?: string[];\n @Output() sortByChange: EventEmitter<string[]> = new EventEmitter();\n\n public constructor(private changeDetector: ChangeDetectorRef) {}\n\n orderBy = (column?: string[]) => {\n if (!this.sortBy) this.sortBy = column;\n\n if (this.sortBy == column) {\n this.isAsc = !this.isAsc;\n this.sortBy = column;\n this.isAscChange.emit(this.isAsc);\n this.sortByChange.emit(this.sortBy);\n } else {\n this.isAsc = true;\n this.sortBy = column;\n this.isAscChange.emit(this.isAsc);\n this.sortByChange.emit(this.sortBy);\n }\n this.changeDetector.markForCheck();\n };\n}\n","<div class=\"relative w-full cursor-pointer flex flex-row align-middle self-center\" [ngClass]=\"\n alignment == 'left' ? 'justify-start' : \n alignment == 'center' ? 'justify-center' : \n alignment == 'right' ? 'justify-end' : \n 'justify-left'\" (click)=\"orderBy(column)\">\n <p>{{ display }}</p>\n @if (sortBy) {\n <div class=\"absolute right-3 top-0 h-0 w-0\">\n @if (sortBy == column && isAsc) {\n <mat-icon>arrow_upward</mat-icon>\n }\n @if (sortBy == column && !isAsc) {\n <mat-icon>arrow_downward</mat-icon>\n }\n </div>\n }\n</div>\n<ng-content></ng-content>","import {\n Component,\n Input,\n AfterViewInit,\n EventEmitter,\n Output,\n ChangeDetectorRef,\n OnInit,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { ChrPaginatorComponent } from '../chr-paginator/chr-paginator.component';\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\nimport { ChrTableHeaderCellComponent } from '../chr-table-header-cell/chr-table-header-cell.component';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport {\n CommonModule,\n DATE_PIPE_DEFAULT_OPTIONS,\n DatePipe,\n NgFor,\n} from '@angular/common';\nimport { DataService } from '../services/data.service';\n\nimport { SortPipe } from 'chrv-pipes';\nimport { getContrastTextColor } from '../models/colors';\nimport {\n Color,\n getBackgroundColor,\n getBorderColor,\n getTextColor,\n} from '../models/colors';\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\n\nexport type Alignment = 'left' | 'center' | 'right';\n\nexport const Aligments: { [key: string]: string } = {\n left: 'text-left justify-start',\n center: 'text-center justify-center',\n right: 'text-right justify-end',\n};\n\nexport interface IChips {\n display: string;\n name: string;\n callback: (entry: any) => string | boolean;\n textColor?: Color;\n backgroundColor?: Color;\n}\n\nexport interface IColumn {\n display: string;\n alignment?: 'left' | 'center' | 'right';\n chips?: IChips[];\n properties?: string[];\n callback?: Function;\n date?: string;\n isLink?: boolean;\n linkStaticUrl?: string;\n}\n\nexport interface IComputedRow {\n columns: IComputedColumn[];\n}\n\nexport interface IComputedColumn {\n label?: string;\n value?: any;\n callback?: Function;\n alignment?: 'left' | 'center' | 'right';\n after?: string;\n}\n\nexport interface IAction {\n display?: string;\n icon?: string;\n callback: Function;\n disabled?: boolean;\n disabledCallback?: Function;\n color: Color;\n}\n\n@Component({\n selector: 'app-chr-table, [app-chr-table]',\n templateUrl: './chr-table.component.html',\n styleUrls: ['./chr-table.component.scss', '../../../../../tailwindbuild.css'],\n imports: [\n ChrTableHeaderCellComponent,\n ChrButtonComponent,\n ChrPaginatorComponent,\n SortPipe,\n NgxPaginationModule,\n CommonModule,\n ],\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [\n DatePipe,\n {\n provide: DATE_PIPE_DEFAULT_OPTIONS,\n useValue: { dateFormat: 'shortDate' },\n },\n ],\n})\nexport class ChrTableComponent implements OnInit, AfterViewInit {\n @Input() computedRows?: IComputedRow[];\n @Input() columns?: IColumn[];\n\n private _data: any[] | null = [];\n @Input() get data(): any[] | null {\n return this._data;\n }\n set data(value: any[] | null) {\n this._data = value || [];\n this.changeDetector.markForCheck();\n this.currentPage = 1;\n }\n\n @Input() actions?: IAction[];\n\n @Input() isAsc: boolean = true;\n @Output() isAscChange: EventEmitter<boolean> = new EventEmitter();\n @Input() sortBy?: string[];\n @Output() sortByChange: EventEmitter<string[]> = new EventEmitter();\n\n @Input() pageSize: number = 50;\n @Output() pageSizeChange: EventEmitter<number> = new EventEmitter();\n\n @Input() currentPage: number = 1;\n @Output() currentPageChange: EventEmitter<number> = new EventEmitter();\n\n @Input() selectable: boolean = false;\n\n @Input() selection: any[] = [];\n @Output() selectionChange: EventEmitter<any[]> = new EventEmitter();\n\n @Input() id?: string = 'chr_base-data-table';\n\n @Input() color: Color = 'secondary';\n\n @Input() textColor: Color = 'secondary-contrast';\n\n private _page: number = 1;\n\n currentProperty: any | null = null;\n currentText: string | null = null;\n\n constructor(\n private _date: DatePipe,\n private dataService: DataService,\n private changeDetector: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.dataService.get(`${this.id}_sortBy`).subscribe((res) => {\n if (res) this.sortBy = res;\n this.changeDetector.markForCheck();\n });\n this.dataService.get(`${this.id}_isAsc`).subscribe((res) => {\n if (res) this.isAsc = res;\n this.changeDetector.markForCheck();\n });\n }\n ngAfterViewInit(): void {}\n\n protected emitIsAsc(isAsc: any) {\n this.dataService.set(`${this.id}_isAsc`, isAsc);\n this.isAscChange.emit(isAsc);\n this.changeDetector.markForCheck();\n }\n\n protected emitSortBy(sortBy: any) {\n this.dataService.set(`${this.id}_sortBy`, sortBy);\n this.sortByChange.emit(sortBy);\n this.changeDetector.markForCheck();\n }\n\n protected emitPageSize(pageSize: any) {\n this.pageSize = pageSize;\n this.pageSizeChange.emit(pageSize);\n this.changeDetector.markForCheck();\n }\n\n protected emitCurrentPage(currentPage: any) {\n this.currentPage = currentPage;\n this.currentPageChange.emit(currentPage);\n this.changeDetector.markForCheck();\n }\n\n protected getProperty = (entry: any, properties?: any[]) => {\n this.currentProperty = null;\n this.currentText = null;\n\n if (!properties) {\n this.currentProperty = entry;\n return entry;\n }\n let value = entry;\n for (const i of properties) {\n value = (value as any)?.[i];\n }\n this.currentProperty = value;\n return value;\n };\n\n protected getText = (property: any, column: IColumn) => {\n let text = null;\n\n if (column.callback) text = column.callback(property);\n\n if (text == null && column.date)\n text = this._date.transform(property, column.date);\n\n this.currentText = text || property;\n\n return text || property;\n // column.date\n // ? column.callback\n // \t? column.callback(property)\n // \t: (property | date : column.date)\n // : column.callback\n // \t? column.callback(property)\n // \t: property\n };\n\n protected select = (entry: any, event: MouseEvent) => {\n const pointer = <PointerEvent>event;\n const target = <HTMLInputElement>pointer.target;\n if (target.checked) {\n this.selection.push(entry);\n } else {\n this.selection = this.selection.filter((x) => x !== entry);\n }\n\n this.selectionChange.emit(this.selection);\n };\n\n public getSelection = () => {\n return this.selection;\n };\n\n public setSelection = (data: any[]) => {\n this.selection = data;\n this.selectionChange.emit(this.selection);\n this.changeDetector.markForCheck();\n };\n\n protected contains = (entry: any) => {\n return this.selection.includes(entry);\n };\n\n protected getIsAsc = () => {\n return this.isAsc;\n };\n\n protected getSortBy = () => {\n return this.sortBy;\n };\n\n protected getTextColor = (color: Color = 'none') => {\n return getTextColor(color);\n };\n\n protected getBackgroundColor = (color: Color = 'none') => {\n return getBackgroundColor(color);\n };\n\n protected getContrastTextColor = (color: Color = 'black') => {\n return getContrastTextColor(color);\n };\n\n protected getBorderColor = (color: Color = 'none') => {\n return getBorderColor(color);\n };\n\n protected getAlignment = (alignment: Alignment = 'center') => {\n return Aligments[alignment] || Aligments['left'];\n };\n}\n","<div class=\"h-full no-scrollbar\">\n <ng-content class=\"mt-5\"></ng-content>\n <div class=\"flex flex-col flex-1 overflow-auto no-scrollbar\">\n @if (data) {\n <!-- max-w-[75%] -->\n <table\n class=\"table-auto max-w-full border dark:border-none relative flex flex-row flex-no-wrap w-full rounded-lg sm:shadow-lg bg-transparent no-scrollbar\">\n <thead>\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0\"\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(textColor)]\">\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\n [(isAsc)]=\"isAsc\" (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\" (sortByChange)=\"emitSortBy($event)\">\n </th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track entry)\n {\n <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0 \"\n [ngClass]=\"[getBackgroundColor(color), getContrastTextColor(textColor)]\">\n <th *ngIf=\"selectable\" class=\"p-3 h-14\"></th>\n @for (column of columns; track column) {\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\n [(isAsc)]=\"isAsc\" alignment=\"{{column.alignment}}\" (isAscChange)=\"emitIsAsc($event)\" [(sortBy)]=\"sortBy\"\n (sortByChange)=\"emitSortBy($event)\"></th>\n }\n @if (actions) {\n <th\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle self-center sm:w-0\">\n Actions\n </th>\n }\n </tr>\n }\n </thead>\n <tbody class=\"w-full\">\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no-wrap sm:table-row rounded-lg mb-0 sm:mb-2 \">\n <td class=\"p-3 h-14\">Pas de donnée(s)</td>\n @for (column of columns | slice: 1; track column) {\n <td class=\"p-3 h-14\"></td>\n }\n @if (actions) {\n <td class=\"p-3 h-14 grid gap-3 justify-center align-middle items-center\"\n [ngClass]=\"actions.length > 1 ? 'grid-cols-2' : 'grid-cols-1'\"></td>\n }\n </tr>\n }\n @for (entry of data |\n sort:isAsc:sortBy | paginate: {itemsPerPage: pageSize, currentPage: currentPage, id: this.id}; track\n entry; let i = $index) {\n <tr [attr.data-index]=\"i\"\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 sm:border-t-2 sm:first:border-0\"\n [ngClass]=\"[getBorderColor(color)]\">\n <td *ngIf=\"selectable\"\n class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\n [ngClass]=\"getBorderColor(color)\"><input type=\"checkbox\" (click)=\"select(entry, $event)\"\n [checked]=\"contains(entry)\" /></td>\n @for (column of columns; track column;) {\n <td [ngClass]=\"\n column.chips\n ? ''\n : ''\n \" class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\n [ngClass]=\"getBorderColor(color)\">\n <ng-container [ngTemplateOutlet]=\"default\"\n [ngTemplateOutletContext]=\"{prop: getProperty(entry, column.properties), column: column}\">\n </ng-container>\n </td>\n }\n <ng-template #default let-column='column' let-property=\"prop\">\n @if (column.isLink) {\n <a target=\"_blank\" class=\"text-{{column.alignment}}\" href=\"{{column.linkStaticUrl}}{{\n getText(property, column)\n }}\">\n {{\n currentText\n }}\n </a>\n }\n @if (!column.isLink) {\n <div class=\"flex flex-row\" [ngClass]=\"{\n 'justify-start': column.alignment == 'left',\n 'justify-center': column.alignment == 'center',\n 'justify-end': column.alignment == 'right',\n 'gap-2': column.chipsDisplay && getText(property, column)\n }\">\n @if (column.chips && column.chips.length > 0) {\n <div>\n @for(chip of column.chips; track chip; let i = $index){\n <span *ngIf=\"chip.callback(entry) === true || chip.callback(entry) === chip.name\"\n class=\"w-24 flex text-center content-center align-middle items-center justify-center text-xs font-medium py-0.5 rounded-full\"\n [ngClass]=\"[getBackgroundColor(chip.backgroundColor), chip.backgroundColor != 'none' ? getContrastTextColor(chip.backgroundColor) : getTextColor(chip.textColor)]\">\n {{ chip.display }}\n </span>\n }\n </div>\n }@else {\n <p class=\"inline-block overflow-hidden text-nowrap text-ellipsis max-w-full\">\n {{\n currentText || getText(property, column)\n }}\n </p>\n }\n </div>\n }\n </ng-template>\n\n @if (actions) {\n <td class=\"p-3 h-14 flex gap-2 w-full sm:w-min justify-center\">\n @for (action of actions; track action) {\n <app-chr-button class=\"w-full\" [disabled]=\"\n action.disabledCallback\n ? action.disabledCallback(entry)\n : action.disabled || false\n \" [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry, i)\"\n [color]=\"action.color\" type=\"responsive\">\n </app-chr-button>\n }\n </td>\n }\n </tr>\n }\n @for (r of computedRows; track r) {\n <tr class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 \">\n @for (c of r.columns; track c) {\n <td [ngClass]=\"c.alignment && 'text-'+(c.alignment||'left')\" class=\"p-3 h-14\">\n {{c.label && c.label + ':'}} {{c.value || (c.callback && c.callback(data))}} {{c.after}}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n <app-chr-paginator [id]=\"this.id\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\"\n (pageSizeChange)=\"emitPageSize($event)\" (pageChange)=\"emitCurrentPage($event)\"></app-chr-paginator>\n }\n </div>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'app-chr-checkbox',\n templateUrl: './chr-checkbox.component.html',\n styleUrls: [\n './chr-checkbox.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [MatIcon],\n})\nexport class ChrCheckboxComponent {\n public checked: boolean = false;\n\n @Input() type: 'info' | 'success' = 'info';\n\n @Input() disabled: boolean = false;\n\n @Output() change: EventEmitter<{ checked: boolean }> = new EventEmitter<{\n checked: boolean;\n }>();\n\n check(end: boolean) {\n if (this.disabled) return;\n if (end) {\n this.checked = true;\n this.change.emit({ checked: true });\n } else {\n this.checked = false;\n this.change.emit({ checked: false });\n }\n }\n}\n","<div>\n @if (checked) {\n <div (click)=\"check(false)\" [class.info]=\"type=='info'&&!disabled\"\n [class.bg-green-100]=\"type=='success'&&!disabled\" [class.cursor-pointer]=\"!disabled\"\n [class.bg-grey-400]=\"disabled\"\n class=\"box-border rounded-lg p-3 h-12 text-center border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>check-circle</mat-icon></div>\n </div>\n }\n @if (!checked) {\n <div (click)=\"check(true)\" [class.cursor-pointer]=\"!disabled\" [class.disabled]=\"disabled\"\n [class.bg-gray-200]=\"disabled\" [class.bg-red-100]=\"!disabled\"\n class=\"box-border p-3 h-12 text-center rounded-lg border-bottom-accent sm:border-none\">\n <div class=\"flex justify-center items-center\"><mat-icon>close</mat-icon></div>\n </div>\n }\n</div>","import { Component } from \"@angular/core\";\n\n@Component({\n\tselector: \"app-chr-separator\",\n\ttemplateUrl: \"./chr-separator.component.html\",\n\tstyleUrls: [\n\t\t\"./chr-separator.component.scss\",\n\t\t\"../../../../../tailwindbuild.css\",\n\t],\n\tstandalone: true,\n})\nexport class ChrSeparatorComponent {}\n","<div class=\"py-4\">\n <hr class=\"\" />\n</div>","export interface ILiveUpdateMessage {\r\n\tstatus: LiveUpdateStatus;\r\n\tmessage?: string | null;\r\n}\r\n\r\nexport enum LiveUpdateStatus {\r\n\tInfo,\r\n\tWarning,\r\n\tError,\r\n\tEnd,\r\n}\r\n\r\nexport const DEFAULTLIVEUPDATEMESSAGE: ILiveUpdateMessage = {\r\n\tstatus: LiveUpdateStatus.Info,\r\n\tmessage: \"Chargement...\",\r\n};\r\n\r\nexport const DefaultLiveUpdateMessage = DEFAULTLIVEUPDATEMESSAGE;\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class LoaderService {\r\n private is_loading: boolean = false;\r\n private is_loading$ = new BehaviorSubject<boolean>(this.is_loading);\r\n private requestStatckSize: number = 0;\r\n constructor() {}\r\n\r\n setLoading = (is: boolean) => {\r\n this.is_loading = is;\r\n this.is_loading$.next(this.is_loading);\r\n };\r\n\r\n isLoading = () => {\r\n return this.is_loading;\r\n };\r\n\r\n isLoadingAsync = () => {\r\n return this.is_loading$.asObservable();\r\n };\r\n\r\n getStackSize = () => this.requestStatckSize;\r\n\r\n incrementStackSize = () => this.requestStatckSize++;\r\n\r\n decrementStackSize = () => this.requestStatckSize--;\r\n\r\n setStackSize = (value: number) => (this.requestStatckSize = value);\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpInterceptorFn, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { catchError, Observable, throwError, tap } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { LoaderService } from '../../services/loader.service';\r\n\r\nexport const SpinnerInterceptor: HttpInterceptorFn = (req, next) => {\r\n const loader: LoaderService = inject(LoaderService);\r\n\r\n if (req.headers.get('skip') == 'true') {\r\n req = req.clone({ headers: req.headers.delete('skip') });\r\n return next(req);\r\n }\r\n req = req.clone({ headers: req.headers.delete('skip') });\r\n loader.incrementStackSize();\r\n loader.setLoading(true);\r\n return next(req).pipe(\r\n tap((data) => {\r\n if (data instanceof HttpResponse) {\r\n //Do something\r\n }\r\n }),\r\n finalize(() => {\r\n loader.decrementStackSize();\r\n if (loader.getStackSize() == 0) {\r\n loader.setLoading(false);\r\n }\r\n })\r\n );\r\n};\r\n","import { inject } from \"@angular/core\";\r\nimport { HttpContextToken, HttpEvent, HttpInterceptorFn, HttpResponse } from \"@angular/common/http\";\r\nimport { finalize, Observable, tap } from \"rxjs\";\r\nimport { LiveUpdateService } from \"../../services/live-update.service\";\r\nimport {\r\n\tHUBURL,\r\n\tXSRFCOOKIENAME,\r\n\tXSRFHEADERNAME,\r\n} from \"../providers/xsrf-provider\";\r\nimport { DataService } from \"../../services/data.service\";\r\n\r\nexport const XsrfInterceptor: HttpInterceptorFn = (req, next) => {\r\n\tconst headerName: string = inject(XSRFHEADERNAME);\r\n\tconst hubUrl: string = inject(HUBURL);\r\n\r\n\tconst liveUpdateService: LiveUpdateService | null =\r\n\t\thubUrl != null && hubUrl != undefined ? inject(LiveUpdateService) : null;\r\n\tconst dataService: DataService = inject(DataService);\r\n\tconst csrfToken = dataService.getSync(headerName);\r\n\r\n\tconst hasCsrfToken = csrfToken !== null && csrfToken !== undefined;\r\n\tconst shouldIntercept = [\"PUT\", \"POST\", \"DELETE\"].includes(req.method);\r\n\r\n\tconst isWebSocket = liveUpdateService\r\n\t\t? req.url.includes(liveUpdateService.getHubUrl())\r\n\t\t: false;\r\n\r\n\tif (hasCsrfToken && shouldIntercept && !isWebSocket) {\r\n\t\tconst cloned = req.clone({\r\n\t\t\theaders: req.headers.set(headerName, csrfToken),\r\n\t\t});\r\n\r\n\t\tliveUpdateService?.initConnection().subscribe();\r\n\t\treturn next(cloned).pipe(\r\n\t\t\tWaitAndStoreXsrfToken(headerName, dataService),\r\n\t\t\tfinalize(() => liveUpdateService?.closeConnection().subscribe())\r\n\t\t);\r\n\t} else {\r\n\t\treturn next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));\r\n\t}\r\n};\r\n\r\nexport const WaitAndStoreXsrfToken = (\r\n\theadername: string,\r\n\tdataService: DataService\r\n) => {\r\n\treturn (source: Observable<HttpEvent<any>>) => {\r\n\t\treturn source.pipe(\r\n\t\t\ttap((event) => {\r\n\t\t\t\tif (event instanceof HttpResponse) {\r\n\t\t\t\t\tconst xsrfToken = event.headers.get(headername);\r\n\t\t\t\t\tif (xsrfToken) {\r\n\t\t\t\t\t\tdataService.set(headername, xsrfToken);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn event;\r\n\t\t\t})\r\n\t\t);\r\n\t};\r\n};\r\n","import { HttpFeature, HttpInterceptorFn, provideHttpClient, withInterceptors, withXsrfConfiguration } from \"@angular/common/http\";\r\nimport { InjectionToken } from \"@angular/core\";\r\nimport { SpinnerInterceptor } from \"../interceptors/SpinnerInterceptor\";\r\nimport { XsrfInterceptor } from \"../interceptors/XsrfInterceptor\";\r\n\r\nexport interface IXsrfProviderParams {\r\n\txsrfHeader: string;\r\n\txsrfCookie?: string;\r\n\thubUrl?: string;\r\n\tinterceptors?: HttpInterceptorFn[];\r\n\tfeatures?: HttpFeature<any>[];\r\n}\r\n\r\nexport const provideXsrfHttpClient = (params: IXsrfProviderParams): any[] => {\r\n\treturn [\r\n\t\t{ provide: XSRFHEADERNAME, useValue: params.xsrfHeader },\r\n\t\t{\r\n\t\t\tprovide: XSRFCOOKIENAME,\r\n\t\t\tuseValue: params.xsrfCookie || params.xsrfHeader,\r\n\t\t},\r\n\t\t{ provide: HUBURL, useValue: params.hubUrl },\r\n\t\tprovideHttpClient(\r\n\t\t\twithInterceptors([\r\n\t\t\t\tSpinnerInterceptor,\r\n\t\t\t\tXsrfInterceptor,\r\n\t\t\t\t...(params?.interceptors || []),\r\n\t\t\t]),\r\n\t\t\twithXsrfConfiguration({\r\n\t\t\t\theaderName: params.xsrfHeader,\r\n\t\t\t\tcookieName: params.xsrfCookie || params.xsrfHeader,\r\n\t\t\t}),\r\n\t\t\t...(params?.features || [])\r\n\t\t),\r\n\t];\r\n};\r\n\r\nexport const XSRFHEADERNAME = new InjectionToken<string>(\"xsrfHeader\");\r\nexport const XSRFCOOKIENAME = new InjectionToken<string>(\"xsrfCookie\");\r\nexport const HUBURL = new InjectionToken<string>(\"hubUrl\");\r\n","import { Inject, Injectable, Optional } from \"@angular/core\";\r\nimport {\r\n\tBehaviorSubject,\r\n\tdelay,\r\n\tfilter,\r\n\tfrom,\r\n\tObservable,\r\n\tReplaySubject,\r\n\tskipWhile,\r\n\tswitchMap,\r\n\ttap,\r\n\ttimer,\r\n} from \"rxjs\";\r\nimport {\r\n\tHttpClient,\r\n\tHttpTransportType,\r\n\tHubConnection,\r\n\tHubConnectionBuilder,\r\n\tHubConnectionState,\r\n\tIHttpConnectionOptions,\r\n\tLogLevel,\r\n} from \"@microsoft/signalr\";\r\nimport {\r\n\tDEFAULTLIVEUPDATEMESSAGE,\r\n\tILiveUpdateMessage,\r\n\tLiveUpdateStatus,\r\n} from \"../models/live-update-message\";\r\nimport { XSRFHEADERNAME, HUBURL } from \"../config/providers/xsrf-provider\";\r\nimport { DataService } from \"./data.service\";\r\n\r\n@Injectable({\r\n\tprovidedIn: \"root\",\r\n})\r\nexport class LiveUpdateService {\r\n\tprivate _hubUrl: string;\r\n\tprivate _connection: HubConnection | null = null;\r\n\tprivate _xsrf: string | null;\r\n\tprivate _xsrfHeader: string | null;\r\n\t//private _client: HttpClient;\r\n\tprivate _message: BehaviorSubject<ILiveUpdateMessage> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE\r\n\t);\r\n\tprivate _update: BehaviorSubject<string> = new BehaviorSubject(\r\n\t\tDEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t);\r\n\r\n\tconstructor(\r\n\t\t@Inject(HUBURL) @Optional() hubUrl: string,\r\n\t\t@Inject(XSRFHEADERNAME) @Optional() xsrfHeader: string,\r\n\t\t@Inject(DataService) private dataService: DataService\r\n\t) {\r\n\t\tthis._hubUrl = hubUrl;\r\n\t\tthis._xsrfHeader = xsrfHeader;\r\n\t\tthis._xsrf = dataService.getSync(this._xsrfHeader);\r\n\t}\r\n\r\n\tpublic initConnection = (): Observable<void> => {\r\n\t\tif (this._xsrfHeader == null) throw new Error(\"xsrfHeader is not set\");\r\n\t\tif (this._hubUrl == null) throw new Error(\"hubUrl is not set\");\r\n\r\n\t\tthis._xsrf = this.dataService.getSync(this._xsrfHeader);\r\n\t\tif (this._connection == null)\r\n\t\t\tthis._connection = new HubConnectionBuilder()\r\n\t\t\t\t.withUrl(this._hubUrl, {\r\n\t\t\t\t\ttransport: HttpTransportType.ServerSentEvents,\r\n\t\t\t\t\theaders: { [this._xsrfHeader]: this._xsrf },\r\n\t\t\t\t} as IHttpConnectionOptions)\r\n\t\t\t\t.configureLogging(LogLevel.None)\r\n\t\t\t\t.withAutomaticReconnect()\r\n\t\t\t\t.build();\r\n\r\n\t\treturn new Observable<void>((observer) => {\r\n\t\t\tif (this._connection?.state == HubConnectionState.Connected)\r\n\t\t\t\tthis._connection;\r\n\t\t\telse\r\n\t\t\t\tthis._connection\r\n\t\t\t\t\t?.start()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\tobserver.next();\r\n\t\t\t\t\t\tobserver.complete();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((error: any) => {\r\n\t\t\t\t\t\tobserver.error(error);\r\n\t\t\t\t\t});\r\n\r\n\t\t\tthis._connection?.on(\"UPDATE\", (message: ILiveUpdateMessage) => {\r\n\t\t\t\tthis.pushMessage(message);\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\r\n\tpublic onUpdate(): Observable<string> {\r\n\t\treturn this._update\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic closeConnection(): Observable<void> {\r\n\t\treturn from(this._connection!.stop()).pipe(\r\n\t\t\ttap(() => {\r\n\t\t\t\tthis._connection = null;\r\n\r\n\t\t\t\t//We push a null to flush the observable\r\n\t\t\t\tthis._message.next(DEFAULTLIVEUPDATEMESSAGE);\r\n\t\t\t\tthis._update.next(DEFAULTLIVEUPDATEMESSAGE?.message || \"\");\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tpublic getMessage(): Observable<ILiveUpdateMessage> {\r\n\t\treturn this._message\r\n\t\t\t.asObservable()\r\n\t\t\t.pipe(skipWhile((message) => message == null));\r\n\t}\r\n\r\n\tpublic getHubUrl = (): string => this._hubUrl;\r\n\r\n\tprivate pushMessage(message: ILiveUpdateMessage) {\r\n\t\tthis._message.next(message);\r\n\t\tthis._update.next(\r\n\t\t\tmessage?.message || DEFAULTLIVEUPDATEMESSAGE?.message || \"\"\r\n\t\t);\r\n\t\tif (message.status === LiveUpdateStatus.End) {\r\n\t\t\tthis._connection?.stop();\r\n\t\t}\r\n\t}\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n tap,\r\n pipe,\r\n Observable,\r\n takeUntil,\r\n BehaviorSubject,\r\n skipWhile,\r\n takeWhile,\r\n finalize,\r\n} from 'rxjs';\r\nimport {\r\n DefaultLiveUpdateMessage,\r\n ILiveUpdateMessage,\r\n LiveUpdateStatus,\r\n} from '../models/live-update-message';\r\nimport { LoaderService } from '../services/loader.service';\r\nimport { LiveUpdateService } from '../services/live-update.service';\r\n\r\n@Component({\r\n selector: 'app-chr-spinner',\r\n templateUrl: './chr-spinner.component.html',\r\n styleUrls: [\r\n './chr-spinner.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrSpinnerComponent implements OnInit {\r\n public message: ILiveUpdateMessage = DefaultLiveUpdateMessage;\r\n\r\n constructor(\r\n public loader: LoaderService,\r\n public liveUpdate: LiveUpdateService,\r\n private changeDetector: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.liveUpdate\r\n .getMessage()\r\n .pipe(\r\n finalize(() => {\r\n this.message = DefaultLiveUpdateMessage;\r\n console.error(\r\n \"Observable closed. This should not happen as further live update messages won't be received.\"\r\n );\r\n })\r\n )\r\n .subscribe((res) => {\r\n this.message = res;\r\n this.changeDetector.detectChanges();\r\n });\r\n this.loader.isLoadingAsync().subscribe((res) => {\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n display = (message: ILiveUpdateMessage | null) => {\r\n return message?.message;\r\n //return `${message?.status} \\n\\n ${message?.message}`;\r\n };\r\n}\r\n","@if (this.loader.isLoading()) {\r\n<div\r\n class=\"cssload-container flex flex-col justify-center content-center items-center bg-gray-200 dark:bg-slate-600 opacity-85\">\r\n <div class=\"wheel-wrapper\">\r\n <div class=\"cssload-speeding-wheel\">\r\n </div>\r\n </div>\r\n <div class=\"w-96 inset-full h-0 text-ellipsis text-wrap text-center\">\r\n {{display((message))}}\r\n </div>\r\n</div>\r\n}","import { Component, Input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToastService } from '../services/toast.service';\r\nimport { Color, getTextColor } from '../models/colors';\r\n\r\n@Component({\r\n selector: 'app-chr-toast',\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chr-toast.component.html',\r\n styleUrls: ['./chr-toast.component.scss', '../../../../../tailwindbuild.css'],\r\n})\r\nexport class ChrToastComponent {\r\n @Input() topmargin = '0px';\r\n public constructor(public toastService: ToastService) {}\r\n}\r\n","<div *ngIf=\"(toastService.current() | async); let toast;\" class=\"toast flex h-0\" style=\"--margin-top: {{topmargin}};\">\r\n <div class=\"toast-sticky-wrapper\">\r\n <div class=\"toast-content p-2\" style=\"cursor: default;\">\r\n <mat-icon class=\"toast-status-icon\">icon</mat-icon>\r\n <p class=\"toast-message\" [ngClass]=\"{\r\n 'text-primary':toast?.type == 'success',\r\n 'text-warn':toast?.type == 'warning',\r\n 'text-error':toast?.type == 'error',\r\n }\">{{toast?.message}}</p>\r\n <mat-icon class=\"toast-close-icon\" style=\"cursor: pointer;\" (click)=\"toastService.next()\">close</mat-icon>\r\n </div>\r\n </div>\r\n</div>","import { Component, Inject, Input } from '@angular/core';\nimport {\n MatDialogRef,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,\n MAT_DIALOG_DATA,\n MatDialogConfig,\n} from '@angular/material/dialog';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { IAction } from '../chr-table/chr-table.component';\n\nexport interface IDefaultDialogConfig extends MatDialogConfig<any> {\n config?: MatDialogConfig<any>;\n title: string;\n text: string;\n close?: string;\n actions?: IAction[];\n}\n\ninterface DialogConfig {\n _config: {\n title: string;\n text: string;\n close: string;\n actions: IAction[];\n };\n}\n\n@Component({\n selector: 'app-chr-default-modal',\n templateUrl: './chr-default-modal.component.html',\n styleUrls: [\n './chr-default-modal.component.scss',\n '../../../../../tailwindbuild.css',\n ],\n imports: [\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n ChrButtonComponent,\n ],\n})\nexport class ChrDefaultModalComponent {\n public valid: boolean = false;\n\n @Input() title?: string;\n @Input() text?: string;\n @Input() actions?: IAction[];\n @Input() close?: string;\n\n protected html: SafeHtml | null = null;\n\n constructor(\n public dialogRef: MatDialogRef<ChrDefaultModalComponent>,\n @Inject(MAT_DIALOG_DATA) public config: DialogConfig,\n private sanitizer: DomSanitizer\n ) {\n if (!this.title) this.title = config?._config.title || 'Attention: ';\n this.title = this.title.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n\n if (!this.text) this.text = config?._config.text || '';\n this.text = this.text.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n this.html = sanitizer.bypassSecurityTrustHtml(this.text);\n\n if (!this.close) this.close = config?._config.close || 'Fermer';\n\n if (!this.actions) this.actions = config?._config.actions || [];\n }\n\n ngOnInit() {}\n\n public closeModal = (callback?: Function) => {\n const value = callback?.();\n this.dialogRef.close(value || true);\n };\n}\n","<div class=\"w-full overflow-auto overflow-x-hidden\"\n style=\"background-color: var(--background-color); color:var(--text-color)\">\n <h2 mat-dialog-title class=\"0\">{{title}}</h2>\n <mat-dialog-content [innerHTML]=\"html\">\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"w-full flex flex-row justify-between\">\n <app-chr-button class=\"w-36\" [display]=\"close\" color=\"secondary\" [click]=\"closeModal\"></app-chr-button>\n @if (actions) {\n @for (action of actions; track action) {\n <app-chr-button class=\"w-36\" [disabled]=\"\n action.disabledCallback\n ? action.disabledCallback()\n : action.disabled || false\n \" [display]=\"action.display\" [icon]=\"action.icon\"\n [click]=\"closeModal.bind(null, action.callback.bind(null))\" [color]=\"action.color\">\n </app-chr-button>\n }\n }\n </div>\n </mat-dialog-actions>\n</div>","import { Directive, HostListener, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tab-enter]',\r\n standalone: true,\r\n})\r\nexport class TabToEnterHandlerDirective {\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('keydown', ['$event'])\r\n handleTab(event: KeyboardEvent): void {\r\n if (event.key === 'Tab') {\r\n const enter = new KeyboardEvent('keyup', {\r\n ...event,\r\n key: 'Enter',\r\n code: 'Enter',\r\n bubbles: true,\r\n keyCode: 13,\r\n });\r\n event.target?.dispatchEvent(enter);\r\n }\r\n }\r\n}\r\n","import { animate, style, transition, trigger } from '@angular/animations';\r\n\r\nexport const inOutAnimation = (duration: number = 500) =>\r\n trigger('inOutAnimation', [\r\n transition(':enter', [\r\n style({ opacity: 0 }),\r\n animate(`${duration}ms ease-out`, style({ opacity: 1 })),\r\n ]),\r\n transition(':leave', [\r\n style({ opacity: 1 }),\r\n animate(`${duration}ms ease-in`, style({ opacity: 0 })),\r\n ]),\r\n ]);\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { ChrDeleteModalComponent } from '../chr-delete-modal/chr-delete-modal.component';\r\nimport {\r\n ChrDefaultModalComponent,\r\n IDefaultDialogConfig,\r\n} from '../chr-default-modal/chr-default-modal.component';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogService {\r\n constructor(private dialog: MatDialog) {}\r\n\r\n openDelete = (callback?: Function, ...elements: Parameters<any>) => {\r\n const dialogRef = this.open(ChrDeleteModalComponent);\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result == true) callback?.(...elements);\r\n });\r\n };\r\n\r\n openDefault = (config?: IDefaultDialogConfig) => {\r\n const cfg = {\r\n ...config?.config,\r\n data: {\r\n ...config?.config?.data,\r\n _config: {\r\n title: config?.title,\r\n text: config?.text,\r\n close: config?.close,\r\n actions: config?.actions,\r\n },\r\n },\r\n };\r\n const dialogRef = this.open(ChrDefaultModalComponent, cfg);\r\n };\r\n\r\n open = (component: any, options?: MatDialogConfig<any> | undefined) => {\r\n return this.dialog.open(component, options);\r\n };\r\n}\r\n","/*\n * Public API Surface of chr-components\n */\n//COMPONENTS\nexport * from './lib/chr-breadcrumb/chr-breadcrumb.component';\nexport * from './lib/chr-button/chr-button.component';\nexport * from './lib/chr-delete-modal/chr-delete-modal.component';\n//export { ChrFormComponentLegacy } from './lib/chr-form-legacy/chr-form-legacy.component';\nexport * from './lib/chr-form/chr-form.component';\n// -- Form Input --\nexport * from './lib/chr-form/chr-base-input/chr-base-input.component';\nexport * from './lib/chr-form/chr-color-input/chr-color-input.component';\nexport * from './lib/chr-form/chr-date-input/chr-date-input.component';\nexport * from './lib/chr-form/chr-datetime-input/chr-datetime-input.component';\nexport * from './lib/chr-form/chr-file-input/chr-file-input.component';\nexport * from './lib/chr-form/chr-textarea-input/chr-textarea-input.component';\nexport * from './lib/chr-form/chr-toggle-input/chr-toggle-input.component';\nexport * from './lib/chr-search-select/chr-search-select.component';\nexport * from './lib/chr-tag-select/chr-tag-select.component';\nexport * from './lib/chr-table-new/chr-table-new.component';\n// -- From Input --\nexport * from './lib/chr-searchbar/chr-searchbar.component';\nexport * from './lib/chr-paginator/chr-paginator.component';\nexport * from './lib/chr-table/chr-table.component';\nexport * from './lib/chr-table-header-cell/chr-table-header-cell.component';\nexport * from './lib/chr-checkbox/chr-checkbox.component';\nexport * from './lib/chr-separator/chr-separator.component';\nexport * from './lib/models/chr-validators/decimal-validator';\nexport * from './lib/models/chr-validators/max-date-validator';\nexport * from './lib/models/chr-validators/type-validator';\nexport * from './lib/chr-spinner/chr-spinner.component';\nexport * from './lib/chr-toast/chr-toast.component';\nexport * from './lib/chr-default-modal/chr-default-modal.component';\n\n//DIRECTIVES\nexport * from './lib/directives/tab-input-only-handler.directive';\nexport * from './lib/directives/tab-to-enter-handler.directive';\n\n//ANIMATIONS\nexport * from './lib/animations/in-out.animation';\nexport * from './lib/animations/rotation.animation';\n//SERVICES\nexport * from './lib/services/dialog.service';\nexport * from './lib/services/data.service';\nexport * from './lib/services/live-update.service';\nexport * from './lib/services/loader.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/cookie.service';\nexport * from './lib/services/files.service';\n\n//MODELS\nexport * from './lib/models/live-update-message';\n\n//INTERCEPTORS\nexport * from './lib/config/interceptors/SpinnerInterceptor';\nexport * from './lib/config/interceptors/XsrfInterceptor';\n\n//PROVIDERS\nexport * from './lib/config/providers/xsrf-provider';\n\n//Functions\nexport * from './lib/models/chr-validators/base-validator';\nexport * from './lib/models/colors';\n\n//OTHERS\nexport * from 'ngx-pagination';\nexport * from 'chrv-pipes';\nexport * from '@angular/material/dialog';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","i6","i2.FileService","i3.ToastService","i2.CookiesService","i3.DataService","i1.DataService","i2.DataService","finalize","i1.LoaderService","i2.LiveUpdateService","i1.ToastService"],"mappings":"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"}