chrv-components 1.11.98 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chrv-components-1.12.1.tgz +0 -0
- package/fesm2022/chrv-components.mjs +1336 -544
- package/fesm2022/chrv-components.mjs.map +1 -1
- package/index.d.ts +130 -42
- package/package.json +1 -1
- package/src/lib/styles/forms.css +72 -0
- package/chrv-components-1.11.98.tgz +0 -0
|
@@ -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/models/modal-tokens.ts","../../../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/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-context-menu/chr-context-menu.component.ts","../../../projects/chrv-components/src/lib/chr-context-menu/chr-context-menu.component.html","../../../projects/chrv-components/src/lib/directives/context-menu.directive.ts","../../../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/models/file.ts","../../../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-tab/chr-tab.component.ts","../../../projects/chrv-components/src/lib/chr-tab/chr-tab.component.html","../../../projects/chrv-components/src/lib/chr-tab-group/chr-tab-group.component.ts","../../../projects/chrv-components/src/lib/chr-tab-group/chr-tab-group.component.html","../../../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/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-form/chr-nice-file-input/chr-nice-file-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-nice-file-input/chr-nice-file-input.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/chr-modal/chr-modal.component.ts","../../../projects/chrv-components/src/lib/chr-modal/chr-modal.component.html","../../../projects/chrv-components/src/lib/chr-inline-svg/chr-inline-svg.component.ts","../../../projects/chrv-components/src/lib/chr-inline-svg/chr-inline-svg.component.html","../../../projects/chrv-components/src/lib/chr-button-new/chr-button.component.ts","../../../projects/chrv-components/src/lib/chr-button-new/chr-button.component.html","../../../projects/chrv-components/src/lib/chr-carousel/chr-carousel.component.ts","../../../projects/chrv-components/src/lib/chr-carousel/chr-carousel.component.html","../../../projects/chrv-components/src/lib/chr-dropdown/chr-dropdown.component.ts","../../../projects/chrv-components/src/lib/chr-dropdown/chr-dropdown.component.html","../../../projects/chrv-components/src/lib/models/ColumnMetadata.model.ts","../../../projects/chrv-components/src/lib/models/TableConstraintReference.model.ts","../../../projects/chrv-components/src/lib/models/TableConstraintColumn.model.ts","../../../projects/chrv-components/src/lib/models/TableConstraint.model.ts","../../../projects/chrv-components/src/lib/models/AnonymousTable.model.ts","../../../projects/chrv-components/src/lib/models/formatters/character.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/date.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/number.formatter.ts","../../../projects/chrv-components/src/lib/services/data-formatter.service.ts","../../../projects/chrv-components/src/lib/directives/cross-cell-navigation.directive.ts","../../../projects/chrv-components/src/lib/chr-datagrid/editable-cell/editable-cell.ts","../../../projects/chrv-components/src/lib/chr-datagrid/editable-cell/editable-cell.html","../../../projects/chrv-components/src/lib/directives/scroll-into-view.directive.ts","../../../projects/chrv-components/src/lib/directives/control-click.directive.ts","../../../projects/chrv-components/src/lib/models/FilterMode.enum.ts","../../../projects/chrv-components/src/lib/chr-datagrid/filter/column-filter.ts","../../../projects/chrv-components/src/lib/chr-datagrid/filter/column-filter.html","../../../projects/chrv-components/src/lib/chr-datagrid/data-grid/data-grid.ts","../../../projects/chrv-components/src/lib/chr-datagrid/data-grid/data-grid.html","../../../projects/chrv-components/src/lib/chr-message-banner/message-banner.ts","../../../projects/chrv-components/src/lib/chr-message-banner/message-banner.html","../../../projects/chrv-components/src/lib/directives/tab-to-enter-handler.directive.ts","../../../projects/chrv-components/src/lib/models/modal.ts","../../../projects/chrv-components/src/lib/services/modal.service.ts","../../../projects/chrv-components/src/lib/services/cookie.service.ts","../../../projects/chrv-components/src/public-api.ts","../../../projects/chrv-components/src/chrv-components.ts"],"sourcesContent":["import { Component, inject, input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { MatButton } from '@angular/material/button';\r\n\r\nexport interface Breadcrumb {\r\n display: string;\r\n link?: string;\r\n callback?: Function;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chr-breadcrumb, chr-breadcrumb',\r\n templateUrl: './chr-breadcrumb.component.html',\r\n styleUrls: [\r\n './chr-breadcrumb.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [MatButton],\r\n})\r\nexport class BreadcrumbComponent {\r\n router = inject(Router);\r\n\r\n readonly crumbs = input<Breadcrumb[]>();\r\n\r\n navigateTo = (uri: string, data?: any) => {\r\n this.router.navigate([uri], { state: data });\r\n };\r\n}\r\n","<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\r\n @for (crumb of crumbs(); track crumb; let index = $index) {\r\n <div class=\"w-fit min-w-fit\">\r\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\r\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\r\n {{ crumb.display }}\r\n </button>\r\n @if (index < (crumbs()?.length || 1) - 1) {\r\n <span>></span>\r\n }\r\n </div>\r\n }\r\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 | 'text'\r\n | 'neutral'\r\n | 'background'\r\n | 'none';\r\n\r\nexport const ColorsVariables: { [key in Color]: string } = {\r\n primary: 'var(--primary-color)',\r\n 'primary-contrast': 'var(--primary-contrast-color)',\r\n secondary: 'var(--secondary-color)',\r\n 'secondary-contrast': 'var(--secondary-contrast-color)',\r\n tertiary: 'var(--tertiary-color)',\r\n 'tertiary-contrast': 'var(--tertiary-contrast-color)',\r\n warn: 'var(--warn-color)',\r\n 'warn-contrast': 'var(--warn-contrast-color)',\r\n error: 'var(--error-color)',\r\n 'error-contrast': 'var(--error-contrast-color)',\r\n text: 'var(--text-color)',\r\n background: 'var(--background-color)',\r\n none: 'transparent',\r\n white: 'white',\r\n neutral: 'var(--neutral-color)',\r\n black: 'black',\r\n};\r\n\r\nexport const Colors: { [key in Color]: 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 text: 'text',\r\n background: 'background',\r\n none: 'transparent',\r\n white: 'white',\r\n neutral: 'neutral',\r\n black: 'black',\r\n};\r\n\r\nexport function getTextColor(color: Color = 'none') {\r\n const c = Colors[color];\r\n return `text-${c !== undefined ? c : 'text-color'}`;\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 const c = Colors[color];\r\n return c !== undefined ? `bg-${c}` : 'bg-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 const c = Colors[color];\r\n return c !== undefined ? `border-${c}` : 'border-black';\r\n}\r\n\r\nexport function getContrastBorderColor(color: Color = 'none') {\r\n return getBorderColor(`${color}-contrast` as Color);\r\n}\r\n\r\nexport function getVariableColor(color: Color = 'none') {\r\n const c = ColorsVariables[color];\r\n return c !== undefined ? c : 'black';\r\n}\r\n\r\nexport function getVariableContrastColor(color: Color = 'none') {\r\n const c = ColorsVariables[`${color}-contrast` as Color];\r\n return c !== undefined ? c : 'white';\r\n}\r\n","import { Component, input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule, MatFabButton } from '@angular/material/button';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n Color,\r\n getBackgroundColor,\r\n getContrastTextColor,\r\n getTextColor,\r\n} from '../models/colors';\r\n\r\n@Component({\r\n selector: 'app-chr-button, chr-button',\r\n templateUrl: './chr-button.component.html',\r\n styleUrls: [\r\n './chr-button.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [MatTooltipModule, MatIconModule, MatButtonModule, CommonModule],\r\n})\r\nexport class ChrButtonComponent {\r\n readonly display = input<string | undefined>('');\r\n readonly icon = input<string | undefined>('');\r\n readonly click = input<Function>();\r\n readonly clickWhileDisabled = input<Function>();\r\n readonly color = input<Color>('primary');\r\n readonly textColor = input<Color | undefined>('primary-contrast');\r\n readonly flat = input<boolean>(false);\r\n\r\n readonly predicate = input<boolean | undefined>(true);\r\n readonly type = input<\r\n 'responsive' | 'table' | 'full' | 'fixed' | 'small' | 'none'\r\n >('none');\r\n readonly href = input<string>();\r\n readonly target = input<'_blank' | '_parent' | '_self' | '_top'>();\r\n readonly disabled = input<boolean>(false);\r\n readonly tooltip = input<string>();\r\n readonly tooltipPosition = input<\r\n 'above' | 'below' | 'left' | 'right' | 'before' | 'after'\r\n >();\r\n\r\n constructor() {}\r\n\r\n // setDisabled = (is: boolean) => {\r\n // this.disabled = is;\r\n // };\r\n\r\n doClick = () => {\r\n if (!this.disabled()) this.click()?.();\r\n else this.clickWhileDisabled()?.();\r\n };\r\n\r\n getBackgroundColor = (color: Color) => getBackgroundColor(color);\r\n\r\n getTextColor = (color: Color) => getContrastTextColor(color);\r\n\r\n getWidth = () => {\r\n switch (this.type()) {\r\n case 'fixed':\r\n return 'w-36';\r\n case 'full':\r\n return 'w-full';\r\n case 'responsive':\r\n return 'w-full';\r\n case 'small':\r\n return 'w-9';\r\n case 'table':\r\n return 'w-full';\r\n default:\r\n return 'w-min';\r\n }\r\n };\r\n\r\n getShadow = () => {\r\n if (this.flat()) return '';\r\n return 'button-shadow';\r\n };\r\n}\r\n","<a class=\"flex flex-row cursor-pointer items-center justify-center align-middle h-9 m-0 p-2 rounded-md\"\r\n style=\"--color: {{getBackgroundColor(color())}};\" [ngClass]=\"[getBackgroundColor(color()), getWidth(), getShadow()]\"\r\n [attr.disabled]=\"disabled() || false\" (click)=\"doClick()\" [attr.href]=\"href() && href()\" [attr.target]=\"target() && target()\"\r\n [matTooltip]=\"tooltip()||''\" [matTooltipPosition]=\"tooltipPosition()||'above'\">\r\n @if (display()) {\r\n <span [ngClass]=\"getTextColor(color())\"\r\n class=\"text-nowrap overflow-hidden text-ellipsis\">{{display()}}</span>\r\n }\r\n @if (icon()) {\r\n <mat-icon class=\"!m-0\" [ngClass]=\"getTextColor(color())\">{{ icon() }}</mat-icon>\r\n }\r\n</a>","import { InjectionToken } from '@angular/core';\r\nimport { ModalRef } from './modal';\r\n\r\nexport const CHR_MODAL_DATA = new InjectionToken<any>('CHR_MODAL_DATA', {\r\n providedIn: 'root',\r\n factory: () => null,\r\n});\r\n\r\nexport const CHR_MODAL_REF = new InjectionToken<ModalRef<any> | null>(\r\n 'CHR_MODAL_REF',\r\n {\r\n providedIn: 'root',\r\n factory: () => null,\r\n }\r\n);\r\n","import { Component, inject } from '@angular/core';\r\nimport {\r\n MatDialogRef,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDialogClose,\r\n} from '@angular/material/dialog';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { CHR_MODAL_REF } from '../models/modal-tokens';\r\nimport { ModalRef } from '../models/modal';\r\nimport { ChrModalComponent } from '../chr-modal/chr-modal.component';\r\n\r\n@Component({\r\n selector: 'app-chr-delete-modal, chr-delete-modal',\r\n templateUrl: './chr-delete-modal.component.html',\r\n styleUrls: [\r\n './chr-delete-modal.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [ChrButtonComponent, MatTooltip],\r\n})\r\nexport class ChrDeleteModalComponent {\r\n dialogRef = inject(CHR_MODAL_REF)!;\r\n\r\n public valid: boolean = false;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n public cancel = () => {\r\n this.dialogRef.close();\r\n };\r\n\r\n public close = () => {\r\n this.dialogRef.close(true);\r\n };\r\n}\r\n","<div class=\"w-full overflow-auto overflow-x-hidden p-6\"\n style=\"background-color: var(--background-color);border-radius: 0.5rem;\">\n <h2 class=\"dialog-title\">Supprimer un élément</h2>\n <div 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 </div>\n <div class=\"w-full flex flex-row justify-between pt-6\">\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</div>","import { Directive, forwardRef, Injectable, input } 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: '[chr-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 readonly required = input<boolean>(true);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const requiredValue = this.required();\r\n return requiredValue ? required(requiredValue)(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 if (required === false) return 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: {\r\n required: true,\r\n actual: value,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly expectedType = input<string>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const typeValue = this.expectedType();\r\n return typeValue ? type(typeValue)(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: {\r\n type: type,\r\n actual: typeof value,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly amount = input<number>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const amount = this.amount();\r\n return amount ? decimal(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 const str = `${value}`;\r\n const actual =\r\n str.indexOf(',') != -1\r\n ? str.split(',')[1].length || 1\r\n : str.indexOf('.') != -1\r\n ? str.split('.')[1].length || 1\r\n : -1;\r\n\r\n const isTooLong = actual != -1 && actual > amount;\r\n\r\n return isTooLong\r\n ? ({\r\n decimal: {\r\n decimal: amount,\r\n actual: actual,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 { isBefore, isValid } from 'date-fns';\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 readonly date = input<Date>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const date = this.date();\r\n return date ? maxDate(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 as Date;\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 !(isValid(value) && isBefore(value, date))\r\n ? ({\r\n maxdate: {\r\n maxdate: date,\r\n actual: value,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Injectable, input } 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 readonly max = input<number>(0);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const max = this.max();\r\n return max ? maxFileSize(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 fileSize = value[i].file!.size;\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: {\r\n maxfilesize: maxSize + 'mb',\r\n actual: ((fileSize || 0) / 1024 / 1024).toFixed(2) + 'mb',\r\n indexes: errors,\r\n },\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Injectable, input } 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 readonly min = input<number>(0);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const min = this.min();\r\n return min ? minFileSize(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: {\r\n minfilesize: minSize + 'mb',\r\n actual: ((fileSize || 0) / 1024 / 1024).toFixed(2) + 'mb',\r\n indexes: errors,\r\n },\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly treshold = input<number>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const treshold = this.treshold();\r\n return treshold ? maxLength(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: {\r\n maxlength: treshold,\r\n actual: value.length,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly treshold = input<number>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const treshold = this.treshold();\r\n return treshold ? minLength(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: {\r\n minlength: treshold,\r\n actual: value.length,\r\n },\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\nimport { min } from 'lodash';\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 !`;\r\n validators.push(Validators.min(validation.value));\r\n }\r\n if (rule == 'max') {\r\n validation.display = `Cette valeur est trop grande !`;\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 !`;\r\n validators.push(minLength(validation.value));\r\n }\r\n if (rule == 'maxlength') {\r\n validation.display = `Cette valeur est trop grande !`;\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 !`;\r\n validators.push(decimal(validation.value));\r\n }\r\n if (rule == 'maxdate') {\r\n validation.display = `Cette date est trop grande !`;\r\n validators.push(maxDate(validation.value));\r\n }\r\n if (rule == 'maxfilesize') {\r\n validation.display = `Ce fichier est trop grand !`;\r\n validators.push(maxFileSize(validation.value));\r\n }\r\n if (rule == 'minfilesize') {\r\n validation.display = `Ce fichier est trop petit !`;\r\n validators.push(minFileSize(validation.value));\r\n }\r\n }\r\n return validators;\r\n}\r\n\r\nexport const BaseErrorDisplays = {\r\n min: `Cette valeur est trop petite !`,\r\n max: `Cette valeur est trop grande !`,\r\n required: 'Ce champs est requis !',\r\n email: \"Cette adresse email n'est pas valide !\",\r\n minlength: `Cette valeur est trop petite !`,\r\n maxlength: `Cette valeur est trop grande !`,\r\n type: \"Cette valeur n'est pas valide !\",\r\n decimal: `Le nombre de décimal n'est pas valide !`,\r\n maxdate: `Cette date est trop grande !`,\r\n maxfilesize: `Ce fichier est trop grand !`,\r\n minfilesize: `Ce fichier est trop petit !`,\r\n};\r\n","import { Directive, HostListener, ElementRef, inject, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[chrAutofocus]',\r\n})\r\nexport class AutofocusDirective {\r\n private host = inject(ElementRef);\r\n\r\n readonly chrAutofocus = input<(boolean | '' | null) | undefined>(false);\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 ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n computed,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\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 Observable,\r\n skip,\r\n skipWhile,\r\n Subject,\r\n Subscription,\r\n tap,\r\n} from 'rxjs';\r\nimport { InputType } from '../../models/controls';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\r\nimport { BaseErrorDisplays } from '../../models/chr-validators/base-validator';\r\n\r\n@Component({\r\n selector: 'chr-base-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n CommonModule,\r\n FormsModule,\r\n MatIcon,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n NgxMaskDirective,\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: [provideNgxMask()],\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 readonly label = input<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 readonly type = input<InputType>('text');\r\n\r\n /**\r\n * The id of the input.\r\n */\r\n readonly id = input<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 readonly name = model<string | null>(null);\r\n\r\n // private _value: any | null = null;\r\n // public get value() {\r\n // return this._value;\r\n // }\r\n // public set value(value: any | null) {\r\n // this._value = value;\r\n // }\r\n /**\r\n * The value of the input.\r\n */\r\n readonly value = model<any | null>(null);\r\n\r\n /**\r\n * The subject that holds the current value of the input.\r\n */\r\n readonly valueSubject: BehaviorSubject<any | null> = new BehaviorSubject(\r\n null\r\n );\r\n\r\n readonly displayValue = model<string | null>(null);\r\n\r\n readonly displayValueSubject = new BehaviorSubject<any | null>(null);\r\n\r\n /**\r\n * Override of the default input event that use the input's debouncing feature\r\n */\r\n readonly input = output<string>();\r\n /**\r\n * The subject that holds the input event values\r\n */\r\n readonly inputSubject = new Subject<string>();\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 readonly required = signal<boolean>(false);\r\n\r\n /**\r\n * Span that will be shown under the input\r\n */\r\n readonly span = input<string | null>(null);\r\n\r\n /**\r\n * Name of the material icon that will be displayed\r\n */\r\n readonly icon = input<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 readonly iconCallback = input<((value: any) => string | void) | null>(null);\r\n\r\n /**\r\n * Whether or not the icon's callback is enabled\r\n */\r\n readonly iconCallbackDisabled = input<boolean>(false);\r\n\r\n /**\r\n * Tooltip that will be displayed when hovering the input's icon\r\n */\r\n readonly iconTooltip = input<string | null>(null);\r\n\r\n /**\r\n * Tooltip that will be displayed on hover\r\n */\r\n readonly tooltip = input<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 readonly debounceTime = input<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 readonly validations = input<IControlValidation[]>([]);\r\n\r\n /**\r\n * The error messages to display for the input.\r\n * The key is the error name and the value the message to display\r\n */\r\n readonly errors = input<{ [index: string]: string } | null>(\r\n BaseErrorDisplays\r\n );\r\n\r\n private readonly errorDisplays = computed(() => {\r\n const displays = BaseErrorDisplays as { [index: string]: string | null };\r\n //Merge the validation displays and the error object value in a single object\r\n this.validations().forEach((validation) => {\r\n displays[validation.rule] = validation.display || null;\r\n });\r\n if (this.errors() !== null) {\r\n Object.keys(this.errors() || {}).forEach((key) => {\r\n displays[key] = this.errors()![key] || null;\r\n });\r\n }\r\n return displays;\r\n });\r\n\r\n /**\r\n * Event that will be triggered when the input is focused\r\n */\r\n public focus = output<void>();\r\n /**\r\n * Indicates whether or not this input should try catching the focus on page load\r\n */\r\n readonly autofocus = input<boolean>(false);\r\n\r\n /**\r\n * Event that will be triggered when the input is blurred (a.k.a) when the user clicks outside of the input or presses tab to leave the input.\r\n */\r\n public blur = output<void>();\r\n\r\n /**\r\n * Indicates whether or not this input should convert the file to base64 for it to be sent as part of the object.\r\n * If this is false, the file won't be converted and will be sent as part as the regular form process.\r\n * Default is true to allow full JS manipulation of files et upload progress report.\r\n */\r\n readonly base64 = input<boolean>(true);\r\n\r\n /**\r\n * The input element.\r\n * May be undefined if the template does not contain an input element with the 'input' reference.\r\n * May also be undefined depending the lifecycle of the component.\r\n * May not be what is expected (ex: for file inputs, the input element is not the one that is displayed but the one that is hidden).\r\n */\r\n public inputRef = viewChild<ElementRef<HTMLElement>>('input');\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 disabled = model<boolean>(false);\r\n\r\n /**\r\n * The autocomplete attribute of the input element\r\n */\r\n public autoComplete = input<string | null>(null);\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 readonly siblings = input<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 = signal<boolean>(false);\r\n\r\n /**\r\n * The NgControl associated with this input\r\n */\r\n protected control = signal<NgControl>(null as any);\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 * Input mask to be applied\r\n * @see https://www.npmjs.com/package/ngx-mask\r\n * @see https://jsdaddy.github.io/ngx-mask/#7\r\n */\r\n mask = input<string>('');\r\n\r\n /**\r\n * Mask expression shown in the input during typing\r\n */\r\n maskShownExpression = input<string | null>(null);\r\n\r\n /**\r\n * Should the mask be validated\r\n */\r\n maskValidation = input<boolean>(true);\r\n\r\n /**\r\n * Mask template shown below the input (for information purposes)\r\n */\r\n maskShownTemplate = input<string | null>(null);\r\n\r\n /**\r\n * Prefix to be added to the input value\r\n */\r\n maskPrefix = input<string | null>(null);\r\n /**\r\n * Suffix to be added to the input value\r\n */\r\n maskSuffix = input<string | null>(null);\r\n\r\n /**\r\n * Whether or not special characters should be removed from the value before it's set to the model.\r\n * Default is true\r\n */\r\n maskDropSpecialCharacters = input<boolean>(true);\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() {\r\n const ngControl = inject(NgControl, {\r\n optional: true,\r\n self: true,\r\n });\r\n this.control.set(ngControl as 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 //\r\n this.configureInitialDisplayValue();\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.set(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 if (this.name() === null)\r\n this.name.set(this.control()?.name ? String(this.control()?.name) : null);\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.valueSubject?.complete();\r\n this.displayValueSubject.complete();\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.valueSubject.asObservable();\r\n };\r\n\r\n writeValue(obj: any): void {\r\n this.displayValueSubject.next(obj);\r\n this.value.set(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.set(true);\r\n fn();\r\n };\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n /**\r\n * Forces the input element to take focus.\r\n */\r\n forceFocus = () => {\r\n this.inputRef()?.nativeElement.focus();\r\n };\r\n\r\n /**\r\n * Forces the input element to lose focus.\r\n */\r\n forceBlur = () => {\r\n this.inputRef()?.nativeElement.blur();\r\n };\r\n\r\n getRawValue = () => {\r\n const value: { value: any; disabled: boolean } | undefined | null | any =\r\n this.value();\r\n if (\r\n value !== null &&\r\n typeof value === 'object' &&\r\n value?.disabled !== undefined\r\n ) {\r\n return value.value;\r\n }\r\n return value;\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 key in this.control()?.errors || {}) {\r\n const error = this.control().errors?.[key];\r\n const actual = error?.['actual'];\r\n const display = this.errorDisplays()[key];\r\n if (display)\r\n return actual\r\n ? `${display} (limite: ${error[key]}, saisie: ${actual})`\r\n : this.errorDisplays()[key];\r\n\r\n return \"Cette valeur n'est pas valide !\";\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 this.control()?.errors?.['required'] !== undefined;\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 (\r\n this.control()?.errors !== undefined && this.control()?.errors !== null\r\n );\r\n };\r\n\r\n private configureDebouncing = () => {\r\n 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 = typeof res === 'string' && res.trim() === '' ? null : res;\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 !== null) value = Number(value);\r\n this.onChange(value);\r\n this.writeValue(value);\r\n });\r\n this.inputSubject\r\n .pipe(debounceTime(this.debounceTime() ?? 200), distinctUntilChanged())\r\n .subscribe((res) => {\r\n this.input.emit(res);\r\n });\r\n };\r\n\r\n private configureInitialDisplayValue = () => {\r\n this.valueSubject\r\n .pipe(skipWhile((res) => res === null))\r\n .subscribe((res: any) => {\r\n this.displayValue.set(res);\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 const control = this.control()?.control;\r\n //We add the validators to the input.\r\n for (const validator of getValidators(this.validations())) {\r\n control?.addValidators(validator);\r\n }\r\n\r\n control?.statusChanges?.subscribe((res) => {\r\n this.required.set(this.isControlRequired());\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 protected doCallback = () => {\r\n if (this.iconCallbackDisabled()) return;\r\n this.iconCallback()?.(this.getValue());\r\n };\r\n\r\n protected onHtmlInput = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.inputSubject.next((event.target as any).value);\r\n };\r\n\r\n protected visualState = () => {\r\n if (this.isTouched()) {\r\n return this.hasError()\r\n ? 'error'\r\n : this.value() === null ||\r\n this.value() === undefined ||\r\n this.value()?.length === 0\r\n ? 'empty'\r\n : 'valid';\r\n }\r\n return 'default';\r\n };\r\n}\r\n","<div class=\"input-wrapper\">\r\n <!-- <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [chrAutofocus]=\"autofocus() || false\" [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\"\r\n (blur)=\"blur.emit()\" (focus)=\"focus.emit()\" [ngModel]=\"value()\" (ngModelChange)=\"onValueChange($event)\"\r\n [mask]=\"mask()\" [shownMaskExpression]=\"maskShownTemplate()\" [prefix]=\"maskPrefix()||''\" [suffix]=\"maskSuffix()||''\"\r\n [dropSpecialCharacters]=\"maskDropSpecialCharacters()\" [validation]=\"maskValidation()\" [type]=\"type()\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" [disabled]=\"disabled()\" [attr.data-disabled]=\"disabled()\"\r\n [autocomplete]=\"type() == 'password' ? 'current-password': autoComplete()\" placeholder=\" \"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\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 <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [chrAutofocus]=\"autofocus() || false\" [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\"\r\n (blur)=\"blur.emit()\" (focus)=\"focus.emit()\" [ngModel]=\"value()\" (ngModelChange)=\"onValueChange($event)\"\r\n [mask]=\"mask()\" [shownMaskExpression]=\"maskShownTemplate()\" [prefix]=\"maskPrefix()||''\" [suffix]=\"maskSuffix()||''\"\r\n [dropSpecialCharacters]=\"maskDropSpecialCharacters()\" [validation]=\"maskValidation()\" [type]=\"type()\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" [disabled]=\"disabled()\" [attr.data-disabled]=\"disabled()\"\r\n (input)=\"onHtmlInput($event)\" [autocomplete]=\"type() == 'password' ? 'current-password': autoComplete()\"\r\n placeholder=\" \" [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\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 @if (label() !== null) {\r\n <label 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 <span class=\"text-error\">{{ getLastError() }}</span>\r\n }\r\n </label>\r\n }\r\n\r\n @if (icon() && !disabled()) {\r\n <span [ngClass]=\"iconCallbackDisabled() ? '':'cursor-pointer'\" class=\"absolute top-1/2 right-0 -translate-y-1/2\"\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(maskShownTemplate()) {\r\n <span class=\"text-xs text-span\">Format: {{ maskShownTemplate() }}</span>\r\n <br>\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 {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n Injector,\r\n inject,\r\n input,\r\n viewChild,\r\n signal,\r\n effect,\r\n output,\r\n model,\r\n} from '@angular/core';\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 {\r\n MatAutocomplete,\r\n MatAutocompleteModule,\r\n} from '@angular/material/autocomplete';\r\nimport {\r\n Observable,\r\n startWith,\r\n map,\r\n BehaviorSubject,\r\n Subject,\r\n combineLatest,\r\n of,\r\n combineLatestWith,\r\n tap,\r\n} from 'rxjs';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AsyncPipe, CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n//import { rotationAnimation } from '../animations/rotation.animation';\r\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { AutofocusDirective } from '../directives/autofocus.directive';\r\nimport { InputType } from '../models/controls';\r\nimport { sign } from 'crypto';\r\n\r\nexport interface IInputSearchFilter {\r\n display: string;\r\n callback?: Function;\r\n tooltip?: string;\r\n}\r\n\r\n@Component({\r\n selector:\r\n 'app-chr-search-select, [app-chr-search-select], chr-search-select, [chr-search-select]',\r\n templateUrl: './chr-search-select.component.html',\r\n styleUrls: [\r\n './chr-search-select.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // multi: true,\r\n // useExisting: ChrSearchSelectComponent,\r\n // },\r\n ],\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTooltip,\r\n MatAutocompleteModule,\r\n MatOption,\r\n AsyncPipe,\r\n MatIconModule,\r\n MatError,\r\n CommonModule,\r\n MatError,\r\n AutofocusDirective,\r\n ],\r\n //animations: [rotationAnimation(180, 90, 200)],\r\n})\r\nexport class ChrSearchSelectComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, OnDestroy\r\n{\r\n public predicate: boolean = true;\r\n public filteredModelOptions?: Observable<any>;\r\n readonly _inputText = signal<string | null>(null);\r\n readonly values: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n readonly autocomplete = viewChild.required<MatAutocomplete>('auto');\r\n\r\n readonly placeholder = input<string>();\r\n readonly data = input<any[] | null>([]);\r\n readonly data$ = new BehaviorSubject<any[]>([]);\r\n readonly display = input<(entry: any) => string>();\r\n readonly filters = input<IInputSearchFilter[] | null>(null);\r\n override readonly type = input<InputType>('searchSelect');\r\n\r\n /**\r\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\r\n * If this callback returns null, the entry will NOT be added.\r\n * This lets you update the value before it's added.\r\n */\r\n readonly addCallback = input<\r\n | (((entry: any, subject: Subject<any>) => any | null | void) | null)\r\n | undefined\r\n >(null);\r\n //Subject used in callback methods to update the value when received.\r\n private addSubject: Subject<any> = new Subject();\r\n /**\r\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\r\n * This defaults to false.\r\n * If there are neither data nor display function, this defaults to true.\r\n */\r\n readonly acceptText = input<boolean | null>(null);\r\n protected filterIndex = signal<number>(0);\r\n protected overrideShowResults = signal<boolean>(false);\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n super();\r\n\r\n effect(() => {\r\n this.data$.next(this.data() || []);\r\n });\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFilters();\r\n this.addSubject.subscribe((entry) => {\r\n if (this.value() != entry) {\r\n this.onValueChange(this.value());\r\n }\r\n });\r\n // Only when the value is valid, we override the display value with the value\r\n // We need to avoid setting it when the value is set to null because it would\r\n // Remove the user's input a few milliseconds after he starts typing to replace a value\r\n this.displayValueSubject.subscribe((v) => {\r\n if (v !== null && v !== undefined) {\r\n this.displayValue.set(v);\r\n }\r\n });\r\n // Value subject is not initially called with the default value or the set value of the formcontrol\r\n // this.displayValue.set(this.value());\r\n }\r\n\r\n /**\r\n * Reset the input's text and sets the value to null as to invalidate the input\r\n */\r\n protected reset = () => {\r\n this.values.next('');\r\n this.onValueChange(null);\r\n };\r\n\r\n /**\r\n * Set's the input's text's value and set the value to null as to invalidate the input\r\n * @param input text input\r\n */\r\n protected inputChange = (input: string) => {\r\n this.onValueChange(null);\r\n this.values.next(input);\r\n };\r\n\r\n /**\r\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.\r\n * @param model the data's entry for which we want the textual value\r\n * */\r\n protected getModelDisplay = (model: any) => {\r\n const display = this.display();\r\n return display ? display?.(model) : model;\r\n };\r\n\r\n /**\r\n * Start filtering the autocomplete's list based on the input's textual value\r\n */\r\n protected registerFilters = () => {\r\n this.filteredModelOptions = this.values.pipe(\r\n startWith(''),\r\n combineLatestWith(this.data$),\r\n map(([value, data]) => this._filterModel(value! || -1)),\r\n map((values) => {\r\n const filters = this.filters();\r\n return filters && filters[this.filterIndex()]?.callback\r\n ? values.filter((r) =>\r\n this.filters()![this.filterIndex()]?.callback!(r)\r\n )\r\n : values;\r\n })\r\n );\r\n };\r\n\r\n /**\r\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.\r\n * @param input the input in which the user should type\r\n */\r\n protected increment = (input: any) => {\r\n this.onValueChange(null);\r\n this.values.next('');\r\n\r\n input.blur();\r\n\r\n const filters = this.filters();\r\n const modulo = filters ? filters.length : 1;\r\n this.filterIndex.set((this.filterIndex() + 1) % modulo);\r\n\r\n setTimeout(() => {\r\n input.focus();\r\n }, 250);\r\n };\r\n\r\n protected voidd = () => {};\r\n\r\n protected enableShowPanel = (input: any) => {\r\n this.values.next(' ');\r\n this.overrideShowResults.set(true);\r\n input.focus();\r\n };\r\n\r\n protected disableShowPanel = () => {\r\n //this.searchSelect.setValue('', { emitViewToModelChange: false });\r\n this.overrideShowResults.set(false);\r\n };\r\n\r\n protected addFromText = (event: any) => {\r\n if (this.acceptText() && this.value()?.trim()) {\r\n const addCallback = this.addCallback();\r\n const value = addCallback\r\n ? addCallback(this.value(), this.addSubject)\r\n : this.value();\r\n if (this.addCallback() && (value === null || value === undefined)) {\r\n this.value.set('');\r\n return;\r\n }\r\n this.addSubject.next(value);\r\n }\r\n };\r\n\r\n private _filterModel = (value: number | string): any[] => {\r\n return typeof value == 'string'\r\n ? this._doFilterModelString(`${value}`)\r\n : this._doFilterModelInt(value);\r\n };\r\n\r\n private _doFilterModelInt = (id: number) => {\r\n const tmp = this.data()?.find((r) => r.id == id);\r\n return tmp ? tmp : [];\r\n };\r\n\r\n private _doFilterModelString = (input: string) => {\r\n return this.data()?.filter((r) => this._filterValues(r, input)) || [];\r\n };\r\n\r\n private _filterValues = (value: any, input: string) => {\r\n //Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\r\n if (input == ' ') return true;\r\n //Sinon, on ne renvoie true que pour les éléments qui matchent son input\r\n return `${this.getModelDisplay(value)}`\r\n .trim()\r\n .toLowerCase()\r\n .includes(input.trim().toLowerCase());\r\n };\r\n}\r\n","@if (predicate) {\r\n<div style=\"position: relative;\">\r\n <div class=\"input-wrapper\">\r\n <input [matTooltip]=\"disabled() ? '': (tooltip() ? tooltip(): 'Entrez un espace pour voir les choix disponibles')\"\r\n [chrAutofocus]=\"autofocus() || false\" matTooltipPosition=\"above\" #input type=\"text\" [name]=\"name() ?? id() ?? ''\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\"\r\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\"\r\n placeholder=\"{{ placeholder() || ' ' }}\" (keyup.backspace)=\"reset()\" [ngModel]=\"displayValue()\"\r\n [disabled]=\"disabled()\" (keyup.enter)=\"addFromText($event)\" (ngModelChange)=\"inputChange($event)\"\r\n (input)=\"onHtmlInput($event)\" [matAutocomplete]=\"auto\" (blur)=\"onTouch()\" (blur)=\"disableShowPanel()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" />\r\n\r\n @if (label() !== null) {\r\n <label 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 <ng-content></ng-content>\r\n <div\r\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\">\r\n <mat-icon matTooltipPosition=\"above\" class=\"rotate cursor-pointer\" [class.rotated]=\"overrideShowResults()\"\r\n [attr.data-initial-angle]=\"0\" [attr.data-end-angle]=\"90\" [attr.data-duration]=\"200\"\r\n (click)=\"enableShowPanel(input)\">\r\n arrow_right\r\n </mat-icon>\r\n @if (filters()) {\r\n <span [matTooltip]=\"filters()?.[filterIndex()]!.tooltip || ''\" matTooltipPosition=\"above\"\r\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center \r\n align-middle items-center\" (click)=\"filters() ? increment(input) : voidd()\">\r\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{\r\n filters()?.[filterIndex()]!.display\r\n }}\r\n </p>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id()}}-auto\"\r\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\r\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"onValueChange($event.option.value)\">\r\n @for (model of filteredModelOptions | async; track model) {\r\n <mat-option class=\"\" [value]=\"model\" selected>\r\n {{ getModelDisplay(model) }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\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}","import {\r\n AfterViewChecked,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Input,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\nimport {\r\n Color,\r\n getVariableColor,\r\n getVariableContrastColor,\r\n} from '../models/colors';\r\n\r\n@Component({\r\n selector: 'chr-context-menu',\r\n imports: [],\r\n templateUrl: './chr-context-menu.component.html',\r\n styleUrls: [\r\n './chr-context-menu.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n standalone: true,\r\n})\r\nexport class ChrContextMenuComponent implements AfterViewInit {\r\n private elementRef = inject(ElementRef);\r\n public items = input.required<IContextMenuItem[]>();\r\n public origin = input.required<{ x: number; y: number }>();\r\n public click = output<any>();\r\n\r\n public trigger = (item: IContextMenuItem): void => {\r\n item.action();\r\n this.click.emit(item);\r\n };\r\n\r\n ngAfterViewInit(): void {\r\n this.position();\r\n }\r\n\r\n getVariableColor(color: Color): string {\r\n return getVariableColor(color);\r\n }\r\n\r\n getVariableContrastColor(color: Color): string {\r\n return getVariableContrastColor(color);\r\n }\r\n\r\n private position = () => {\r\n const element = this.elementRef.nativeElement;\r\n const menuRect = element.getBoundingClientRect();\r\n const viewportWidth = window.innerWidth + window.scrollX;\r\n const viewportHeight = window.innerHeight + window.scrollY;\r\n\r\n let adjustedX = this.origin().x;\r\n let adjustedY = this.origin().y;\r\n\r\n if (adjustedX + menuRect.width > viewportWidth) {\r\n adjustedX = viewportWidth - menuRect.width - 25;\r\n }\r\n\r\n if (adjustedY + menuRect.height > viewportHeight) {\r\n adjustedY = viewportHeight - menuRect.height - 25;\r\n }\r\n\r\n element.style.left = `${adjustedX}px`;\r\n element.style.top = `${adjustedY}px`;\r\n };\r\n}\r\n","<div class=\"context-menu-wrapper\">\r\n <div class=\"context-menu\">\r\n <ul class=\"context-menu-list\">\r\n @for (item of items(); track item) {\r\n <li class=\"context-menu-item\" (click)=\"trigger(item)\" [style]=\"{\r\n 'background-color': getVariableColor(item.color || 'background'), \r\n 'color': item.color ? getVariableContrastColor(item.color) : getVariableColor('text'),\r\n '--ctm-main-color': getVariableColor(item.color || 'background')\r\n }\">\r\n <span class=\"context-menu-icon\">{{ item.icon }}</span>\r\n @if(item.label){\r\n <span class=\"context-menu-text\">{{ item.label }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n Directive,\r\n ElementRef,\r\n EnvironmentInjector,\r\n HostListener,\r\n inject,\r\n input,\r\n OnDestroy,\r\n output,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { ChrContextMenuComponent } from '../chr-context-menu/chr-context-menu.component';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\n\r\n/**\r\n * Directive that handles right-click events and show a list of actions in a context menu\r\n */\r\n@Directive({\r\n selector: '[contextMenu], [chrContextMenu], [chr-right-click]',\r\n})\r\nexport class ContextMenuDirective implements OnDestroy {\r\n private elementRef = inject(ElementRef<HTMLElement>);\r\n private appRef = inject(ApplicationRef);\r\n private injector = inject(EnvironmentInjector);\r\n /**\r\n * List of context IContextMenuItem to display\r\n */\r\n public contextMenu = input<IContextMenuItem[]>([]);\r\n private menuComponentRef: ComponentRef<ChrContextMenuComponent> | null = null;\r\n\r\n @HostListener('contextmenu', ['$event'])\r\n onRightClick(event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.closeMenu();\r\n\r\n this.createMenuComponent(event);\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n // Fermer le menu si on clique en dehors\r\n if (this.menuComponentRef) {\r\n const menuElement = this.menuComponentRef.location.nativeElement;\r\n if (!menuElement.contains(event.target as Node)) {\r\n this.closeMenu();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscapeKey(): void {\r\n this.closeMenu();\r\n }\r\n\r\n private createMenuComponent(event: MouseEvent): void {\r\n this.menuComponentRef = createComponent(ChrContextMenuComponent, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n this.menuComponentRef.setInput('items', this.contextMenu());\r\n this.menuComponentRef.setInput('origin', {\r\n x: event.pageX,\r\n y: event.pageY,\r\n });\r\n\r\n this.menuComponentRef.instance.click.subscribe(() => {\r\n this.closeMenu();\r\n });\r\n\r\n this.appRef.attachView(this.menuComponentRef.hostView);\r\n\r\n const menuElement = this.menuComponentRef.location.nativeElement;\r\n document.body.appendChild(menuElement);\r\n }\r\n\r\n private closeMenu(): void {\r\n if (this.menuComponentRef) {\r\n this.appRef.detachView(this.menuComponentRef.hostView);\r\n\r\n const menuElement = this.menuComponentRef.location.nativeElement;\r\n if (menuElement.parentNode) {\r\n menuElement.parentNode.removeChild(menuElement);\r\n }\r\n\r\n this.menuComponentRef.destroy();\r\n this.menuComponentRef = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeMenu();\r\n }\r\n}\r\n","import {\r\n Component,\r\n AfterViewInit,\r\n OnInit,\r\n OnDestroy,\r\n Injector,\r\n Output,\r\n EventEmitter,\r\n inject,\r\n input,\r\n viewChild,\r\n signal,\r\n effect,\r\n} from '@angular/core';\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 {\r\n MatAutocomplete,\r\n MatAutocompleteModule,\r\n} from '@angular/material/autocomplete';\r\nimport {\r\n Observable,\r\n startWith,\r\n map,\r\n BehaviorSubject,\r\n Subject,\r\n combineLatestWith,\r\n} from 'rxjs';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AsyncPipe, CommonModule } from '@angular/common';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n//import { rotationAnimation } from '../animations/rotation.animation';\r\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { IInputSearchFilter } from '../chr-search-select/chr-search-select.component';\r\nimport { AutofocusDirective } from '../directives/autofocus.directive';\r\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\nimport { InputType } from '../models/controls';\r\n\r\n@Component({\r\n selector:\r\n 'app-chr-tag-select, [app-chr-tag-select], chr-tag-select, [chr-tag-select]',\r\n templateUrl: './chr-tag-select.component.html',\r\n styleUrls: [\r\n './chr-tag-select.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // multi: true,\r\n // useExisting: ChrTagSelectComponent,\r\n // },\r\n ],\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTooltip,\r\n MatAutocompleteModule,\r\n MatChipsModule,\r\n MatOption,\r\n AsyncPipe,\r\n MatIconModule,\r\n MatError,\r\n CommonModule,\r\n MatError,\r\n AutofocusDirective,\r\n ContextMenuDirective,\r\n ],\r\n //animations: [rotationAnimation(180, 90, 200)],\r\n})\r\nexport class ChrTagSelectComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, OnDestroy\r\n{\r\n public predicate: boolean = true;\r\n\r\n readonly autocomplete = viewChild.required<MatAutocomplete>('auto');\r\n\r\n protected overrideShowResults: boolean = false;\r\n\r\n public filteredModelOptions?: Observable<any>;\r\n\r\n protected textInputValue = signal<string>('');\r\n\r\n private values: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n readonly placeholder = input<string>();\r\n readonly data = input<any[] | null>([]);\r\n readonly data$ = new BehaviorSubject<any[]>([]);\r\n\r\n readonly display = input<(entry: any) => string>();\r\n readonly filters = input<IInputSearchFilter[] | null>(null);\r\n override readonly type = input<InputType>('tagSelect');\r\n\r\n /**\r\n * Callback that will be called on click of a chips. The entry will be passed as parameter.\r\n * If this callback returns null, the entry will be removed.\r\n * If this callback returns a different value (by reference (ex: different object)) the entry will be replaced by the new value.\r\n */\r\n readonly editCallback = input<\r\n | (((entry: any, subject: Subject<any>) => any | null | void) | null)\r\n | undefined\r\n >(null);\r\n //Subject used in callback methods to update the value when received.\r\n private editSubject: Subject<any> = new Subject();\r\n /**\r\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\r\n * If this callback returns null, the entry will NOT be added.\r\n * This lets you update the value before it's added.\r\n */\r\n readonly addCallback = input<\r\n | (((entry: any, subject: Subject<any>) => any | null | void) | null)\r\n | undefined\r\n >(null);\r\n //Subject used in callback methods to update the value when received.\r\n private addSubject: Subject<any> = new Subject();\r\n\r\n /**\r\n * Callback that will be called during the removal of the value. This will be called with the deleted value passed as parameter.\r\n */\r\n readonly removeCallback = input<((entry: any) => any | null | void) | null>(\r\n null\r\n );\r\n\r\n /**\r\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\r\n * This defaults to false.\r\n * If there are neither data nor display function, this defaults to true.\r\n */\r\n readonly acceptText = input<boolean | null>(\r\n (this.display() === null && this.data() === null) || null\r\n );\r\n\r\n constructor() {\r\n super();\r\n this.addSubject.subscribe((entry) => {\r\n if (!this.value()?.find((v: any) => v == entry)) {\r\n const updated = [...(this.value() || []), entry];\r\n this.onValueChange(updated.length > 0 ? updated : null);\r\n }\r\n });\r\n this.editSubject.subscribe((entry) => {\r\n const index = this.value()?.indexOf(entry)!;\r\n this.value.update((value) => {\r\n value![index] = entry;\r\n return [...(value ?? [])];\r\n });\r\n return this.onValueChange(this.value());\r\n });\r\n effect(() => {\r\n this.data$.next(this.data() || []);\r\n });\r\n }\r\n\r\n protected filterIndex = signal<number>(0);\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n //console.log(this.value);\r\n\r\n this.registerFilters();\r\n }\r\n\r\n protected reset = () => {\r\n this.textInputValue.set('');\r\n this.values.next(' ');\r\n };\r\n\r\n protected inputChange = (input: string) => {\r\n this.textInputValue.set(input);\r\n this.values.next(input);\r\n };\r\n\r\n protected getModelDisplay = (model: any) => {\r\n const display = this.display();\r\n return display ? display?.(model) : model;\r\n };\r\n\r\n protected addFromText = (event: any) => {\r\n if (this.acceptText() && this.textInputValue().trim()) {\r\n const addCallback = this.addCallback();\r\n const value = addCallback\r\n ? addCallback(this.textInputValue, this.addSubject)\r\n : this.textInputValue();\r\n // if (this.addCallback() && (value === null || value === undefined)) {\r\n this.textInputValue.set('');\r\n // return;\r\n // }\r\n this.addSubject.next(value);\r\n }\r\n };\r\n\r\n protected add = (event: any) => {\r\n const addCallback = this.addCallback();\r\n const value = addCallback ? addCallback(event, this.addSubject) : event;\r\n if (this.addCallback() && (value === null || value === undefined)) {\r\n this.textInputValue.set('');\r\n return;\r\n }\r\n this.textInputValue.set('');\r\n this.addSubject.next(value);\r\n };\r\n\r\n protected edit = (entry: any) => {\r\n //If no callback, return;\r\n const editCallback = this.editCallback();\r\n if (editCallback === undefined || editCallback === null) return;\r\n //Call the callback and retrive it's return value\r\n const res = editCallback(entry, this.editSubject);\r\n //If the callback returns null, we remove the value.\r\n if (res === null && this.value() !== null) {\r\n this.remove(entry);\r\n }\r\n if (entry == res) {\r\n return this.editSubject.next(res);\r\n }\r\n //If the callback returns a different value (different by reference (ex: different object)), we replace the edited entry by the returned entry.\r\n this.value.update((value) => {\r\n value![value!.indexOf(entry)] = res;\r\n return [...(value ?? [])];\r\n });\r\n this.onValueChange(this.value());\r\n };\r\n\r\n protected remove(value: any): void {\r\n const updated = this.value()?.filter((v: any) => v != value);\r\n if (this.value() !== null) this.onValueChange(updated);\r\n if (updated.length === 0) this.onValueChange(null);\r\n this.removeCallback()?.(value);\r\n }\r\n\r\n protected registerFilters = () => {\r\n this.filteredModelOptions = this.values.pipe(\r\n startWith(''),\r\n combineLatestWith(this.data$),\r\n map((value) => this._filterModel(this.textInputValue() || -1)),\r\n map((values) => {\r\n const filters = this.filters();\r\n return filters && filters[this.filterIndex()]?.callback\r\n ? values.filter((r) =>\r\n this.filters()![this.filterIndex()]?.callback!(r)\r\n )\r\n : values;\r\n })\r\n );\r\n };\r\n\r\n protected increment = (input: any) => {\r\n this.textInputValue.set('');\r\n\r\n input.blur();\r\n\r\n const filters = this.filters();\r\n const modulo = filters ? filters.length : 1;\r\n this.filterIndex.set((this.filterIndex() + 1) % modulo);\r\n\r\n input.focus();\r\n };\r\n\r\n protected void = () => {};\r\n\r\n protected enableShowPanel = (input: any) => {\r\n this.overrideShowResults = true;\r\n this.textInputValue.set(' ');\r\n this.values.next(' ');\r\n\r\n input.focus();\r\n };\r\n\r\n protected disableShowPanel = () => {\r\n this.overrideShowResults = false;\r\n };\r\n\r\n protected getTooltip = () => {\r\n if (this.disabled()) return '';\r\n if (this.display() === undefined)\r\n return \"Appuyez sur 'Enter' pour ajouter la valeur du champs à la liste\";\r\n return 'Entrez un espace pour voir les choix disponibles';\r\n };\r\n\r\n protected contextMenuItems = (entry: any) => {\r\n const items = [] as IContextMenuItem[];\r\n if (this.editCallback()) {\r\n items.push({\r\n label: 'Modifier',\r\n icon: 'edit',\r\n action: () => this.edit(entry),\r\n });\r\n }\r\n items.push({\r\n label: 'Supprimer',\r\n icon: 'close',\r\n action: () => this.remove(entry),\r\n color: 'error',\r\n });\r\n return items;\r\n };\r\n\r\n private _filterModel = (value: number | string): any[] => {\r\n return typeof value == 'string'\r\n ? this._doFilterModelString(`${value}`)\r\n : this._doFilterModelInt(value);\r\n };\r\n\r\n private _doFilterModelInt = (id: number) => {\r\n const tmp = this.data()?.find((r) => r.id == id);\r\n return tmp ? tmp : [];\r\n };\r\n\r\n private _doFilterModelString = (input: string) => {\r\n return this.data()?.filter((r) => this._filterValues(r, input)) || [];\r\n };\r\n\r\n private _filterValues = (value: any, input: string) => {\r\n //Si l'utilisateur entre un espace, on renvoie true, afin que tous les résultats s'affichent.\r\n if (input == ' ') return true;\r\n //Sinon, on ne renvoie true que pour les éléments qui matchent son input\r\n return `${this.getModelDisplay(value)}`\r\n .trim()\r\n .toLowerCase()\r\n .includes(input.trim().toLowerCase());\r\n };\r\n}\r\n","@if (predicate) {\r\n<div style=\"position: relative;\">\r\n <div class=\"input-wrapper\">\r\n <input [matTooltip]=\"disabled() ? '': (tooltip() ? tooltip(): 'Entrez un espace pour voir les choix disponibles')\"\r\n [matChipInputFor]=\"chipGrid\" matTooltipPosition=\"above\" #input type=\"text\" [name]=\"name() ?? id() ?? ''\"\r\n [chrAutofocus]=\"autofocus() || false\" [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" [disabled]=\"disabled()\"\r\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\"\r\n placeholder=\"{{ placeholder() || ' ' }}\" (keyup.enter)=\"addFromText($event)\" (input)=\"onHtmlInput($event)\"\r\n [ngModel]=\"textInputValue()\" (ngModelChange)=\"inputChange($event)\" [matAutocomplete]=\"auto\" (blur)=\"onTouch()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" (blur)=\"disableShowPanel()\" />\r\n @if (label() !== null) {\r\n <label 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-red-500\">*</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 <ng-content></ng-content>\r\n @if (data() && (data()?.length || 0) > 0) {\r\n <div\r\n class=\"absolute top-1.5 right-0 flex flex-row justify-center content-center items-center align-middle overflow-hidden\">\r\n <mat-icon matTooltipPosition=\"above\" class=\"rotate cursor-pointer\" [class.rotated]=\"overrideShowResults\"\r\n [attr.data-initial-angle]=\"0\" [attr.data-end-angle]=\"90\" [attr.data-duration]=\"200\"\r\n (click)=\"enableShowPanel(input)\">\r\n arrow_right\r\n </mat-icon>\r\n @if (filters()) {\r\n <span [matTooltip]=\"filters()?.[filterIndex()]!.tooltip || ''\" matTooltipPosition=\"above\"\r\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center \r\n align-middle items-center\" (click)=\"increment(input)\">\r\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{\r\n filters()?.[filterIndex()]!.display\r\n }}\r\n </p>\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <mat-chip-grid #chipGrid class=\"w-full margin-0\">\r\n @for (entry of getRawValue() || []; track entry) {\r\n <mat-chip-row (removed)=\"remove(entry)\" [contextMenu]=\"contextMenuItems(entry)\">\r\n <div (click)=\"edit(entry)\">{{getModelDisplay(entry)}}</div>\r\n <button matChipRemove [attr.aria-label]=\"'Supprimer ' + getModelDisplay(entry)\">\r\n <mat-icon class=\"mat-chip-icon\">cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id()}}-auto\"\r\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\r\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"add($event.option.value)\">\r\n @for (model of filteredModelOptions | async; track model) {\r\n <mat-option class=\"\" [value]=\"model\" selected>\r\n {{ getModelDisplay(model) }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\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}","import {\r\n AfterViewInit,\r\n Component,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n inject,\r\n input,\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\nimport { InputType } from '../../models/controls';\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 override readonly type = input<InputType>('color');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\r\n }\r\n\r\n parseColor = (event: string) => {\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 class=\"input-wrapper\">\r\n <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [value]=\"value()\"\r\n (input)=\"parseColor($any($event.target).value)\" [type]=\"type()\" [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\"\r\n placeholder=\" \" [chrAutofocus]=\"autofocus() || false\" [value]=\"value() || null\" [disabled]=\"disabled()\"\r\n [autocomplete]=\"autoComplete()\" [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\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 @if (label() !== null) {\r\n <label 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\r\n <div class=\"color-text-input-container\">\r\n <input type=\"text\" max=\"6\" [ngModel]=\"value()\" (ngModelChange)=\"parseColor($event)\" [name]=\"name() ?? id() ?? ''\"\r\n [autocomplete]=\"autoComplete()+'-hex'\" style=\"background-color: var(--background-color); margin-bottom: 1px;\"\r\n 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() && !disabled()) {\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 ViewChild,\r\n inject,\r\n input,\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\nimport { filter, skipWhile } from 'rxjs';\r\nimport { InputType } from '../../models/controls';\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 private datePipe = inject(DatePipe);\r\n override readonly type = input<InputType>('date');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n super();\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) {\r\n this.onValueChange(parsed);\r\n }\r\n\r\n this.displayValueSubject.subscribe((v) => {\r\n if (v !== null && v !== undefined)\r\n this.displayValue.set(this.dateToString(v));\r\n });\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 // 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.set(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 class=\"input-wrapper\">\r\n <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [value]=\"displayValue()\"\r\n [chrAutofocus]=\"autofocus() || false\" (input)=\"onInputChange($any($event.target).value)\" [type]=\"type()\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" placeholder=\" \" [disabled]=\"disabled()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" [autocomplete]=\"autoComplete()\"\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 @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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 inject,\r\n input,\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\nimport { filter } from 'rxjs';\r\nimport { InputType } from '../../models/controls';\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 private datePipe = inject(DatePipe);\r\n override readonly type = input<InputType>('datetime');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\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) {\r\n this.onValueChange(parsed);\r\n }\r\n this.displayValueSubject.subscribe((v) => {\r\n if (v !== null && v !== undefined)\r\n this.displayValue.set(this.dateToString(v));\r\n });\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 // 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 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 class=\"input-wrapper\">\r\n <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [value]=\"displayValue()\"\r\n [chrAutofocus]=\"autofocus() || false\" (input)=\"onInputChange($any($event.target).value)\" type=\"datetime-local\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" placeholder=\" \" [disabled]=\"disabled()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" [autocomplete]=\"autoComplete()\"\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 @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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 Injector,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n input,\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\nimport { InputType } from '../../models/controls';\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 override readonly type = input<InputType>('toggle');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\r\n }\r\n\r\n toggle = (event: any) => {\r\n //console.log(event, event.target.checked);\r\n this.value.set(event.target.checked);\r\n this.onValueChange(this.value());\r\n };\r\n}\r\n","<div class=\"height-normalized input-wrapper\" style=\"position: relative;\">\r\n <input #input 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)=\"input?.click()\" [chrAutofocus]=\"autofocus() || false\" class=\"relative input toggle\">\r\n </div>\r\n </div>\r\n @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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>","export interface IFile {\r\n name?: string;\r\n file?: File | null;\r\n url?: string | null;\r\n data?: string | null;\r\n extension?: string | null;\r\n contentType?: string | null;\r\n}\r\n\r\nexport class ChrFile implements IFile {\r\n name?: string;\r\n file?: File | null;\r\n url?: string | null;\r\n data?: string | null;\r\n extension?: string | null;\r\n contentType?: string | null;\r\n\r\n constructor(file: IFile) {\r\n this.file = file.file || null;\r\n this.url = file.url ? window.URL.createObjectURL(file.file!) : null;\r\n this.data = file.data || null;\r\n this.contentType = file.contentType || file.file?.type || null;\r\n\r\n var [name, extension] = this.parseNameAndExtensionFromFile();\r\n\r\n if (name !== null) this.name = name;\r\n if (extension !== null) this.extension = extension;\r\n }\r\n\r\n getUrl = () => {\r\n return window.URL.createObjectURL(this.file!);\r\n };\r\n\r\n private parseNameAndExtensionFromFile = () => {\r\n const indexOfExtension = this.file?.name.lastIndexOf('.')!;\r\n return [\r\n ...(this.file\r\n ? [\r\n this.file.name.slice(0, indexOfExtension),\r\n // +1 As to not include the dot\r\n this.file.name.slice(indexOfExtension + 1),\r\n ]\r\n : [null, null]),\r\n ];\r\n };\r\n}\r\n","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 { ChrFile, 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 file = new ChrFile({\r\n data: reader.result as string,\r\n file: 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 file = new ChrFile({\r\n data: reader.result as string,\r\n file: 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 OnDestroy,\r\n OnInit,\r\n inject,\r\n input,\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, of, skipWhile, take } from 'rxjs';\r\nimport { ChrFile, IFile } from '../../models/file';\r\nimport { ToastService } from '../../services/toast.service';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { InputType } from '../../models/controls';\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 private fileService = inject(FileService);\r\n private toastService = inject(ToastService);\r\n\r\n /**\r\n * An array of string that contains each type that should be accepted by the input\r\n */\r\n readonly accept = input<string[]>([]);\r\n\r\n /**\r\n * Whether or not the input should allow multiple file selection\r\n */\r\n readonly multiple = input<boolean>(false);\r\n\r\n valueDisplay: string | null = null;\r\n\r\n /**\r\n * Whether or not the progress bar that display a file's conversion progress will be editable by the user\r\n */\r\n readonly editable = input<boolean>(false);\r\n\r\n public fileErrors: { [index: number]: boolean } | null = null;\r\n\r\n public files: Observable<{ progress: number; file?: IFile }>[] = [];\r\n\r\n override readonly type = input<InputType>('file');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n super();\r\n\r\n this.displayValueSubject.subscribe((res) => {\r\n if (!res) {\r\n this.valueDisplay = '';\r\n return;\r\n }\r\n if (Array.isArray(res)) {\r\n const tmp = res.map((f) => {\r\n return `${f.name}.${f.extension}`;\r\n });\r\n this.valueDisplay = tmp.join(',');\r\n } else this.valueDisplay = `${res.name}.${res.extension}`;\r\n });\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.valueSubject\r\n .pipe(skipWhile((res) => res === null))\r\n .subscribe((res: any) => this.writeValue(res));\r\n this.control()?.statusChanges?.subscribe((status) => {\r\n this.fileErrors = 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 //console.log(`[FileInput] (change) -> `, event);\r\n this.files = [];\r\n const files = event.target.files;\r\n //console.log(`[FileInput] (change): 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 let obs: Observable<any>;\r\n for (const file of files) {\r\n if (this.base64()) {\r\n // Convert the file to base64 using the fileservice\r\n obs = this.fileService.toBase64WithProgress(\r\n new ChrFile({\r\n file: file,\r\n url: window.URL.createObjectURL(file),\r\n })\r\n );\r\n } else {\r\n obs = of({\r\n progress: 100,\r\n file: new ChrFile({\r\n file: file,\r\n }) as IFile,\r\n });\r\n }\r\n // Add to the file list with the progress percentage\r\n this.files = [...this.files, obs];\r\n filesAsync.push(obs);\r\n // Catch conversion error for display\r\n obs.pipe(\r\n catchError((err, source) => {\r\n this.toastService.setWarning(\r\n `Une erreur s'est produite pendant la conversion 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 (\r\n this.accept()\r\n ?.map((type) => `.${type}`)\r\n .join(', ') || '.*'\r\n );\r\n };\r\n\r\n protected getToAccept = () => {\r\n return this.accept()\r\n ?.map((s) => s.toLocaleUpperCase())\r\n .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 class=\"cursor-pointer input-wrapper\" (click)=\"finput.click()\" (click)=\"onTouch($event)\">\r\n <div\r\n 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=\"backdrop-filter: blur(.1rem); opacity: 1;\">\r\n @if (!fileErrors && (files[0] | async)?.progress != 100) {\r\n <mat-icon class=\"cursor-pointer rounded-full\">add</mat-icon>\r\n }\r\n @if (!fileErrors && (files[0] | async)?.progress == 100) {\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--primary-color)\">check</mat-icon>\r\n }\r\n @if (fileErrors !== null) {\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--error-color)\">close</mat-icon>\r\n }\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 #input class=\"relative input\" [disabled]=\"disabled()\" type=\"file\" class=\"hidden\" [attr.multiple]=\"multiple()\"\r\n #finput [chrAutofocus]=\"autofocus() || false\" [accept]=\"acceptToString()\" (change)=\"onFileChange($event)\" />\r\n <input [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" [id]=\"id()\" [name]=\"name()!\" placeholder=\" \"\r\n [value]=\"valueDisplay\" readonly [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\r\n class=\"block input pt-1.5 m-0 mr-4 pointer-events-none 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 @if (label() !== null) {\r\n <label 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 (files[0] | async; as conversion) {\r\n <div class=\"progress-border border-t-2\" [style.width]=\"(conversion.progress%100) + '%'\" [ngClass]=\"{\r\n 'border-ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'border-finished': conversion.progress === 100,\r\n 'border-error': fileErrors !== null && fileErrors[0] !== undefined\r\n }\">\r\n @if (!multiple() && (conversion.progress < 100)) { <span>{{conversion.progress}}%</span>\r\n }\r\n </div>\r\n }\r\n @if (icon() && !disabled()) {\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 @if (multiple() === true && files.length > 0) {\r\n <div 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 @if (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': !fileErrors?.[index] && conversion.progress === 100,\r\n 'error': fileErrors?.[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 class=\"progress-bar-progress\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\">{{conversion.progress}}%</span>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"openFile(index, conversion.file)\">visibility</mat-icon>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"removeFile(index, conversion.file)\">delete</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>","import {\r\n AfterContentChecked,\r\n AfterViewChecked,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n input,\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\nimport { InputType } from '../../models/controls';\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 override readonly type = input<InputType>('textArea');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\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.inputRef()?.nativeElement as HTMLTextAreaElement);\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 class=\"input-wrapper\" (keyup.enter)=\"preventSubmit($event)\">\r\n <textarea #input [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\" required=\"true\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" (input)=\"resize(input)\" [value]=\"value()\"\r\n (input)=\"onValueChange($any($event.target).value)\" [chrAutofocus]=\"autofocus() || false\" [disabled]=\"disabled()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" [autocomplete]=\"autoComplete()\"\r\n (input)=\"onHtmlInput($event)\" [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\"\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 @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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, inject } 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 private el = inject(ElementRef);\r\n\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 {\r\n Component,\r\n ContentChild,\r\n input,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'chr-tab',\r\n imports: [],\r\n templateUrl: './chr-tab.component.html',\r\n styleUrls: ['../../../../../tailwindbuild.css', './chr-tab.component.css'],\r\n})\r\nexport class TabComponent {\r\n public label = input<string>('');\r\n public disabled = input<boolean>(false);\r\n public active = signal<boolean>(false);\r\n}\r\n","<div class=\"h-full w-full relative opacity-0 transition-opacity duration-500\" [class.shown]=\"active()\">\r\n <ng-content></ng-content>\r\n</div>","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n input,\r\n QueryList,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { TabComponent } from '../chr-tab/chr-tab.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Color, getVariableColor } from '../models/colors';\r\n\r\n@Component({\r\n selector: 'chr-tab-group',\r\n imports: [CommonModule],\r\n templateUrl: './chr-tab-group.component.html',\r\n styleUrls: [\r\n './chr-tab-group.component.css',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class TabGroupComponent implements AfterContentInit {\r\n @ContentChildren(TabComponent) tabs!: QueryList<TabComponent>;\r\n protected selectedIndex = signal(0);\r\n public color = input<Color>();\r\n public fade = input<boolean>(false);\r\n\r\n ngAfterContentInit() {\r\n this.selectTab(0);\r\n }\r\n\r\n selectTab = (index: number) => {\r\n this.selectedIndex.set(index);\r\n console.log(`[TabGroup] Selecting tab index ${index}`, this.tabs.toArray());\r\n this.tabs.forEach((tab, index) => {\r\n tab.active.set(index === this.selectedIndex());\r\n });\r\n };\r\n\r\n getVariableColor(color: Color): string {\r\n return getVariableColor(color);\r\n }\r\n}\r\n","<div class=\"flex flex-col h-full w-full overflow-hidden\">\r\n <div class=\"tab-headers flex overflow-x-scroll no-scrollbar\">\r\n @for (tab of tabs.toArray(); track tab; let i = $index) {\r\n <button (click)=\"selectTab(i)\" [class.active]=\"selectedIndex() === i\" [disabled]=\"tab.disabled()\"\r\n class=\"px-2 sm:px-4 sm:py-2 flex items-center relative tab-header\" [style]=\"{\r\n 'border-color': getVariableColor(color() || 'neutral'),\r\n '--tbgpr-main-color': getVariableColor(color() || 'neutral'),\r\n }\" [ngClass]=\"{\r\n 'faded': fade(),\r\n 'cursor-pointer': !tab.disabled(),\r\n 'cursor-not-allowed': tab.disabled()\r\n }\">\r\n <span>{{ tab.label() }}</span>\r\n </button>\r\n }\r\n </div>\r\n <div class=\"flex w-full h-full mt-4\">\r\n <div class=\"tab-content flex whitespace-nowrap w-full transition-transform duration-500 shrink-0 grow\"\r\n [style.transform]=\"'translateX(-' + (selectedIndex() * 100) + '%)'\">\r\n <ng-content select=\"chr-tab\"></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n Component,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n OnInit,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n effect,\r\n} from '@angular/core';\r\nimport {\r\n ReactiveFormsModule,\r\n FormsModule,\r\n ValidatorFn,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ChrSearchSelectComponent } from '../chr-search-select/chr-search-select.component';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport {\r\n DatePipe,\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n} from '@angular/common';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { TypeValidatorDirective } from '../models/chr-validators/type-validator';\r\nimport { ChrTagSelectComponent } from '../chr-tag-select/chr-tag-select.component';\r\nimport { ChrBaseInputComponent } from './chr-base-input/chr-base-input.component';\r\nimport { getValidators } from '../models/chr-validators/base-validator';\r\nimport { ChrColorInputComponent } from './chr-color-input/chr-color-input.component';\r\nimport { ChrDateInputComponent } from './chr-date-input/chr-date-input.component';\r\nimport { ChrDatetimeInputComponent } from './chr-datetime-input/chr-datetime-input.component';\r\nimport { ChrToggleInputComponent } from './chr-toggle-input/chr-toggle-input.component';\r\nimport { ChrFileInputComponent } from './chr-file-input/chr-file-input.component';\r\nimport { IControl, InputType } from '../models/controls';\r\nimport { ChrTextareaInputComponent } from './chr-textarea-input/chr-textarea-input.component';\r\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\r\nimport { tap } from 'rxjs';\r\nimport { IFile } from '../models/file';\r\nimport { TabGroupComponent } from '../chr-tab-group/chr-tab-group.component';\r\nimport { TabComponent } from '../chr-tab/chr-tab.component';\r\n\r\nexport interface IFormSection {\r\n title?: string;\r\n controls: IControl[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-chr-form, chr-form',\r\n templateUrl: './chr-form.component.html',\r\n styleUrls: [\r\n './chr-form.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n './chr-form.component.scss',\r\n ],\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatSlideToggleModule,\r\n ChrTagSelectComponent,\r\n MatAutocompleteModule,\r\n CommonModule,\r\n MatTabsModule,\r\n ChrBaseInputComponent,\r\n ChrColorInputComponent,\r\n ChrDateInputComponent,\r\n ChrDatetimeInputComponent,\r\n ChrToggleInputComponent,\r\n ChrFileInputComponent,\r\n ChrSearchSelectComponent,\r\n ChrTextareaInputComponent,\r\n TabToInputHandlerDirective,\r\n TabGroupComponent,\r\n TabComponent,\r\n ],\r\n providers: [\r\n DatePipe,\r\n {\r\n provide: DATE_PIPE_DEFAULT_OPTIONS,\r\n useValue: { dateFormat: 'shortDate' },\r\n },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n})\r\nexport class ChrFormComponent implements OnInit {\r\n private builder = inject(FormBuilder);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private element = inject(ElementRef);\r\n\r\n readonly sections = input<IFormSection[]>([]);\r\n readonly controls = input<IControl[]>([]);\r\n readonly validators = input<ValidatorFn | ValidatorFn[] | null>(null);\r\n\r\n readonly valid = input<boolean>(false);\r\n readonly validChange = output<boolean>();\r\n\r\n readonly model = input<any>({});\r\n readonly modelChange = output<any>();\r\n readonly formDataChange = output<FormData>();\r\n\r\n readonly disabled = input<boolean>(false);\r\n readonly valuesChanges = output<any>();\r\n\r\n readonly submit = input<Function>();\r\n\r\n readonly compact = input<boolean>(false);\r\n\r\n readonly debounceTime = input<number | null>(null);\r\n\r\n readonly formChange = output<{\r\n [key: string]: any;\r\n }>();\r\n\r\n readonly valueChanges = output<{\r\n [name: string]: any;\r\n }>();\r\n\r\n readonly tabDisplay = input<boolean>(false);\r\n\r\n public formControls: { [key: string]: FormControl } = {};\r\n\r\n /**\r\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\r\n */\r\n public readonly form = input<FormGroup>(this.builder.group({}));\r\n public readonly formChanges = output<FormGroup | null>();\r\n\r\n private values: { [key: string]: any } = {};\r\n private controlTypes: { [key: string]: InputType } = {};\r\n private flattenedControls: { [key: string]: IControl } = {};\r\n private flattenedShownControl: { [key: string]: IControl } = {};\r\n private flattenedHiddenControls: { [key: string]: IControl } = {};\r\n public initialized: boolean = false;\r\n\r\n constructor() {\r\n if (this.controls().length > 0 && this.sections().length > 0)\r\n console.warn(\"You can't use both controls and sections in the same form\");\r\n\r\n effect(() => {\r\n this.set(this.model());\r\n });\r\n\r\n effect(() => {\r\n const disabled = this.disabled();\r\n if (disabled) this.form().disable({ emitEvent: false });\r\n else this.form().enable({ emitEvent: false });\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.sections()\r\n ?.map((s) => s.controls)\r\n .flat()\r\n .concat(this.controls() ?? [])\r\n .forEach((s) => (this.flattenedControls[s.name] = s));\r\n\r\n for (const key in this.flattenedControls) {\r\n const control = this.flattenedControls[key];\r\n if (control.type === 'hidden')\r\n this.flattenedHiddenControls[key] = control;\r\n else this.flattenedShownControl[key] = control;\r\n }\r\n this.form().setValidators(this.validators());\r\n\r\n this.initModel();\r\n this.initValues();\r\n this.initControls();\r\n this.initListeners();\r\n this.initialized = true;\r\n\r\n this.formChanges.emit(this.form());\r\n this.modelChange.subscribe((r) =>\r\n this.formDataChange.emit(this.toFormData())\r\n );\r\n }\r\n\r\n private initModel = () => {\r\n const model = this.model();\r\n //if (model === null) this.model = {};\r\n\r\n for (const key in this.flattenedControls) {\r\n const control = this.flattenedControls[key];\r\n if (model[key] === null || model[key] === undefined)\r\n model[key] = control.value;\r\n }\r\n };\r\n\r\n private initValues = () => {\r\n for (const key in this.flattenedControls) {\r\n if (this.values[key] === null || this.values[key] === undefined)\r\n this.values[key] = this.model()[key];\r\n }\r\n };\r\n\r\n private initControls = () => {\r\n for (const key in this.flattenedShownControl) {\r\n const control = this.flattenedShownControl[key];\r\n const validators = getValidators(control.validations);\r\n this.initializeControl(\r\n control,\r\n new FormControl(\r\n {\r\n value: this.values[key] || null,\r\n disabled: this.disabled() || control.disabled,\r\n },\r\n validators\r\n )\r\n );\r\n }\r\n this.validChange.emit(this.form().valid);\r\n };\r\n\r\n private initListeners = () => {\r\n this.form().valueChanges.subscribe((values) => {\r\n this.form().updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n this.validChange.emit(this.form().valid);\r\n });\r\n };\r\n\r\n private hasRegularFile = (): boolean => {\r\n for (const key in this.flattenedControls) {\r\n if (\r\n this.flattenedControls[key].type === 'file' &&\r\n this.flattenedControls[key].base64 === false\r\n )\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n public getEncType = (): string => {\r\n return this.hasRegularFile()\r\n ? 'multipart/form-data'\r\n : 'application/x-www-form-urlencoded';\r\n };\r\n\r\n /**\r\n * Methods that returns the FormControl for the given input. If no FormControl is found, return null.\r\n * @param name input's name\r\n * @returns the FormControl whose name matches the parameter\r\n */\r\n public getControl = (name: string) => {\r\n if (name) return this.form().controls[name];\r\n return null;\r\n };\r\n\r\n /**\r\n * Focus the input for the user to start typing in.\r\n * @param name input's name\r\n */\r\n public focus = (name: string) => {\r\n const el = this.element.nativeElement.querySelector(\r\n `input[name=\"${name}\"]`\r\n ) as HTMLInputElement;\r\n this.getControl(name)?.markAsTouched();\r\n this.changeDetector.detectChanges();\r\n setTimeout(() => {\r\n el?.focus();\r\n }, 10);\r\n };\r\n\r\n /**\r\n * Returns the value of the input whose name matches the parameter input.\r\n * If no input name is provided, returns the value of the form.\r\n * @param input name of the input\r\n * @returns the value of the input\r\n */\r\n public value = (input?: string) => this.getValue(input);\r\n\r\n /**\r\n * Returns the value of the input whose name matches the parameter input.\r\n * If no input name is provided, returns the value of the form.\r\n * @param input name of the input\r\n * @returns the value of the input\r\n */\r\n public getValue = (input?: string) => {\r\n if (input) return this.form().controls[input]?.value;\r\n return this.form().value;\r\n };\r\n\r\n /**\r\n * Returns the validity of the input.\r\n * If no input is provided, returns the validity of the form.\r\n * @param input name of the input\r\n * @returns\r\n */\r\n public isValid = (input?: string) => {\r\n if (input) return this.form().get(input)?.valid;\r\n return this.valid();\r\n };\r\n\r\n /**\r\n * Update the value of a control WITHOUT triggering the modelChange event\r\n * @param key input key (control name)\r\n * @param value value to set\r\n */\r\n public setValue = (key: string, value: any) => {\r\n if (this.formControls[key] === undefined) {\r\n //console.log('[Form] Could not find control with the following name: ', key);\r\n return;\r\n }\r\n this.formControls[key].setValue(value, {\r\n emitEvent: false,\r\n emitModelToViewChange: true,\r\n });\r\n this.formControls[key].markAsTouched();\r\n this.model()[key] = value;\r\n };\r\n\r\n /**\r\n * Update the value of the form's model WITHOUT triggering the modelChange event\r\n * @param model the model to set\r\n */\r\n public set = (model: any) => {\r\n for (const key in this.flattenedControls) {\r\n this.setValue(key, model[key]);\r\n }\r\n };\r\n\r\n /**\r\n * Updates the value of a control. This WILL trigger the modelChange event\r\n * @param key input key (control name)\r\n * @param value value to set\r\n */\r\n public patchValue = (key: string, value: any) => {\r\n this.setValue$(key, value);\r\n this.setModel$(key, value);\r\n };\r\n\r\n /**\r\n * Updates the value of the form's model. This WILL trigger the modelChange event once for each input\r\n * @param model model to set\r\n */\r\n public patch = (model: any) => {\r\n for (const key in this.flattenedControls) {\r\n this.patchValue(key, model[key]);\r\n }\r\n };\r\n\r\n /**\r\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\r\n * so that the validation errors may be displayed to the user.\r\n * @param markAsTouched Boolean that describes whether or not the inputs of the form will be marked as touched.\r\n */\r\n public checkValidity = (markAsTouched: boolean = true) => {\r\n for (const key in this.flattenedControls) {\r\n if (markAsTouched) {\r\n this.formControls[key]?.markAsTouched({\r\n onlySelf: false,\r\n emitEvent: true,\r\n });\r\n }\r\n this.formControls[key]?.updateValueAndValidity({\r\n onlySelf: false,\r\n emitEvent: true,\r\n });\r\n }\r\n\r\n this.form().updateValueAndValidity({ onlySelf: false, emitEvent: true });\r\n this.validChange.emit(this.form().valid);\r\n };\r\n\r\n /**\r\n * Here for compatibility. Same thing as checkValidity.\r\n */\r\n public updateValueAndValidity = this.checkValidity;\r\n\r\n /**\r\n * Resets the form.\r\n */\r\n public reset = () => {\r\n this.form().reset();\r\n this.form().setErrors(null);\r\n this.form().markAsUntouched();\r\n this.form().markAsPristine();\r\n for (const key in this.flattenedControls) {\r\n this.values[key] = this.formControls[key].value;\r\n }\r\n };\r\n\r\n public toFormData = (): FormData => {\r\n const data = new FormData();\r\n for (const key in this.model()) {\r\n if (\r\n this.flattenedControls[key]?.type === 'file' &&\r\n this.flattenedControls[key]?.base64 === false\r\n ) {\r\n if (this.flattenedControls[key]?.multiple === true) {\r\n for (const file of (this.model()[key] ?? []) as IFile[])\r\n data.append(key, file?.file ?? '');\r\n } else data.append(key, (this.model()[key] as IFile)?.file ?? '');\r\n } else data.append(key, this.model()[key] ?? '');\r\n }\r\n return data;\r\n };\r\n\r\n protected get = (control: IControl) => {\r\n return this.form().get([control.name]);\r\n };\r\n\r\n private setValue$ = (key: string, value: any) => {\r\n if (this.formControls[key] === undefined) {\r\n //console.log('[Form] Could not find control with the following name: ', key);\r\n return;\r\n }\r\n this.formControls[key].patchValue(value);\r\n this.formControls[key].markAsTouched();\r\n this.values[key] = value;\r\n };\r\n\r\n private setModel$ = (key: string, value: any) => {\r\n this.model()[key] = value;\r\n };\r\n\r\n /**\r\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).\r\n */\r\n public doSubmit = () => {\r\n this.checkValidity();\r\n if (this.valid() && this.form().valid) this.submit()?.(this.values);\r\n };\r\n\r\n protected log = (el: any) => {\r\n console.log(el);\r\n };\r\n\r\n protected initializeControl = (\r\n control: IControl,\r\n formControl: FormControl\r\n ) => {\r\n // Add the control to the internal map\r\n this.formControls[control.name] = formControl;\r\n //Register the onChange listener that will emit the events associated with the input's update\r\n this.formControls[control.name].valueChanges.subscribe((value) => {\r\n //We dispatch the single value change event with the value\r\n this.valueChanges.emit({ [control.name]: value });\r\n //We update the local values\r\n this.values[control.name] = value;\r\n //If the model has a property, we update it with the value\r\n const model = this.model();\r\n if (Object.hasOwn(model, control.name)) {\r\n model![control.name] = value;\r\n //Dispatch the whole model change event\r\n this.modelChange.emit(model);\r\n }\r\n // Whether or not there is a matching property in the model, we update the local values\r\n this.values[control.name] = value;\r\n });\r\n this.controlTypes[control.name] = control.type;\r\n // Add the control to the formgroup\r\n this.form().addControl(control.name, formControl);\r\n };\r\n\r\n alert = (s: string) => {\r\n alert(s);\r\n };\r\n}\r\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2 w-full\">\r\n @if (initialized) {\r\n <form [formGroup]=\"form()\" tab-input-only [attr.enctype]=\"getEncType()\">\r\n @if (!tabDisplay() || !sections()) {\r\n <ng-container [ngTemplateOutlet]=\"singleTemplate\" [ngTemplateOutletContext]=\"{controls: controls()}\">\r\n </ng-container>\r\n }\r\n @if (!tabDisplay() && sections()) {\r\n <ng-container [ngTemplateOutlet]=\"sectionTemplate\" [ngTemplateOutletContext]=\"{sections: sections()}\">\r\n </ng-container>\r\n }\r\n @if (tabDisplay() && sections()) {\r\n <ng-container [ngTemplateOutlet]=\"tabsTemplate\" [ngTemplateOutletContext]=\"{sects: sections()}\">\r\n </ng-container>\r\n }\r\n </form>\r\n }\r\n</div>\r\n\r\n<ng-template #tabsTemplate let-sections='sects'>\r\n <fieldset>\r\n <chr-tab-group color=\"primary\" [fade]=\"true\">\r\n @for (section of sections; track section; let index = $index; let lastSection = $last) {\r\n <chr-tab [label]=\"section.title || 'Étape ' + (index + 1)\" class=\"custom-tab\">\r\n @if (initialized) {\r\n <div class=\"mt-4\"\r\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'\">\r\n @for (ctrl of section.controls; track index; let index = $index; let\r\n last =\r\n $last)\r\n {\r\n <!-- <p class=\"bg-purple-600\">{{ctrl.name}} ({{formControls[ctrl.name].touched}}) ->\r\n {{formControls[ctrl.name].valid}} :\r\n {{formControls[ctrl.name].errors?.['required']}}\r\n </p> -->\r\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n (keyup.enter)=\"lastSection && last && ctrl.type !== 'textArea' && this.doSubmit()\"\r\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n </chr-tab>\r\n }\r\n </chr-tab-group>\r\n <!-- <mat-tab-group>\r\n @for (section of sections; track section; let index = $index) {\r\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\" class=\"custom-tab\">\r\n @if (initialized) {\r\n <div class=\"mt-4\"\r\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'\">\r\n @for (ctrl of section.controls; track index; let index = $index; let\r\n last =\r\n $last)\r\n { -->\r\n <!-- NOT UNCOMMENT <p class=\"bg-purple-600\">{{ctrl.name}} ({{formControls[ctrl.name].touched}}) ->\r\n {{formControls[ctrl.name].valid}} :\r\n {{formControls[ctrl.name].errors?.['required']}}\r\n </p> -->\r\n <!-- <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n </mat-tab>\r\n }\r\n </mat-tab-group> -->\r\n </fieldset>\r\n</ng-template>\r\n\r\n<ng-template #singleTemplate let-controls=\"controls\">\r\n <fieldset [disabled]=\"disabled()\">\r\n @if (initialized) {\r\n <div [ngClass]=\"compact() ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\r\n @for (control of controls; track control; let index = $index; let last = $last) {\r\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n (keyup.enter)=\"last && control.type !== 'textArea' && this.doSubmit()\"\r\n [ngTemplateOutletContext]=\"{control: control, index: index, last: last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n\r\n </fieldset>\r\n</ng-template>\r\n\r\n<ng-template #sectionTemplate let-sections='sections'>\r\n <fieldset>\r\n @for (section of sections; track section; let index = $index; let lastSection = $last) {\r\n <div>\r\n @if (section.title) {\r\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\r\n {{ section.title }}\r\n </h2>\r\n }\r\n @if (initialized) {\r\n <div [ngClass]=\"compact() ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\r\n @for (control of section.controls; track index; let index = $index; let\r\n last =\r\n $last)\r\n {\r\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n (keyup.enter)=\"lastSection && last && control.type !== 'textArea' && this.doSubmit()\"\r\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n @if (index != (sections||[]).length - 1 && !compact()) {\r\n <div class=\"py-4\">\r\n <hr class=\"\" />\r\n </div>\r\n }\r\n </div>\r\n }\r\n </fieldset>\r\n</ng-template>\r\n\r\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\r\n <div class=\"relative h-min mt-2\" [formGroup]=\"form()\" [ngClass]=\"{\r\n 'sm:col-span-2': (control.width == 'row' && !compact()) || control.type=='textArea' && compact() && control.width != 'row',\r\n 'sm:row-span-2': control.type == 'file' && control.multiple===true,\r\n 'sm:col-span-4': control.width =='row' && compact(),\r\n }\" (keyup.enter)=\"last && this.doSubmit()\">\r\n @if (control.type=='searchSelect') {\r\n <app-chr-search-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\" [filters]=\"control.filters\"\r\n [debounceTime]=\"debounceTime()\" [data]=\"control.data || []\" [addCallback]=\"control.addCallback\"\r\n [autofocus]=\"control?.autofocus\" [acceptText]=\"control.acceptText\"\r\n [validations]=\"control.validations\"></app-chr-search-select>\r\n }\r\n @if (control.type=='tagSelect') {\r\n <app-chr-tag-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [editCallback]=\"control.editCallback\" [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\"\r\n [debounceTime]=\"debounceTime()\" [filters]=\"control.filters\" [data]=\"control.data || []\"\r\n [editCallback]=\"control.editCallback\" [addCallback]=\"control.addCallback\"\r\n [removeCallback]=\"control.removeCallback\" [validations]=\"control.validations\" [autofocus]=\"control?.autofocus\"\r\n [acceptText]=\"control.acceptText\"></app-chr-tag-select>\r\n }\r\n <div class=\"relative z-0 w-full group/inputs content\">\r\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\r\n <!--TEXT, PASSWORD AND NUMBER-->\r\n @if (control.type == 'text' || control.type == 'number' || control.type == 'password') {\r\n <chr-base-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [mask]=\"control.mask\" [maskShownExpression]=\"control.shownMaskExpression\" [maskPrefix]=\"control.maskPrefix\"\r\n [maskSuffix]=\"control.maskSuffix\" [maskValidation]=\"control.maskValidation ?? true\"\r\n [maskDropSpecialCharacters]=\"control.maskDropSpecialCharacters ?? true \" [debounceTime]=\"debounceTime()\"\r\n [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-base-input>\r\n }\r\n <!--TEXT AREA-->\r\n @if (control.type == 'textArea') {\r\n <chr-textarea-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-textarea-input>\r\n }\r\n <!--DATE-->\r\n @if (control.type == 'date') {\r\n <chr-date-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-date-input>\r\n }\r\n @if (control.type == 'datetime') {\r\n <chr-datetime-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-datetime-input>\r\n }\r\n <!--COLOR-->\r\n @if (control.type == 'color') {\r\n <chr-color-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-color-input>\r\n }\r\n @if (control.type == 'toggle'){\r\n <chr-toggle-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-toggle-input>\r\n }\r\n @if (control.type == 'file'){\r\n <chr-file-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [iconTooltip]=\"control.iconTooltip\" [accept]=\"control.accept\" [debounceTime]=\"debounceTime()\"\r\n [autofocus]=\"control?.autofocus\" [multiple]=\"control.multiple\" [base64]=\"control.base64\"\r\n [validations]=\"control.validations\"></chr-file-input>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } 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 platformId = inject<Object>(PLATFORM_ID);\r\n\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() {\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 {\r\n AfterContentChecked,\r\n AfterContentInit,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n SimpleChanges,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n effect,\r\n} from '@angular/core';\r\nimport { NgClass, CommonModule } from '@angular/common';\r\nimport { ChrFormComponent } from '../chr-form/chr-form.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { CookiesService } from '../services/cookie.service';\r\nimport { DataService } from '../services/data.service';\r\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { distinctUntilChanged, take } from 'rxjs';\r\nimport { PaginationInstance, PaginationService } from 'ngx-pagination';\r\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\n\r\n@Component({\r\n selector: 'app-chr-paginator,chr-paginator, chr-paginator',\r\n templateUrl: './chr-paginator.component.html',\r\n styleUrls: [\r\n './chr-paginator.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n ChrBaseInputComponent,\r\n FormsModule,\r\n ContextMenuDirective,\r\n ],\r\n})\r\nexport class ChrPaginatorComponent implements OnInit, AfterContentChecked {\r\n private service = inject(PaginationService);\r\n private dataService = inject(DataService);\r\n private pageInput = viewChild.required<ChrBaseInputComponent>('pageInput');\r\n private pageSizeInput =\r\n viewChild.required<ChrBaseInputComponent>('pageSizeInput');\r\n\r\n public page = input<number>(1);\r\n public pageChange = output<number>();\r\n\r\n public pageSize = input<number>(20);\r\n public pageSizeChange = output<number>();\r\n\r\n private instance = signal<PaginationInstance | undefined>(undefined);\r\n\r\n protected dataSize = computed(() => this.instance()?.totalItems ?? 0);\r\n\r\n public isLastPage = computed(() => {\r\n if (!this.instance()?.totalItems) return false;\r\n return this.page() >= Math.ceil(this.dataSize() / this.pageSize());\r\n });\r\n\r\n public lastPage = computed(() =>\r\n this.instance()?.totalItems\r\n ? Math.ceil(this.dataSize() / this.pageSize())\r\n : 1\r\n );\r\n\r\n protected contextMenuItems = computed(() => {\r\n const items: IContextMenuItem[] = [];\r\n if (!this.isLastPage()) {\r\n items.push({\r\n label: 'Page suivante',\r\n action: () => this.next(),\r\n icon: 'chevron_right',\r\n });\r\n }\r\n if (!this.isFirstPage()) {\r\n items.push({\r\n label: 'Page précédente',\r\n action: () => this.previous(),\r\n icon: 'chevron_left',\r\n });\r\n }\r\n if (this.allowPageEdit()) {\r\n items.push({\r\n label: 'Modifier la page',\r\n action: () => {\r\n this.isPageEditing.set(!this.isPageEditing());\r\n },\r\n icon: 'edit',\r\n });\r\n }\r\n if (this.allowSizeChange()) {\r\n items.push({\r\n label: 'Modifier la taille de la page',\r\n action: () => {\r\n this.pageSizeInput().forceFocus();\r\n },\r\n icon: 'edit',\r\n });\r\n }\r\n return items;\r\n });\r\n\r\n protected currentlyShownSize = computed(() => {\r\n const mult = this.page() * this.pageSize();\r\n return mult > this.dataSize() ? this.dataSize() : mult;\r\n });\r\n\r\n public readonly id = input.required<string>();\r\n\r\n public readonly allowSizeChange = input<boolean>(true);\r\n public readonly allowPageEdit = input<boolean>(true);\r\n public isPageEditing = model<boolean>(false);\r\n\r\n constructor() {\r\n // effect(() => {\r\n // this.dataService.set(`${this.id()}_page`, this.page() - 1);\r\n // });\r\n // effect(() => {\r\n // this.dataService.set(`${this.id()}_pagesize`, this.pageSize());\r\n // });\r\n }\r\n\r\n ngAfterContentChecked(): void {\r\n const paginationInstance = this.service.getInstance(\r\n `${this.id()}`\r\n ) as PaginationInstance;\r\n if (paginationInstance && paginationInstance !== this.instance()) {\r\n this.instance.set(paginationInstance);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dataService\r\n .get(`${this.id()}_pagesize`)\r\n .pipe(distinctUntilChanged(), take(2))\r\n .subscribe((res) => {\r\n if (res) {\r\n this.pageSizeChange.emit(res);\r\n }\r\n });\r\n this.dataService\r\n .get(`${this.id()}_page`)\r\n .pipe(distinctUntilChanged(), take(2))\r\n .subscribe((res) => {\r\n if (res) {\r\n this.pageChange.emit(res);\r\n }\r\n });\r\n }\r\n\r\n public previous = () => {\r\n if (this.isFirstPage()) return;\r\n this.pageChange.emit(this.page() - 1);\r\n // this.dataService.set(`${this.id()}_page`, this.page() - 1);\r\n };\r\n\r\n public next = () => {\r\n if (this.isLastPage()) return;\r\n this.pageChange.emit(this.page() + 1);\r\n // this.dataService.set(`${this.id()}_page`, this.page() + 1);\r\n };\r\n\r\n public setPage = (page: number) => {\r\n if (page < 1 || page > this.lastPage()) return;\r\n this.pageChange.emit(page);\r\n // this.dataService.set(`${this.id()}_page`, page);\r\n };\r\n\r\n public setPageEventHandler = (event: any) => {\r\n this.setPage(+event.target.value);\r\n this.isPageEditing.set(false);\r\n };\r\n\r\n public isFirstPage = computed(() => this.page() == 1);\r\n\r\n public setPageSize = (pageSize: number) => {\r\n //this.setPage(1);\r\n //if (this.instance) this.instance.itemsPerPage = pageSize;\r\n // this.dataService.set(`${this.id()}_pagesize`, pageSize);\r\n this.pageSizeChange.emit(pageSize);\r\n };\r\n\r\n public setPageSizeEventHandler = (event: any) => {\r\n return this.setPageSize(event.target.value);\r\n };\r\n\r\n public focusInput = () => {\r\n this.pageInput().forceFocus();\r\n };\r\n}\r\n","<div class=\"flex flex-row justify-between dark:text-gray-400\" [contextMenu]=\"contextMenuItems()\">\r\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\r\n @if (allowSizeChange() === true || allowSizeChange() === true) {\r\n <div class=\"w-40\">\r\n <!-- <chr-base-input class=\"\" #pageSizeInput type=\"number\" label=\"Éléments par page\" [ngModel]=\"pageSize()\"\r\n (keyup.enter)=\"setPageSizeEventHandler($event)\" icon=\"check\"\r\n iconTooltip=\"Cliquez ici pour mettre à jour le nombre d'éléments affichés\" [iconCallback]=\"setPageSize\">\r\n </chr-base-input> -->\r\n <chr-base-input class=\"\" #pageSizeInput type=\"number\" label=\"Éléments par page\" [ngModel]=\"pageSize()\"\r\n (keyup.enter)=\"setPageSizeEventHandler($event)\"\r\n iconTooltip=\"Cliquez ici pour mettre à jour le nombre d'éléments affichés\">\r\n </chr-base-input>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\r\n <span class=\"entry-indicator\">{{currentlyShownSize()}} éléments sur {{dataSize()}}</span>\r\n\r\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\r\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_left</mat-icon></button>\r\n <div class=\"flex flex-row items-center content-center mx-2 w-fit table-page-wrapper\"\r\n (click)=\"isPageEditing.set(true);\">\r\n @if(isPageEditing() && allowPageEdit()) {\r\n <!-- <chr-base-input #pageInput type=\"number\" [autofocus]=\"true\" [ngModel]=\"page()\"\r\n (ngModelChange)=\"setPage($event)\" class=\"page-input\"\r\n (blur)=\"isPageEditing.set(false)\" [debounceTime]=\"250\"></chr-base-input> -->\r\n <chr-base-input #pageInput type=\"number\" [autofocus]=\"true\" [value]=\"page()\"\r\n (keyup.enter)=\"setPageEventHandler($event)\" class=\"page-input\"\r\n (blur)=\"isPageEditing.set(false)\"></chr-base-input>\r\n <!-- <input [value]=\"page()\" type=\"number\" [min]=\"1\" [max]=\"lastPage()\"\r\n (change)=\"setPage($any($event.target)!.value)\" class=\"page-input\" (blur)=\"isPageEditing.set(false)\" /> -->\r\n } @else {\r\n <span class=\"page-number\" [attr.data-editable]=\"allowPageEdit()\">{{page()}}</span>\r\n }\r\n <div class=\"page-number\" [attr.data-editable]=\"allowPageEdit()\">\r\n / {{lastPage()}}\r\n </div>\r\n </div>\r\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\r\n (click)=\"!isLastPage() && next()\"\r\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_right</mat-icon></button>\r\n </div>\r\n</div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\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 getVariableColor,\r\n getVariableContrastColor,\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\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\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 ContextMenuDirective,\r\n ],\r\n templateUrl: './chr-table-new.component.html',\r\n styleUrls: [\r\n './chr-table-new.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n providers: [PaginationService],\r\n})\r\nexport class ChrDataTable {\r\n private dataService = inject(DataService);\r\n private changeDetector = inject(ChangeDetectorRef);\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 public data = input<any[]>([]);\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 readonly selectable = input<boolean>(false);\r\n\r\n /**\r\n * The selected entries\r\n */\r\n readonly selection = model<any[]>([]);\r\n\r\n /**\r\n * The table's action column definition\r\n */\r\n readonly actions = input<IAction[]>();\r\n\r\n readonly contextMenuItems = (entry: any) => {\r\n const entries = this.actions()\r\n ?.filter((action) =>\r\n action.disabledCallback\r\n ? !action.disabledCallback(entry)\r\n : !action.disabled || false\r\n )\r\n ?.map(\r\n (action) =>\r\n ({\r\n label: action.display,\r\n icon: action.icon,\r\n action: () => action.callback(entry),\r\n color: action.color,\r\n } as IContextMenuItem)\r\n );\r\n if (this.selectable()) {\r\n const checked = this.contains(entry);\r\n entries?.push({\r\n label: checked ? 'Désélectionner' : 'Sélectionner',\r\n icon: checked ? 'close' : 'check_box',\r\n action: () => {\r\n this.select(entry, {\r\n target: { checked: !checked } as any,\r\n } as any);\r\n },\r\n });\r\n }\r\n return entries || [];\r\n };\r\n\r\n /**\r\n * Wheter or not the current sort is ascendant. Default is true\r\n */\r\n readonly isAsc = model<boolean>(true);\r\n /**\r\n * The property by which the data will be sorted\r\n */\r\n readonly sortBy = model<string>();\r\n\r\n /**\r\n * The page size for the table. Default is 20\r\n */\r\n readonly pageSize = model<number>(20);\r\n\r\n /**\r\n * The current page of the table. Default is 1\r\n */\r\n readonly currentPage = model<number>(1);\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 readonly id = input<string>(`chr_base-data-table_${crypto.randomUUID()}`);\r\n\r\n /**\r\n * The color to use for the table's header\r\n */\r\n readonly color = input<Color>('primary');\r\n\r\n readonly primaryColor = computed(() => {\r\n return getVariableColor(this.color());\r\n });\r\n readonly textColor = computed(() => {\r\n return getVariableContrastColor(this.color());\r\n });\r\n\r\n /**\r\n * The table's columns definitions\r\n */\r\n readonly columns = input<TColumn[]>([]);\r\n\r\n ngOnInit(): void {\r\n this.dataService.get(`${this.id()}_sortBy`).subscribe((res) => {\r\n if (res) this.sortBy.set(res);\r\n this.changeDetector.markForCheck();\r\n });\r\n this.dataService.get(`${this.id()}_isAsc`).subscribe((res) => {\r\n if (res) this.isAsc.set(res);\r\n this.changeDetector.markForCheck();\r\n });\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 | 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.set([\r\n ...this.selection(),\r\n ...(Array.isArray(entry) ? entry : [entry]),\r\n ]);\r\n } else {\r\n this.selection.set([\r\n ...(Array.isArray(entry)\r\n ? this.selection().filter((x) => !entry.includes(x))\r\n : this.selection().filter((x) => x !== entry)),\r\n ]);\r\n }\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.set(data);\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 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 console.log(`[Table] getBackgroundColor: `, color);\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 getVariableColor = (color: Color) => {\r\n return getVariableColor(color);\r\n };\r\n\r\n getVariableContrastColor = (color: Color) => {\r\n return getVariableContrastColor(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.set(!this.isAsc());\r\n } else {\r\n this.sortBy.set(properties);\r\n this.isAsc.set(true);\r\n }\r\n };\r\n}\r\n","<table class=\"hidden md:!table chr-table\">\r\n <thead>\r\n <tr>\r\n @if (selectable()) {\r\n <th class=\"w-min row-selector\" [style]=\"{'background-color': primaryColor(), 'color': textColor()}\"\r\n (click)=\"checkbox.click()\">\r\n <input #checkbox type=\"checkbox\" class=\"pointer-events-none no-events table-checkbox\"\r\n [style]=\"{'accent-color': primaryColor()}\" (click)=\"select(data(), $event)\" />\r\n </th>\r\n }\r\n @for (column of columns() || []; track column) {\r\n <th class=\"header-cell\" [style]=\"{'background-color': primaryColor(), 'color': textColor()}\"\r\n (click)=\"sort(column.properties)\">\r\n <div class=\"header-cell-content-wrapper\">\r\n <span class=\"header-cell-content\">{{column.display}}</span>\r\n @if (column.properties && sortBy() == column.properties && !isAsc()) {\r\n <mat-icon class=\"header-cell-content\">arrow_upward</mat-icon>\r\n }\r\n <!-- 🡱 🡳 -->\r\n @if (column.properties && sortBy() == column.properties && isAsc()) {\r\n <mat-icon class=\"header-cell-content\">arrow_downward</mat-icon>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (actions()) {\r\n <th class=\"actions-header-cell\" [style]=\"{'background-color': primaryColor(), 'color': textColor()}\">Actions\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (data() === null || data() === undefined || data().length <= 0) { <tr>\r\n @if (selectable()) {\r\n <td></td>\r\n }\r\n <td>Pas de données</td>\r\n </tr>\r\n }\r\n @for (entry of data() | sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(),\r\n id: this.id()}; track entry) {\r\n <tr [style]=\"{'border-color': primaryColor()}\" [contextMenu]=\"contextMenuItems(entry)\">\r\n @if (selectable()) {\r\n <td class=\"w-min row-selector\" (click)=\"checkbox.click()\">\r\n <input #checkbox type=\"checkbox\" class=\"pointer-events-none no-events table-checkbox\"\r\n [style]=\"{'accent-color': primaryColor()}\" (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" />\r\n </td>\r\n }\r\n @for (column of columns() || []; track column) {\r\n <td tab-input-only>\r\n @switch (column.type) {\r\n @default {\r\n <ng-container [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('date') {\r\n <ng-container [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('input') {\r\n <ng-container [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('chips') {\r\n <ng-container [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n }\r\n </td>\r\n }\r\n @if (actions() != undefined && actions()!.length > 0) {\r\n <td>\r\n <div class=\"actions-cell\">\r\n @for (action of actions(); track action) {\r\n <app-chr-button [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry)\"\r\n [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 }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n <tfoot></tfoot>\r\n</table>\r\n\r\n<div class=\"md:!hidden chr-mobile-table\">\r\n @for (entry of data() | sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id:\r\n this.id()}; track entry; let i = $index) {\r\n <div class=\"entry\" [contextMenu]=\"contextMenuItems(entry)\">\r\n @if (selectable()) {\r\n <div class=\"entry-row\" [style]=\"{'border-color': primaryColor()}\">\r\n <div class=\"entry-header\" [style]=\"{'background-color': primaryColor(), color: textColor()}\">\r\n </div>\r\n\r\n <div class=\"entry-content flex flex-row justify-center row-selector\" (click)=\"checkbox.click()\">\r\n <input #checkbox type=\"checkbox\" class=\"pointer-events-none no-events table-checkbox\"\r\n (click)=\"select(entry, $event)\" [style]=\"{'accent-color': primaryColor()}\" [checked]=\"contains(entry)\" />\r\n </div>\r\n </div>\r\n }\r\n @for (column of columns() || []; track column) {\r\n <div class=\"entry-row\" [style]=\"{'border-color': primaryColor()}\">\r\n <div class=\"entry-header\" [style]=\"{'background-color': primaryColor(), color: textColor()}\">\r\n {{column.display}}\r\n </div>\r\n <div class=\"entry-content\" tab-input-only>\r\n @switch (column.type) {\r\n @default {\r\n <ng-container [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('date') {\r\n <ng-container [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('input') {\r\n <ng-container [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('chips') {\r\n <ng-container [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (actions()) {\r\n <div class=\"entry-row\">\r\n <div class=\"entry-header\" [style]=\"{'background-color': primaryColor(), color: textColor()}\">\r\n Actions\r\n </div>\r\n\r\n @if (actions() != undefined && actions()!.length > 0) {\r\n <div class=\"entry-content actions-cell\">\r\n @for (action of actions(); track action) {\r\n <app-chr-button class=\"w-full\" [display]=\"action.display\" [icon]=\"action.icon\" type=\"full\"\r\n [click]=\"action.callback.bind(null, entry, i)\" [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 }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<app-chr-paginator [id]=\"this.id()\" [(page)]=\"currentPage\" [(pageSize)]=\"pageSize\"\r\n (pageSizeChange)=\"currentPage.set(1)\" />\r\n\r\n<!-- CELL TEMPLATES -->\r\n<ng-template #default let-column='column' let-value=\"value\">\r\n @if (column.callback? column.callback(value) : value; as val) {\r\n <span>{{val}}</span>\r\n }\r\n</ng-template>\r\n<ng-template #date let-column='column' let-value=\"value\">\r\n @if (column.callback? column.callback(value) : value; as val) {\r\n <span>{{val | date: column.format}}</span>\r\n }\r\n</ng-template>\r\n<ng-template #link let-column='column' let-value=\"value\">\r\n @if (column.callback? column.callback(value) : value; as val) {\r\n <a target=\"_blank\" [href]=\"column.url + '/'+ val\">{{val}}</a>\r\n }\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</ng-template>\r\n<ng-template #chip let-column='column' let-value=\"value\">\r\n @let val = column.callback? column.callback(value) : value;\r\n @if (val !== null && val !== undefined) {\r\n <div class=\"w-full h-full flex flex-row items-center align-middle\">\r\n @if ((column.chipsCallback ? column.chips?.[column.chipsCallback(val)]: column.chips?.[val]); as chip) {\r\n <span\r\n class=\"w-full md:max-w-36 flex text-center content-center align-middle items-center justify-center text-xs font-medium py-0.5 rounded-full\"\r\n [style]=\"{'background-color': getVariableColor(chip.color), color: chip.color === 'none'? getVariableColor('text'):getVariableContrastColor(chip.color)}\">\r\n {{ chip.display }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n</ng-template>","import {\r\n AfterViewInit,\r\n Component,\r\n Input,\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 { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { ToastService } from '../../services/toast.service';\r\nimport { FileService } from '../../services/files.service';\r\nimport { catchError, forkJoin, Observable, take } from 'rxjs';\r\nimport { IFile } from '../../models/file';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ChrFileInputComponent } from '../chr-file-input/chr-file-input.component';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-nice-file-input',\r\n imports: [CommonModule, MatIconModule, AutofocusDirective],\r\n templateUrl: './chr-nice-file-input.component.html',\r\n styleUrl: './chr-nice-file-input.component.scss',\r\n})\r\nexport class ChrNiceFileInputComponent\r\n extends ChrFileInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy {}\r\n","<div class=\"flex flex-col items-center justify-center w-full h-full\">\r\n <div\r\n class=\"flex flex-col items-center justify-center w-full h-full border-2 border-dashed rounded-lg cursor-pointer dropzone p-4\"\r\n [ngClass]=\"{\r\n 'border-error': hasError() && isTouched\r\n }\" (click)=\"input.click()\" (click)=\"onTouch($event)\">\r\n <!-- Zone de drop / clic fichier -->\r\n <div class=\"flex flex-col items-center justify-center pt-5 pb-2\">\r\n <svg class=\"w-8 h-8\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 20 16\">\r\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n d=\"M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2\" />\r\n </svg>\r\n @if (files.length <= 0) { <p class=\"text-sm text-color\">\r\n <span class=\"font-semibold\">{{label() ?? 'Cliquez pour ajouter'}}</span> @if (isControlRequired()) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n </p>\r\n }\r\n @if (hasError() && isTouched()) {\r\n <p class=\"text-error font-bold\">{{ getLastError() }}</p>\r\n }\r\n <p class=\"text-xs text-neutral font-semibold mt-2\">Format(s) accepté(s):</p>\r\n <p class=\"text-xs text-neutral\">{{ getToAccept() }}</p>\r\n <input #input type=\"file\" [disabled]=\"disabled()\" [attr.multiple]=\"multiple()\" class=\"hidden\"\r\n [chrAutofocus]=\"autofocus() || false\" [accept]=\"acceptToString()\" (change)=\"onFileChange($event)\" />\r\n </div>\r\n </div>\r\n <div class=\"w-full\">\r\n @for(file of files; track file; let index = $index){\r\n @if (file | async; as conversion) {\r\n <div class=\"progress-bar\">\r\n <div class=\"progress\" [style.width]=\"conversion.progress + '%'\" [ngClass]=\"{\r\n 'ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'finished': !fileErrors?.[index] && conversion.progress === 100,\r\n 'error': fileErrors?.[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 class=\"progress-bar-progress\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\">\r\n {{conversion.progress}}%\r\n </span>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"openFile(index, conversion.file)\">visibility</mat-icon>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"removeFile(index, conversion.file)\">delete</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>","import { Component, input, output } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-chr-searchbar, chr-searchbar',\r\n templateUrl: './chr-searchbar.component.html',\r\n styleUrls: [\r\n './chr-searchbar.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [ReactiveFormsModule],\r\n})\r\nexport class ChrSearchbarComponent {\r\n readonly model = input<string | null>();\r\n readonly modelChange = output<string>();\r\n readonly placeholder = input<string | null>();\r\n readonly label = input<string | null>();\r\n public searchBy = new FormControl<string>('');\r\n\r\n constructor() {\r\n this.searchBy.valueChanges.subscribe((value) => this.emit(value));\r\n }\r\n\r\n emit(event: any) {\r\n this.modelChange.emit(event);\r\n }\r\n}\r\n","<div class=\"w-full relative z-0 group/inputs\">\r\n <input matInput [formControl]=\"searchBy\" placeholder=\" \" type=\"text\"\r\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\" />\r\n <label\r\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\">{{\r\n label()\r\n }}\r\n <!--\r\n @for (validation of control.validations; track validation) {\r\n @if (\r\n control?.touched &&\r\n form.hasError(validation.rule.toLowerCase(), name)\r\n ) {\r\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\r\n }\r\n }\r\n -->\r\n </label>\r\n</div>","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgClass } from '@angular/common';\r\n/**\r\n * This should only be used as a directive\r\n */\r\n@Component({\r\n selector:\r\n 'app-chr-table-header-cell, [app-chr-table-header-cell], chr-table-header-cell',\r\n templateUrl: './chr-table-header-cell.component.html',\r\n styleUrls: [\r\n './chr-table-header-cell.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [NgClass, MatIcon],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrTableHeaderCellComponent {\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n readonly display = input<string>();\r\n readonly column = input<string[]>();\r\n readonly alignment = input<string>();\r\n readonly isAsc = input<boolean>(true);\r\n readonly isAscChange = output<boolean>();\r\n readonly sortBy = input<string[]>();\r\n readonly sortByChange = output<string[]>();\r\n\r\n orderBy = (column?: string[]) => {\r\n const sortBy = this.sortBy();\r\n if (!sortBy) this.sortByChange.emit(column!);\r\n\r\n if (sortBy == column) {\r\n this.isAscChange.emit(!this.isAsc());\r\n this.sortByChange.emit(column!);\r\n // this.isAscChange.emit(this.isAsc());\r\n // this.sortByChange.emit(sortBy);\r\n } else {\r\n this.isAscChange.emit(true);\r\n this.sortByChange.emit(column!);\r\n }\r\n this.changeDetector.markForCheck();\r\n };\r\n}\r\n","<div class=\"relative w-full cursor-pointer flex flex-row align-middle self-center\" [ngClass]=\"\r\n alignment() == 'left' ? 'justify-start' : \r\n alignment() == 'center' ? 'justify-center' : \r\n alignment() == 'right' ? 'justify-end' : \r\n 'justify-left'\" (click)=\"orderBy(column())\">\r\n <p>{{ display() }}</p>\r\n @if (sortBy()) {\r\n <div class=\"absolute right-3 top-0 h-0 w-0\">\r\n @if (sortBy() == column() && isAsc()) {\r\n <mat-icon>arrow_upward</mat-icon>\r\n }\r\n @if (sortBy() == column() && !isAsc()) {\r\n <mat-icon>arrow_downward</mat-icon>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<ng-content />","import {\r\n Component,\r\n Input,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n OnInit,\r\n ChangeDetectionStrategy,\r\n inject,\r\n input,\r\n output,\r\n model,\r\n} from '@angular/core';\r\nimport { ChrPaginatorComponent } from '../chr-paginator/chr-paginator.component';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { ChrTableHeaderCellComponent } from '../chr-table-header-cell/chr-table-header-cell.component';\r\nimport { NgxPaginationModule } from 'ngx-pagination';\r\nimport {\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n DatePipe,\r\n} from '@angular/common';\r\nimport { DataService } from '../services/data.service';\r\n\r\nimport { SortPipe } from 'chrv-pipes';\r\nimport { getContrastTextColor } from '../models/colors';\r\nimport {\r\n Color,\r\n getBackgroundColor,\r\n getBorderColor,\r\n getTextColor,\r\n} from '../models/colors';\r\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\r\nimport { take } from 'rxjs';\r\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\n\r\nexport type Alignment = 'left' | 'center' | 'right';\r\n\r\nexport const Aligments: { [key: string]: string } = {\r\n left: 'text-left justify-start',\r\n center: 'text-center justify-center',\r\n right: 'text-right justify-end',\r\n};\r\n\r\nexport interface IChips {\r\n display: string;\r\n name: string;\r\n callback: (entry: any) => string | boolean;\r\n textColor?: Color;\r\n backgroundColor?: Color;\r\n}\r\n\r\nexport interface IColumn {\r\n display: string;\r\n alignment?: 'left' | 'center' | 'right';\r\n chips?: IChips[];\r\n properties?: string[];\r\n callback?: Function;\r\n date?: string;\r\n isLink?: boolean;\r\n linkStaticUrl?: string;\r\n}\r\n\r\nexport interface IComputedRow {\r\n columns: IComputedColumn[];\r\n}\r\n\r\nexport interface IComputedColumn {\r\n label?: string;\r\n value?: any;\r\n callback?: Function;\r\n alignment?: 'left' | 'center' | 'right';\r\n after?: string;\r\n}\r\n\r\nexport interface IAction {\r\n display?: string;\r\n icon?: string;\r\n callback: ((entry: any, index?: number) => void | any) | Function;\r\n disabled?: boolean;\r\n disabledCallback?: ((entry: any) => boolean) | Function;\r\n color: Color;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chr-table, [app-chr-table], chr-table',\r\n templateUrl: './chr-table.component.html',\r\n styleUrls: ['./chr-table.component.scss', '../../../../../tailwindbuild.css'],\r\n imports: [\r\n ChrTableHeaderCellComponent,\r\n ChrButtonComponent,\r\n ChrPaginatorComponent,\r\n SortPipe,\r\n NgxPaginationModule,\r\n CommonModule,\r\n ContextMenuDirective,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n providers: [\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 ChrTableComponent implements OnInit, AfterViewInit {\r\n private _date = inject(DatePipe);\r\n private dataService = inject(DataService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n readonly computedRows = input<IComputedRow[]>();\r\n readonly columns = input<IColumn[]>();\r\n\r\n private _data: any[] | null = [];\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.changeDetector.markForCheck();\r\n }\r\n\r\n readonly actions = input<IAction[]>([]);\r\n\r\n readonly isAsc = model<boolean>(true);\r\n readonly sortBy = model<string[]>();\r\n readonly pageSize = model<number>(50);\r\n readonly currentPage = model<number>(1);\r\n readonly selectable = input<boolean>(false);\r\n\r\n readonly selection = model<any[]>([]);\r\n\r\n readonly id = input<string>(`chr_base-data-table_${crypto.randomUUID()}`);\r\n\r\n readonly color = input<Color>('secondary');\r\n\r\n readonly textColor = input<Color>('secondary-contrast');\r\n\r\n private _page: number = 1;\r\n\r\n readonly contextMenuItems = (entry: any) => {\r\n const entries = this.actions()\r\n ?.filter((action) =>\r\n action.disabledCallback\r\n ? !action.disabledCallback(entry)\r\n : !action.disabled || false\r\n )\r\n .map(\r\n (action) =>\r\n ({\r\n label: action.display,\r\n icon: action.icon,\r\n action: () => action.callback(entry),\r\n color: action.color,\r\n } as IContextMenuItem)\r\n );\r\n if (this.selectable()) {\r\n const checked = this.contains(entry);\r\n entries?.push({\r\n label: checked ? 'Désélectionner' : 'Sélectionner',\r\n icon: checked ? 'close' : 'check_box',\r\n action: () => {\r\n this.select(entry, {\r\n target: { checked: !checked } as any,\r\n } as any);\r\n },\r\n });\r\n }\r\n return entries || [];\r\n };\r\n\r\n currentProperty: any | null = null;\r\n currentText: string | null = null;\r\n\r\n ngOnInit(): void {\r\n this.dataService.get(`${this.id()}_sortBy`).subscribe((res) => {\r\n if (res) this.sortBy.set(res);\r\n });\r\n this.dataService.get(`${this.id()}_isAsc`).subscribe((res) => {\r\n if (res) this.isAsc.set(res);\r\n });\r\n }\r\n ngAfterViewInit(): void {}\r\n\r\n protected getProperty = (entry: any, properties?: any[]) => {\r\n this.currentProperty = null;\r\n this.currentText = null;\r\n\r\n if (!properties) {\r\n this.currentProperty = entry;\r\n return entry;\r\n }\r\n let value = entry;\r\n for (const i of properties) {\r\n value = (value as any)?.[i];\r\n }\r\n this.currentProperty = value;\r\n return value;\r\n };\r\n\r\n protected getText = (property: any, column: IColumn) => {\r\n let text = null;\r\n\r\n if (column.callback) text = column.callback(property);\r\n\r\n if (text == null && column.date)\r\n text = this._date.transform(property, column.date);\r\n\r\n this.currentText = text || property;\r\n\r\n return text || property;\r\n // column.date\r\n // ? column.callback\r\n // \t? column.callback(property)\r\n // \t: (property | date : column.date)\r\n // : column.callback\r\n // \t? column.callback(property)\r\n // \t: property\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 console.log('selecting', entry, event);\r\n this.selection.set([\r\n ...this.selection(),\r\n ...(Array.isArray(entry) ? entry : [entry]),\r\n ]);\r\n } else {\r\n this.selection.set(this.selection().filter((x) => x !== entry));\r\n }\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.selection.set(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 protected getIsAsc = () => {\r\n return this.isAsc();\r\n };\r\n\r\n protected getSortBy = () => {\r\n return this.sortBy();\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 getAlignment = (alignment: Alignment = 'center') => {\r\n return Aligments[alignment] || Aligments['left'];\r\n };\r\n}\r\n","<div class=\"h-full no-scrollbar\">\r\n <ng-content class=\"mt-5\"></ng-content>\r\n <div class=\"flex flex-col flex-1 overflow-auto no-scrollbar\">\r\n @if (data) {\r\n <!-- max-w-[75%] -->\r\n <table\r\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\">\r\n <thead>\r\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0\"\r\n [ngClass]=\"[getBackgroundColor(color()), getContrastTextColor(textColor())]\">\r\n @for (column of columns(); track column) {\r\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\r\n [(isAsc)]=\"isAsc\" [(sortBy)]=\"sortBy\">\r\n </th>\r\n }\r\n @if (actions()) {\r\n <th\r\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle sm:w-0\">\r\n Actions\r\n </th>\r\n }\r\n </tr>\r\n }\r\n @for (entry of data |\r\n sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id: this.id()}; track\r\n entry)\r\n {\r\n <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0 \"\r\n [ngClass]=\"[getBackgroundColor(color()), getContrastTextColor(textColor())]\">\r\n @if (selectable()) {\r\n <th class=\"p-3 h-14\"></th>\r\n }\r\n @for (column of columns(); track column) {\r\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\r\n [(isAsc)]=\"isAsc\" alignment=\"{{column.alignment}}\" [(sortBy)]=\"sortBy\"></th>\r\n }\r\n @if (actions()) {\r\n <th\r\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\">\r\n Actions\r\n </th>\r\n }\r\n </tr>\r\n }\r\n </thead>\r\n <tbody class=\"w-full\">\r\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no-wrap sm:table-row rounded-lg mb-0 sm:mb-2 \">\r\n <td class=\"p-3 h-14\">Pas de donnée(s)</td>\r\n @for (column of columns() | slice: 1; track column) {\r\n <td class=\"p-3 h-14\"></td>\r\n }\r\n @if (actions()) {\r\n <td class=\"p-3 h-14 grid gap-3 justify-center align-middle items-center\"\r\n [ngClass]=\"actions().length > 1 ? 'grid-cols-2' : 'grid-cols-1'\"></td>\r\n }\r\n </tr>\r\n }\r\n @for (entry of data |\r\n sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id: this.id()}; track\r\n entry; let i = $index) {\r\n <tr [attr.data-index]=\"i\" [contextMenu]=\"contextMenuItems(entry)\"\r\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 sm:border-t-2 sm:first:border-0\"\r\n [ngClass]=\"[getBorderColor(color())]\">\r\n @if (selectable()) {\r\n <td class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\r\n [ngClass]=\"getBorderColor(color())\"><input type=\"checkbox\" class=\"table-checkbox\"\r\n (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" /></td>\r\n }\r\n @for (column of columns(); track column;) {\r\n <td [ngClass]=\"\r\n column.chips\r\n ? ''\r\n : ''\r\n \" class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\r\n [ngClass]=\"getBorderColor(color())\">\r\n <ng-container [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{prop: getProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n </td>\r\n }\r\n <ng-template #default let-column='column' let-property=\"prop\">\r\n @if (column.isLink) {\r\n <a target=\"_blank\" class=\"text-{{column.alignment}}\" href=\"{{column.linkStaticUrl}}{{\r\n getText(property, column)\r\n }}\">\r\n {{\r\n currentText\r\n }}\r\n </a>\r\n }\r\n @if (!column.isLink) {\r\n <div class=\"flex flex-row\" [ngClass]=\"{\r\n 'justify-start': column.alignment == 'left',\r\n 'justify-center': column.alignment == 'center',\r\n 'justify-end': column.alignment == 'right',\r\n 'gap-2': column.chipsDisplay && getText(property, column)\r\n }\">\r\n @if (column.chips && column.chips.length > 0) {\r\n <div>\r\n @for(chip of column.chips; track chip; let i = $index){\r\n @if (chip.callback(entry) === true || chip.callback(entry) === chip.name) {\r\n <span\r\n class=\"w-24 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.backgroundColor), chip.backgroundColor != 'none' ? getContrastTextColor(chip.backgroundColor) : getTextColor(chip.textColor)]\">\r\n {{ chip.display }}\r\n </span>\r\n }\r\n }\r\n </div>\r\n }@else {\r\n <p class=\"inline-block overflow-hidden text-nowrap text-ellipsis max-w-full\">\r\n {{\r\n currentText || getText(property, column)\r\n }}\r\n </p>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n @if (actions()) {\r\n <td class=\"p-3 h-14 flex gap-2 w-full sm:w-min justify-center\">\r\n @for (action of actions(); track action) {\r\n <app-chr-button class=\"w-full\" [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(entry)\r\n : action.disabled || false\r\n \" [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry, i)\"\r\n [color]=\"action.color\" type=\"responsive\">\r\n </app-chr-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n @for (r of computedRows(); track r) {\r\n <tr class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 \">\r\n @for (c of r.columns; track c) {\r\n <td [ngClass]=\"c.alignment && 'text-'+(c.alignment||'left')\" class=\"p-3 h-14\">\r\n {{c.label && c.label + ':'}} {{c.value || (c.callback && c.callback(data))}} {{c.after}}\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n <app-chr-paginator [id]=\"this.id()\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\"\r\n (pageSizeChange)=\"currentPage.set(1)\"></app-chr-paginator>\r\n }\r\n </div>\r\n</div>","import { Component, input, output } from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-chr-checkbox, chr-checkbox',\r\n templateUrl: './chr-checkbox.component.html',\r\n styleUrls: [\r\n './chr-checkbox.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [MatIcon],\r\n})\r\nexport class ChrCheckboxComponent {\r\n public checked: boolean = false;\r\n\r\n readonly type = input<'info' | 'success'>('info');\r\n\r\n readonly disabled = input<boolean>(false);\r\n\r\n readonly change = output<{\r\n checked: boolean;\r\n }>();\r\n\r\n check(end: boolean) {\r\n if (this.disabled()) return;\r\n if (end) {\r\n this.checked = true;\r\n this.change.emit({ checked: true });\r\n } else {\r\n this.checked = false;\r\n this.change.emit({ checked: false });\r\n }\r\n }\r\n}\r\n","<div>\r\n @if (checked) {\r\n <div (click)=\"check(false)\" [class.info]=\"type()=='info'&&!disabled()\"\r\n [class.bg-green-100]=\"type()=='success'&&!disabled()\" [class.cursor-pointer]=\"!disabled()\"\r\n [class.bg-grey-400]=\"disabled()\"\r\n class=\"box-border rounded-lg p-3 h-12 text-center border-bottom-accent sm:border-none\">\r\n <div class=\"flex justify-center items-center\"><mat-icon>check-circle</mat-icon></div>\r\n </div>\r\n }\r\n @if (!checked) {\r\n <div (click)=\"check(true)\" [class.cursor-pointer]=\"!disabled()\" [class.disabled]=\"disabled()\"\r\n [class.bg-gray-200]=\"disabled()\" [class.bg-red-100]=\"!disabled()\"\r\n class=\"box-border p-3 h-12 text-center rounded-lg border-bottom-accent sm:border-none\">\r\n <div class=\"flex justify-center items-center\"><mat-icon>close</mat-icon></div>\r\n </div>\r\n }\r\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 {\r\n HttpContextToken,\r\n HttpEvent,\r\n HttpInterceptorFn,\r\n HttpResponse,\r\n} from '@angular/common/http';\r\nimport { finalize, Observable, tap } from 'rxjs';\r\nimport { LiveUpdateService } from '../../services/live-update.service';\r\nimport {\r\n HUBURL,\r\n XSRFCOOKIENAME,\r\n XSRFHEADERNAME,\r\n} from '../providers/xsrf-provider';\r\nimport { DataService } from '../../services/data.service';\r\n\r\nexport const XsrfInterceptor: HttpInterceptorFn = (req, next) => {\r\n const headerName: string = inject(XSRFHEADERNAME);\r\n const hubUrl: string = inject(HUBURL);\r\n\r\n const liveUpdateService: LiveUpdateService | null =\r\n hubUrl != null && hubUrl != undefined ? inject(LiveUpdateService) : null;\r\n const dataService: DataService = inject(DataService);\r\n const csrfToken = dataService.getSync(headerName);\r\n\r\n const hasCsrfToken = csrfToken !== null && csrfToken !== undefined;\r\n const shouldIntercept = ['PUT', 'POST', 'DELETE'].includes(req.method);\r\n\r\n const isWebSocket =\r\n liveUpdateService && liveUpdateService.getHubUrl() !== null\r\n ? req.url.includes(liveUpdateService.getHubUrl()!)\r\n : false;\r\n\r\n if (hasCsrfToken && shouldIntercept && !isWebSocket) {\r\n const cloned = req.clone({\r\n headers: req.headers.set(headerName, csrfToken),\r\n });\r\n\r\n liveUpdateService?.initConnection().subscribe();\r\n return next(cloned).pipe(\r\n WaitAndStoreXsrfToken(headerName, dataService),\r\n finalize(() => liveUpdateService?.closeConnection().subscribe())\r\n );\r\n } else {\r\n return next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));\r\n }\r\n};\r\n\r\nexport const WaitAndStoreXsrfToken = (\r\n headername: string,\r\n dataService: DataService\r\n) => {\r\n return (source: Observable<HttpEvent<any>>) => {\r\n return source.pipe(\r\n tap((event) => {\r\n if (event instanceof HttpResponse) {\r\n const xsrfToken = event.headers.get(headername);\r\n if (xsrfToken) {\r\n dataService.set(headername, xsrfToken);\r\n }\r\n }\r\n return event;\r\n })\r\n );\r\n };\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 { Injectable, inject } from '@angular/core';\r\nimport {\r\n BehaviorSubject,\r\n delay,\r\n filter,\r\n from,\r\n Observable,\r\n ReplaySubject,\r\n skipWhile,\r\n switchMap,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\nimport {\r\n HttpClient,\r\n HttpTransportType,\r\n HubConnection,\r\n HubConnectionBuilder,\r\n HubConnectionState,\r\n IHttpConnectionOptions,\r\n LogLevel,\r\n} from '@microsoft/signalr';\r\nimport {\r\n DEFAULTLIVEUPDATEMESSAGE,\r\n ILiveUpdateMessage,\r\n LiveUpdateStatus,\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 providedIn: 'root',\r\n})\r\nexport class LiveUpdateService {\r\n private dataService = inject<DataService>(DataService);\r\n\r\n private _hubUrl: string | null = null;\r\n private _connection: HubConnection | null = null;\r\n private _xsrf: string | null = null;\r\n private _xsrfHeader: string | null;\r\n //private _client: HttpClient;\r\n private _message: BehaviorSubject<ILiveUpdateMessage> = new BehaviorSubject(\r\n DEFAULTLIVEUPDATEMESSAGE\r\n );\r\n private _update: BehaviorSubject<string> = new BehaviorSubject(\r\n DEFAULTLIVEUPDATEMESSAGE?.message || ''\r\n );\r\n\r\n constructor() {\r\n const hubUrl = inject(HUBURL, { optional: true });\r\n const xsrfHeader = inject(XSRFHEADERNAME, { optional: true });\r\n const dataService = this.dataService;\r\n\r\n this._hubUrl = hubUrl;\r\n this._xsrfHeader = xsrfHeader;\r\n if (this._xsrfHeader !== null)\r\n this._xsrf = dataService.getSync(this._xsrfHeader);\r\n }\r\n\r\n public initConnection = (): Observable<void> => {\r\n if (this._xsrfHeader == null) throw new Error('xsrfHeader is not set');\r\n if (this._hubUrl == null) throw new Error('hubUrl is not set');\r\n\r\n this._xsrf = this.dataService.getSync(this._xsrfHeader);\r\n if (this._connection == null)\r\n this._connection = new HubConnectionBuilder()\r\n .withUrl(this._hubUrl, {\r\n transport: HttpTransportType.ServerSentEvents,\r\n headers: { [this._xsrfHeader]: this._xsrf },\r\n } as IHttpConnectionOptions)\r\n .configureLogging(LogLevel.None)\r\n .withAutomaticReconnect()\r\n .build();\r\n\r\n return new Observable<void>((observer) => {\r\n if (this._connection?.state == HubConnectionState.Connected)\r\n this._connection;\r\n else\r\n this._connection\r\n ?.start()\r\n .then(() => {\r\n observer.next();\r\n observer.complete();\r\n })\r\n .catch((error: any) => {\r\n observer.error(error);\r\n });\r\n\r\n this._connection?.on('UPDATE', (message: ILiveUpdateMessage) => {\r\n this.pushMessage(message);\r\n });\r\n });\r\n };\r\n\r\n public onUpdate(): Observable<string> {\r\n return this._update\r\n .asObservable()\r\n .pipe(skipWhile((message) => message == null));\r\n }\r\n\r\n public closeConnection(): Observable<void> {\r\n return from(this._connection!.stop()).pipe(\r\n tap(() => {\r\n this._connection = null;\r\n\r\n //We push a null to flush the observable\r\n this._message.next(DEFAULTLIVEUPDATEMESSAGE);\r\n this._update.next(DEFAULTLIVEUPDATEMESSAGE?.message || '');\r\n })\r\n );\r\n }\r\n\r\n public getMessage(): Observable<ILiveUpdateMessage> {\r\n return this._message\r\n .asObservable()\r\n .pipe(skipWhile((message) => message == null));\r\n }\r\n\r\n public getHubUrl = (): string | null => this._hubUrl;\r\n\r\n private pushMessage(message: ILiveUpdateMessage) {\r\n this._message.next(message);\r\n this._update.next(\r\n message?.message || DEFAULTLIVEUPDATEMESSAGE?.message || ''\r\n );\r\n if (message.status === LiveUpdateStatus.End) {\r\n this._connection?.stop();\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n} from '@angular/core';\r\n\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, 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: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrSpinnerComponent implements OnInit {\r\n loader = inject(LoaderService);\r\n liveUpdate = inject(LiveUpdateService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n public message: ILiveUpdateMessage = DefaultLiveUpdateMessage;\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, inject, 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, 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 toastService = inject(ToastService);\r\n\r\n readonly topmargin = input('0px');\r\n}\r\n","@if ((toastService.current() | async); as toast;) {\r\n<div 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>\r\n}","import { Component, computed, inject, input, model } from '@angular/core';\r\nimport {\r\n MatDialogRef,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MAT_DIALOG_DATA,\r\n MatDialogConfig,\r\n} from '@angular/material/dialog';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { IAction } from '../chr-table/chr-table.component';\r\nimport { ModalOptions } from '../models/modal';\r\n\r\n@Component({\r\n selector: 'app-chr-default-modal, chr-default-modal',\r\n templateUrl: './chr-default-modal.component.html',\r\n styleUrls: [\r\n './chr-default-modal.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [ChrButtonComponent],\r\n})\r\nexport class ChrDefaultModalComponent {\r\n private dialogRef =\r\n inject<MatDialogRef<ChrDefaultModalComponent>>(MatDialogRef);\r\n private config = inject<ModalOptions>(MAT_DIALOG_DATA);\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n public valid: boolean = false;\r\n\r\n readonly title = model<string>('Attention: ');\r\n readonly text = model<string>('');\r\n readonly actions = model<IAction[]>();\r\n readonly close = model<string>('Fermer');\r\n\r\n protected html = computed(() => {\r\n this.text.set(this.text()!.replace(/(\\r\\n|\\r|\\n)/g, '<br>'));\r\n return this.sanitizer.bypassSecurityTrustHtml(this.text() || '');\r\n });\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n public closeModal = (callback?: Function) => {\r\n const value = callback?.();\r\n this.dialogRef.close(value || true);\r\n };\r\n}\r\n","<div class=\"w-full overflow-auto overflow-x-hidden p-6\"\r\n style=\"background-color: var(--background-color); color:var(--text-color); border-radius: 0.5rem;\">\r\n <h2 class=\"dialog-title\">{{title()}}</h2>\r\n <div [innerHTML]=\"html()\">\r\n </div>\r\n <div class=\"w-full flex flex-row justify-between\">\r\n <app-chr-button class=\"w-36\" [display]=\"close()\" color=\"secondary\" [click]=\"closeModal\"></app-chr-button>\r\n @if (actions()) {\r\n @for (action of actions(); track action) {\r\n <app-chr-button class=\"w-36\" [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(null)\r\n : action.disabled || false\r\n \" [display]=\"action.display\" [icon]=\"action.icon\"\r\n [click]=\"closeModal.bind(null, action.callback.bind(null))\" [color]=\"action.color\">\r\n </app-chr-button>\r\n }\r\n }\r\n </div>\r\n</div>","import {\r\n Component,\r\n effect,\r\n HostListener,\r\n input,\r\n model,\r\n OnInit,\r\n output,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Color } from '../models/colors';\r\n\r\n@Component({\r\n selector: 'chr-modal',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './chr-modal.component.html',\r\n styleUrls: ['./chr-modal.component.scss'],\r\n})\r\nexport class ChrModalComponent<T> implements OnInit {\r\n @ViewChild('dynamicContent', { read: ViewContainerRef })\r\n dynamicContent!: ViewContainerRef;\r\n\r\n /**\r\n * Indique si le modal est ouvert ou fermé.\r\n * @default false\r\n */\r\n isOpen = input<boolean>(false);\r\n\r\n /**\r\n * Indique si le modal doit se fermer lorsque l'utilisateur clique sur le fond.\r\n * @default true\r\n */\r\n closeOnBackdropClick = model<boolean>(true);\r\n\r\n /**\r\n * Indique si le modal doit se fermer lorsque l'utilisateur appuie sur la touche Échap.\r\n * @default true\r\n */\r\n closeOnEscape = model<boolean>(true);\r\n\r\n /**\r\n * Shorthand for closeOnBackdropClick and closeOnEscape\r\n * @default undefined\r\n */\r\n disableClose = input<boolean | undefined>(undefined);\r\n\r\n /**\r\n * Événement émis lorsque le modal doit être fermé.\r\n * @default undefined\r\n */\r\n close = output<any | undefined | null>();\r\n\r\n /**\r\n * Largeur du modal en pourcentage de la largeur de la fenêtre.\r\n */\r\n width = input<number>();\r\n\r\n /**\r\n * Hauteur du modal en pourcentage de la hauteur de la fenêtre.\r\n */\r\n height = input<number>();\r\n\r\n /**\r\n * Fond par défaut du conteneur modal. Par défaut, 'none' pour permettre la personnalisation via CSS avec la classe '.modal-wrapper' ou '.modal-content'.\r\n * @default 'none'\r\n */\r\n background = input<Color>('none');\r\n\r\n constructor() {\r\n // effect(() => {\r\n // console.log(`[ChrModalComponent] width: ${this.width()}`);\r\n // console.log(`[ChrModalComponent] height: ${this.height()}`);\r\n // console.log(`[ChrModalComponent] background: ${this.background()}`);\r\n // });\r\n }\r\n\r\n getDynamicContentContainer(): ViewContainerRef {\r\n return this.dynamicContent;\r\n }\r\n\r\n onBackdropClick(): void {\r\n if (this.closeOnBackdropClick()) {\r\n this.close.emit(undefined);\r\n }\r\n }\r\n\r\n onModalClick(event: Event): void {\r\n // Empêche la propagation du clic pour éviter de fermer le modal\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onEscapeKey(event: KeyboardEvent): void {\r\n if (this.isOpen() && this.closeOnEscape()) {\r\n this.close.emit(undefined);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.disableClose() === false) {\r\n this.closeOnBackdropClick.set(false);\r\n this.closeOnEscape.set(false);\r\n }\r\n if (this.disableClose() === true) {\r\n this.closeOnBackdropClick.set(true);\r\n this.closeOnEscape.set(true);\r\n }\r\n }\r\n}\r\n","<div #modalWrapper class=\"modal-wrapper relative\">\r\n <div class=\"modal-backdrop\" (click)=\"onBackdropClick()\">\r\n </div>\r\n <div class=\"modal-content\" [attr.data-background]=\"background()\" [attr.data-open]=\"isOpen()\"\r\n (click)=\"onModalClick($event)\" [attr.data-width]=\"width()\" [attr.data-height]=\"height()\">\r\n <ng-container #dynamicContent class=\"w-full h-full\"></ng-container>\r\n </div>\r\n</div>","import { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ElementRef,\r\n input,\r\n OnInit,\r\n signal,\r\n Input,\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { SafeHtmlPipe } from 'chrv-pipes';\r\n\r\n@Component({\r\n selector: 'chr-inline-svg',\r\n imports: [SafeHtmlPipe],\r\n templateUrl: './chr-inline-svg.component.html',\r\n styleUrl: './chr-inline-svg.component.css',\r\n})\r\nexport class InlineSvgComponent implements OnInit {\r\n src = input<string>();\r\n class = input<string>();\r\n svgContent = signal<string>('');\r\n height = input('100%', {\r\n transform: (value: number | string) => this.transformWidth(value),\r\n });\r\n width = input('100%', {\r\n transform: (value: number | string) => this.transformWidth(value),\r\n });\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private sanitizer: DomSanitizer,\r\n private el: ElementRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.src()) {\r\n this.http.get(this.src()!, { responseType: 'text' }).subscribe((svg) => {\r\n // remove the class tags\r\n this.svgContent.update((content) => svg);\r\n });\r\n }\r\n }\r\n\r\n transformWidth(value: number | string): string {\r\n if (typeof value === 'number') {\r\n return `${value}px`;\r\n }\r\n return value;\r\n }\r\n}\r\n","<div [style.height]=\"height()\" [style.width]=\"width()\" [innerHTML]=\"svgContent() | safeHtml\"\r\n [attr.class]=\"class() + ' flex items-center justify-center'\">\r\n</div>","import { Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule, UrlTree } from '@angular/router';\r\nimport { InlineSvgComponent } from '../chr-inline-svg/chr-inline-svg.component';\r\n\r\n@Component({\r\n selector: 'chr-nbutton',\r\n imports: [InlineSvgComponent, CommonModule, RouterModule],\r\n templateUrl: './chr-button.component.html',\r\n styleUrl: './chr-button.component.css',\r\n})\r\nexport class ButtonComponent {\r\n /**\r\n * The color of the button.\r\n */\r\n color = input<'primary' | 'secondary' | 'tertiary'>('primary');\r\n /**\r\n * Whether the button is disabled.\r\n */\r\n disabled = input<boolean>(false);\r\n /**\r\n * The text to display on the button.\r\n */\r\n text = input<string | null>(null);\r\n alt = input<string>();\r\n /**\r\n * The icon to display on the button.\r\n */\r\n icon = input<string>();\r\n /**\r\n * The direction of the button.\r\n */\r\n direction = input<'left' | 'right'>('right');\r\n /**\r\n * Whether the button is rounded.\r\n */\r\n rounded = input<boolean>(false);\r\n /**\r\n * The size of the icon.\r\n */\r\n size = input<'small' | 'medium' | 'large'>('medium');\r\n\r\n routerLink = input<string | any[] | UrlTree | null>(null);\r\n\r\n routerLinkActive = input<string | string[]>([]);\r\n\r\n public getWidth(): string {\r\n switch (this.size()) {\r\n case 'small':\r\n return '12px';\r\n case 'medium':\r\n return '24px';\r\n case 'large':\r\n return '.32px';\r\n default:\r\n return '12px';\r\n }\r\n }\r\n}\r\n","<a class=\"w-full h-full flex justify-between items-center align-middle cursor-pointer button\"\r\n [routerLink]=\"routerLink()\" [routerLinkActive]=\"routerLinkActive()\" [ngClass]=\"{\r\n 'flex-row': direction() === 'right',\r\n 'flex-row-reverse': direction() === 'left',\r\n 'bg-primary': color() === 'primary',\r\n 'bg-secondary': color() === 'secondary',\r\n 'bg-tertiary': color() === 'tertiary',\r\n 'rounded-l-md': direction() === 'right',\r\n 'rounded-r-md': direction() === 'left',\r\n '!rounded-full': rounded(),\r\n}\">\r\n <span class=\"link\" [ngClass]=\"{\r\n 'text-primary-contrast': color() === 'primary',\r\n 'text-secondary-contrast': color() === 'secondary',\r\n 'text-tertiary-contrast': color() === 'tertiary',\r\n 'link-primary-contrast': color() === 'primary',\r\n 'link-secondary-contrast': color() === 'secondary',\r\n 'link-tertiary-contrast': color() === 'tertiary',\r\n }\">\r\n @if(text()) {\r\n {{ text() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n <chr-inline-svg [src]=\"icon()\" class=\"h-4 w-4 flex items-center align-middle\" [height]=\"getWidth()\"\r\n [width]=\"getWidth()\" [ngClass]=\"{\r\n 'text-primary-contrast': color() === 'primary',\r\n 'text-secondary-contrast': color() === 'secondary',\r\n 'text-tertiary-contrast': color() === 'tertiary',\r\n 'rotate-180': direction() === 'left',\r\n }\">\r\n </chr-inline-svg>\r\n</a>","import { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n effect,\r\n ElementRef,\r\n HostListener,\r\n Inject,\r\n input,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, debounceTime, interval, Observable } from 'rxjs';\r\nimport { ButtonComponent } from '../chr-button-new/chr-button.component';\r\n\r\n@Component({\r\n selector: 'chr-carousel',\r\n imports: [CommonModule, ButtonComponent],\r\n templateUrl: './chr-carousel.component.html',\r\n styleUrl: './chr-carousel.component.css',\r\n})\r\nexport class CarouselComponent implements AfterContentInit, AfterViewInit {\r\n @ViewChild('container', { read: ElementRef }) containerRef!: ElementRef;\r\n @HostListener('window:resize') onResize() {\r\n this.resizeEvent.next();\r\n }\r\n protected initialized = new BehaviorSubject<boolean>(false);\r\n protected resizeEvent = new BehaviorSubject<void>(undefined);\r\n protected resize = this.resizeEvent.pipe(debounceTime(150));\r\n protected items = signal<HTMLElement[]>([]);\r\n protected pages = signal<number>(0);\r\n\r\n /**\r\n * Whether the selectors should be stacked on top of the carousel body.\r\n * Defaults to true.\r\n */\r\n public stackSelectors = input<boolean>(true);\r\n\r\n /**\r\n * Whether the buttons should be stacked on top of the carousel body.\r\n * Defaults to true.\r\n */\r\n public stackButtons = input<boolean>(true);\r\n\r\n /**\r\n * Whether the carousel should display only one item per page or be dynamic.\r\n * If set to true, the carousel will always show one item per page.\r\n */\r\n public singleItemPerPage = input<boolean>(true);\r\n\r\n public currentIndex = signal<number>(0);\r\n /**\r\n * Whether to show the selectors.\r\n * Defaults to 'Roboto, sans-serif'.\r\n */\r\n public showSelectors = input<boolean>(true);\r\n /**\r\n * Whether to show the next and previous buttons.\r\n * Defaults to true.\r\n */\r\n public showButtons = input<boolean>(true);\r\n /**\r\n * An output event that emits when the user clicks the next button.\r\n */\r\n public onNext = output<number>();\r\n /**\r\n * An output event that emits when the user clicks the previous button.\r\n */\r\n public onPrevious = output<number>();\r\n\r\n /**\r\n * An output event that emits when the user selects a slide with the selector.\r\n */\r\n public onChange = output<number>();\r\n\r\n /**\r\n * An observable that emits a value every `timer` seconds.\r\n * This is used to automatically advance the carousel.\r\n */\r\n public interval: Observable<number> | null = null;\r\n\r\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\r\n effect(() => {\r\n const element = this.items()[this.currentIndex()];\r\n if (!element) return;\r\n element.classList.add('active');\r\n\r\n const siblings = this.items().filter(\r\n (_, index) => index !== this.currentIndex()\r\n );\r\n siblings.forEach((sibling) => {\r\n sibling.classList.remove('active');\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * The time in seconds before the next slide is shown.\r\n * If set to 0, the carousel will not auto-advance.\r\n */\r\n public timer = input<number>(10);\r\n\r\n ngAfterContentInit() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n if (this.timer() <= 0) return;\r\n this.interval = interval(this.timer() * 1000);\r\n this.interval.subscribe(() => {\r\n this.next(false);\r\n });\r\n }\r\n //interval(this.timer() * 1000).subscribe(() => this.next());\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.updatePages();\r\n this.resize.subscribe(() => {\r\n this.updatePages();\r\n });\r\n this.initialized.next(true);\r\n }\r\n }\r\n\r\n public next = (emit: boolean = true) => {\r\n if (this.pages() > 0) {\r\n this.currentIndex.update((index) => (index + 1) % this.pages());\r\n if (emit) this.onNext.emit(this.currentIndex());\r\n }\r\n };\r\n\r\n public prev = () => {\r\n if (this.pages() > 0) {\r\n this.currentIndex.update(\r\n (index) => (index - 1 + this.pages()) % this.pages()\r\n );\r\n this.onPrevious.emit(this.currentIndex());\r\n }\r\n };\r\n\r\n public select = (index: number) => {\r\n if (this.pages() > 0 && index >= 0 && index < this.pages()) {\r\n this.currentIndex.set(index);\r\n this.onChange.emit(index);\r\n }\r\n };\r\n\r\n public updatePages = () => {\r\n const container = this.containerRef.nativeElement as HTMLElement;\r\n const nodes = container.children;\r\n\r\n this.items.set(Array.from(nodes) as HTMLElement[]);\r\n //console.log('Carousel items:', this.items());\r\n const containerWidth = container.offsetWidth;\r\n let usedWidth = 0;\r\n let count = 0;\r\n for (let i = 0; i < this.items().length; i++) {\r\n // console.log(`Item ${i}:`, nodes[i]);\r\n const item = nodes[i] as HTMLElement;\r\n //Item width is the width of the item, plus the margin on both sides\r\n const itemWidth =\r\n item.offsetWidth +\r\n parseFloat(getComputedStyle(item).marginLeft) +\r\n parseFloat(getComputedStyle(item).marginRight);\r\n usedWidth += itemWidth;\r\n }\r\n\r\n this.pages.set(Math.ceil(usedWidth / containerWidth));\r\n };\r\n\r\n public arrayFrom = (length: number): number[] => {\r\n return Array.from({ length }, (_, i) => i);\r\n };\r\n}\r\n","@if (currentIndex() >= 0) {\r\n<div class=\"relative flex items-center justify-center w-full h-full\">\r\n <!-- Previous button -->\r\n @if (showButtons()) {\r\n <chr-button (click)=\"prev()\" icon=\"assets/icons/misc/arrow-right.svg\" [ngClass]=\"{\r\n 'absolute left-0 top-1/2 transform -translate-y-1/2': stackButtons(),\r\n 'static mr-4': !stackButtons()\r\n }\" class=\"flex h-24 w-8 z-10\" direction=\"left\" color=\"tertiary\"></chr-button>\r\n }\r\n <!-- Carousel content -->\r\n <div class=\"flex flex-col items-center w-full h-full relative overflow-hidden\">\r\n <div class=\"carousel-viewport w-full h-full relative z-0\">\r\n <div #container class=\"carousel-track flex transition-transform duration-500 w-full h-full\"\r\n [ngClass]=\"{'appearance-effect': singleItemPerPage()}\"\r\n [style.transform]=\"'translateX(-' + (currentIndex() * 100) + '%)'\">\r\n <!-- <div #item *ngFor=\"let template of templates; let i = index\" class=\"carousel-slide w-full h-full \">\r\n <ng-container *ngTemplateOutlet=\"template\" class=\"relative\"></ng-container>\r\n </div> -->\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <!-- Carousel item selector -->\r\n @if (showSelectors()) {\r\n <div [ngClass]=\"{\r\n 'absolute bottom-2 left-1/2 transform -translate-x-1/2': stackSelectors(),\r\n 'static mt-4': !stackSelectors(),\r\n }\" class=\"flex items-center max-w-1/2\">\r\n <!-- <button *ngFor=\"let template of templates; let i = index\"\r\n class=\"inline-block w-9 h-2 mx-1 rounded-full selector\" (click)=\"select(i)\"\r\n [class.active]=\"currentIndex() === i\"></button> -->\r\n @for (element of arrayFrom(pages()); track element; let i = $index) {\r\n <button class=\"inline-block w-9 h-2 mx-1 rounded-full selector z-10\" (click)=\"select(i)\"\r\n [class.active]=\"currentIndex() === i\"></button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- Next buttons -->\r\n @if (showButtons()) {\r\n <chr-button (click)=\"next()\" icon=\"assets/icons/misc/arrow-right.svg\" [ngClass]=\"{\r\n 'absolute right-0 top-1/2 transform -translate-y-1/2': stackButtons(),\r\n 'static ml-4': !stackButtons()\r\n }\" class=\"flex h-24 w-8 z-10\" direction=\"right\" color=\"tertiary\"></chr-button>\r\n }\r\n</div>\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'chr-dropdown',\r\n imports: [CommonModule, MatIcon],\r\n templateUrl: './chr-dropdown.component.html',\r\n styleUrls: [\r\n './chr-dropdown.component.css',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class ChrDropdownComponent {\r\n public isOpen = model(false);\r\n public title = input.required<string>();\r\n\r\n private children = viewChildren<ElementRef>('content');\r\n\r\n public hasContent = computed(() => {\r\n return this.children()[0]?.nativeElement?.childNodes?.length > 0;\r\n });\r\n}\r\n","<div class=\"flex flex-col h-auto w-full p-2 dropdown-wrapper cursor-pointer\" (click)=\"isOpen.set(!isOpen())\"\r\n [attr.data-empty]=\"!hasContent()\">\r\n <div class=\"flex flex-row justify-between items-center dropdown-title-wrapper\">\r\n <h3 class=\"w-5/6 dropdown-title flex items-center\">{{title()}}</h3>\r\n <mat-icon class=\"icon dropdown-icon\" [attr.data-active]=\"isOpen()\">keyboard_arrow_right</mat-icon>\r\n </div>\r\n <div class=\"content-wrapper\" [attr.data-open]=\"isOpen()\">\r\n <div class=\"content\" #content (click)=\"$event.stopPropagation()\">\r\n <ng-content />\r\n </div>\r\n </div>\r\n</div>","export interface IMinimumColumnMetadata {\r\n tableSchema: string;\r\n tableName: string;\r\n columnName: string;\r\n columnDefault?: string | null;\r\n ordinalPosition: number;\r\n dataType: string;\r\n length: number;\r\n scale?: number | null;\r\n isNullable: boolean;\r\n isIdentity: boolean;\r\n isGenerated: boolean;\r\n isUpdatable: boolean;\r\n get tooltip(): string;\r\n}\r\n\r\nexport interface IDB2ColumnMetadata extends IMinimumColumnMetadata {\r\n tableCatalog: string;\r\n // labels: {\r\n // columnHeading?: string | null;\r\n // columnText?: string | null;\r\n // systemColumnName: string;\r\n // columnName: string;\r\n // tableName: string;\r\n // tableShema: string;\r\n // };\r\n columnHeading?: string | null;\r\n columnText?: string | null;\r\n longComment?: string | null;\r\n maxLength?: number | null;\r\n minLength?: number | null;\r\n characterMaximumLength?: number | null;\r\n characterOctetLength?: number | null;\r\n characterMinLength?: number | null;\r\n numericPrecision?: number | null;\r\n numericPrecisionRadix?: number | null;\r\n numericScale?: number | null;\r\n dateTimePrecision?: number | null;\r\n // characterSetCatalog?: string | null;\r\n // characterSetSchema?: string | null;\r\n // characterSetName?: string | null;\r\n // collationCatalog?: string | null;\r\n // collationSchema?: string | null;\r\n // collationName?: string | null;\r\n // domainCatalog?: string | null;\r\n // domainSchema?: string | null;\r\n // domainName?: string | null;\r\n // udtCatalog?: string | null;\r\n // udtSchema?: string | null;\r\n // udtName?: string | null;\r\n // scopeCatalog?: string | null;\r\n // scopeSchema?: string | null;\r\n // scopeName?: string | null;\r\n // maximumCardinality?: number | null;\r\n // dtdIdentifier: string;\r\n // isSelfReferencing: boolean;\r\n identityGeneration?: string | null;\r\n identityStart?: string | null;\r\n identityIncrement?: string | null;\r\n identityMaximum?: string | null;\r\n identityMinimum?: string | null;\r\n identityCycle?: string | null;\r\n // generationExpression?: string | null;\r\n // isSystemTimePeriodStart: boolean;\r\n // isSystemTimePeriodEnd: boolean;\r\n // systemTimePeriodTimestampGeneration?: string | null;\r\n // declaredDataType: string;\r\n // declaredNumericPrecision?: number | null;\r\n // declaredNumericScale?: number | null;\r\n}\r\n\r\nexport class ColumnMetadata implements IDB2ColumnMetadata {\r\n tableCatalog: string;\r\n tableSchema: string;\r\n tableName: string;\r\n columnName: string;\r\n // labels: {\r\n // columnHeading?: string | null;\r\n // columnText?: string | null;\r\n // systemColumnName: string;\r\n // columnName: string;\r\n // tableName: string;\r\n // tableShema: string;\r\n // };\r\n columnHeading?: string | null;\r\n columnText?: string | null;\r\n longComment?: string | null;\r\n ordinalPosition: number;\r\n columnDefault?: string | null;\r\n isNullable: boolean;\r\n dataType: string;\r\n maxLength?: number | null;\r\n minLength?: number | null;\r\n length: number;\r\n scale?: number | null;\r\n characterMaximumLength?: number | null;\r\n characterOctetLength?: number | null;\r\n characterMinLength?: number | null;\r\n numericPrecision?: number | null;\r\n numericPrecisionRadix?: number | null;\r\n numericScale?: number | null;\r\n dateTimePrecision?: number | null;\r\n // characterSetCatalog?: string | null;\r\n // characterSetSchema?: string | null;\r\n // characterSetName?: string | null;\r\n // collationCatalog?: string | null;\r\n // collationSchema?: string | null;\r\n // collationName?: string | null;\r\n // domainCatalog?: string | null;\r\n // domainSchema?: string | null;\r\n // domainName?: string | null;\r\n // udtCatalog?: string | null;\r\n // udtSchema?: string | null;\r\n // udtName?: string | null;\r\n // scopeCatalog?: string | null;\r\n // scopeSchema?: string | null;\r\n // scopeName?: string | null;\r\n // maximumCardinality?: number | null;\r\n // dtdIdentifier: string;\r\n // isSelfReferencing: boolean;\r\n isIdentity: boolean;\r\n identityGeneration?: string | null;\r\n identityStart?: string | null;\r\n identityIncrement?: string | null;\r\n identityMaximum?: string | null;\r\n identityMinimum?: string | null;\r\n identityCycle?: string | null;\r\n isGenerated: boolean;\r\n // generationExpression?: string | null;\r\n // isSystemTimePeriodStart: boolean;\r\n // isSystemTimePeriodEnd: boolean;\r\n // systemTimePeriodTimestampGeneration?: string | null;\r\n isUpdatable: boolean;\r\n // declaredDataType: string;\r\n // declaredNumericPrecision?: number | null;\r\n // declaredNumericScale?: number | null;\r\n\r\n constructor(data: Partial<ColumnMetadata> = {}) {\r\n this.tableCatalog = data.tableCatalog || '';\r\n this.tableSchema = data.tableSchema || '';\r\n this.tableName = data.tableName || '';\r\n this.columnName = data.columnName || '';\r\n // this.labels = data.labels || {\r\n // systemColumnName: this.columnName,\r\n // columnHeading: null,\r\n // columnText: null,\r\n // columnName: this.columnName,\r\n // tableName: this.tableName,\r\n // tableShema: this.tableSchema,\r\n // };\r\n this.columnHeading = data.columnHeading || null;\r\n this.columnText = data.columnText || null;\r\n this.longComment = data.longComment || null;\r\n this.ordinalPosition = data.ordinalPosition || 0;\r\n this.columnDefault = data.columnDefault || null;\r\n this.isNullable =\r\n data.isNullable === undefined ? false : Boolean(data.isNullable);\r\n this.dataType = data.dataType || '';\r\n this.maxLength = data.maxLength || null;\r\n this.minLength = data.minLength || null;\r\n this.characterMaximumLength = data.characterMaximumLength || null;\r\n this.characterOctetLength = data.characterOctetLength || null;\r\n this.characterMinLength = data.characterMinLength || null;\r\n this.length =\r\n data.maxLength ||\r\n data.characterMaximumLength ||\r\n data.length ||\r\n data.numericPrecision ||\r\n 0;\r\n this.numericPrecision = data.numericPrecision || null;\r\n this.numericPrecisionRadix = data.numericPrecisionRadix || null;\r\n this.numericScale = data.numericScale || 0;\r\n this.scale = (data.numericScale || data.scale || this.numericScale) ?? 0;\r\n this.dateTimePrecision = data.dateTimePrecision || 0;\r\n // this.characterSetCatalog = data.characterSetCatalog || null;\r\n // this.characterSetSchema = data.characterSetSchema || null;\r\n // this.characterSetName = data.characterSetName || null;\r\n // this.collationCatalog = data.collationCatalog || null;\r\n // this.collationSchema = data.collationSchema || null;\r\n // this.collationName = data.collationName || null;\r\n // this.domainCatalog = data.domainCatalog || null;\r\n // this.domainSchema = data.domainSchema || null;\r\n // this.domainName = data.domainName || null;\r\n // this.udtCatalog = data.udtCatalog || null;\r\n // this.udtSchema = data.udtSchema || null;\r\n // this.udtName = data.udtName || null;\r\n // this.scopeCatalog = data.scopeCatalog || null;\r\n // this.scopeSchema = data.scopeSchema || null;\r\n // this.scopeName = data.scopeName || null;\r\n // this.maximumCardinality = data.maximumCardinality || null;\r\n // this.dtdIdentifier = data.dtdIdentifier || '';\r\n // this.isSelfReferencing =\r\n // data.isSelfReferencing === undefined\r\n // ? false\r\n // : Boolean(data.isSelfReferencing);\r\n this.isIdentity =\r\n data.isIdentity === undefined ? false : Boolean(data.isIdentity);\r\n this.identityGeneration = data.identityGeneration || null;\r\n this.identityStart = data.identityStart || null;\r\n this.identityIncrement = data.identityIncrement || null;\r\n this.identityMaximum = data.identityMaximum || null;\r\n this.identityMinimum = data.identityMinimum || null;\r\n this.identityCycle = data.identityCycle || null;\r\n this.isGenerated =\r\n data.isGenerated === undefined ? false : Boolean(data.isGenerated);\r\n // this.generationExpression = data.generationExpression || null;\r\n // this.isSystemTimePeriodStart =\r\n // data.isSystemTimePeriodStart === undefined\r\n // ? false\r\n // : Boolean(data.isSystemTimePeriodStart);\r\n // this.isSystemTimePeriodEnd =\r\n // data.isSystemTimePeriodEnd === undefined\r\n // ? false\r\n // : Boolean(data.isSystemTimePeriodEnd);\r\n // this.systemTimePeriodTimestampGeneration =\r\n // data.systemTimePeriodTimestampGeneration || null;\r\n this.isUpdatable =\r\n data.isUpdatable === undefined ? false : Boolean(data.isUpdatable);\r\n // this.declaredDataType = data.declaredDataType || '';\r\n // this.declaredNumericPrecision = data.declaredNumericPrecision || null;\r\n // this.declaredNumericScale = data.declaredNumericScale || null;\r\n }\r\n\r\n get fullTableName(): string {\r\n return `${this.tableSchema}.${this.tableName}`;\r\n }\r\n\r\n get tooltip(): string {\r\n const parts: string[] = [];\r\n if (this.dataType) {\r\n parts.push(\r\n `Type: ${this.dataType} ${\r\n this.length\r\n ? `(${this.length}${this.scale ? `, ${this.scale}` : ''})`\r\n : ''\r\n }`\r\n );\r\n }\r\n if (this.columnHeading) {\r\n parts.push(`Heading: ${this.columnHeading}`);\r\n }\r\n if (this.columnText) {\r\n parts.push(`Text: ${this.columnText}`);\r\n }\r\n if (this.longComment) {\r\n parts.push(`Comment: ${this.longComment}`);\r\n }\r\n return parts.join(' | ');\r\n }\r\n}\r\n","import {\r\n ITableConstraintColumn,\r\n TableConstraintColumn,\r\n} from './TableConstraintColumn.model';\r\n\r\nexport interface ITableConstraintReference {\r\n constraintSchema: string;\r\n systemConstraintSchema: string;\r\n constraintName: string;\r\n uniqueConstraintSchema: string;\r\n systemUniqueConstraintSchema: string;\r\n uniqueConstraintName: string;\r\n columnCount: number;\r\n thisKey: ITableConstraintColumn;\r\n otherKey: ITableConstraintColumn;\r\n}\r\n\r\nexport class TableConstraintReference implements ITableConstraintReference {\r\n constraintSchema: string;\r\n systemConstraintSchema: string;\r\n constraintName: string;\r\n uniqueConstraintSchema: string;\r\n systemUniqueConstraintSchema: string;\r\n uniqueConstraintName: string;\r\n columnCount: number;\r\n thisKey: TableConstraintColumn;\r\n otherKey: TableConstraintColumn;\r\n\r\n constructor(data: Partial<TableConstraintReference> = {}) {\r\n this.constraintSchema = data.constraintSchema || '';\r\n this.systemConstraintSchema = data.systemConstraintSchema || '';\r\n this.constraintName = data.constraintName || '';\r\n this.uniqueConstraintSchema = data.uniqueConstraintSchema || '';\r\n this.systemUniqueConstraintSchema = data.systemUniqueConstraintSchema || '';\r\n this.uniqueConstraintName = data.uniqueConstraintName || '';\r\n this.columnCount = data.columnCount || 0;\r\n this.thisKey = data.thisKey\r\n ? new TableConstraintColumn(data.thisKey)\r\n : (null as any);\r\n this.otherKey = data.otherKey\r\n ? new TableConstraintColumn(data.otherKey)\r\n : (null as any);\r\n }\r\n}\r\n","import {\r\n ITableConstraintReference,\r\n TableConstraintReference,\r\n} from './TableConstraintReference.model';\r\n\r\nexport interface IMinimumTableConstraintColumn {\r\n constraintName: string;\r\n tableName: string;\r\n columnName: string;\r\n}\r\n\r\nexport interface ITableConstraintColumn extends IMinimumTableConstraintColumn {\r\n systemConstraintSchema: string;\r\n constraintSchema: string;\r\n systemTableName: string;\r\n tableSchema: string;\r\n systemTableSchema: string;\r\n systemColumnName: string;\r\n reference: ITableConstraintReference | null;\r\n}\r\n\r\nexport class TableConstraintColumn implements ITableConstraintColumn {\r\n constraintSchema: string;\r\n systemConstraintSchema: string;\r\n constraintName: string;\r\n tableName: string;\r\n systemTableName: string;\r\n tableSchema: string;\r\n systemTableSchema: string;\r\n columnName: string;\r\n systemColumnName: string;\r\n reference: TableConstraintReference | null;\r\n\r\n constructor(data: Partial<TableConstraintColumn> = {}) {\r\n this.constraintSchema = data.constraintSchema || '';\r\n this.systemConstraintSchema = data.systemConstraintSchema || '';\r\n this.constraintName = data.constraintName || '';\r\n this.tableName = data.tableName || '';\r\n this.systemTableName = data.systemTableName || '';\r\n this.tableSchema = data.tableSchema || '';\r\n this.systemTableSchema = data.systemTableSchema || '';\r\n this.columnName = data.columnName || '';\r\n this.systemColumnName = data.systemColumnName || '';\r\n this.reference = data.reference\r\n ? new TableConstraintReference(data.reference)\r\n : null;\r\n }\r\n}\r\n","import {\r\n IMinimumTableConstraintColumn,\r\n ITableConstraintColumn,\r\n TableConstraintColumn,\r\n} from './TableConstraintColumn.model';\r\n\r\nexport interface IMinimumTableConstraint {\r\n constraintSchema: string;\r\n constraintName: string;\r\n constraintType: string | 'PRIMARY KEY' | 'FOREIGN KEY' | 'UNIQUE' | 'CHECK';\r\n tableName: string;\r\n columns: IMinimumTableConstraintColumn[];\r\n}\r\n\r\nexport interface ITableConstraint extends IMinimumTableConstraint {\r\n constraintCatalog: string;\r\n tableCatalog: string;\r\n tableSchema: string;\r\n columns: ITableConstraintColumn[];\r\n}\r\n\r\nexport class TableConstraint implements ITableConstraint {\r\n constraintCatalog: string;\r\n constraintSchema: string;\r\n constraintName: string;\r\n constraintType: string | 'PRIMARY KEY' | 'FOREIGN KEY' | 'UNIQUE' | 'CHECK';\r\n tableCatalog: string;\r\n tableName: string;\r\n tableSchema: string;\r\n columns: TableConstraintColumn[] = [];\r\n\r\n constructor(data: Partial<TableConstraint> = {}) {\r\n this.constraintCatalog = data.constraintCatalog || '';\r\n this.constraintSchema = data.constraintSchema || '';\r\n this.constraintName = data.constraintName || '';\r\n this.constraintType = data.constraintType || '';\r\n this.tableCatalog = data.tableCatalog || '';\r\n this.tableName = data.tableName || '';\r\n this.tableSchema = data.tableSchema || '';\r\n this.columns = data.columns\r\n ? data.columns.map((d) => new TableConstraintColumn(d))\r\n : [];\r\n }\r\n\r\n fullTableName(): string {\r\n return `${this.tableSchema}.${this.tableName}`;\r\n }\r\n\r\n fullConstraintName(): string {\r\n return `${this.constraintSchema}.${this.constraintName}`;\r\n }\r\n\r\n isPrimaryKey(): boolean {\r\n return this.constraintType === 'PRIMARY KEY';\r\n }\r\n\r\n isForeignKey(): boolean {\r\n return this.constraintType === 'FOREIGN KEY';\r\n }\r\n\r\n isUnique(): boolean {\r\n return this.constraintType === 'UNIQUE';\r\n }\r\n\r\n isCheck(): boolean {\r\n return this.constraintType === 'CHECK';\r\n }\r\n}\r\n","import {\r\n ColumnMetadata,\r\n IDB2ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from './ColumnMetadata.model';\r\nimport {\r\n IMinimumTableConstraint,\r\n TableConstraint,\r\n} from './TableConstraint.model';\r\n\r\nexport interface IAnonymousTable {\r\n catalog: string;\r\n schema: string;\r\n name: string;\r\n columnMetadatas: ColumnMetadata[];\r\n tableConstraints: TableConstraint[];\r\n hasPrimaryKey: boolean;\r\n rows: any[];\r\n count: number;\r\n total: number;\r\n}\r\n\r\nexport interface IDataTable {\r\n name: string;\r\n schema: string;\r\n rows: any[];\r\n count: number;\r\n\r\n addRow(row: any): any;\r\n updateRow(row: any): boolean;\r\n removeRow(row: any): boolean;\r\n getRowIdentifier(row: any): string;\r\n compareRows(row1: any, row2: any): boolean;\r\n primaryKeyColumns(): IMinimumColumnMetadata[];\r\n getColumnByName(columnName: string): IMinimumColumnMetadata | undefined;\r\n getConstraintsByType(type: string): IMinimumTableConstraint[];\r\n}\r\n\r\nexport abstract class BaseTable implements IDataTable {\r\n abstract name: string;\r\n abstract schema: string;\r\n abstract columnMetadatas: IMinimumColumnMetadata[];\r\n abstract tableConstraints: IMinimumTableConstraint[];\r\n abstract hasPrimaryKey: boolean;\r\n abstract rows: any[];\r\n abstract count: number;\r\n\r\n abstract getRowIdentifier(row: any): string;\r\n abstract primaryKeyColumns(): IMinimumColumnMetadata[];\r\n\r\n public addRow(row: any): any {\r\n this.rows.push(row);\r\n this.count += 1;\r\n return row;\r\n }\r\n\r\n public updateRow(row: any): boolean {\r\n const index = this.rows.findIndex((r) => this.compareRows(r, row));\r\n if (index !== -1) {\r\n this.rows[index] = row;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public removeRow(row: any): boolean {\r\n const index = this.rows.findIndex((r) => this.compareRows(r, row));\r\n if (index !== -1) {\r\n this.rows.splice(index, 1);\r\n this.count -= 1;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public compareRows(row1: any, row2: any): boolean {\r\n return JSON.stringify(row1) === JSON.stringify(row2);\r\n }\r\n\r\n public getColumnByName(\r\n columnName: string\r\n ): IMinimumColumnMetadata | IDB2ColumnMetadata | any | undefined {\r\n return this.columnMetadatas.find((cmd) => cmd.columnName === columnName);\r\n }\r\n\r\n public getConstraintsByType(type: string): IMinimumTableConstraint[] {\r\n return this.tableConstraints.filter((tc) => tc.constraintType === type);\r\n }\r\n}\r\n\r\nexport class AnonymousTable\r\n extends BaseTable\r\n implements IAnonymousTable, IDataTable\r\n{\r\n catalog: string;\r\n schema: string;\r\n name: string;\r\n columnMetadatas: ColumnMetadata[];\r\n tableConstraints: TableConstraint[];\r\n hasPrimaryKey: boolean;\r\n rows: any[];\r\n count: number;\r\n total: number;\r\n\r\n constructor(data: IAnonymousTable) {\r\n super();\r\n this.catalog = data.catalog;\r\n this.schema = data.schema;\r\n this.name = data.name;\r\n this.columnMetadatas = data.columnMetadatas\r\n ? data.columnMetadatas\r\n .map((d) => new ColumnMetadata(d))\r\n .sort((a, b) => a.ordinalPosition - b.ordinalPosition)\r\n : [];\r\n this.tableConstraints = data.tableConstraints\r\n ? data.tableConstraints.map((d) => new TableConstraint(d))\r\n : [];\r\n this.hasPrimaryKey =\r\n data.hasPrimaryKey === undefined ? false : Boolean(data.hasPrimaryKey);\r\n this.rows = data.rows || [];\r\n this.count = data.count || 0;\r\n this.total = data.total || 0;\r\n }\r\n\r\n public fullName(): string {\r\n return `${this.schema}.${this.name}`;\r\n }\r\n\r\n public primaryKeyColumns(): ColumnMetadata[] {\r\n const pkColumns = this.tableConstraints.filter((tc) =>\r\n tc.isPrimaryKey()\r\n )?.[0]?.columns;\r\n if (!pkColumns || pkColumns.length === 0) {\r\n const rn = this.columnMetadatas.find(\r\n (cmd) => cmd.columnName === 'ROW_NUMBER'\r\n );\r\n return rn ? [rn] : [];\r\n }\r\n return this.columnMetadatas.filter((cmd) =>\r\n pkColumns?.some((pc) => pc.columnName === cmd.columnName)\r\n );\r\n }\r\n\r\n public getRowIdentifier(row: any): string {\r\n if (row.ROW_NUMBER !== undefined) {\r\n return `ROW_NUMBER:${row.ROW_NUMBER}`;\r\n }\r\n const pkColumns = this.primaryKeyColumns();\r\n if (this.hasPrimaryKey && pkColumns.length > 0) {\r\n return pkColumns\r\n .map((pc) => `${pc.columnName}:${row[pc.columnName]}`)\r\n .join('|');\r\n }\r\n return JSON.stringify(row);\r\n }\r\n\r\n public override compareRows(row1: any, row2: any): boolean {\r\n if (row1.ROW_NUMBER !== undefined && row2.ROW_NUMBER !== undefined) {\r\n return row1.ROW_NUMBER === row2.ROW_NUMBER;\r\n }\r\n\r\n const pkColumns = this.primaryKeyColumns();\r\n if (this.hasPrimaryKey && pkColumns.length > 0) {\r\n return pkColumns.every(\r\n (pc) => row1[pc.columnName] === row2[pc.columnName]\r\n );\r\n }\r\n\r\n return super.compareRows(row1, row2);\r\n }\r\n\r\n public override addRow(row: any): any {\r\n row.ROW_NUMBER = this.generateTempRowIdentifier();\r\n return super.addRow(row);\r\n }\r\n\r\n public generateTempRowIdentifier(): any {\r\n return crypto.randomUUID();\r\n }\r\n}\r\n","import { formatNumber } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\n\r\nexport class CharacterFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n canFormat = (value: any, dataType?: string): boolean => {\r\n const type = dataType?.toUpperCase();\r\n return (\r\n type === 'CHARACTER' ||\r\n type === 'CHAR' ||\r\n type === 'CHARACTER VARYING' ||\r\n type === 'VARCHAR'\r\n );\r\n };\r\n\r\n format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format?: string\r\n ): string | null => {\r\n if (value === null || value === undefined) {\r\n if (metadata?.isNullable) return null;\r\n return '';\r\n }\r\n return String(value);\r\n };\r\n\r\n canEdit = (value: any, metadata: IMinimumColumnMetadata): boolean => {\r\n return (\r\n this.canFormat(value, metadata.dataType) &&\r\n metadata.isUpdatable &&\r\n metadata.isIdentity === false\r\n );\r\n };\r\n\r\n getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n return 'text';\r\n };\r\n\r\n parseValue = (inputValue: string): any => {\r\n return inputValue;\r\n };\r\n\r\n validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n if (value === null || value === undefined) {\r\n return metadata.isNullable ||\r\n (metadata.columnDefault !== null &&\r\n metadata.columnDefault !== undefined)\r\n ? { isValid: true }\r\n : { isValid: false, errorMessage: 'Value cannot be null' };\r\n }\r\n if (typeof value === 'string') {\r\n if (metadata.length && metadata.length < value.length)\r\n return {\r\n isValid: false,\r\n errorMessage: `Value exceeds maximum length of ${metadata.length}`,\r\n };\r\n\r\n // if (metadata.minLength && metadata.minLength > value.length)\r\n // return {\r\n // isValid: false,\r\n // errorMessage: `Value is below minimum length of ${metadata.minLength}`,\r\n // };\r\n\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Not a string' };\r\n };\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\nexport class DateFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n canFormat = (value: any, dataType?: string): boolean => {\r\n const type = dataType?.toUpperCase();\r\n return (\r\n type === 'TIMESTAMP' ||\r\n type === 'TIMESTMP' ||\r\n type === 'DATE' ||\r\n type === 'TIME'\r\n );\r\n };\r\n\r\n format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format: string | null = null\r\n ): string | null => {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n const formatted = formatDate(value, format || 'dd/MM/yyyy', this.locale);\r\n return formatted;\r\n };\r\n\r\n canEdit = (value: any, metadata: IMinimumColumnMetadata): boolean => {\r\n return this.canFormat(value, metadata.dataType);\r\n };\r\n\r\n getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n switch (metadata.dataType?.toUpperCase()) {\r\n case 'TIMESTAMP':\r\n case 'TIMESTMP':\r\n return 'datetime-local';\r\n case 'TIME':\r\n return 'time';\r\n case 'DATE':\r\n default:\r\n return 'date';\r\n }\r\n };\r\n\r\n parseValue = (inputValue: string): any => {\r\n const date = new Date(inputValue);\r\n return isNaN(date.getTime()) ? null : date;\r\n };\r\n\r\n validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n if (value === null || value === undefined) {\r\n return metadata.isNullable ||\r\n (metadata.columnDefault !== null &&\r\n metadata.columnDefault !== undefined)\r\n ? { isValid: true }\r\n : { isValid: false, errorMessage: 'Value cannot be null' };\r\n }\r\n\r\n if (value instanceof Date && !isNaN(value.getTime())) {\r\n return { isValid: true };\r\n }\r\n const date = new Date(value);\r\n if (date instanceof Date && !isNaN(date.getTime())) {\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Invalid date' };\r\n };\r\n}\r\n","import { formatNumber } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\n\r\nexport class NumberFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n canFormat(value: any, dataType?: string): boolean {\r\n const type = dataType?.toUpperCase();\r\n return (\r\n type === 'INTEGER' ||\r\n type === 'FLOAT' ||\r\n type === 'DOUBLE' ||\r\n type === 'DOUBLE PRECISION' ||\r\n type === 'SMALLINT' ||\r\n type === 'BIGINT' ||\r\n type === 'DECIMAL' ||\r\n type === 'NUMERIC'\r\n );\r\n }\r\n\r\n format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format?: string\r\n ): string | null => {\r\n if (typeof value !== 'number') {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n return String(value);\r\n }\r\n\r\n return formatNumber(value, this.locale, format || '1.0-2');\r\n };\r\n\r\n canEdit = (value: any, metadata: IMinimumColumnMetadata): boolean => {\r\n return (\r\n this.canFormat(value, metadata.dataType) &&\r\n metadata.isUpdatable &&\r\n metadata.isIdentity === false\r\n );\r\n };\r\n getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n return 'number';\r\n };\r\n\r\n parseValue = (inputValue: string): any => {\r\n const parsed = parseFloat(inputValue);\r\n return isNaN(parsed) ? null : parsed;\r\n };\r\n\r\n validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n if (value === null || value === undefined) {\r\n return metadata.isNullable ||\r\n (metadata.columnDefault !== null &&\r\n metadata.columnDefault !== undefined)\r\n ? { isValid: true }\r\n : { isValid: false, errorMessage: 'Value cannot be null' };\r\n }\r\n value = Number(value);\r\n if (typeof value === 'number' && !isNaN(value)) {\r\n const stringnumber = value.toString().replace(/\\d/, '');\r\n if (stringnumber.length > (metadata.length || Infinity)) {\r\n return {\r\n isValid: false,\r\n errorMessage: `Number exceeds maximum precision of ${metadata.length}`,\r\n };\r\n }\r\n if (\r\n metadata.scale !== null &&\r\n metadata.scale !== undefined &&\r\n metadata.dataType !== 'FLOAT' &&\r\n metadata.dataType !== 'DOUBLE'\r\n ) {\r\n const parts = stringnumber.split('.');\r\n if (parts.length === 2 && parts[1].length > metadata.scale) {\r\n return {\r\n isValid: false,\r\n errorMessage: `Number exceeds maximum scale of ${metadata.scale}`,\r\n };\r\n }\r\n }\r\n\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Invalid number' };\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IMinimumColumnMetadata } from '../models/ColumnMetadata.model';\r\nimport { CharacterFormatter } from '../models/formatters/character.formatter';\r\nimport { DateFormatter } from '../models/formatters/date.formatter';\r\nimport { IFormatter } from '../models/formatters/formatter.interface';\r\nimport { NumberFormatter } from '../models/formatters/number.formatter';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DataFormatterService {\r\n private formatters: IFormatter[] = [\r\n new DateFormatter(),\r\n new NumberFormatter(),\r\n new CharacterFormatter(),\r\n ];\r\n\r\n constructor() {}\r\n\r\n public setFormatters(formatters: IFormatter[]) {\r\n this.formatters = formatters;\r\n }\r\n\r\n public registerFormatter(formatter: IFormatter) {\r\n this.formatters.push(formatter);\r\n }\r\n\r\n public getFormatter = (\r\n value: any,\r\n columnMetadata?: IMinimumColumnMetadata | null\r\n ): IFormatter | null => {\r\n const formatter = this.formatters.find((f) =>\r\n f.canFormat(value, columnMetadata?.dataType)\r\n );\r\n return formatter || null;\r\n };\r\n\r\n public validateRow(\r\n row: any,\r\n columnMetadatas: IMinimumColumnMetadata[]\r\n ): boolean {\r\n for (const column of columnMetadatas) {\r\n if (column.isIdentity || column.isGenerated || !column.isUpdatable)\r\n continue;\r\n const value = row[column.columnName];\r\n const formatter = this.getFormatter(value, column);\r\n if (formatter) {\r\n const validationResult = formatter.validateValue?.(value, column);\r\n if (!validationResult?.isValid) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Directive, inject, ElementRef, output, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[CrossCellNavigation]',\r\n host: {\r\n '(keydown.tab)': 'onTab($event)',\r\n '(keydown.shift.tab)': 'onShiftTab($event)',\r\n },\r\n})\r\nexport class CrossCellNavigationDirective {\r\n private elementRef = inject(ElementRef);\r\n\r\n public allowNavigation = input<boolean>(true);\r\n\r\n public navigateNext = output<void>();\r\n public navigatePrevious = output<void>();\r\n public navigateAway = output<void>();\r\n\r\n public onTab(event: Event) {\r\n event.preventDefault();\r\n if (this.allowNavigation()) this.navigateToNextCell();\r\n }\r\n\r\n public onShiftTab(event: Event) {\r\n event.preventDefault();\r\n if (this.allowNavigation()) this.navigateToPreviousCell();\r\n }\r\n\r\n private navigateToNextCell() {\r\n this.navigateNext.emit();\r\n this.navigateAway.emit();\r\n\r\n const currentCell = this.elementRef.nativeElement.closest('td');\r\n let nextCell = currentCell?.nextElementSibling;\r\n //console.log('navigating to next cell', nextCell);\r\n if (!nextCell) {\r\n const currentRow = currentCell?.closest('tr');\r\n const nextRow = currentRow?.nextElementSibling as HTMLTableRowElement;\r\n nextCell = nextRow?.querySelector('td');\r\n }\r\n\r\n if (nextCell) {\r\n this.activateEditableCell(nextCell);\r\n }\r\n }\r\n\r\n private navigateToPreviousCell() {\r\n this.navigatePrevious.emit();\r\n this.navigateAway.emit();\r\n\r\n const currentCell = this.elementRef.nativeElement.closest('td');\r\n let previousCell = currentCell?.previousElementSibling;\r\n if (!previousCell) {\r\n const currentRow = currentCell?.closest('tr');\r\n const nextRow = currentRow?.previousElementSibling as HTMLTableRowElement;\r\n const nextRowCells = nextRow?.querySelectorAll('td');\r\n previousCell = nextRowCells[nextRowCells.length - 1];\r\n }\r\n\r\n if (previousCell) {\r\n this.activateEditableCell(previousCell);\r\n }\r\n }\r\n\r\n private activateEditableCell(cell: Element) {\r\n const editableCell = cell.querySelector(\r\n 'app-editable-cell, chr-editable-cell'\r\n );\r\n const firstChild = editableCell?.childNodes[0] as HTMLElement;\r\n\r\n if (firstChild) {\r\n firstChild.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));\r\n firstChild.dispatchEvent(new Event('validate', { bubbles: true }));\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../../models/ColumnMetadata.model';\r\nimport { BehaviorSubject, debounceTime, take } from 'rxjs';\r\nimport { IFormatter } from '../../models/formatters/formatter.interface';\r\nimport { CrossCellNavigationDirective } from '../../directives/cross-cell-navigation.directive';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\n\r\n@Component({\r\n selector: 'chr-editable-cell',\r\n imports: [CrossCellNavigationDirective],\r\n templateUrl: './editable-cell.html',\r\n styleUrl: './editable-cell.scss',\r\n})\r\nexport class EditableCell implements OnInit, OnDestroy {\r\n public readonly formatterService = inject(DataFormatterService);\r\n private initialValue = signal<any>(null);\r\n public allowUpdate = input<boolean>(false);\r\n public isTouched = signal(false);\r\n public hasChanged = signal(false);\r\n public formatter = signal<IFormatter | null>(null);\r\n private inputRef = viewChild<ElementRef>('inputElement');\r\n public input = computed(\r\n () => this.inputRef()?.nativeElement as HTMLInputElement | null\r\n );\r\n\r\n private spanRef = viewChild<ElementRef>('spanElement');\r\n public spanElement = computed(\r\n () => this.spanRef()?.nativeElement as HTMLSpanElement | null\r\n );\r\n\r\n public value = input.required<any>();\r\n public valueChange = output<any>();\r\n public formattedValue = computed(() => {\r\n if (!this.formatter()) return this.value() ?? '-';\r\n return this.formatter()!.format(this.value(), this.columnMetadata());\r\n });\r\n public columnMetadata = input.required<IMinimumColumnMetadata>();\r\n\r\n public isEditing = signal(false);\r\n public error = signal<string | null>(null);\r\n\r\n private valueSubjet = new BehaviorSubject<any>(null);\r\n\r\n public debounce = this.valueSubjet.pipe(debounceTime(150));\r\n\r\n public constructor() {\r\n effect(() => {\r\n if (this.isEditing()) {\r\n this.input()?.focus();\r\n this.input()?.select();\r\n } else {\r\n this.input()?.blur();\r\n }\r\n });\r\n effect(() => {\r\n this.columnMetadata();\r\n this.formatter.set(\r\n this.formatterService.getFormatter(this.value(), this.columnMetadata())\r\n );\r\n });\r\n this.valueChange.subscribe(() => {\r\n this.hasChanged.set(true);\r\n });\r\n this.debounce.subscribe((value) => {\r\n if (!this.formatter() || !this.formatter()!.validateValue) return;\r\n const validation = this.formatter()!.validateValue!(\r\n value,\r\n this.columnMetadata()\r\n );\r\n if (!validation.isValid) {\r\n this.error.set(validation.errorMessage || 'Invalid value');\r\n } else {\r\n this.error.set(null);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.valueSubjet.next(this.value());\r\n this.initialValue.set(this.value());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.valueSubjet.complete();\r\n }\r\n\r\n public enableEditing = () => {\r\n if (\r\n !this.formatter() ||\r\n !this.formatter()!.canEdit ||\r\n !this.allowUpdate()\r\n ) {\r\n return;\r\n }\r\n if (this.formatter()!.canEdit!(this.value(), this.columnMetadata())) {\r\n this.isEditing.set(true);\r\n } else {\r\n this.spanElement()!.tabIndex = 0;\r\n this.spanElement()?.focus();\r\n }\r\n };\r\n\r\n public onInputChange(value: any) {\r\n if (!value === null || value === undefined || value === '') value = null;\r\n this.valueSubjet.next(value);\r\n }\r\n\r\n public validate = () => {\r\n this.valueSubjet.pipe(take(1)).subscribe((value) => {\r\n if (this.error()) return;\r\n this.valueChange.emit(this.formatter()?.parseValue?.(value) ?? value);\r\n this.isEditing.set(false);\r\n //this.isTouched.set(false);\r\n });\r\n };\r\n\r\n public cancel = () => {\r\n this.isEditing.set(false);\r\n this.isTouched.set(false);\r\n this.valueSubjet.next(this.value());\r\n };\r\n}\r\n","<div CrossCellNavigation [allowNavigation]=\"!error()\" class=\"cell-wrapper\" [title]=\"value()\"\r\n (dblclick)=\"enableEditing()\" (navigateAway)=\"validate()\">\r\n <!-- [attr.data-has-changed]=\"hasChanged()\" -->\r\n @if(!isEditing()){\r\n <span class=\"cell-value\" #spanElement tabindex=\"0\">\r\n @let val = formattedValue();\r\n @if(val === null || val === undefined){\r\n <span class=\"empty-value\">(null)</span>\r\n }@else if (val === '') {\r\n <span class=\"empty-value\">(vide)</span>\r\n }@else if (val?.trim() === '') {\r\n <span class=\"empty-value\">({{val.length}} blancs)</span>\r\n }\r\n @else {\r\n {{val}}\r\n }\r\n </span>\r\n }\r\n @else {\r\n <input class=\"edit-input\" [type]=\"formatter()?.getEditInputType(columnMetadata())\" [value]=\"value() || null\"\r\n #inputElement (focus)=\"isTouched.set(true)\" (input)=\"onInputChange($any($event.target).value)\" (blur)=\"cancel()\"\r\n (keydown.enter)=\"validate()\" (keydown.escape)=\"cancel()\" autofocus />\r\n }\r\n @if(isTouched() || hasChanged()){\r\n <div class=\"error-message\" [title]=\"error()\">\r\n {{ error() }}\r\n </div>\r\n }\r\n</div>","import { Directive, ElementRef, input, effect, inject } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[scrollIntoView]',\r\n})\r\nexport class ScrollIntoViewDirective {\r\n private elementRef = inject(ElementRef);\r\n\r\n scrollIntoView = input<boolean>(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.scrollIntoView()) {\r\n this.scrollToElement();\r\n }\r\n });\r\n }\r\n\r\n private scrollToElement(): void {\r\n const element = this.elementRef.nativeElement;\r\n\r\n setTimeout(() => {\r\n element.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n inline: 'nearest',\r\n });\r\n });\r\n }\r\n}\r\n","import {\r\n Directive,\r\n inject,\r\n ElementRef,\r\n output,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[CtrlClick], [ControlClick]',\r\n host: {\r\n '(mouseover)': 'onMouseOver($event)',\r\n '(mouseout)': 'onMouseOut($event)',\r\n '(keydown.control)': 'isCtrlPressed.set(true)',\r\n '(keyup.control)': 'isCtrlPressed.set(false)',\r\n '[style.cursor]': 'isCtrlPressed() ? `pointer` : `default`',\r\n '[style.textDecoration]': '`underline dotted`',\r\n '[style.color]':\r\n \"(isHovered() && isCtrlPressed())? 'var(--tertiary-color)' : 'inherit'\",\r\n },\r\n})\r\nexport class ControlClickDirective {\r\n private elementRef = inject(ElementRef);\r\n\r\n public callback? = input<() => void>();\r\n public ctrlClick = output<MouseEvent>();\r\n public isCtrlPressed = signal<boolean>(false);\r\n public isHovered = signal<boolean>(false);\r\n\r\n constructor() {\r\n // Capture the native click before it is fired, otherwise, it will allow other click events to fire before we can stop the propagation in case of Ctrl+Click\r\n this.elementRef.nativeElement.addEventListener(\r\n 'click',\r\n (event: MouseEvent) => {\r\n this.onClickIntercepted(event);\r\n },\r\n true\r\n );\r\n }\r\n\r\n private onClickIntercepted(event: MouseEvent) {\r\n if (event.ctrlKey || event.metaKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.stopImmediatePropagation();\r\n this.onCtrlClick(event);\r\n }\r\n }\r\n\r\n private onCtrlClick(event: MouseEvent) {\r\n this.ctrlClick.emit(event);\r\n if (this.callback) {\r\n this.callback();\r\n }\r\n }\r\n\r\n onMouseOver(event: MouseEvent): void {\r\n this.isHovered.set(true);\r\n if (event.ctrlKey || event.metaKey) {\r\n this.isCtrlPressed.set(true);\r\n }\r\n }\r\n\r\n onMouseOut(event: MouseEvent): void {\r\n this.isHovered.set(false);\r\n this.isCtrlPressed.set(false);\r\n }\r\n}\r\n","export enum DGFilterMode {\r\n EQUALS,\r\n CONTAINS,\r\n LOWER_OR_EQUAL,\r\n GREATER_OR_EQUAL,\r\n STARTS_WITH,\r\n ENDS_WITH,\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { DGFilterMode } from '../../models/FilterMode.enum';\r\nimport { IFormatter } from '../../models/formatters/formatter.interface';\r\nimport { IMinimumColumnMetadata } from '../../models/ColumnMetadata.model';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\n\r\n@Component({\r\n selector: 'chr-column-filter',\r\n imports: [],\r\n templateUrl: './column-filter.html',\r\n styleUrl: './column-filter.scss',\r\n})\r\nexport class ColumnFilter {\r\n public readonly formatterService = inject(DataFormatterService);\r\n public readonly FilterMode = DGFilterMode;\r\n public isOpen = model<boolean>(false);\r\n public by = input.required<string>();\r\n\r\n public mode = model<DGFilterMode>(DGFilterMode.EQUALS);\r\n\r\n public formatter = signal<IFormatter | null>(null);\r\n private inputRef = viewChild<ElementRef>('inputElement');\r\n public input = computed(\r\n () => this.inputRef()?.nativeElement as HTMLInputElement | null\r\n );\r\n public columnMetadata = input.required<IMinimumColumnMetadata>();\r\n public value = model<any>();\r\n public error = signal<string | null>(null);\r\n\r\n public filterChange = output<{\r\n column: string;\r\n mode: DGFilterMode;\r\n value: string;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.columnMetadata();\r\n this.formatter.set(\r\n this.formatterService.getFormatter(this.value(), this.columnMetadata())\r\n );\r\n });\r\n }\r\n\r\n public toggle = () => {\r\n this.isOpen.set(!this.isOpen());\r\n };\r\n\r\n public apply = () => {\r\n if (this.error()) return;\r\n\r\n this.mode.set(this.mode());\r\n this.value.set(this.value());\r\n this.isOpen.set(false);\r\n this.filterChange.emit({\r\n column: this.by(),\r\n mode: Number(this.mode()),\r\n value: this.value(),\r\n });\r\n };\r\n\r\n public onInputChange = (inputValue: string) => {\r\n if (this.formatter()?.validateValue) {\r\n const res = this.formatter()?.validateValue?.(\r\n inputValue,\r\n this.columnMetadata()\r\n );\r\n if (!res?.isValid) {\r\n this.error.set(res?.errorMessage || 'Invalid value');\r\n } else {\r\n this.error.set(null);\r\n this.value.set(inputValue);\r\n }\r\n }\r\n };\r\n\r\n public getModeLabel = (mode: DGFilterMode): string => {\r\n switch (Number(mode)) {\r\n case DGFilterMode.EQUALS:\r\n return 'Égal à';\r\n case DGFilterMode.CONTAINS:\r\n return 'Contient';\r\n case DGFilterMode.LOWER_OR_EQUAL:\r\n return 'Plus petit ou égal à';\r\n case DGFilterMode.GREATER_OR_EQUAL:\r\n return 'Plus grand ou égal à';\r\n case DGFilterMode.STARTS_WITH:\r\n return 'Commence par';\r\n case DGFilterMode.ENDS_WITH:\r\n return 'Se termine par';\r\n default:\r\n return '';\r\n }\r\n };\r\n}\r\n","<div class=\"filter-wrapper\">\r\n <span class=\"mat-icon material-symbols filter-icon toggle\" [class.faded]=\"!value() && !isOpen()\"\r\n (dblclick)=\"toggle()\">filter_list</span>\r\n @if(isOpen()){\r\n <div class=\"input-wrapper\" (keyup.enter)=\"apply()\" title=\"Appuyer sur enter pour appliquer le filtre\">\r\n <select (change)=\"mode.set($any($event).target.value)\" class=\"mode-selector\">\r\n <option [selected]=\"mode() == FilterMode.EQUALS\" [value]=\"FilterMode.EQUALS\">Égal à</option>\r\n <option [selected]=\"mode() == FilterMode.CONTAINS\" [value]=\"FilterMode.CONTAINS\">Contient</option>\r\n <option [selected]=\"mode() == FilterMode.LOWER_OR_EQUAL\" [value]=\"FilterMode.LOWER_OR_EQUAL\">Plus petit ou\r\n égal à</option>\r\n <option [selected]=\"mode() == FilterMode.GREATER_OR_EQUAL\" [value]=\"FilterMode.GREATER_OR_EQUAL\">Plus grand\r\n ou égal à</option>\r\n <option [selected]=\"mode() == FilterMode.STARTS_WITH\" [value]=\"FilterMode.STARTS_WITH\">Commence par</option>\r\n <option [selected]=\"mode() == FilterMode.ENDS_WITH\" [value]=\"FilterMode.ENDS_WITH\">Se termine par</option>\r\n </select>\r\n <div class=\"input-wrapper\">\r\n <div class=\"input-and-error\">\r\n <input #inputElement [type]=\"formatter()?.getEditInputType(columnMetadata())\"\r\n placeholder=\"Valeur du filtre\" class=\"filter-input no-input-buttons\" [value]=\"value()\"\r\n (input)=\"onInputChange($any($event).target.value)\" />\r\n <div class=\"error-message\" [title]=\"error()\" [class.hidden]=\"!error()\">\r\n {{ error() }}\r\n </div>\r\n </div>\r\n <span class=\"mat-icon material-symbols apply-button\" title=\"Cliquez pour appliquer le filtre\"\r\n (click)=\"apply()\">check</span>\r\n </div>\r\n </div>\r\n } @else {\r\n @let val = value();\r\n @if(val){\r\n <span class=\"toggle\" (dblclick)=\"toggle()\">{{getModeLabel(mode())}} {{ val ? `\"${val}\"` : '' }}</span>\r\n }\r\n @else {\r\n <span class=\"toggle faded\" (dblclick)=\"toggle()\">Appliquer un filtre</span>\r\n }\r\n }\r\n</div>","import {\r\n Component,\r\n computed,\r\n input,\r\n signal,\r\n output,\r\n inject,\r\n model,\r\n effect,\r\n} from '@angular/core';\r\nimport { AnonymousTable, BaseTable } from '../../models/AnonymousTable.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ColumnMetadata,\r\n IDB2ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../../models/ColumnMetadata.model';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\nimport { EditableCell } from '../editable-cell/editable-cell';\r\nimport { ScrollIntoViewDirective } from '../../directives/scroll-into-view.directive';\r\nimport { ControlClickDirective } from '../../directives/control-click.directive';\r\nimport { TableConstraintColumn } from '../../models/TableConstraintColumn.model';\r\nimport { ColumnFilter } from '../filter/column-filter';\r\nimport { DGFilterMode } from '../../models/FilterMode.enum';\r\nimport { ChrPaginatorComponent } from '../../chr-paginator/chr-paginator.component';\r\nimport { NgxPaginationModule, PaginationService } from 'ngx-pagination';\r\nimport { ContextMenuDirective } from '../../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../../models/context-menu';\r\nimport { IAction } from '../../chr-table/chr-table.component';\r\n\r\nexport interface IDGAddedEntry {\r\n index: number;\r\n row: any;\r\n}\r\n\r\nexport interface IDGChangedEntry {\r\n index: number;\r\n original: any;\r\n current: any;\r\n}\r\n\r\nexport interface IDGDeletedEntry {\r\n index: number;\r\n row: any;\r\n}\r\n\r\nexport interface IDGSort {\r\n column: string;\r\n isAsc: boolean;\r\n}\r\n\r\nexport interface IDGFilter {\r\n column: string;\r\n mode: DGFilterMode;\r\n value: string;\r\n}\r\n\r\n@Component({\r\n selector: 'chr-data-grid',\r\n imports: [\r\n CommonModule,\r\n ChrPaginatorComponent,\r\n NgxPaginationModule,\r\n EditableCell,\r\n ContextMenuDirective,\r\n ScrollIntoViewDirective,\r\n ControlClickDirective,\r\n ColumnFilter,\r\n ],\r\n templateUrl: './data-grid.html',\r\n styleUrl: './data-grid.scss',\r\n providers: [PaginationService],\r\n})\r\nexport class DataGrid {\r\n public readonly formatterService = inject(DataFormatterService);\r\n\r\n public id = signal(crypto.randomUUID());\r\n public title = input<string | null>(null);\r\n public table = input<BaseTable>();\r\n\r\n public currentPage = input<number>(1);\r\n public pageSize = input<number>(10);\r\n\r\n public pageChange = output<number>();\r\n public pageSizeChange = output<number>();\r\n\r\n public sort = model<IDGSort | null>(null);\r\n public filter = model<{ [key: string]: IDGFilter }>({});\r\n\r\n public actions = input<IAction[]>([]);\r\n\r\n public cellChange = output<{\r\n index: number;\r\n row: any;\r\n column: IMinimumColumnMetadata | IDB2ColumnMetadata | any;\r\n value: any;\r\n }>();\r\n public rowClick = output<{ rowIndex: number; row: any; event: Event }>();\r\n\r\n public allowInsert = input<boolean>(false);\r\n public allowUpdate = input<boolean>(false);\r\n public allowDelete = input<boolean>(false);\r\n public allowSync = input<boolean>(true);\r\n public allowRefresh = input<boolean>(false);\r\n public allowNavigation = input<boolean>(false);\r\n public maxHeight = input<string>('100%');\r\n\r\n public onSync = output<void>();\r\n public onRefresh = output<void>();\r\n public onAddRow = output<void>();\r\n public onDeleteRow = output<{ index: number; row: any }>();\r\n /**\r\n * Only supported for DB2 tables. For other types, use the onNavigate event.\r\n */\r\n public onDB2Navigate = output<{\r\n targetTable: string;\r\n targetSchema: string;\r\n }>();\r\n\r\n public onNavigate = output<{ fromMetadata: IMinimumColumnMetadata }>();\r\n\r\n public modifiedCells = model<\r\n {\r\n rowIndex: number;\r\n columnName: string;\r\n originalValue: any;\r\n currentValue: any;\r\n }[]\r\n >([]);\r\n public modifiedRows = model<IDGChangedEntry[]>([]);\r\n public addedRows = model<IDGAddedEntry[]>([]);\r\n public deletedRows = model<IDGDeletedEntry[]>([]);\r\n\r\n protected _addedRows = computed(() => this.addedRows().map((r) => r.row));\r\n\r\n public hasChanges = computed(() => {\r\n return (\r\n this.addedRows().length > 0 ||\r\n this.modifiedRows().length > 0 ||\r\n this.deletedRows().length > 0\r\n );\r\n });\r\n\r\n public columns = computed(() => {\r\n const table = this.table();\r\n return table?.columnMetadatas || [];\r\n });\r\n\r\n public rows = computed(() => {\r\n const table = this.table();\r\n return table?.rows || [];\r\n });\r\n\r\n public totalItems = computed(() => {\r\n if (this.table() instanceof AnonymousTable) {\r\n return (this.table() as AnonymousTable).total || 0;\r\n }\r\n return this.table()?.count || 0;\r\n });\r\n\r\n public currentItems = computed(() => {\r\n return this.table()?.count || 0;\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const table = this.table();\r\n this.resetChanges();\r\n });\r\n }\r\n\r\n public getColumnTooltip(column: IMinimumColumnMetadata): string {\r\n return column.tooltip;\r\n }\r\n\r\n public toggleSort(columnName: string): void {\r\n const currentSort = this.sort();\r\n let isAsc = true;\r\n if (currentSort?.column === columnName) isAsc = !currentSort.isAsc;\r\n\r\n this.sort.set({ column: columnName, isAsc: isAsc });\r\n }\r\n\r\n public onFilterBy(\r\n columnName: string,\r\n filter: { column: string; mode: DGFilterMode; value: string }\r\n ): void {\r\n const currentFilters = { ...this.filter() };\r\n\r\n if (filter.value) {\r\n currentFilters[columnName] = {\r\n column: filter.column,\r\n mode: filter.mode,\r\n value: filter.value,\r\n };\r\n } else {\r\n delete currentFilters[columnName];\r\n }\r\n this.filter.set(currentFilters);\r\n }\r\n\r\n // Event handlers for pagination\r\n public onPageChange(page: number): void {\r\n this.pageChange.emit(page);\r\n }\r\n\r\n public onPageSizeChange(pageSize: number): void {\r\n this.pageSizeChange.emit(pageSize);\r\n }\r\n\r\n public refresh(): void {\r\n this.onRefresh.emit();\r\n // this.sort.set(null);\r\n // this.filter.set({});\r\n }\r\n\r\n public getCellValue(row: any, columnName: string): any {\r\n return row && row[columnName] !== undefined ? row[columnName] : '';\r\n }\r\n\r\n public onCellChange(\r\n index: number,\r\n row: any,\r\n column: IMinimumColumnMetadata,\r\n value: any\r\n ) {\r\n const initial = { ...row };\r\n row[column.columnName] = value;\r\n // If the row is created, we don't track it as modified\r\n if (this.isRowAdded(row, index)) {\r\n this.addedRows.update((rows) => {\r\n rows.find((r) => r.index === index)!.row[column.columnName] = value;\r\n return rows;\r\n });\r\n return;\r\n }\r\n // If the row was already changed, we update the current value\r\n if (this.isRowChanged(row, index)) {\r\n const changed = this.modifiedRows().find(\r\n (modifiedRow) => modifiedRow.index === index\r\n );\r\n changed!.current = row;\r\n } else {\r\n this.modifiedRows.set([\r\n ...this.modifiedRows(),\r\n { index: index, original: initial, current: row },\r\n ]);\r\n }\r\n //console.log('[DataGrid] onCellChange - modifiedRows:', this.modifiedRows());\r\n this.modifiedCells.update((cells) => [\r\n ...cells.filter(\r\n (c) => !(c.rowIndex === index && c.columnName === column.columnName)\r\n ),\r\n {\r\n rowIndex: index,\r\n columnName: column.columnName,\r\n originalValue: initial[column.columnName],\r\n currentValue: row[column.columnName],\r\n },\r\n ]);\r\n // We emit the cell change event\r\n this.cellChange.emit({ index, row, column, value });\r\n }\r\n\r\n public isRowAdded(row: any, index: number): boolean {\r\n return this.addedRows().some((addedRow) => addedRow.index === index);\r\n }\r\n\r\n public isRowChanged(row: any, index: number): boolean {\r\n return this.modifiedRows().some(\r\n (modifiedRow) => modifiedRow.index === index\r\n );\r\n }\r\n\r\n public isCellChanged(rowIndex: number, columnName: string): boolean {\r\n return this.modifiedCells().some(\r\n (cell) => cell.rowIndex === rowIndex && cell.columnName === columnName\r\n );\r\n }\r\n\r\n public isRowDeleted(row: any, index: number): boolean {\r\n return this.deletedRows().some((deletedRow) => deletedRow.index === index);\r\n }\r\n\r\n public addRow = () => {\r\n this.addedRows.set([\r\n ...this.addedRows(),\r\n { index: this.addedRows().length, row: {} },\r\n ]);\r\n this.onAddRow.emit();\r\n };\r\n\r\n public deleteRow(index: number, row: any): void {\r\n console.log('[DataGrid] deleteRow - index:', index, 'row:', row);\r\n // If the row was modified, we need to get the original value and remove it from modifiedRows\r\n if (this.isRowChanged(row, index)) {\r\n const original =\r\n this.modifiedRows().find((modifiedRow) => modifiedRow.index === index)\r\n ?.original || row;\r\n this.deletedRows.set([...this.deletedRows(), { index, row: original }]);\r\n this.modifiedRows.set(\r\n this.modifiedRows().filter((modifiedRow) => modifiedRow.index !== index)\r\n );\r\n return;\r\n }\r\n\r\n // If the row was added, we just remove it from addedRows\r\n if (this.isRowAdded(row, index)) {\r\n this.addedRows.set(\r\n this.addedRows().filter((addedRow) => addedRow.index !== index)\r\n );\r\n }\r\n\r\n if (!this.isRowDeleted(row, index)) {\r\n this.deletedRows.set([...this.deletedRows(), { index, row }]);\r\n }\r\n\r\n this.onDeleteRow.emit({ index, row });\r\n }\r\n\r\n public navigateToForeignTable(column: IMinimumColumnMetadata): void {\r\n if (!this.allowNavigation()) return;\r\n this.sort.set(null);\r\n this.filter.set({});\r\n this.onNavigate.emit({ fromMetadata: column });\r\n if (column instanceof ColumnMetadata) {\r\n this.table()\r\n ?.getConstraintsByType('FOREIGN KEY')\r\n .forEach((constraint) => {\r\n const cstCol = constraint.columns.find(\r\n (c) => c.columnName === column.columnName\r\n );\r\n if (cstCol && cstCol instanceof TableConstraintColumn) {\r\n const reference = (cstCol as unknown as TableConstraintColumn)\r\n .reference;\r\n if (reference) {\r\n return this.onDB2Navigate.emit({\r\n targetTable: cstCol.reference!.otherKey.tableName,\r\n targetSchema: cstCol.reference!.otherKey.tableSchema,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n public resetChanges(): void {\r\n this.modifiedRows.set([]);\r\n this.addedRows.set([]);\r\n this.deletedRows.set([]);\r\n }\r\n\r\n public getChangeSummary(): {\r\n modified: any[];\r\n added: any[];\r\n deleted: any[];\r\n hasChanges: boolean;\r\n } {\r\n const modified = this.modifiedRows();\r\n const added = this.addedRows();\r\n const deleted = this.deletedRows();\r\n\r\n return {\r\n modified,\r\n added,\r\n deleted,\r\n hasChanges: modified.length > 0 || added.length > 0 || deleted.length > 0,\r\n };\r\n }\r\n\r\n public getRowTrackBy = (row: any, index: number): string => {\r\n const table = this.table();\r\n return table ? table.getRowIdentifier(row) : `row-${index}`;\r\n };\r\n\r\n public hasInvalidRows = () => {\r\n const allRows = [\r\n ...this.addedRows().map((r) => r.row),\r\n ...this.modifiedRows().map((r) => r.current),\r\n ...this.deletedRows().map((r) => r.row),\r\n ];\r\n return allRows.some((row) => !this.validateRow(row));\r\n };\r\n\r\n public validateRow = (row: any): boolean => {\r\n return this.formatterService.validateRow(row, this.columns());\r\n };\r\n\r\n public canEdit = (column: IMinimumColumnMetadata): boolean => {\r\n const formatter = this.formatterService.getFormatter(null, column);\r\n if (!formatter) return false && this.allowUpdate();\r\n return this.allowUpdate() && formatter.canEdit!(null, column);\r\n };\r\n\r\n public isForeignKeyColumn = (column: IMinimumColumnMetadata): boolean => {\r\n const table = this.table();\r\n if (!table) return false;\r\n const fkConstraints = table.tableConstraints.filter(\r\n (tc) => tc.constraintType === 'FOREIGN KEY'\r\n );\r\n for (const fk of fkConstraints) {\r\n if (fk.columns.some((col) => col.columnName === column.columnName)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n public getContextMenuItems = (\r\n row: any,\r\n rowIndex: number\r\n ): IContextMenuItem[] => {\r\n const items: IContextMenuItem[] = this.actions()\r\n ?.filter((action) =>\r\n action.disabledCallback\r\n ? !action.disabledCallback(row)\r\n : !action.disabled || false\r\n )\r\n .map(\r\n (action) =>\r\n ({\r\n label: action.display,\r\n icon: action.icon,\r\n action: () => action.callback(row),\r\n color: action.color,\r\n } as IContextMenuItem)\r\n );\r\n if (this.isRowDeleted(row, rowIndex)) {\r\n items.push({\r\n label: 'Annuler la suppression',\r\n action: () =>\r\n this.deletedRows.set(\r\n this.deletedRows().filter((r) => r.index !== rowIndex)\r\n ),\r\n icon: 'undo',\r\n color: 'primary',\r\n });\r\n } else if (this.isRowAdded(row, rowIndex)) {\r\n items.push({\r\n label: 'Supprimer la ligne ajoutée',\r\n action: () => {\r\n this.addedRows.update((rows) =>\r\n rows\r\n .filter((r) => {\r\n return r.index !== rowIndex;\r\n })\r\n .map((r, idx) => {\r\n return {\r\n index: this.table()!.rows.length + idx,\r\n row: r.row,\r\n };\r\n })\r\n );\r\n this.table()?.removeRow(row);\r\n },\r\n icon: 'delete',\r\n color: 'error',\r\n });\r\n } else if (this.allowDelete()) {\r\n items.push({\r\n label: 'Supprimer la ligne',\r\n action: () => this.deleteRow(rowIndex, row),\r\n icon: 'delete',\r\n color: 'error',\r\n });\r\n }\r\n\r\n return items;\r\n };\r\n}\r\n","@if (table()) {\r\n<div class=\"data-grid-container\">\r\n <div class=\"data-grid-header\">\r\n <h3>{{ title() ? title() : `${table()?.schema}.${table()?.name}` }}</h3>\r\n <div class=\"data-grid-info\">\r\n <!-- {{allowSync()}} {{hasChanges()}} {{!hasInvalidRows()}} -->\r\n @if(allowSync() && hasChanges() && !hasInvalidRows()){\r\n <span class=\"mat-icon material-symbols icon-button sync-button\" (click)=\"onSync.emit()\"\r\n title=\"Synchroniser les changements\">file_upload</span>\r\n }\r\n @if(allowRefresh()){\r\n <span class=\"mat-icon material-symbols icon-button\" (click)=\"refresh()\"\r\n title=\"Recharger les données\">refresh</span>\r\n }\r\n @if(allowInsert()){\r\n <span class=\"mat-icon material-symbols icon-button\" (click)=\"onAddRow.emit()\"\r\n title=\"Ajouter une ligne\">add</span>\r\n }\r\n <span>Total: {{ totalItems() }} enregistrements</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-responsive\" [style]=\"{ 'max-height': maxHeight() }\">\r\n <table class=\"data-grid-table\">\r\n <thead>\r\n <tr>\r\n @for (column of columns(); track column.columnName) {\r\n <th [title]=\"getColumnTooltip(column)\">\r\n @if(allowNavigation() && isForeignKeyColumn(column)){\r\n <span ControlClick (ctrlClick)=\"navigateToForeignTable(column)\">{{ column.columnName }}</span>\r\n } @else {\r\n <span class=\"sort-receiver\" (click)=\"toggleSort(column.columnName)\">{{ column.columnName\r\n }}</span>\r\n }\r\n <small class=\"sort-receiver\" (click)=\"toggleSort(column.columnName)\" class=\"column-type\">{{\r\n column.dataType }}\r\n {{column.length ?\r\n `(${column.length}${column.scale ? `, ${column.scale}` : ''})`: ''}}</small>\r\n @if(!canEdit(column)){\r\n <span class=\"lock-icon mat-icon material-symbols\">lock</span>\r\n }\r\n @if (sort()?.column === column.columnName) {\r\n @if (sort()?.isAsc) {\r\n <span class=\"sort-icon mat-icon material-symbols\">arrow_upward</span>\r\n } @else {\r\n <span class=\"sort-icon mat-icon material-symbols\">arrow_downward</span>\r\n }\r\n }\r\n <chr-column-filter [by]=\"column.columnName\" [mode]=\"filter()[column.columnName]?.mode ?? 0\"\r\n [value]=\"filter()[column.columnName]?.value ?? ''\" [columnMetadata]=\"column\"\r\n (filterChange)=\"onFilterBy(column.columnName, $event)\" class=\"filter\"></chr-column-filter>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of rows() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id: this.id(),\r\n totalItems: currentItems()};\r\n track getRowTrackBy(row, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"rowTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: row, index: $index}\">\r\n </ng-container>\r\n }\r\n @for (row of _addedRows(); track getRowTrackBy(row, $index)) { <ng-container\r\n [ngTemplateOutlet]=\"rowTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: row, index: $index + rows().length}\">\r\n </ng-container>\r\n }\r\n @if(rows().length === 0 && addedRows().length === 0){\r\n <tr>\r\n <td class=\"no-data\">Aucune donnée disponible</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <ng-template #rowTemplate let-row let-index=\"index\">\r\n @let isRowValid = validateRow(row);\r\n <tr #rowElement [attr.data-is-added]=\"isRowAdded(row, index)\" [scrollIntoView]=\"!isRowValid\"\r\n [attr.data-is-valid]=\"isRowValid\" (click)=\"rowClick.emit({ rowIndex: index, row: row, event: $event })\"\r\n [contextMenu]=\"getContextMenuItems(row, index)\" [attr.data-has-changed]=\"isRowChanged(row, index)\"\r\n [attr.data-is-deleted]=\"isRowDeleted(row, index)\">\r\n @for (column of columns(); track column.columnName) {\r\n <td>\r\n <chr-editable-cell class=\"cell\" [value]=\"row[column.columnName]\"\r\n (valueChange)=\"onCellChange(index, row, column, $event)\"\r\n [allowUpdate]=\"allowUpdate() && isRowDeleted(row, index) === false\"\r\n [columnMetadata]=\"column\"></chr-editable-cell>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <chr-paginator [id]=\"id()\" [page]=\"currentPage()\" [pageSize]=\"pageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></chr-paginator>\r\n</div>\r\n} @else {\r\n<div class=\"empty-state\">\r\n <p>Aucune donnée</p>\r\n</div>\r\n}","import { Component, input, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'chr-message-banner',\r\n imports: [],\r\n templateUrl: './message-banner.html',\r\n styleUrl: './message-banner.scss',\r\n})\r\nexport class MessageBanner {\r\n public isVisible = signal(true);\r\n public closable = input<boolean>(false);\r\n\r\n public title = input.required<string>();\r\n public icon = input<string | null>(null);\r\n public message = input<string>();\r\n public type = input<'none' | 'info' | 'warning' | 'error'>('none');\r\n\r\n public close = () => {\r\n this.isVisible.set(false);\r\n };\r\n}\r\n","@if(isVisible()){\r\n<div class=\"message-banner\" [attr.data-type]=\"type()\">\r\n <div class=\"banner-header\">\r\n <span class=\"mat-icon material-symbols banner-icon\" [attr.data-icon]=\"icon()\">{{ icon() }}</span>\r\n <strong class=\"banner-title\">{{title()}}</strong>\r\n </div>\r\n <div class=\"message-content\">\r\n {{message()}}\r\n <ng-content></ng-content>\r\n </div>\r\n @if(closable()){\r\n <span class=\"mat-icon material-symbols close-icon\" (click)=\"close()\">close</span>\r\n }\r\n</div>\r\n}","import { Directive, HostListener, ElementRef, inject } 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 private el = inject(ElementRef);\r\n\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 {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n inject,\r\n Injectable,\r\n Injector,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { ChrModalComponent } from '../chr-modal/chr-modal.component';\r\nimport { CHR_MODAL_DATA, CHR_MODAL_REF } from './modal-tokens';\r\nimport { Color } from './colors';\r\nimport { IAction } from '../chr-table/chr-table.component';\r\n\r\nexport interface ModalOptions {\r\n /**\r\n * Indicates if the modal is open or closed.\r\n * @default true\r\n */\r\n closeOnBackdropClick?: boolean;\r\n /**\r\n * Indicates if the modal should close when the user presses the Escape key.\r\n * @default true\r\n */\r\n closeOnEscape?: boolean;\r\n /**\r\n * Shorthand for closeOnBackdropClick and closeOnEscape\r\n */\r\n disableClose?: boolean;\r\n /**\r\n * Width in vw\r\n */\r\n width?: number;\r\n /**\r\n * Height in vh\r\n */\r\n height?: number;\r\n /**\r\n * Extra configuration to be passed to the modal component instance\r\n */\r\n extraConfig?:\r\n | {\r\n /**\r\n * Title of the modal\r\n */\r\n title: string;\r\n /**\r\n * Text/HTML content of the modal\r\n */\r\n text: string;\r\n /**\r\n * Label for the close button\r\n * @default 'Fermer'\r\n */\r\n close: string;\r\n /**\r\n * Array of actions to be shown as buttons in the modal\r\n */\r\n actions: IAction[];\r\n }\r\n | any;\r\n /**\r\n * Default background of the modal container. Defaults to 'none' as to allow customisation through css with the class '.modal-content'.\r\n * @default 'none'\r\n */\r\n background?: Color;\r\n\r\n /**\r\n * Data to be passed to the modal component\r\n */\r\n data?: any;\r\n}\r\n\r\nexport interface ModalData {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IModalRef<ChrModalComponent, T extends object = any> {\r\n //componentInstance: T;\r\n open: () => void;\r\n configure(options: ModalOptions): void;\r\n close: (result?: any) => void;\r\n afterClosed: () => Observable<any>;\r\n}\r\n\r\n/**\r\n * Classe ModalRef générique qui gère la logique de création, configuration et fermeture des modales.\r\n * Cette classe extrait la logique du ModalService pour permettre une meilleure séparation des responsabilités.\r\n *\r\n * Usage dans le ModalService refactorisé:\r\n * ```typescript\r\n * open<T>(component: Type<T>, options: ModalOptions = {}): ModalRef<T> {\r\n * const modalRef = new ModalRef(component, options);\r\n * const modalComponentRef = modalRef.create();\r\n * this.activeModals.add(modalRef);\r\n * return modalRef;\r\n * }\r\n * ```\r\n */\r\nexport class ModalRef<T extends object>\r\n implements IModalRef<ChrModalComponent<T>>\r\n{\r\n private _afterClosed = new Subject<any>();\r\n private modalComponentRef: ComponentRef<ChrModalComponent<T>> | null = null;\r\n private contentComponentRef: ComponentRef<T> | null = null;\r\n private appRef: ApplicationRef;\r\n private environmentInjector: EnvironmentInjector;\r\n\r\n constructor(\r\n private _component: Type<T>,\r\n private options: ModalOptions,\r\n appRef: ApplicationRef,\r\n injector: EnvironmentInjector\r\n ) {\r\n this.appRef = appRef;\r\n this.environmentInjector = injector;\r\n }\r\n\r\n /**\r\n * Returns the component instance of the modal content.\r\n * Throws an error if the content component is not initialized.\r\n */\r\n get componentInstance(): T {\r\n if (!this.contentComponentRef) {\r\n throw new Error('Modal content component not initialized');\r\n }\r\n return this.contentComponentRef.instance;\r\n }\r\n\r\n /**\r\n * Returns the modal instance.\r\n * Throws an error if the modal component is not initialized.\r\n */\r\n get instance(): ChrModalComponent<T> {\r\n if (!this.modalComponentRef) {\r\n throw new Error('Modal content component not initialized');\r\n }\r\n return this.modalComponentRef.instance;\r\n }\r\n\r\n setWidth(width: number): void {\r\n this.set('width', width);\r\n }\r\n\r\n setHeight(height: number): void {\r\n this.set('height', height);\r\n }\r\n\r\n protected set(property: string, value: any) {\r\n this.options = { ...this.options, [property]: value };\r\n this.modalComponentRef?.setInput(property, value);\r\n }\r\n\r\n /**\r\n * Creates and initializes the modal component and its content\r\n */\r\n create(): ComponentRef<ChrModalComponent<T>> {\r\n // Create the modal container component\r\n this.modalComponentRef = createComponent(ChrModalComponent, {\r\n environmentInjector: this.environmentInjector,\r\n });\r\n\r\n // Set up close handler\r\n this.modalComponentRef.instance.close.subscribe(() => {\r\n this.close();\r\n });\r\n\r\n // Create injector for modal content with data and ref\r\n const injector = Injector.create({\r\n providers: [\r\n { provide: CHR_MODAL_DATA, useValue: this.options?.data || {} },\r\n { provide: CHR_MODAL_REF, useValue: this },\r\n ],\r\n parent: this.environmentInjector,\r\n });\r\n\r\n // Create the modal content component\r\n this.contentComponentRef = createComponent(this._component, {\r\n environmentInjector: this.environmentInjector,\r\n elementInjector: injector,\r\n });\r\n\r\n this._configureModal();\r\n this._attachToDom();\r\n\r\n return this.modalComponentRef;\r\n }\r\n\r\n /**\r\n * Opens the modal by setting isOpen to true\r\n */\r\n open(): void {\r\n this.modalComponentRef?.setInput('isOpen', true);\r\n }\r\n\r\n /**\r\n * Closes the modal and emits the result\r\n */\r\n close(result?: any): void {\r\n if (this.modalComponentRef) {\r\n this.modalComponentRef.setInput('isOpen', false);\r\n\r\n // Remove from DOM and destroy\r\n this.modalComponentRef.location.nativeElement.remove();\r\n this.appRef.detachView(this.modalComponentRef.hostView);\r\n this.modalComponentRef.destroy();\r\n this.modalComponentRef = null;\r\n }\r\n\r\n if (this.contentComponentRef) {\r\n this.appRef.detachView(this.contentComponentRef.hostView);\r\n this.contentComponentRef.destroy();\r\n this.contentComponentRef = null;\r\n }\r\n\r\n this._afterClosed.next(result);\r\n this._afterClosed.complete();\r\n }\r\n\r\n /**\r\n * Returns an observable that emits when the modal is closed\r\n */\r\n afterClosed(): Observable<any> {\r\n return this._afterClosed.asObservable();\r\n }\r\n\r\n /**\r\n * Configures the modal with the provided options.\r\n * This methods allow dynamic configuration of the modal after its creation.\r\n * It will however not properly update the data as it is injected at creation time.\r\n * @param options\r\n */\r\n configure(options: ModalOptions): void {\r\n this.options = { ...this.options, ...options };\r\n this._configureModal();\r\n }\r\n\r\n private _configureModal = () => {\r\n if (!this.modalComponentRef)\r\n throw new Error('Modal component reference is not initialized');\r\n this._setInputs(this.options);\r\n if (this.options.extraConfig) {\r\n this._setInputs(this.options.extraConfig);\r\n }\r\n };\r\n\r\n private _setInputs = (options: any) => {\r\n if (!this.modalComponentRef)\r\n throw new Error('Modal component reference is not initialized');\r\n for (const key in options) {\r\n if (Object.hasOwn(this.modalComponentRef.instance, key)) {\r\n this.modalComponentRef.setInput(\r\n key,\r\n this.options[key as keyof ModalOptions]\r\n );\r\n }\r\n }\r\n };\r\n\r\n private _attachToDom = () => {\r\n if (!this.modalComponentRef || !this.contentComponentRef) {\r\n throw new Error('Modal component or content component not initialized');\r\n }\r\n // Attach modal to DOM\r\n this.appRef.attachView(this.modalComponentRef.hostView);\r\n document.body.appendChild(this.modalComponentRef.location.nativeElement);\r\n this.modalComponentRef.changeDetectorRef.detectChanges();\r\n\r\n this.appRef.attachView(this.contentComponentRef.hostView);\r\n\r\n // Insert content into modal\r\n const container =\r\n this.modalComponentRef.location.nativeElement.querySelector(\r\n '.modal-content'\r\n );\r\n if (container) {\r\n container.appendChild(this.contentComponentRef.location.nativeElement);\r\n }\r\n };\r\n}\r\n","import {\r\n Injectable,\r\n Type,\r\n ApplicationRef,\r\n EnvironmentInjector,\r\n inject,\r\n} from '@angular/core';\r\nimport { IModalRef, ModalOptions, ModalRef } from '../models/modal';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ModalService {\r\n private activeModals: Set<ModalRef<any>> = new Set();\r\n private appRef = inject(ApplicationRef);\r\n private environmentInjector = inject(EnvironmentInjector);\r\n\r\n open<T extends object>(\r\n component: Type<T>,\r\n options: ModalOptions = {}\r\n ): IModalRef<T> {\r\n const modalRef: ModalRef<T> = new ModalRef<T>(\r\n component,\r\n options,\r\n this.appRef,\r\n this.environmentInjector\r\n );\r\n modalRef.create();\r\n\r\n this.activeModals.add(modalRef);\r\n\r\n modalRef.open();\r\n return modalRef;\r\n }\r\n\r\n close(modalRefType: Type<any>): void {\r\n const modalRef = Array.from(this.activeModals).find(\r\n (ref) => ref instanceof modalRefType\r\n );\r\n\r\n if (modalRef) {\r\n modalRef.close();\r\n this.activeModals.delete(modalRef);\r\n }\r\n }\r\n\r\n closeAll(): void {\r\n this.activeModals.forEach((modalRef) => {\r\n modalRef.close();\r\n });\r\n }\r\n}\r\n","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","/*\r\n * Public API Surface of chr-components\r\n */\r\n\r\nimport e from 'express';\r\n\r\n//COMPONENTS\r\nexport * from './lib/chr-breadcrumb/chr-breadcrumb.component';\r\nexport * from './lib/chr-button/chr-button.component';\r\nexport * from './lib/chr-delete-modal/chr-delete-modal.component';\r\n\r\n//FORM\r\nexport * from './lib/chr-form/chr-form.component';\r\n//INPUTS\r\nexport * from './lib/chr-form/chr-base-input/chr-base-input.component';\r\nexport * from './lib/chr-form/chr-color-input/chr-color-input.component';\r\nexport * from './lib/chr-form/chr-date-input/chr-date-input.component';\r\nexport * from './lib/chr-form/chr-datetime-input/chr-datetime-input.component';\r\nexport * from './lib/chr-form/chr-file-input/chr-file-input.component';\r\nexport * from './lib/chr-form/chr-textarea-input/chr-textarea-input.component';\r\nexport * from './lib/chr-form/chr-toggle-input/chr-toggle-input.component';\r\nexport * from './lib/chr-search-select/chr-search-select.component';\r\nexport * from './lib/chr-tag-select/chr-tag-select.component';\r\nexport * from './lib/chr-table-new/chr-table-new.component';\r\nexport * from './lib/chr-form/chr-nice-file-input/chr-nice-file-input.component';\r\n\r\n//COMPONENTS\r\nexport * from './lib/chr-searchbar/chr-searchbar.component';\r\nexport * from './lib/chr-paginator/chr-paginator.component';\r\nexport * from './lib/chr-table/chr-table.component';\r\nexport * from './lib/chr-table-header-cell/chr-table-header-cell.component';\r\nexport * from './lib/chr-checkbox/chr-checkbox.component';\r\nexport * from './lib/chr-separator/chr-separator.component';\r\nexport * from './lib/chr-spinner/chr-spinner.component';\r\nexport * from './lib/chr-toast/chr-toast.component';\r\nexport * from './lib/chr-default-modal/chr-default-modal.component';\r\nexport * from './lib/chr-modal/chr-modal.component';\r\nexport * from './lib/chr-inline-svg/chr-inline-svg.component';\r\nexport * from './lib/chr-tab/chr-tab.component';\r\nexport * from './lib/chr-tab-group/chr-tab-group.component';\r\nexport * from './lib/chr-carousel/chr-carousel.component';\r\nexport * from './lib/chr-button-new/chr-button.component';\r\nexport * from './lib/chr-context-menu/chr-context-menu.component';\r\nexport * from './lib/chr-dropdown/chr-dropdown.component';\r\nexport * from './lib/chr-datagrid/data-grid/data-grid';\r\nexport * from './lib/chr-datagrid/filter/column-filter';\r\nexport * from './lib/chr-datagrid/editable-cell/editable-cell';\r\nexport * from './lib/chr-message-banner/message-banner';\r\n\r\n//DIRECTIVES\r\nexport * from './lib/directives/tab-input-only-handler.directive';\r\nexport * from './lib/directives/tab-to-enter-handler.directive';\r\nexport * from './lib/directives/autofocus.directive';\r\nexport * from './lib/directives/context-menu.directive';\r\nexport * from './lib/directives/control-click.directive';\r\nexport * from './lib/directives/cross-cell-navigation.directive';\r\nexport * from './lib/directives/scroll-into-view.directive';\r\n\r\n//ANIMATIONS\r\n// export * from './lib/animations/in-out.animation';\r\n// export * from './lib/animations/rotation.animation';\r\n\r\n//SERVICES\r\nexport * from './lib/services/modal.service';\r\nexport * from './lib/services/data-formatter.service';\r\n\r\n//MODELS & TOKENS\r\nexport * from './lib/models/modal-tokens';\r\nexport * from './lib/models/modal';\r\nexport * from './lib/services/data.service';\r\nexport * from './lib/services/live-update.service';\r\nexport * from './lib/services/loader.service';\r\nexport * from './lib/services/toast.service';\r\nexport * from './lib/services/cookie.service';\r\nexport * from './lib/services/files.service';\r\nexport * from './lib/models/context-menu';\r\nexport * from './lib/models/file';\r\nexport * from './lib/models/AnonymousTable.model';\r\nexport * from './lib/models/TableConstraint.model';\r\nexport * from './lib/models/TableConstraintColumn.model';\r\nexport * from './lib/models/TableConstraintReference.model';\r\nexport * from './lib/models/ColumnMetadata.model';\r\nexport * from './lib/models/FilterMode.enum';\r\nexport * from './lib/models/formatters/formatter.interface';\r\n\r\n//INTERFACES\r\nexport * from './lib/models/colors';\r\nexport * from './lib/models/controls';\r\nexport * from './lib/models/live-update-message';\r\n\r\n//VALIDATORS\r\nexport * from './lib/models/chr-validators/base-validator';\r\nexport * from './lib/models/chr-validators/decimal-validator';\r\nexport * from './lib/models/chr-validators/max-date-validator';\r\nexport * from './lib/models/chr-validators/max-file-size-validator';\r\nexport * from './lib/models/chr-validators/maxlength-validator';\r\nexport * from './lib/models/chr-validators/min-file-size-validator';\r\nexport * from './lib/models/chr-validators/minlength-validator';\r\nexport * from './lib/models/chr-validators/required-validator';\r\nexport * from './lib/models/chr-validators/type-validator';\r\n\r\n//MODELS\r\nexport * from './lib/models/live-update-message';\r\n\r\n//INTERCEPTORS\r\nexport * from './lib/config/interceptors/SpinnerInterceptor';\r\nexport * from './lib/config/interceptors/XsrfInterceptor';\r\n\r\n//PROVIDERS\r\nexport * from './lib/config/providers/xsrf-provider';\r\n\r\n//OTHERS\r\nexport * from 'ngx-pagination';\r\nexport * from 'chrv-pipes';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i4","i5","finalize"],"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/models/modal-tokens.ts","../../../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/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-data-list/chr-data-list.ts","../../../projects/chrv-components/src/lib/chr-data-list/chr-data-list.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-context-menu/chr-context-menu.component.ts","../../../projects/chrv-components/src/lib/chr-context-menu/chr-context-menu.component.html","../../../projects/chrv-components/src/lib/directives/context-menu.directive.ts","../../../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/models/file.ts","../../../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-tab/chr-tab.component.ts","../../../projects/chrv-components/src/lib/chr-tab/chr-tab.component.html","../../../projects/chrv-components/src/lib/chr-tab-group/chr-tab-group.component.ts","../../../projects/chrv-components/src/lib/chr-tab-group/chr-tab-group.component.html","../../../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/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-form/chr-nice-file-input/chr-nice-file-input.component.ts","../../../projects/chrv-components/src/lib/chr-form/chr-nice-file-input/chr-nice-file-input.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/chr-modal/chr-modal.component.ts","../../../projects/chrv-components/src/lib/chr-modal/chr-modal.component.html","../../../projects/chrv-components/src/lib/chr-inline-svg/chr-inline-svg.component.ts","../../../projects/chrv-components/src/lib/chr-inline-svg/chr-inline-svg.component.html","../../../projects/chrv-components/src/lib/chr-button-new/chr-button.component.ts","../../../projects/chrv-components/src/lib/chr-button-new/chr-button.component.html","../../../projects/chrv-components/src/lib/chr-carousel/chr-carousel.component.ts","../../../projects/chrv-components/src/lib/chr-carousel/chr-carousel.component.html","../../../projects/chrv-components/src/lib/chr-dropdown/chr-dropdown.component.ts","../../../projects/chrv-components/src/lib/chr-dropdown/chr-dropdown.component.html","../../../projects/chrv-components/src/lib/models/ColumnMetadata.model.ts","../../../projects/chrv-components/src/lib/models/TableConstraintReference.model.ts","../../../projects/chrv-components/src/lib/models/TableConstraintColumn.model.ts","../../../projects/chrv-components/src/lib/models/TableConstraint.model.ts","../../../projects/chrv-components/src/lib/models/AnonymousTable.model.ts","../../../projects/chrv-components/src/lib/directives/cross-cell-navigation.directive.ts","../../../projects/chrv-components/src/lib/models/formatters/base.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/date.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/number.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/character.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/time.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/varchar.formatter.ts","../../../projects/chrv-components/src/lib/models/formatters/bit.formatter.ts","../../../projects/chrv-components/src/lib/services/data-formatter.service.ts","../../../projects/chrv-components/src/lib/chr-datagrid/editable-cell/editable-cell.ts","../../../projects/chrv-components/src/lib/chr-datagrid/editable-cell/editable-cell.html","../../../projects/chrv-components/src/lib/models/FilterMode.enum.ts","../../../projects/chrv-components/src/lib/directives/outside-click-aware.directive.ts","../../../projects/chrv-components/src/lib/chr-datagrid/filter/column-filter.ts","../../../projects/chrv-components/src/lib/chr-datagrid/filter/column-filter.html","../../../projects/chrv-components/src/lib/models/GroupAggregationEnum.ts","../../../projects/chrv-components/src/lib/chr-datagrid/group/column-group.ts","../../../projects/chrv-components/src/lib/chr-datagrid/group/column-group.html","../../../projects/chrv-components/src/lib/directives/scroll-into-view.directive.ts","../../../projects/chrv-components/src/lib/directives/control-click.directive.ts","../../../projects/chrv-components/src/lib/chr-datagrid/data-grid/data-grid.ts","../../../projects/chrv-components/src/lib/chr-datagrid/data-grid/data-grid.html","../../../projects/chrv-components/src/lib/chr-message-banner/message-banner.ts","../../../projects/chrv-components/src/lib/chr-message-banner/message-banner.html","../../../projects/chrv-components/src/lib/directives/tab-to-enter-handler.directive.ts","../../../projects/chrv-components/src/lib/models/modal.ts","../../../projects/chrv-components/src/lib/services/modal.service.ts","../../../projects/chrv-components/src/lib/models/exporters/csvExporter.ts","../../../projects/chrv-components/src/lib/models/exporters/jsonExporter.ts","../../../projects/chrv-components/src/lib/services/data-exporter.service.ts","../../../projects/chrv-components/src/lib/services/cookie.service.ts","../../../projects/chrv-components/src/public-api.ts","../../../projects/chrv-components/src/chrv-components.ts"],"sourcesContent":["import { Component, inject, input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { MatButton } from '@angular/material/button';\r\n\r\nexport interface Breadcrumb {\r\n display: string;\r\n link?: string;\r\n callback?: Function;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chr-breadcrumb, chr-breadcrumb',\r\n templateUrl: './chr-breadcrumb.component.html',\r\n styleUrls: [\r\n './chr-breadcrumb.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [MatButton],\r\n})\r\nexport class BreadcrumbComponent {\r\n router = inject(Router);\r\n\r\n readonly crumbs = input<Breadcrumb[]>();\r\n\r\n navigateTo = (uri: string, data?: any) => {\r\n this.router.navigate([uri], { state: data });\r\n };\r\n}\r\n","<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\r\n @for (crumb of crumbs(); track crumb; let index = $index) {\r\n <div class=\"w-fit min-w-fit\">\r\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\r\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\r\n {{ crumb.display }}\r\n </button>\r\n @if (index < (crumbs()?.length || 1) - 1) {\r\n <span>></span>\r\n }\r\n </div>\r\n }\r\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 | 'text'\r\n | 'neutral'\r\n | 'background'\r\n | 'none';\r\n\r\nexport const ColorsVariables: { [key in Color]: string } = {\r\n primary: 'var(--primary-color)',\r\n 'primary-contrast': 'var(--primary-contrast-color)',\r\n secondary: 'var(--secondary-color)',\r\n 'secondary-contrast': 'var(--secondary-contrast-color)',\r\n tertiary: 'var(--tertiary-color)',\r\n 'tertiary-contrast': 'var(--tertiary-contrast-color)',\r\n warn: 'var(--warn-color)',\r\n 'warn-contrast': 'var(--warn-contrast-color)',\r\n error: 'var(--error-color)',\r\n 'error-contrast': 'var(--error-contrast-color)',\r\n text: 'var(--text-color)',\r\n background: 'var(--background-color)',\r\n none: 'transparent',\r\n white: 'white',\r\n neutral: 'var(--neutral-color)',\r\n black: 'black',\r\n};\r\n\r\nexport const Colors: { [key in Color]: 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 text: 'text',\r\n background: 'background',\r\n none: 'transparent',\r\n white: 'white',\r\n neutral: 'neutral',\r\n black: 'black',\r\n};\r\n\r\nexport function getTextColor(color: Color = 'none') {\r\n const c = Colors[color];\r\n return `text-${c !== undefined ? c : 'text-color'}`;\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 const c = Colors[color];\r\n return c !== undefined ? `bg-${c}` : 'bg-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 const c = Colors[color];\r\n return c !== undefined ? `border-${c}` : 'border-black';\r\n}\r\n\r\nexport function getContrastBorderColor(color: Color = 'none') {\r\n return getBorderColor(`${color}-contrast` as Color);\r\n}\r\n\r\nexport function getVariableColor(color: Color = 'none') {\r\n const c = ColorsVariables[color];\r\n return c !== undefined ? c : 'black';\r\n}\r\n\r\nexport function getVariableContrastColor(color: Color = 'none') {\r\n const c = ColorsVariables[`${color}-contrast` as Color];\r\n return c !== undefined ? c : 'white';\r\n}\r\n","import { Component, input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule, MatFabButton } from '@angular/material/button';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n Color,\r\n getBackgroundColor,\r\n getContrastTextColor,\r\n getTextColor,\r\n} from '../models/colors';\r\n\r\n@Component({\r\n selector: 'app-chr-button, chr-button',\r\n templateUrl: './chr-button.component.html',\r\n styleUrls: [\r\n './chr-button.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [MatTooltipModule, MatIconModule, MatButtonModule, CommonModule],\r\n})\r\nexport class ChrButtonComponent {\r\n readonly display = input<string | undefined>('');\r\n readonly icon = input<string | undefined>('');\r\n readonly click = input<Function>();\r\n readonly clickWhileDisabled = input<Function>();\r\n readonly color = input<Color>('primary');\r\n readonly textColor = input<Color | undefined>('primary-contrast');\r\n readonly flat = input<boolean>(false);\r\n\r\n readonly predicate = input<boolean | undefined>(true);\r\n readonly type = input<\r\n 'responsive' | 'table' | 'full' | 'fixed' | 'small' | 'none'\r\n >('none');\r\n readonly href = input<string>();\r\n readonly target = input<'_blank' | '_parent' | '_self' | '_top'>();\r\n readonly disabled = input<boolean>(false);\r\n readonly tooltip = input<string>();\r\n readonly tooltipPosition = input<\r\n 'above' | 'below' | 'left' | 'right' | 'before' | 'after'\r\n >();\r\n\r\n constructor() {}\r\n\r\n // setDisabled = (is: boolean) => {\r\n // this.disabled = is;\r\n // };\r\n\r\n doClick = () => {\r\n if (!this.disabled()) this.click()?.();\r\n else this.clickWhileDisabled()?.();\r\n };\r\n\r\n getBackgroundColor = (color: Color) => getBackgroundColor(color);\r\n\r\n getTextColor = (color: Color) => getContrastTextColor(color);\r\n\r\n getWidth = () => {\r\n switch (this.type()) {\r\n case 'fixed':\r\n return 'w-36';\r\n case 'full':\r\n return 'w-full';\r\n case 'responsive':\r\n return 'w-full';\r\n case 'small':\r\n return 'w-9';\r\n case 'table':\r\n return 'w-full';\r\n default:\r\n return 'w-min';\r\n }\r\n };\r\n\r\n getShadow = () => {\r\n if (this.flat()) return '';\r\n return 'button-shadow';\r\n };\r\n}\r\n","<a class=\"flex flex-row cursor-pointer items-center justify-center align-middle h-9 m-0 p-2 rounded-md\"\r\n style=\"--color: {{getBackgroundColor(color())}};\" [ngClass]=\"[getBackgroundColor(color()), getWidth(), getShadow()]\"\r\n [attr.disabled]=\"disabled() || false\" (click)=\"doClick()\" [attr.href]=\"href() && href()\" [attr.target]=\"target() && target()\"\r\n [matTooltip]=\"tooltip()||''\" [matTooltipPosition]=\"tooltipPosition()||'above'\">\r\n @if (display()) {\r\n <span [ngClass]=\"getTextColor(color())\"\r\n class=\"text-nowrap overflow-hidden text-ellipsis\">{{display()}}</span>\r\n }\r\n @if (icon()) {\r\n <mat-icon class=\"!m-0\" [ngClass]=\"getTextColor(color())\">{{ icon() }}</mat-icon>\r\n }\r\n</a>","import { InjectionToken } from '@angular/core';\r\nimport { ModalRef } from './modal';\r\n\r\nexport const CHR_MODAL_DATA = new InjectionToken<any>('CHR_MODAL_DATA', {\r\n providedIn: 'root',\r\n factory: () => null,\r\n});\r\n\r\nexport const CHR_MODAL_REF = new InjectionToken<ModalRef<any> | null>(\r\n 'CHR_MODAL_REF',\r\n {\r\n providedIn: 'root',\r\n factory: () => null,\r\n }\r\n);\r\n","import { Component, inject } from '@angular/core';\r\nimport {\r\n MatDialogRef,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDialogClose,\r\n} from '@angular/material/dialog';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { CHR_MODAL_REF } from '../models/modal-tokens';\r\nimport { ModalRef } from '../models/modal';\r\nimport { ChrModalComponent } from '../chr-modal/chr-modal.component';\r\n\r\n@Component({\r\n selector: 'app-chr-delete-modal, chr-delete-modal',\r\n templateUrl: './chr-delete-modal.component.html',\r\n styleUrls: [\r\n './chr-delete-modal.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [ChrButtonComponent, MatTooltip],\r\n})\r\nexport class ChrDeleteModalComponent {\r\n dialogRef = inject(CHR_MODAL_REF)!;\r\n\r\n public valid: boolean = false;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n public cancel = () => {\r\n this.dialogRef.close();\r\n };\r\n\r\n public close = () => {\r\n this.dialogRef.close(true);\r\n };\r\n}\r\n","<div class=\"w-full overflow-auto overflow-x-hidden p-6\"\n style=\"background-color: var(--background-color);border-radius: 0.5rem;\">\n <h2 class=\"dialog-title\">Supprimer un élément</h2>\n <div 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 </div>\n <div class=\"w-full flex flex-row justify-between pt-6\">\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</div>","import { Directive, forwardRef, Injectable, input } 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: '[chr-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 readonly required = input<boolean>(true);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const requiredValue = this.required();\r\n return requiredValue ? required(requiredValue)(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 if (required === false) return 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: {\r\n required: true,\r\n actual: value,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly expectedType = input<string>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const typeValue = this.expectedType();\r\n return typeValue ? type(typeValue)(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: {\r\n type: type,\r\n actual: typeof value,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly amount = input<number>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const amount = this.amount();\r\n return amount ? decimal(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 const str = `${value}`;\r\n const actual =\r\n str.indexOf(',') != -1\r\n ? str.split(',')[1].length || 1\r\n : str.indexOf('.') != -1\r\n ? str.split('.')[1].length || 1\r\n : -1;\r\n\r\n const isTooLong = actual != -1 && actual > amount;\r\n\r\n return isTooLong\r\n ? ({\r\n decimal: {\r\n decimal: amount,\r\n actual: actual,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 { isBefore, isValid } from 'date-fns';\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 readonly date = input<Date>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const date = this.date();\r\n return date ? maxDate(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 as Date;\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 !(isValid(value) && isBefore(value, date))\r\n ? ({\r\n maxdate: {\r\n maxdate: date,\r\n actual: value,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Injectable, input } 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 readonly max = input<number>(0);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const max = this.max();\r\n return max ? maxFileSize(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 fileSize = value[i].file!.size;\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: {\r\n maxfilesize: maxSize + 'mb',\r\n actual: ((fileSize || 0) / 1024 / 1024).toFixed(2) + 'mb',\r\n indexes: errors,\r\n },\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, Injectable, input } 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 readonly min = input<number>(0);\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const min = this.min();\r\n return min ? minFileSize(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: {\r\n minfilesize: minSize + 'mb',\r\n actual: ((fileSize || 0) / 1024 / 1024).toFixed(2) + 'mb',\r\n indexes: errors,\r\n },\r\n indexes: errors,\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly treshold = input<number>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const treshold = this.treshold();\r\n return treshold ? maxLength(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: {\r\n maxlength: treshold,\r\n actual: value.length,\r\n },\r\n } as ValidationErrors)\r\n : null;\r\n };\r\n}\r\n","import { Directive, forwardRef, Injectable, input } 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 readonly treshold = input<number>();\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const treshold = this.treshold();\r\n return treshold ? minLength(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: {\r\n minlength: treshold,\r\n actual: value.length,\r\n },\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\nimport { min } from 'lodash';\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 !`;\r\n validators.push(Validators.min(validation.value));\r\n }\r\n if (rule == 'max') {\r\n validation.display = `Cette valeur est trop grande !`;\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 !`;\r\n validators.push(minLength(validation.value));\r\n }\r\n if (rule == 'maxlength') {\r\n validation.display = `Cette valeur est trop grande !`;\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 !`;\r\n validators.push(decimal(validation.value));\r\n }\r\n if (rule == 'maxdate') {\r\n validation.display = `Cette date est trop grande !`;\r\n validators.push(maxDate(validation.value));\r\n }\r\n if (rule == 'maxfilesize') {\r\n validation.display = `Ce fichier est trop grand !`;\r\n validators.push(maxFileSize(validation.value));\r\n }\r\n if (rule == 'minfilesize') {\r\n validation.display = `Ce fichier est trop petit !`;\r\n validators.push(minFileSize(validation.value));\r\n }\r\n }\r\n return validators;\r\n}\r\n\r\nexport const BaseErrorDisplays = {\r\n min: `Cette valeur est trop petite !`,\r\n max: `Cette valeur est trop grande !`,\r\n required: 'Ce champs est requis !',\r\n email: \"Cette adresse email n'est pas valide !\",\r\n minlength: `Cette valeur est trop petite !`,\r\n maxlength: `Cette valeur est trop grande !`,\r\n type: \"Cette valeur n'est pas valide !\",\r\n decimal: `Le nombre de décimal n'est pas valide !`,\r\n maxdate: `Cette date est trop grande !`,\r\n maxfilesize: `Ce fichier est trop grand !`,\r\n minfilesize: `Ce fichier est trop petit !`,\r\n};\r\n","import { Directive, HostListener, ElementRef, inject, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[chrAutofocus]',\r\n})\r\nexport class AutofocusDirective {\r\n private host = inject(ElementRef);\r\n\r\n readonly chrAutofocus = input<(boolean | '' | null) | undefined>(false);\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 ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n computed,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\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 Observable,\r\n skip,\r\n skipWhile,\r\n Subject,\r\n Subscription,\r\n tap,\r\n} from 'rxjs';\r\nimport { InputType } from '../../models/controls';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\r\nimport { BaseErrorDisplays } from '../../models/chr-validators/base-validator';\r\n\r\n@Component({\r\n selector: 'chr-base-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n CommonModule,\r\n FormsModule,\r\n MatIcon,\r\n MatTooltipModule,\r\n AutofocusDirective,\r\n NgxMaskDirective,\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: [provideNgxMask()],\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 readonly label = input<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 readonly type = input<InputType>('text');\r\n\r\n /**\r\n * The id of the input.\r\n */\r\n readonly id = input<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 readonly name = model<string | null>(null);\r\n\r\n // private _value: any | null = null;\r\n // public get value() {\r\n // return this._value;\r\n // }\r\n // public set value(value: any | null) {\r\n // this._value = value;\r\n // }\r\n /**\r\n * The value of the input.\r\n */\r\n readonly value = model<any | null>(null);\r\n\r\n /**\r\n * The subject that holds the current value of the input.\r\n */\r\n readonly valueSubject: BehaviorSubject<any | null> = new BehaviorSubject(\r\n null\r\n );\r\n\r\n readonly displayValue = model<string | null>(null);\r\n\r\n readonly displayValueSubject = new BehaviorSubject<any | null>(null);\r\n\r\n /**\r\n * Override of the default input event that use the input's debouncing feature\r\n */\r\n readonly input = output<string>();\r\n /**\r\n * The subject that holds the input event values\r\n */\r\n readonly inputSubject = new Subject<string>();\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 readonly required = signal<boolean>(false);\r\n\r\n /**\r\n * Span that will be shown under the input\r\n */\r\n readonly span = input<string | null>(null);\r\n\r\n /**\r\n * Name of the material icon that will be displayed\r\n */\r\n readonly icon = input<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 readonly iconCallback = input<((value: any) => string | void) | null>(null);\r\n\r\n /**\r\n * Whether or not the icon's callback is enabled\r\n */\r\n readonly iconCallbackDisabled = input<boolean>(false);\r\n\r\n /**\r\n * Tooltip that will be displayed when hovering the input's icon\r\n */\r\n readonly iconTooltip = input<string | null>(null);\r\n\r\n /**\r\n * Tooltip that will be displayed on hover\r\n */\r\n readonly tooltip = input<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 readonly debounceTime = input<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 readonly validations = input<IControlValidation[]>([]);\r\n\r\n /**\r\n * The error messages to display for the input.\r\n * The key is the error name and the value the message to display\r\n */\r\n readonly errors = input<{ [index: string]: string } | null>(\r\n BaseErrorDisplays\r\n );\r\n\r\n private readonly errorDisplays = computed(() => {\r\n const displays = BaseErrorDisplays as { [index: string]: string | null };\r\n //Merge the validation displays and the error object value in a single object\r\n this.validations().forEach((validation) => {\r\n displays[validation.rule] = validation.display || null;\r\n });\r\n if (this.errors() !== null) {\r\n Object.keys(this.errors() || {}).forEach((key) => {\r\n displays[key] = this.errors()![key] || null;\r\n });\r\n }\r\n return displays;\r\n });\r\n\r\n /**\r\n * Event that will be triggered when the input is focused\r\n */\r\n public focus = output<void>();\r\n /**\r\n * Indicates whether or not this input should try catching the focus on page load\r\n */\r\n readonly autofocus = input<boolean>(false);\r\n\r\n /**\r\n * Event that will be triggered when the input is blurred (a.k.a) when the user clicks outside of the input or presses tab to leave the input.\r\n */\r\n public blur = output<void>();\r\n\r\n /**\r\n * Indicates whether or not this input should convert the file to base64 for it to be sent as part of the object.\r\n * If this is false, the file won't be converted and will be sent as part as the regular form process.\r\n * Default is true to allow full JS manipulation of files et upload progress report.\r\n */\r\n readonly base64 = input<boolean>(true);\r\n\r\n /**\r\n * The input element.\r\n * May be undefined if the template does not contain an input element with the 'input' reference.\r\n * May also be undefined depending the lifecycle of the component.\r\n * May not be what is expected (ex: for file inputs, the input element is not the one that is displayed but the one that is hidden).\r\n */\r\n public inputRef = viewChild<ElementRef<HTMLElement>>('input');\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 disabled = model<boolean>(false);\r\n\r\n /**\r\n * The autocomplete attribute of the input element\r\n */\r\n public autoComplete = input<string | null>(null);\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 readonly siblings = input<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 = signal<boolean>(false);\r\n\r\n /**\r\n * The NgControl associated with this input\r\n */\r\n protected control = signal<NgControl>(null as any);\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 * Input mask to be applied\r\n * @see https://www.npmjs.com/package/ngx-mask\r\n * @see https://jsdaddy.github.io/ngx-mask/#7\r\n */\r\n mask = input<string>('');\r\n\r\n /**\r\n * Mask expression shown in the input during typing\r\n */\r\n maskShownExpression = input<string | null>(null);\r\n\r\n /**\r\n * Should the mask be validated\r\n */\r\n maskValidation = input<boolean>(true);\r\n\r\n /**\r\n * Mask template shown below the input (for information purposes)\r\n */\r\n maskShownTemplate = input<string | null>(null);\r\n\r\n /**\r\n * Prefix to be added to the input value\r\n */\r\n maskPrefix = input<string | null>(null);\r\n /**\r\n * Suffix to be added to the input value\r\n */\r\n maskSuffix = input<string | null>(null);\r\n\r\n /**\r\n * Whether or not special characters should be removed from the value before it's set to the model.\r\n * Default is true\r\n */\r\n maskDropSpecialCharacters = input<boolean>(true);\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() {\r\n const ngControl = inject(NgControl, {\r\n optional: true,\r\n self: true,\r\n });\r\n this.control.set(ngControl as 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 //\r\n this.configureInitialDisplayValue();\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.set(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 if (this.name() === null)\r\n this.name.set(this.control()?.name ? String(this.control()?.name) : null);\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.valueSubject?.complete();\r\n this.displayValueSubject.complete();\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.valueSubject.asObservable();\r\n };\r\n\r\n writeValue(obj: any): void {\r\n this.displayValueSubject.next(obj);\r\n this.value.set(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.set(true);\r\n fn();\r\n };\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n /**\r\n * Forces the input element to take focus.\r\n */\r\n forceFocus = () => {\r\n this.inputRef()?.nativeElement.focus();\r\n };\r\n\r\n /**\r\n * Forces the input element to lose focus.\r\n */\r\n forceBlur = () => {\r\n this.inputRef()?.nativeElement.blur();\r\n };\r\n\r\n getRawValue = () => {\r\n const value: { value: any; disabled: boolean } | undefined | null | any =\r\n this.value();\r\n if (\r\n value !== null &&\r\n typeof value === 'object' &&\r\n value?.disabled !== undefined\r\n ) {\r\n return value.value;\r\n }\r\n return value;\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 key in this.control()?.errors || {}) {\r\n const error = this.control().errors?.[key];\r\n const actual = error?.['actual'];\r\n const display = this.errorDisplays()[key];\r\n if (display)\r\n return actual\r\n ? `${display} (limite: ${error[key]}, saisie: ${actual})`\r\n : this.errorDisplays()[key];\r\n\r\n return \"Cette valeur n'est pas valide !\";\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 this.control()?.errors?.['required'] !== undefined;\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 (\r\n this.control()?.errors !== undefined && this.control()?.errors !== null\r\n );\r\n };\r\n\r\n private configureDebouncing = () => {\r\n 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 = typeof res === 'string' && res.trim() === '' ? null : res;\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 !== null) value = Number(value);\r\n this.onChange(value);\r\n this.writeValue(value);\r\n });\r\n this.inputSubject\r\n .pipe(debounceTime(this.debounceTime() ?? 200), distinctUntilChanged())\r\n .subscribe((res) => {\r\n this.input.emit(res);\r\n });\r\n };\r\n\r\n private configureInitialDisplayValue = () => {\r\n this.valueSubject\r\n .pipe(skipWhile((res) => res === null))\r\n .subscribe((res: any) => {\r\n this.displayValue.set(res);\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 const control = this.control()?.control;\r\n //We add the validators to the input.\r\n for (const validator of getValidators(this.validations())) {\r\n control?.addValidators(validator);\r\n }\r\n\r\n control?.statusChanges?.subscribe((res) => {\r\n this.required.set(this.isControlRequired());\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 protected doCallback = () => {\r\n if (this.iconCallbackDisabled()) return;\r\n this.iconCallback()?.(this.getValue());\r\n };\r\n\r\n protected onHtmlInput = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.inputSubject.next((event.target as any).value);\r\n };\r\n\r\n protected visualState = () => {\r\n if (this.isTouched()) {\r\n return this.hasError()\r\n ? 'error'\r\n : this.value() === null ||\r\n this.value() === undefined ||\r\n this.value()?.length === 0\r\n ? 'empty'\r\n : 'valid';\r\n }\r\n return 'default';\r\n };\r\n}\r\n","<div class=\"input-wrapper\">\r\n <!-- <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [chrAutofocus]=\"autofocus() || false\" [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\"\r\n (blur)=\"blur.emit()\" (focus)=\"focus.emit()\" [ngModel]=\"value()\" (ngModelChange)=\"onValueChange($event)\"\r\n [mask]=\"mask()\" [shownMaskExpression]=\"maskShownTemplate()\" [prefix]=\"maskPrefix()||''\" [suffix]=\"maskSuffix()||''\"\r\n [dropSpecialCharacters]=\"maskDropSpecialCharacters()\" [validation]=\"maskValidation()\" [type]=\"type()\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" [disabled]=\"disabled()\" [attr.data-disabled]=\"disabled()\"\r\n [autocomplete]=\"type() == 'password' ? 'current-password': autoComplete()\" placeholder=\" \"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\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 <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [chrAutofocus]=\"autofocus() || false\" [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\"\r\n (blur)=\"blur.emit()\" (focus)=\"focus.emit()\" [ngModel]=\"value()\" (ngModelChange)=\"onValueChange($event)\"\r\n [mask]=\"mask()\" [shownMaskExpression]=\"maskShownTemplate()\" [prefix]=\"maskPrefix()||''\" [suffix]=\"maskSuffix()||''\"\r\n [dropSpecialCharacters]=\"maskDropSpecialCharacters()\" [validation]=\"maskValidation()\" [type]=\"type()\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" [disabled]=\"disabled()\" [attr.data-disabled]=\"disabled()\"\r\n (input)=\"onHtmlInput($event)\" [autocomplete]=\"type() == 'password' ? 'current-password': autoComplete()\"\r\n placeholder=\" \" [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\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 @if (label() !== null) {\r\n <label 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 <span class=\"text-error\">{{ getLastError() }}</span>\r\n }\r\n </label>\r\n }\r\n\r\n @if (icon() && !disabled()) {\r\n <span [ngClass]=\"iconCallbackDisabled() ? '':'cursor-pointer'\" class=\"absolute top-1/2 right-0 -translate-y-1/2\"\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(maskShownTemplate()) {\r\n <span class=\"text-xs text-span\">Format: {{ maskShownTemplate() }}</span>\r\n <br>\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 {\r\n Overlay,\r\n OverlayRef,\r\n CdkOverlayOrigin,\r\n CdkConnectedOverlay,\r\n CdkScrollable,\r\n} from '@angular/cdk/overlay';\r\nimport { CdkPortal, PortalModule, TemplatePortal } from '@angular/cdk/portal';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ApplicationRef,\r\n Component,\r\n computed,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n EnvironmentInjector,\r\n inject,\r\n input,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n Renderer2,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n viewChildren,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'chr-data-list',\r\n imports: [\r\n CommonModule,\r\n CdkOverlayOrigin,\r\n CdkConnectedOverlay,\r\n CdkScrollable,\r\n ScrollingModule,\r\n ],\r\n templateUrl: './chr-data-list.html',\r\n styleUrl: './chr-data-list.scss',\r\n})\r\nexport class DataListComponent implements OnDestroy {\r\n public overlay = inject(Overlay);\r\n public suggestions = input.required<any[]>();\r\n public for = input<string | null>(null);\r\n public allowStringify = input<boolean>(false);\r\n public display = input<(item: any) => string>();\r\n public targetElement = input<HTMLInputElement | null>(null);\r\n // public targetInput = signal<HTMLInputElement>(undefined as any);\r\n public targetInput = computed(() => {\r\n if (this.targetElement()) {\r\n return this.targetElement()!;\r\n } else {\r\n if (!this.for()) {\r\n throw new Error(\r\n 'Either targetInput or input name must be provided to DataListComponent.'\r\n );\r\n }\r\n return document.querySelector(\r\n `input[name=\"${this.for()}\"]`\r\n ) as HTMLInputElement;\r\n }\r\n });\r\n\r\n public displayFn = computed(() => {\r\n if (this.display()) {\r\n return this.display()!;\r\n } else if (this.allowStringify()) {\r\n return (item: any) => JSON.stringify(item);\r\n } else {\r\n return (item: any) => String(item);\r\n }\r\n });\r\n\r\n public isOpen = signal(false);\r\n public filterValue = signal('');\r\n public focusedIndex = signal(-1);\r\n public optionSelected = output<{ value: any; index: number }>();\r\n\r\n protected position = signal<{\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n zIndex: string;\r\n }>({\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n height: 0,\r\n zIndex: '10',\r\n });\r\n private optionElements = viewChildren<ElementRef>('optionElement');\r\n private renderer = inject(Renderer2);\r\n private eventListeners: (() => void)[] = [];\r\n private overlayRef: OverlayRef | null = null;\r\n //private portalRef;\r\n public filteredSuggestions = computed(() => {\r\n const filter = this.filterValue().toLowerCase();\r\n const indexed = this.suggestions().map((suggestion, index) => ({\r\n display: this.displayFn()(suggestion),\r\n index: index,\r\n }));\r\n\r\n if (!filter) return indexed;\r\n const filtered = indexed.filter(\r\n (suggestion: { display: string; index: number }) =>\r\n suggestion.display.toLowerCase().includes(filter)\r\n );\r\n\r\n return filtered;\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const target = this.targetInput();\r\n this.removeEventListeners();\r\n if (target) {\r\n this.setupEventListeners(target);\r\n }\r\n });\r\n effect(() => {\r\n if (this.targetInput()) this.positionDropdown();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeEventListeners();\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef.detach();\r\n this.overlayRef = null;\r\n }\r\n }\r\n\r\n public open() {\r\n this.isOpen.set(true);\r\n this.focusedIndex.set(-1);\r\n if (!this.filterValue() && this.targetInput().value) {\r\n this.filterValue.set(this.targetInput().value);\r\n }\r\n this.targetElement()?.focus();\r\n }\r\n\r\n public close() {\r\n this.isOpen.set(false);\r\n this.focusedIndex.set(-1);\r\n }\r\n\r\n public updateFilter(value: string) {\r\n this.filterValue.set(value);\r\n // if (this.filteredSuggestions().length > 0) {\r\n // this.open();\r\n // }\r\n if (this.isOpen() && this.filteredSuggestions().length > 0) {\r\n this.focusedIndex.set(-1);\r\n }\r\n }\r\n\r\n public selectOption(index: number) {\r\n const value = this.suggestions()[index];\r\n this.optionSelected.emit({ value: value, index: index });\r\n this.close();\r\n this.targetInput()?.blur();\r\n }\r\n\r\n public selectFocused() {\r\n const index = this.focusedIndex();\r\n if (this.filteredSuggestions().length > 0) this.selectOption(index);\r\n }\r\n\r\n private scrollSelectedIntoView(filteredIndex: number) {\r\n if (filteredIndex >= 0) {\r\n this.optionElements()[filteredIndex]?.nativeElement?.scrollIntoView({\r\n behavior: 'auto',\r\n block: 'nearest',\r\n container: 'nearest',\r\n });\r\n }\r\n }\r\n\r\n public focusNext() {\r\n const filtered = this.filteredSuggestions();\r\n if (filtered.length === 0) return;\r\n const currentIndex = this.focusedIndex();\r\n const currentFilteredIndex = filtered.findIndex(\r\n (item) => item.index === currentIndex\r\n );\r\n const nextFilteredIndex = (currentFilteredIndex + 1) % filtered.length;\r\n this.focusedIndex.set(filtered[nextFilteredIndex].index);\r\n this.scrollSelectedIntoView(nextFilteredIndex);\r\n }\r\n\r\n public focusPrevious() {\r\n const filtered = this.filteredSuggestions();\r\n if (filtered.length === 0) return;\r\n const currentIndex = this.focusedIndex();\r\n const currentFilteredIndex = filtered.findIndex(\r\n (item) => item.index === currentIndex\r\n );\r\n const previousFilteredIndex =\r\n (currentFilteredIndex - 1 + filtered.length) % filtered.length;\r\n this.focusedIndex.set(filtered[previousFilteredIndex].index);\r\n this.scrollSelectedIntoView(previousFilteredIndex);\r\n }\r\n\r\n private positionDropdown() {\r\n const inputRect = this.targetInput()?.getBoundingClientRect()!;\r\n const parentStyle = getComputedStyle(this.targetInput()!);\r\n const parentZIndex = parentStyle.zIndex;\r\n\r\n this.position.set({\r\n top: 0,\r\n left: 0,\r\n width: inputRect.width,\r\n height: inputRect.height,\r\n zIndex: parentZIndex == 'auto' ? '10' : Number(parentZIndex) + 1 + '',\r\n });\r\n }\r\n\r\n private setupEventListeners(target: HTMLInputElement) {\r\n // Nettoyer les anciens listeners avant d'en créer de nouveaux\r\n this.removeEventListeners();\r\n\r\n // Focus - ouvrir la liste\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'focus', () => {\r\n this.positionDropdown();\r\n this.open();\r\n })\r\n );\r\n\r\n // Click - ouvrir la liste\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'click', () => {\r\n this.positionDropdown();\r\n this.open();\r\n })\r\n );\r\n\r\n // Input - mettre à jour le filtre\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'input', (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n this.updateFilter(input.value);\r\n })\r\n );\r\n\r\n // Blur - fermer avec délai pour permettre le clic sur une option\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'blur', () => {\r\n setTimeout(() => {\r\n this.close();\r\n }, 200);\r\n })\r\n );\r\n\r\n // Escape - fermer et redonner le focus\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'keyup.escape', () => {\r\n this.close();\r\n target.focus();\r\n })\r\n );\r\n\r\n // ArrowDown - naviguer vers le bas\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'keydown.arrowdown', (event: Event) => {\r\n event.preventDefault();\r\n this.focusNext();\r\n })\r\n );\r\n\r\n // ArrowUp - naviguer vers le haut\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'keydown.arrowup', (event: Event) => {\r\n event.preventDefault();\r\n this.focusPrevious();\r\n })\r\n );\r\n\r\n // Enter - sélectionner l'option focalisée\r\n this.eventListeners.push(\r\n this.renderer.listen(target, 'keyup.enter', (event: Event) => {\r\n if (this.isOpen() && this.focusedIndex() >= 0) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.stopImmediatePropagation();\r\n this.selectFocused();\r\n }\r\n })\r\n );\r\n }\r\n\r\n private removeEventListeners() {\r\n this.eventListeners.forEach((unlisten) => unlisten());\r\n this.eventListeners = [];\r\n }\r\n}\r\n","<div cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" [class.open]=\"isOpen()\">\r\n <span class=\"material-symbols custom-datalist-arrow\" [style.top.px]=\"position().top + position().height / 2\"\r\n [style.right.px]=\"0\" [attr.data-open]=\"isOpen()\" (click)=\"isOpen() ? close() : open()\">arrow_right</span>\r\n</div>\r\n<ng-template #datalistTemplate cdkConnectedOverlay cdkScrollable [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"isOpen()\">\r\n @if (filteredSuggestions().length > 0) {\r\n <div class=\"custom-datalist\" [attr.data-open]=\"isOpen()\" [style.top.px]=\"position().top\"\r\n [style.left.px]=\"position().left\" [style.width.px]=\"position().width\" [style.zIndex]=\"position().zIndex\"\r\n (mousedown)=\"$event.preventDefault();$event.stopPropagation();$event.stopImmediatePropagation();\">\r\n <div class=\"datalist-content\">\r\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"40\" [style.height.px]=\"filteredSuggestions().length * 40\"\r\n [style.maxHeight.px]=\"200\" [style.maxWidth.px]=\"position().width\" class=\"viewport\">\r\n <div *cdkVirtualFor=\"let option of filteredSuggestions(); let i = index\" #optionElement\r\n class=\"datalist-option\" [class.focused]=\"focusedIndex() === option.index\" [title]=\"option.display\"\r\n (click)=\"selectOption(option.index)\" (mouseenter)=\"focusedIndex.set(option.index)\" tabindex=\"-1\">\r\n {{ option.display }}\r\n </div>\r\n </cdk-virtual-scroll-viewport>\r\n <!-- @for (option of filteredSuggestions(); track $index; let i = $index) {\r\n <div #optionElement class=\"datalist-option\" [class.focused]=\"focusedIndex() === option.index\"\r\n (click)=\"selectOption(option.index)\" (mouseenter)=\"focusedIndex.set(option.index)\" tabindex=\"-1\">\r\n {{ option.display }}\r\n </div>\r\n } -->\r\n </div>\r\n </div>\r\n }\r\n <!-- <span class=\"material-symbols custom-datalist-arrow\" [attr.data-open]=\"isOpen()\"\r\n (click)=\"isOpen() ? close() : open()\">arrow_right</span> -->\r\n</ng-template>","import {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n Injector,\r\n inject,\r\n input,\r\n viewChild,\r\n signal,\r\n effect,\r\n output,\r\n model,\r\n} from '@angular/core';\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 {\r\n MatAutocomplete,\r\n MatAutocompleteModule,\r\n} from '@angular/material/autocomplete';\r\nimport {\r\n Observable,\r\n startWith,\r\n map,\r\n BehaviorSubject,\r\n Subject,\r\n combineLatest,\r\n of,\r\n combineLatestWith,\r\n tap,\r\n} from 'rxjs';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AsyncPipe, CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n//import { rotationAnimation } from '../animations/rotation.animation';\r\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { AutofocusDirective } from '../directives/autofocus.directive';\r\nimport { InputType } from '../models/controls';\r\nimport { sign } from 'crypto';\r\nimport { DataListComponent } from '../chr-data-list/chr-data-list';\r\n\r\nexport interface IInputSearchFilter {\r\n display: string;\r\n callback?: Function;\r\n tooltip?: string;\r\n}\r\n\r\n@Component({\r\n selector:\r\n 'app-chr-search-select, [app-chr-search-select], chr-search-select, [chr-search-select]',\r\n templateUrl: './chr-search-select.component.html',\r\n styleUrls: [\r\n './chr-search-select.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // multi: true,\r\n // useExisting: ChrSearchSelectComponent,\r\n // },\r\n ],\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTooltip,\r\n AsyncPipe,\r\n MatIconModule,\r\n MatError,\r\n CommonModule,\r\n MatError,\r\n AutofocusDirective,\r\n DataListComponent,\r\n ],\r\n //animations: [rotationAnimation(180, 90, 200)],\r\n})\r\nexport class ChrSearchSelectComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, OnDestroy\r\n{\r\n public predicate: boolean = true;\r\n public filteredModelOptions?: Observable<any>;\r\n readonly _inputText = signal<string | null>(null);\r\n readonly values: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n // readonly autocomplete = viewChild.required<MatAutocomplete>('auto');\r\n\r\n readonly placeholder = input<string>();\r\n readonly data = input<any[] | null>([]);\r\n readonly data$ = new BehaviorSubject<any[]>([]);\r\n readonly display = input<(entry: any) => string>();\r\n readonly filters = input<IInputSearchFilter[] | null>(null);\r\n override readonly type = input<InputType>('searchSelect');\r\n\r\n /**\r\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\r\n * If this callback returns null, the entry will NOT be added.\r\n * This lets you update the value before it's added.\r\n */\r\n readonly addCallback = input<\r\n | (((entry: any, subject: Subject<any>) => any | null | void) | null)\r\n | undefined\r\n >(null);\r\n //Subject used in callback methods to update the value when received.\r\n private addSubject: Subject<any> = new Subject();\r\n /**\r\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\r\n * This defaults to false.\r\n * If there are neither data nor display function, this defaults to true.\r\n */\r\n readonly acceptText = input<boolean | null>(null);\r\n protected filterIndex = signal<number>(0);\r\n protected overrideShowResults = signal<boolean>(false);\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n super();\r\n\r\n effect(() => {\r\n this.data$.next(this.data() || []);\r\n });\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this.addSubject.subscribe((entry) => {\r\n if (this.value() != entry) {\r\n this.onValueChange(this.value());\r\n }\r\n });\r\n // Only when the value is valid, we override the display value with the value\r\n // We need to avoid setting it when the value is set to null because it would\r\n // Remove the user's input a few milliseconds after he starts typing to replace a value\r\n this.displayValueSubject.subscribe((v) => {\r\n if (v !== null && v !== undefined) {\r\n this.displayValue.set(this.getModelDisplay(v));\r\n }\r\n });\r\n // Value subject is not initially called with the default value or the set value of the formcontrol\r\n // this.displayValue.set(this.value());\r\n }\r\n\r\n /**\r\n * Reset the input's text and sets the value to null as to invalidate the input\r\n */\r\n protected reset = () => {\r\n this.values.next('');\r\n this.onValueChange(null);\r\n };\r\n\r\n /**\r\n * Set's the input's text's value and set the value to null as to invalidate the input\r\n * @param input text input\r\n */\r\n protected inputChange = (input: string) => {\r\n this.onValueChange(null);\r\n this.values.next(input);\r\n };\r\n\r\n /**\r\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.\r\n * @param model the data's entry for which we want the textual value\r\n * */\r\n protected getModelDisplay = (model: any) => {\r\n const display = this.display();\r\n return display ? display?.(model) : model;\r\n };\r\n\r\n /**\r\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.\r\n * @param input the input in which the user should type\r\n */\r\n protected increment = (input: any) => {\r\n this.onValueChange(null);\r\n this.values.next('');\r\n\r\n input.blur();\r\n\r\n const filters = this.filters();\r\n const modulo = filters ? filters.length : 1;\r\n this.filterIndex.set((this.filterIndex() + 1) % modulo);\r\n\r\n setTimeout(() => {\r\n input.focus();\r\n }, 250);\r\n };\r\n\r\n protected enableShowPanel = (input: any) => {\r\n this.values.next(' ');\r\n this.overrideShowResults.set(true);\r\n input.focus();\r\n };\r\n\r\n protected disableShowPanel = () => {\r\n //this.searchSelect.setValue('', { emitViewToModelChange: false });\r\n this.overrideShowResults.set(false);\r\n };\r\n\r\n protected addFromText = (event: any) => {\r\n if (this.acceptText() && this.value()?.trim()) {\r\n const addCallback = this.addCallback();\r\n const value = addCallback\r\n ? addCallback(this.value(), this.addSubject)\r\n : this.value();\r\n if (this.addCallback() && (value === null || value === undefined)) {\r\n this.value.set('');\r\n return;\r\n }\r\n this.addSubject.next(value);\r\n }\r\n };\r\n}\r\n","@if (predicate) {\r\n<div style=\"position: relative;\">\r\n <div class=\"input-wrapper\">\r\n <input [matTooltip]=\"disabled() ? '': (tooltip() ? tooltip(): 'Entrez un espace pour voir les choix disponibles')\"\r\n [chrAutofocus]=\"autofocus() || false\" matTooltipPosition=\"above\" #input type=\"text\" [name]=\"name() ?? id() ?? ''\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\"\r\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\"\r\n placeholder=\"{{ placeholder() || ' ' }}\" (keyup.backspace)=\"reset()\" [ngModel]=\"displayValue()\"\r\n [disabled]=\"disabled()\" (keyup.enter)=\"addFromText($event)\" (ngModelChange)=\"inputChange($event)\"\r\n (input)=\"onHtmlInput($event)\" (blur)=\"onTouch()\" (blur)=\"disableShowPanel()\" [attr.data-touched]=\"isTouched()\"\r\n [attr.data-state]=\"visualState()\" />\r\n\r\n @if (label() !== null) {\r\n <label 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 <ng-content></ng-content>\r\n <div\r\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\">\r\n <!-- <mat-icon matTooltipPosition=\"above\" class=\"rotate cursor-pointer\" [class.rotated]=\"overrideShowResults()\"\r\n [attr.data-initial-angle]=\"0\" [attr.data-end-angle]=\"90\" [attr.data-duration]=\"200\"\r\n (click)=\"enableShowPanel(input)\">\r\n arrow_right\r\n </mat-icon> -->\r\n @if (filters()) {\r\n <span [matTooltip]=\"filters()?.[filterIndex()]!.tooltip || ''\" matTooltipPosition=\"above\"\r\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center mr-[1rem]\r\n align-middle items-center\" (click)=\"filters() && increment(input)\">\r\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{\r\n filters()?.[filterIndex()]!.display\r\n }}\r\n </p>\r\n </span>\r\n }\r\n </div>\r\n <chr-data-list [suggestions]=\"(data$ | async) ?? []\" [targetElement]=\"input\" [display]=\"getModelDisplay\"\r\n (optionSelected)=\"onValueChange($event.value)\"></chr-data-list>\r\n </div>\r\n <!-- <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id()}}-auto\"\r\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\r\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"onValueChange($event.option.value)\">\r\n @for (model of filteredModelOptions | async; track model) {\r\n <mat-option class=\"\" [value]=\"model\" selected>\r\n {{ getModelDisplay(model) }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete> -->\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}","import {\r\n AfterViewChecked,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Input,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\nimport {\r\n Color,\r\n getVariableColor,\r\n getVariableContrastColor,\r\n} from '../models/colors';\r\n\r\n@Component({\r\n selector: 'chr-context-menu',\r\n imports: [],\r\n templateUrl: './chr-context-menu.component.html',\r\n styleUrls: [\r\n './chr-context-menu.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n standalone: true,\r\n})\r\nexport class ChrContextMenuComponent implements AfterViewInit {\r\n private elementRef = inject(ElementRef);\r\n public items = input.required<IContextMenuItem[]>();\r\n public origin = input.required<{ x: number; y: number }>();\r\n public click = output<any>();\r\n\r\n public trigger = (item: IContextMenuItem): void => {\r\n item.action();\r\n this.click.emit(item);\r\n };\r\n\r\n ngAfterViewInit(): void {\r\n this.position();\r\n }\r\n\r\n getVariableColor(color: Color): string {\r\n return getVariableColor(color);\r\n }\r\n\r\n getVariableContrastColor(color: Color): string {\r\n return getVariableContrastColor(color);\r\n }\r\n\r\n private position = () => {\r\n const element = this.elementRef.nativeElement;\r\n const menuRect = element.getBoundingClientRect();\r\n const viewportWidth = window.innerWidth + window.scrollX;\r\n const viewportHeight = window.innerHeight + window.scrollY;\r\n\r\n let adjustedX = this.origin().x;\r\n let adjustedY = this.origin().y;\r\n\r\n if (adjustedX + menuRect.width > viewportWidth) {\r\n adjustedX = viewportWidth - menuRect.width - 25;\r\n }\r\n\r\n if (adjustedY + menuRect.height > viewportHeight) {\r\n adjustedY = viewportHeight - menuRect.height - 25;\r\n }\r\n\r\n element.style.left = `${adjustedX}px`;\r\n element.style.top = `${adjustedY}px`;\r\n };\r\n}\r\n","<div class=\"context-menu-wrapper\">\r\n <div class=\"context-menu\">\r\n <ul class=\"context-menu-list\">\r\n @for (item of items(); track item) {\r\n <li class=\"context-menu-item\" (click)=\"trigger(item)\" [style]=\"{\r\n 'background-color': getVariableColor(item.color || 'background'), \r\n 'color': item.color ? getVariableContrastColor(item.color) : getVariableColor('text'),\r\n '--ctm-main-color': getVariableColor(item.color || 'background')\r\n }\">\r\n <span class=\"context-menu-icon\">{{ item.icon }}</span>\r\n @if(item.label){\r\n <span class=\"context-menu-text\">{{ item.label }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n Directive,\r\n ElementRef,\r\n EnvironmentInjector,\r\n HostListener,\r\n inject,\r\n input,\r\n OnDestroy,\r\n output,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { ChrContextMenuComponent } from '../chr-context-menu/chr-context-menu.component';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\n\r\n/**\r\n * Directive that handles right-click events and show a list of actions in a context menu\r\n */\r\n@Directive({\r\n selector: '[contextMenu], [chrContextMenu], [chr-right-click]',\r\n})\r\nexport class ContextMenuDirective implements OnDestroy {\r\n private elementRef = inject(ElementRef<HTMLElement>);\r\n private appRef = inject(ApplicationRef);\r\n private injector = inject(EnvironmentInjector);\r\n /**\r\n * List of context IContextMenuItem to display\r\n */\r\n public contextMenu = input<IContextMenuItem[]>([]);\r\n private menuComponentRef: ComponentRef<ChrContextMenuComponent> | null = null;\r\n\r\n @HostListener('contextmenu', ['$event'])\r\n onRightClick(event: MouseEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.closeMenu();\r\n\r\n this.createMenuComponent(event);\r\n }\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n // Fermer le menu si on clique en dehors\r\n if (this.menuComponentRef) {\r\n const menuElement = this.menuComponentRef.location.nativeElement;\r\n if (!menuElement.contains(event.target as Node)) {\r\n this.closeMenu();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscapeKey(): void {\r\n this.closeMenu();\r\n }\r\n\r\n private createMenuComponent(event: MouseEvent): void {\r\n this.menuComponentRef = createComponent(ChrContextMenuComponent, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n this.menuComponentRef.setInput('items', this.contextMenu());\r\n this.menuComponentRef.setInput('origin', {\r\n x: event.pageX,\r\n y: event.pageY,\r\n });\r\n\r\n this.menuComponentRef.instance.click.subscribe(() => {\r\n this.closeMenu();\r\n });\r\n\r\n this.appRef.attachView(this.menuComponentRef.hostView);\r\n\r\n const menuElement = this.menuComponentRef.location.nativeElement;\r\n document.body.appendChild(menuElement);\r\n }\r\n\r\n private closeMenu(): void {\r\n if (this.menuComponentRef) {\r\n this.appRef.detachView(this.menuComponentRef.hostView);\r\n\r\n const menuElement = this.menuComponentRef.location.nativeElement;\r\n if (menuElement.parentNode) {\r\n menuElement.parentNode.removeChild(menuElement);\r\n }\r\n\r\n this.menuComponentRef.destroy();\r\n this.menuComponentRef = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.closeMenu();\r\n }\r\n}\r\n","import {\r\n Component,\r\n AfterViewInit,\r\n OnInit,\r\n OnDestroy,\r\n Injector,\r\n Output,\r\n EventEmitter,\r\n inject,\r\n input,\r\n viewChild,\r\n signal,\r\n effect,\r\n} from '@angular/core';\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 {\r\n MatAutocomplete,\r\n MatAutocompleteModule,\r\n} from '@angular/material/autocomplete';\r\nimport {\r\n Observable,\r\n startWith,\r\n map,\r\n BehaviorSubject,\r\n Subject,\r\n combineLatestWith,\r\n} from 'rxjs';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { AsyncPipe, CommonModule } from '@angular/common';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n//import { rotationAnimation } from '../animations/rotation.animation';\r\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { IInputSearchFilter } from '../chr-search-select/chr-search-select.component';\r\nimport { AutofocusDirective } from '../directives/autofocus.directive';\r\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\nimport { InputType } from '../models/controls';\r\nimport { DataListComponent } from '../chr-data-list/chr-data-list';\r\n\r\n@Component({\r\n selector:\r\n 'app-chr-tag-select, [app-chr-tag-select], chr-tag-select, [chr-tag-select]',\r\n templateUrl: './chr-tag-select.component.html',\r\n styleUrls: [\r\n './chr-tag-select.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n providers: [\r\n // {\r\n // provide: NG_VALUE_ACCESSOR,\r\n // multi: true,\r\n // useExisting: ChrTagSelectComponent,\r\n // },\r\n ],\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTooltip,\r\n MatChipsModule,\r\n DataListComponent,\r\n AsyncPipe,\r\n MatIconModule,\r\n MatError,\r\n CommonModule,\r\n MatError,\r\n AutofocusDirective,\r\n ContextMenuDirective,\r\n ],\r\n //animations: [rotationAnimation(180, 90, 200)],\r\n})\r\nexport class ChrTagSelectComponent\r\n extends ChrBaseInputComponent\r\n implements ControlValueAccessor, OnInit, OnDestroy\r\n{\r\n public predicate: boolean = true;\r\n\r\n readonly autocomplete = viewChild.required<MatAutocomplete>('auto');\r\n\r\n protected overrideShowResults: boolean = false;\r\n\r\n public filteredModelOptions?: Observable<any>;\r\n\r\n protected textInputValue = signal<string>('');\r\n\r\n private values: BehaviorSubject<string> = new BehaviorSubject<string>('');\r\n\r\n readonly placeholder = input<string>();\r\n readonly data = input<any[] | null>([]);\r\n readonly data$ = new BehaviorSubject<any[]>([]);\r\n\r\n readonly display = input<(entry: any) => string>();\r\n readonly filters = input<IInputSearchFilter[] | null>(null);\r\n override readonly type = input<InputType>('tagSelect');\r\n\r\n /**\r\n * Callback that will be called on click of a chips. The entry will be passed as parameter.\r\n * If this callback returns null, the entry will be removed.\r\n * If this callback returns a different value (by reference (ex: different object)) the entry will be replaced by the new value.\r\n */\r\n readonly editCallback = input<\r\n | (((entry: any, subject: Subject<any>) => any | null | void) | null)\r\n | undefined\r\n >(null);\r\n //Subject used in callback methods to update the value when received.\r\n private editSubject: Subject<any> = new Subject();\r\n /**\r\n * Callback that will be called BEFORE the value is added with the selected value passed as parameter.\r\n * If this callback returns null, the entry will NOT be added.\r\n * This lets you update the value before it's added.\r\n */\r\n readonly addCallback = input<\r\n | (((entry: any, subject: Subject<any>) => any | null | void) | null)\r\n | undefined\r\n >(null);\r\n //Subject used in callback methods to update the value when received.\r\n private addSubject: Subject<any> = new Subject();\r\n\r\n /**\r\n * Callback that will be called during the removal of the value. This will be called with the deleted value passed as parameter.\r\n */\r\n readonly removeCallback = input<((entry: any) => any | null | void) | null>(\r\n null\r\n );\r\n\r\n /**\r\n * Indicate if the input accepts raw text or if the requires the selection to be made from the search list.\r\n * This defaults to false.\r\n * If there are neither data nor display function, this defaults to true.\r\n */\r\n readonly acceptText = input<boolean | null>(\r\n (this.display() === null && this.data() === null) || null\r\n );\r\n\r\n constructor() {\r\n super();\r\n this.addSubject.subscribe((entry) => {\r\n if (!this.value()?.find((v: any) => v == entry)) {\r\n const updated = [...(this.value() || []), entry];\r\n this.onValueChange(updated.length > 0 ? updated : null);\r\n }\r\n });\r\n this.editSubject.subscribe((entry) => {\r\n const index = this.value()?.indexOf(entry)!;\r\n this.value.update((value) => {\r\n value![index] = entry;\r\n return [...(value ?? [])];\r\n });\r\n return this.onValueChange(this.value());\r\n });\r\n effect(() => {\r\n this.data$.next(this.data() || []);\r\n });\r\n }\r\n\r\n protected filterIndex = signal<number>(0);\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n //console.log(this.value);\r\n\r\n //this.registerFilters();\r\n }\r\n\r\n protected reset = () => {\r\n this.textInputValue.set('');\r\n this.values.next(' ');\r\n };\r\n\r\n protected inputChange = (input: string) => {\r\n this.textInputValue.set(input);\r\n this.values.next(input);\r\n };\r\n\r\n protected getModelDisplay = (model: any) => {\r\n const display = this.display();\r\n return display ? display?.(model) : model;\r\n };\r\n\r\n protected addFromText = (event: any) => {\r\n if (this.acceptText() && this.textInputValue().trim()) {\r\n const addCallback = this.addCallback();\r\n const value = addCallback\r\n ? addCallback(this.textInputValue, this.addSubject)\r\n : this.textInputValue();\r\n // if (this.addCallback() && (value === null || value === undefined)) {\r\n this.textInputValue.set('');\r\n // return;\r\n // }\r\n this.addSubject.next(value);\r\n }\r\n };\r\n\r\n protected add = (event: any) => {\r\n const addCallback = this.addCallback();\r\n const value = addCallback ? addCallback(event, this.addSubject) : event;\r\n if (this.addCallback() && (value === null || value === undefined)) {\r\n this.textInputValue.set('');\r\n return;\r\n }\r\n this.textInputValue.set('');\r\n this.addSubject.next(value);\r\n };\r\n\r\n protected edit = (entry: any) => {\r\n //If no callback, return;\r\n const editCallback = this.editCallback();\r\n if (editCallback === undefined || editCallback === null) return;\r\n //Call the callback and retrive it's return value\r\n const res = editCallback(entry, this.editSubject);\r\n //If the callback returns null, we remove the value.\r\n if (res === null && this.value() !== null) {\r\n this.remove(entry);\r\n }\r\n if (entry == res) {\r\n return this.editSubject.next(res);\r\n }\r\n //If the callback returns a different value (different by reference (ex: different object)), we replace the edited entry by the returned entry.\r\n this.value.update((value) => {\r\n value![value!.indexOf(entry)] = res;\r\n return [...(value ?? [])];\r\n });\r\n this.onValueChange(this.value());\r\n };\r\n\r\n protected remove(value: any): void {\r\n const updated = this.value()?.filter((v: any) => v != value);\r\n if (this.value() !== null) this.onValueChange(updated);\r\n if (updated.length === 0) this.onValueChange(null);\r\n this.removeCallback()?.(value);\r\n }\r\n\r\n protected increment = (input: any) => {\r\n this.textInputValue.set('');\r\n\r\n input.blur();\r\n\r\n const filters = this.filters();\r\n const modulo = filters ? filters.length : 1;\r\n this.filterIndex.set((this.filterIndex() + 1) % modulo);\r\n\r\n input.focus();\r\n };\r\n\r\n protected void = () => {};\r\n\r\n protected enableShowPanel = (input: any) => {\r\n this.overrideShowResults = true;\r\n this.textInputValue.set(' ');\r\n this.values.next(' ');\r\n\r\n input.focus();\r\n };\r\n\r\n protected disableShowPanel = () => {\r\n this.overrideShowResults = false;\r\n };\r\n\r\n protected getTooltip = () => {\r\n if (this.disabled()) return '';\r\n if (this.display() === undefined)\r\n return \"Appuyez sur 'Enter' pour ajouter la valeur du champs à la liste\";\r\n return 'Entrez un espace pour voir les choix disponibles';\r\n };\r\n\r\n protected contextMenuItems = (entry: any) => {\r\n const items = [] as IContextMenuItem[];\r\n if (this.editCallback()) {\r\n items.push({\r\n label: 'Modifier',\r\n icon: 'edit',\r\n action: () => this.edit(entry),\r\n });\r\n }\r\n items.push({\r\n label: 'Supprimer',\r\n icon: 'close',\r\n action: () => this.remove(entry),\r\n color: 'error',\r\n });\r\n return items;\r\n };\r\n}\r\n","@if (predicate) {\r\n<div style=\"position: relative;\">\r\n <div class=\"input-wrapper\">\r\n <input [matTooltip]=\"disabled() ? '': (tooltip() ? tooltip(): 'Entrez un espace pour voir les choix disponibles')\"\r\n [matChipInputFor]=\"chipGrid\" matTooltipPosition=\"above\" #input type=\"text\" [name]=\"name() ?? id() ?? ''\"\r\n [chrAutofocus]=\"autofocus() || false\" [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" [disabled]=\"disabled()\"\r\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\"\r\n placeholder=\"{{ placeholder() || ' ' }}\" (keyup.enter)=\"addFromText($event)\" (input)=\"onHtmlInput($event)\"\r\n [ngModel]=\"textInputValue()\" (ngModelChange)=\"inputChange($event)\" (blur)=\"onTouch()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" (blur)=\"disableShowPanel()\" />\r\n @if (label() !== null) {\r\n <label 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-red-500\">*</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 <ng-content></ng-content>\r\n @if (data() && (data()?.length || 0) > 0) {\r\n <div\r\n class=\"absolute top-1.5 right-0 flex flex-row justify-center content-center items-center align-middle overflow-hidden\">\r\n <!-- <mat-icon matTooltipPosition=\"above\" class=\"rotate cursor-pointer\" [class.rotated]=\"overrideShowResults\"\r\n [attr.data-initial-angle]=\"0\" [attr.data-end-angle]=\"90\" [attr.data-duration]=\"200\"\r\n (click)=\"enableShowPanel(input)\">\r\n arrow_right\r\n </mat-icon> -->\r\n @if (filters()) {\r\n <span [matTooltip]=\"filters()?.[filterIndex()]!.tooltip || ''\" matTooltipPosition=\"above\"\r\n style=\"border-color: var(--neutral-color);\" class=\"inner-button cursor-pointer border-l-2 border-b-0 border-t-0 \r\n border-r-0 w-fit px-1 text-center opacity-100 bg-opacity-50 flex justify-center mr-[1rem]\r\n align-middle items-center\" (click)=\"increment(input)\">\r\n <p class=\"inline-block w-fit h-min overflow-hidden text-nowrap text-ellipsis\">{{\r\n filters()?.[filterIndex()]!.display\r\n }}\r\n </p>\r\n </span>\r\n }\r\n </div>\r\n }\r\n <chr-data-list [suggestions]=\"(data$ | async) || []\" [targetElement]=\"input\" [display]=\"getModelDisplay\"\r\n (optionSelected)=\"add($event.value)\"></chr-data-list>\r\n </div>\r\n <mat-chip-grid #chipGrid class=\"w-full margin-0\">\r\n @for (entry of getRawValue() || []; track entry) {\r\n <mat-chip-row (removed)=\"remove(entry)\" [contextMenu]=\"contextMenuItems(entry)\">\r\n <div (click)=\"edit(entry)\">{{getModelDisplay(entry)}}</div>\r\n <button matChipRemove [attr.aria-label]=\"'Supprimer ' + getModelDisplay(entry)\">\r\n <mat-icon class=\"mat-chip-icon\">cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <!-- <mat-autocomplete #auto class=\"rounded-lg no-scrollbar\" id=\"{{id()}}-auto\"\r\n style=\"::-webkit-scrollbar {display: none !important;}; -ms-overflow-style: none !important; scrollbar-width: none !important;\"\r\n [displayWith]=\"getModelDisplay.bind(this)\" (optionSelected)=\"add($event.option.value)\">\r\n @for (model of filteredModelOptions | async; track model) {\r\n <mat-option class=\"\" [value]=\"model\" selected>\r\n {{ getModelDisplay(model) }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete> -->\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}","import {\r\n AfterViewInit,\r\n Component,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n inject,\r\n input,\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\nimport { InputType } from '../../models/controls';\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 override readonly type = input<InputType>('color');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\r\n }\r\n\r\n parseColor = (event: string) => {\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 class=\"input-wrapper\">\r\n <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [value]=\"value()\"\r\n (input)=\"parseColor($any($event.target).value)\" [type]=\"type()\" [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\"\r\n placeholder=\" \" [chrAutofocus]=\"autofocus() || false\" [value]=\"value() || null\" [disabled]=\"disabled()\"\r\n [autocomplete]=\"autoComplete()\" [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\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 @if (label() !== null) {\r\n <label 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\r\n <div class=\"color-text-input-container\">\r\n <input type=\"text\" max=\"6\" [ngModel]=\"value()\" (ngModelChange)=\"parseColor($event)\" [name]=\"name() ?? id() ?? ''\"\r\n [autocomplete]=\"autoComplete()+'-hex'\" style=\"background-color: var(--background-color); margin-bottom: 1px;\"\r\n 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() && !disabled()) {\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 ViewChild,\r\n inject,\r\n input,\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\nimport { filter, skipWhile } from 'rxjs';\r\nimport { InputType } from '../../models/controls';\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 private datePipe = inject(DatePipe);\r\n override readonly type = input<InputType>('date');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n super();\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) {\r\n this.onValueChange(parsed);\r\n }\r\n\r\n this.displayValueSubject.subscribe((v) => {\r\n if (v !== null && v !== undefined)\r\n this.displayValue.set(this.dateToString(v));\r\n });\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 // 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.set(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 class=\"input-wrapper\">\r\n <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [value]=\"displayValue()\"\r\n [chrAutofocus]=\"autofocus() || false\" (input)=\"onInputChange($any($event.target).value)\" [type]=\"type()\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" placeholder=\" \" [disabled]=\"disabled()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" [autocomplete]=\"autoComplete()\"\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 @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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 inject,\r\n input,\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\nimport { filter } from 'rxjs';\r\nimport { InputType } from '../../models/controls';\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 private datePipe = inject(DatePipe);\r\n override readonly type = input<InputType>('datetime');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\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) {\r\n this.onValueChange(parsed);\r\n }\r\n this.displayValueSubject.subscribe((v) => {\r\n if (v !== null && v !== undefined)\r\n this.displayValue.set(this.dateToString(v));\r\n });\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 // 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 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 class=\"input-wrapper\">\r\n <input #input class=\"relative\" [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [value]=\"displayValue()\"\r\n [chrAutofocus]=\"autofocus() || false\" (input)=\"onInputChange($any($event.target).value)\" type=\"datetime-local\"\r\n [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\" placeholder=\" \" [disabled]=\"disabled()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" [autocomplete]=\"autoComplete()\"\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 @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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 Injector,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n input,\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\nimport { InputType } from '../../models/controls';\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 override readonly type = input<InputType>('toggle');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\r\n }\r\n\r\n toggle = (event: any) => {\r\n //console.log(event, event.target.checked);\r\n this.value.set(event.target.checked);\r\n this.onValueChange(this.value());\r\n };\r\n}\r\n","<div class=\"height-normalized input-wrapper\" style=\"position: relative;\">\r\n <input #input 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)=\"input?.click()\" [chrAutofocus]=\"autofocus() || false\" class=\"relative input toggle\">\r\n </div>\r\n </div>\r\n @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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>","export interface IFile {\r\n name?: string;\r\n file?: File | null;\r\n url?: string | null;\r\n data?: string | null;\r\n extension?: string | null;\r\n contentType?: string | null;\r\n}\r\n\r\nexport class ChrFile implements IFile {\r\n name?: string;\r\n file?: File | null;\r\n url?: string | null;\r\n data?: string | null;\r\n extension?: string | null;\r\n contentType?: string | null;\r\n\r\n constructor(file: IFile) {\r\n this.file = file.file || null;\r\n this.url = file.url ? window.URL.createObjectURL(file.file!) : null;\r\n this.data = file.data || null;\r\n this.contentType = file.contentType || file.file?.type || null;\r\n\r\n var [name, extension] = this.parseNameAndExtensionFromFile();\r\n\r\n if (name !== null) this.name = name;\r\n if (extension !== null) this.extension = extension;\r\n }\r\n\r\n getUrl = () => {\r\n return window.URL.createObjectURL(this.file!);\r\n };\r\n\r\n private parseNameAndExtensionFromFile = () => {\r\n const indexOfExtension = this.file?.name.lastIndexOf('.')!;\r\n return [\r\n ...(this.file\r\n ? [\r\n this.file.name.slice(0, indexOfExtension),\r\n // +1 As to not include the dot\r\n this.file.name.slice(indexOfExtension + 1),\r\n ]\r\n : [null, null]),\r\n ];\r\n };\r\n}\r\n","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 { ChrFile, 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 file = new ChrFile({\r\n data: reader.result as string,\r\n file: 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 file = new ChrFile({\r\n data: reader.result as string,\r\n file: 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 OnDestroy,\r\n OnInit,\r\n inject,\r\n input,\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, of, skipWhile, take } from 'rxjs';\r\nimport { ChrFile, IFile } from '../../models/file';\r\nimport { ToastService } from '../../services/toast.service';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { InputType } from '../../models/controls';\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 private fileService = inject(FileService);\r\n private toastService = inject(ToastService);\r\n\r\n /**\r\n * An array of string that contains each type that should be accepted by the input\r\n */\r\n readonly accept = input<string[]>([]);\r\n\r\n /**\r\n * Whether or not the input should allow multiple file selection\r\n */\r\n readonly multiple = input<boolean>(false);\r\n\r\n valueDisplay: string | null = null;\r\n\r\n /**\r\n * Whether or not the progress bar that display a file's conversion progress will be editable by the user\r\n */\r\n readonly editable = input<boolean>(false);\r\n\r\n public fileErrors: { [index: number]: boolean } | null = null;\r\n\r\n public files: Observable<{ progress: number; file?: IFile }>[] = [];\r\n\r\n override readonly type = input<InputType>('file');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n super();\r\n\r\n this.displayValueSubject.subscribe((res) => {\r\n if (!res) {\r\n this.valueDisplay = '';\r\n return;\r\n }\r\n if (Array.isArray(res)) {\r\n const tmp = res.map((f) => {\r\n return `${f.name}.${f.extension}`;\r\n });\r\n this.valueDisplay = tmp.join(',');\r\n } else this.valueDisplay = `${res.name}.${res.extension}`;\r\n });\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.valueSubject\r\n .pipe(skipWhile((res) => res === null))\r\n .subscribe((res: any) => this.writeValue(res));\r\n this.control()?.statusChanges?.subscribe((status) => {\r\n this.fileErrors = 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 //console.log(`[FileInput] (change) -> `, event);\r\n this.files = [];\r\n const files = event.target.files;\r\n //console.log(`[FileInput] (change): 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 let obs: Observable<any>;\r\n for (const file of files) {\r\n if (this.base64()) {\r\n // Convert the file to base64 using the fileservice\r\n obs = this.fileService.toBase64WithProgress(\r\n new ChrFile({\r\n file: file,\r\n url: window.URL.createObjectURL(file),\r\n })\r\n );\r\n } else {\r\n obs = of({\r\n progress: 100,\r\n file: new ChrFile({\r\n file: file,\r\n }) as IFile,\r\n });\r\n }\r\n // Add to the file list with the progress percentage\r\n this.files = [...this.files, obs];\r\n filesAsync.push(obs);\r\n // Catch conversion error for display\r\n obs.pipe(\r\n catchError((err, source) => {\r\n this.toastService.setWarning(\r\n `Une erreur s'est produite pendant la conversion 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 (\r\n this.accept()\r\n ?.map((type) => `.${type}`)\r\n .join(', ') || '.*'\r\n );\r\n };\r\n\r\n protected getToAccept = () => {\r\n return this.accept()\r\n ?.map((s) => s.toLocaleUpperCase())\r\n .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 class=\"cursor-pointer input-wrapper\" (click)=\"finput.click()\" (click)=\"onTouch($event)\">\r\n <div\r\n 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=\"backdrop-filter: blur(.1rem); opacity: 1;\">\r\n @if (!fileErrors && (files[0] | async)?.progress != 100) {\r\n <mat-icon class=\"cursor-pointer rounded-full\">add</mat-icon>\r\n }\r\n @if (!fileErrors && (files[0] | async)?.progress == 100) {\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--primary-color)\">check</mat-icon>\r\n }\r\n @if (fileErrors !== null) {\r\n <mat-icon class=\"cursor-pointer rounded-full\" style=\"color:var(--error-color)\">close</mat-icon>\r\n }\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 #input class=\"relative input\" [disabled]=\"disabled()\" type=\"file\" class=\"hidden\" [attr.multiple]=\"multiple()\"\r\n #finput [chrAutofocus]=\"autofocus() || false\" [accept]=\"acceptToString()\" (change)=\"onFileChange($event)\" />\r\n <input [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" [id]=\"id()\" [name]=\"name()!\" placeholder=\" \"\r\n [value]=\"valueDisplay\" readonly [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\"\r\n class=\"block input pt-1.5 m-0 mr-4 pointer-events-none 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 @if (label() !== null) {\r\n <label 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 (files[0] | async; as conversion) {\r\n <div class=\"progress-border border-t-2\" [style.width]=\"(conversion.progress%100) + '%'\" [ngClass]=\"{\r\n 'border-ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'border-finished': conversion.progress === 100,\r\n 'border-error': fileErrors !== null && fileErrors[0] !== undefined\r\n }\">\r\n @if (!multiple() && (conversion.progress < 100)) { <span>{{conversion.progress}}%</span>\r\n }\r\n </div>\r\n }\r\n @if (icon() && !disabled()) {\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 @if (multiple() === true && files.length > 0) {\r\n <div 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 @if (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': !fileErrors?.[index] && conversion.progress === 100,\r\n 'error': fileErrors?.[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 class=\"progress-bar-progress\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\">{{conversion.progress}}%</span>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"openFile(index, conversion.file)\">visibility</mat-icon>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"removeFile(index, conversion.file)\">delete</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>","import {\r\n AfterContentChecked,\r\n AfterViewChecked,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Injector,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n input,\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\nimport { InputType } from '../../models/controls';\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 override readonly type = input<InputType>('textArea');\r\n\r\n constructor() {\r\n const ngControl = inject(NgControl, { optional: true });\r\n\r\n super();\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.inputRef()?.nativeElement as HTMLTextAreaElement);\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 class=\"input-wrapper\" (keyup.enter)=\"preventSubmit($event)\">\r\n <textarea #input [matTooltip]=\"tooltip() || ''\" matTooltipPosition=\"above\" required=\"true\"\r\n [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" (input)=\"resize(input)\" [value]=\"value()\"\r\n (input)=\"onValueChange($any($event.target).value)\" [chrAutofocus]=\"autofocus() || false\" [disabled]=\"disabled()\"\r\n [attr.data-touched]=\"isTouched()\" [attr.data-state]=\"visualState()\" [autocomplete]=\"autoComplete()\"\r\n (input)=\"onHtmlInput($event)\" [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\"\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 @if (label() !== null) {\r\n <label 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\r\n @if (icon() && !disabled()) {\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, inject } 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 private el = inject(ElementRef);\r\n\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 {\r\n Component,\r\n ContentChild,\r\n input,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'chr-tab',\r\n imports: [],\r\n templateUrl: './chr-tab.component.html',\r\n styleUrls: ['../../../../../tailwindbuild.css', './chr-tab.component.css'],\r\n})\r\nexport class TabComponent {\r\n public label = input<string>('');\r\n public disabled = input<boolean>(false);\r\n public active = signal<boolean>(false);\r\n}\r\n","<div class=\"h-full w-full relative opacity-0 transition-opacity duration-500\" [class.shown]=\"active()\">\r\n <ng-content></ng-content>\r\n</div>","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n input,\r\n QueryList,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { TabComponent } from '../chr-tab/chr-tab.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Color, getVariableColor } from '../models/colors';\r\n\r\n@Component({\r\n selector: 'chr-tab-group',\r\n imports: [CommonModule],\r\n templateUrl: './chr-tab-group.component.html',\r\n styleUrls: [\r\n './chr-tab-group.component.css',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class TabGroupComponent implements AfterContentInit {\r\n @ContentChildren(TabComponent) tabs!: QueryList<TabComponent>;\r\n protected selectedIndex = signal(0);\r\n public color = input<Color>();\r\n public fade = input<boolean>(false);\r\n\r\n ngAfterContentInit() {\r\n this.selectTab(0);\r\n }\r\n\r\n selectTab = (index: number) => {\r\n this.selectedIndex.set(index);\r\n // console.log(`[TabGroup] Selecting tab index ${index}`, this.tabs.toArray());\r\n this.tabs.forEach((tab, index) => {\r\n tab.active.set(index === this.selectedIndex());\r\n });\r\n };\r\n\r\n getVariableColor(color: Color): string {\r\n return getVariableColor(color);\r\n }\r\n}\r\n","<div class=\"flex flex-col h-full w-full overflow-hidden\">\r\n <div class=\"tab-headers flex overflow-x-scroll no-scrollbar\">\r\n @for (tab of tabs.toArray(); track tab; let i = $index) {\r\n <button (click)=\"selectTab(i)\" [class.active]=\"selectedIndex() === i\" [disabled]=\"tab.disabled()\"\r\n class=\"px-2 sm:px-4 sm:py-2 flex items-center relative tab-header\" [style]=\"{\r\n 'border-color': getVariableColor(color() || 'neutral'),\r\n '--tbgpr-main-color': getVariableColor(color() || 'neutral'),\r\n }\" [ngClass]=\"{\r\n 'faded': fade(),\r\n 'cursor-pointer': !tab.disabled(),\r\n 'cursor-not-allowed': tab.disabled()\r\n }\">\r\n <span>{{ tab.label() }}</span>\r\n </button>\r\n }\r\n </div>\r\n <div class=\"flex w-full h-full mt-4\">\r\n <div class=\"tab-content flex whitespace-nowrap w-full transition-transform duration-500 shrink-0 grow\"\r\n [style.transform]=\"'translateX(-' + (selectedIndex() * 100) + '%)'\">\r\n <ng-content select=\"chr-tab\"></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n Component,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n OnInit,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n effect,\r\n} from '@angular/core';\r\nimport {\r\n ReactiveFormsModule,\r\n FormsModule,\r\n ValidatorFn,\r\n ValidationErrors,\r\n} from '@angular/forms';\r\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ChrSearchSelectComponent } from '../chr-search-select/chr-search-select.component';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport {\r\n DatePipe,\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n} from '@angular/common';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { TypeValidatorDirective } from '../models/chr-validators/type-validator';\r\nimport { ChrTagSelectComponent } from '../chr-tag-select/chr-tag-select.component';\r\nimport { ChrBaseInputComponent } from './chr-base-input/chr-base-input.component';\r\nimport { getValidators } from '../models/chr-validators/base-validator';\r\nimport { ChrColorInputComponent } from './chr-color-input/chr-color-input.component';\r\nimport { ChrDateInputComponent } from './chr-date-input/chr-date-input.component';\r\nimport { ChrDatetimeInputComponent } from './chr-datetime-input/chr-datetime-input.component';\r\nimport { ChrToggleInputComponent } from './chr-toggle-input/chr-toggle-input.component';\r\nimport { ChrFileInputComponent } from './chr-file-input/chr-file-input.component';\r\nimport { IControl, InputType } from '../models/controls';\r\nimport { ChrTextareaInputComponent } from './chr-textarea-input/chr-textarea-input.component';\r\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\r\nimport { tap } from 'rxjs';\r\nimport { IFile } from '../models/file';\r\nimport { TabGroupComponent } from '../chr-tab-group/chr-tab-group.component';\r\nimport { TabComponent } from '../chr-tab/chr-tab.component';\r\n\r\nexport interface IFormSection {\r\n title?: string;\r\n controls: IControl[];\r\n}\r\n\r\n@Component({\r\n selector: 'app-chr-form, chr-form',\r\n templateUrl: './chr-form.component.html',\r\n styleUrls: [\r\n './chr-form.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n './chr-form.component.scss',\r\n ],\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatSlideToggleModule,\r\n ChrTagSelectComponent,\r\n MatAutocompleteModule,\r\n CommonModule,\r\n MatTabsModule,\r\n ChrBaseInputComponent,\r\n ChrColorInputComponent,\r\n ChrDateInputComponent,\r\n ChrDatetimeInputComponent,\r\n ChrToggleInputComponent,\r\n ChrFileInputComponent,\r\n ChrSearchSelectComponent,\r\n ChrTextareaInputComponent,\r\n TabToInputHandlerDirective,\r\n TabGroupComponent,\r\n TabComponent,\r\n ],\r\n providers: [\r\n DatePipe,\r\n {\r\n provide: DATE_PIPE_DEFAULT_OPTIONS,\r\n useValue: { dateFormat: 'shortDate' },\r\n },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n})\r\nexport class ChrFormComponent implements OnInit {\r\n private builder = inject(FormBuilder);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private element = inject(ElementRef);\r\n\r\n readonly sections = input<IFormSection[]>([]);\r\n readonly controls = input<IControl[]>([]);\r\n readonly validators = input<ValidatorFn | ValidatorFn[] | null>(null);\r\n\r\n readonly valid = input<boolean>(false);\r\n readonly validChange = output<boolean>();\r\n\r\n readonly model = input<any>({});\r\n readonly modelChange = output<any>();\r\n readonly formDataChange = output<FormData>();\r\n\r\n readonly disabled = input<boolean>(false);\r\n readonly valuesChanges = output<any>();\r\n\r\n readonly submit = input<Function>();\r\n\r\n readonly compact = input<boolean>(false);\r\n\r\n readonly debounceTime = input<number | null>(null);\r\n\r\n readonly formChange = output<{\r\n [key: string]: any;\r\n }>();\r\n\r\n readonly valueChanges = output<{\r\n [name: string]: any;\r\n }>();\r\n\r\n readonly tabDisplay = input<boolean>(false);\r\n\r\n public formControls: { [key: string]: FormControl } = {};\r\n\r\n /**\r\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\r\n */\r\n public readonly form = input<FormGroup>(this.builder.group({}));\r\n public readonly formChanges = output<FormGroup | null>();\r\n\r\n private values: { [key: string]: any } = {};\r\n private controlTypes: { [key: string]: InputType } = {};\r\n private flattenedControls: { [key: string]: IControl } = {};\r\n private flattenedShownControl: { [key: string]: IControl } = {};\r\n private flattenedHiddenControls: { [key: string]: IControl } = {};\r\n public initialized: boolean = false;\r\n\r\n constructor() {\r\n if (this.controls().length > 0 && this.sections().length > 0)\r\n console.warn(\"You can't use both controls and sections in the same form\");\r\n\r\n effect(() => {\r\n this.set(this.model());\r\n });\r\n\r\n effect(() => {\r\n const disabled = this.disabled();\r\n if (disabled) this.form().disable({ emitEvent: false });\r\n else this.form().enable({ emitEvent: false });\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.sections()\r\n ?.map((s) => s.controls)\r\n .flat()\r\n .concat(this.controls() ?? [])\r\n .forEach((s) => (this.flattenedControls[s.name] = s));\r\n\r\n for (const key in this.flattenedControls) {\r\n const control = this.flattenedControls[key];\r\n if (control.type === 'hidden')\r\n this.flattenedHiddenControls[key] = control;\r\n else this.flattenedShownControl[key] = control;\r\n }\r\n this.form().setValidators(this.validators());\r\n\r\n this.initModel();\r\n this.initValues();\r\n this.initControls();\r\n this.initListeners();\r\n this.initialized = true;\r\n\r\n this.formChanges.emit(this.form());\r\n this.modelChange.subscribe((r) =>\r\n this.formDataChange.emit(this.toFormData())\r\n );\r\n }\r\n\r\n private initModel = () => {\r\n const model = this.model();\r\n //if (model === null) this.model = {};\r\n\r\n for (const key in this.flattenedControls) {\r\n const control = this.flattenedControls[key];\r\n if (model[key] === null || model[key] === undefined)\r\n model[key] = control.value;\r\n }\r\n };\r\n\r\n private initValues = () => {\r\n for (const key in this.flattenedControls) {\r\n if (this.values[key] === null || this.values[key] === undefined)\r\n this.values[key] = this.model()[key];\r\n }\r\n };\r\n\r\n private initControls = () => {\r\n for (const key in this.flattenedShownControl) {\r\n const control = this.flattenedShownControl[key];\r\n const validators = getValidators(control.validations);\r\n this.initializeControl(\r\n control,\r\n new FormControl(\r\n {\r\n value: this.values[key] || null,\r\n disabled: this.disabled() || control.disabled,\r\n },\r\n validators\r\n )\r\n );\r\n }\r\n this.validChange.emit(this.form().valid);\r\n };\r\n\r\n private initListeners = () => {\r\n this.form().valueChanges.subscribe((values) => {\r\n this.form().updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n this.validChange.emit(this.form().valid);\r\n });\r\n };\r\n\r\n private hasRegularFile = (): boolean => {\r\n for (const key in this.flattenedControls) {\r\n if (\r\n this.flattenedControls[key].type === 'file' &&\r\n this.flattenedControls[key].base64 === false\r\n )\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n public getEncType = (): string => {\r\n return this.hasRegularFile()\r\n ? 'multipart/form-data'\r\n : 'application/x-www-form-urlencoded';\r\n };\r\n\r\n /**\r\n * Methods that returns the FormControl for the given input. If no FormControl is found, return null.\r\n * @param name input's name\r\n * @returns the FormControl whose name matches the parameter\r\n */\r\n public getControl = (name: string) => {\r\n if (name) return this.form().controls[name];\r\n return null;\r\n };\r\n\r\n /**\r\n * Focus the input for the user to start typing in.\r\n * @param name input's name\r\n */\r\n public focus = (name: string) => {\r\n const el = this.element.nativeElement.querySelector(\r\n `input[name=\"${name}\"]`\r\n ) as HTMLInputElement;\r\n this.getControl(name)?.markAsTouched();\r\n this.changeDetector.detectChanges();\r\n setTimeout(() => {\r\n el?.focus();\r\n }, 10);\r\n };\r\n\r\n /**\r\n * Returns the value of the input whose name matches the parameter input.\r\n * If no input name is provided, returns the value of the form.\r\n * @param input name of the input\r\n * @returns the value of the input\r\n */\r\n public value = (input?: string) => this.getValue(input);\r\n\r\n /**\r\n * Returns the value of the input whose name matches the parameter input.\r\n * If no input name is provided, returns the value of the form.\r\n * @param input name of the input\r\n * @returns the value of the input\r\n */\r\n public getValue = (input?: string) => {\r\n if (input) return this.form().controls[input]?.value;\r\n return this.form().value;\r\n };\r\n\r\n /**\r\n * Returns the validity of the input.\r\n * If no input is provided, returns the validity of the form.\r\n * @param input name of the input\r\n * @returns\r\n */\r\n public isValid = (input?: string) => {\r\n if (input) return this.form().get(input)?.valid;\r\n return this.valid();\r\n };\r\n\r\n /**\r\n * Update the value of a control WITHOUT triggering the modelChange event\r\n * @param key input key (control name)\r\n * @param value value to set\r\n */\r\n public setValue = (key: string, value: any) => {\r\n if (this.formControls[key] === undefined) {\r\n //console.log('[Form] Could not find control with the following name: ', key);\r\n return;\r\n }\r\n this.formControls[key].setValue(value, {\r\n emitEvent: false,\r\n emitModelToViewChange: true,\r\n });\r\n this.formControls[key].markAsTouched();\r\n this.model()[key] = value;\r\n };\r\n\r\n /**\r\n * Update the value of the form's model WITHOUT triggering the modelChange event\r\n * @param model the model to set\r\n */\r\n public set = (model: any) => {\r\n for (const key in this.flattenedControls) {\r\n this.setValue(key, model[key]);\r\n }\r\n };\r\n\r\n /**\r\n * Updates the value of a control. This WILL trigger the modelChange event\r\n * @param key input key (control name)\r\n * @param value value to set\r\n */\r\n public patchValue = (key: string, value: any) => {\r\n this.setValue$(key, value);\r\n this.setModel$(key, value);\r\n };\r\n\r\n /**\r\n * Updates the value of the form's model. This WILL trigger the modelChange event once for each input\r\n * @param model model to set\r\n */\r\n public patch = (model: any) => {\r\n for (const key in this.flattenedControls) {\r\n this.patchValue(key, model[key]);\r\n }\r\n };\r\n\r\n /**\r\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\r\n * so that the validation errors may be displayed to the user.\r\n * @param markAsTouched Boolean that describes whether or not the inputs of the form will be marked as touched.\r\n */\r\n public checkValidity = (markAsTouched: boolean = true) => {\r\n for (const key in this.flattenedControls) {\r\n if (markAsTouched) {\r\n this.formControls[key]?.markAsTouched({\r\n onlySelf: false,\r\n emitEvent: true,\r\n });\r\n }\r\n this.formControls[key]?.updateValueAndValidity({\r\n onlySelf: false,\r\n emitEvent: true,\r\n });\r\n }\r\n\r\n this.form().updateValueAndValidity({ onlySelf: false, emitEvent: true });\r\n this.validChange.emit(this.form().valid);\r\n };\r\n\r\n /**\r\n * Here for compatibility. Same thing as checkValidity.\r\n */\r\n public updateValueAndValidity = this.checkValidity;\r\n\r\n /**\r\n * Resets the form.\r\n */\r\n public reset = () => {\r\n this.form().reset();\r\n this.form().setErrors(null);\r\n this.form().markAsUntouched();\r\n this.form().markAsPristine();\r\n for (const key in this.flattenedControls) {\r\n this.values[key] = this.formControls[key].value;\r\n }\r\n };\r\n\r\n public toFormData = (): FormData => {\r\n const data = new FormData();\r\n for (const key in this.model()) {\r\n if (\r\n this.flattenedControls[key]?.type === 'file' &&\r\n this.flattenedControls[key]?.base64 === false\r\n ) {\r\n if (this.flattenedControls[key]?.multiple === true) {\r\n for (const file of (this.model()[key] ?? []) as IFile[])\r\n data.append(key, file?.file ?? '');\r\n } else data.append(key, (this.model()[key] as IFile)?.file ?? '');\r\n } else data.append(key, this.model()[key] ?? '');\r\n }\r\n return data;\r\n };\r\n\r\n protected get = (control: IControl) => {\r\n return this.form().get([control.name]);\r\n };\r\n\r\n private setValue$ = (key: string, value: any) => {\r\n if (this.formControls[key] === undefined) {\r\n //console.log('[Form] Could not find control with the following name: ', key);\r\n return;\r\n }\r\n this.formControls[key].patchValue(value);\r\n this.formControls[key].markAsTouched();\r\n this.values[key] = value;\r\n };\r\n\r\n private setModel$ = (key: string, value: any) => {\r\n this.model()[key] = value;\r\n };\r\n\r\n /**\r\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).\r\n */\r\n public doSubmit = () => {\r\n this.checkValidity();\r\n if (this.valid() && this.form().valid) this.submit()?.(this.values);\r\n };\r\n\r\n protected log = (el: any) => {\r\n console.log(el);\r\n };\r\n\r\n protected initializeControl = (\r\n control: IControl,\r\n formControl: FormControl\r\n ) => {\r\n // Add the control to the internal map\r\n this.formControls[control.name] = formControl;\r\n //Register the onChange listener that will emit the events associated with the input's update\r\n this.formControls[control.name].valueChanges.subscribe((value) => {\r\n //We dispatch the single value change event with the value\r\n this.valueChanges.emit({ [control.name]: value });\r\n //We update the local values\r\n this.values[control.name] = value;\r\n //If the model has a property, we update it with the value\r\n const model = this.model();\r\n if (Object.hasOwn(model, control.name)) {\r\n model![control.name] = value;\r\n //Dispatch the whole model change event\r\n this.modelChange.emit(model);\r\n }\r\n // Whether or not there is a matching property in the model, we update the local values\r\n this.values[control.name] = value;\r\n });\r\n this.controlTypes[control.name] = control.type;\r\n // Add the control to the formgroup\r\n this.form().addControl(control.name, formControl);\r\n };\r\n\r\n alert = (s: string) => {\r\n alert(s);\r\n };\r\n}\r\n","<div class=\"flex flex-col justify-center min-h-5/6 mt-2 w-full\">\r\n @if (initialized) {\r\n <form [formGroup]=\"form()\" tab-input-only [attr.enctype]=\"getEncType()\">\r\n @if (!tabDisplay() || !sections()) {\r\n <ng-container [ngTemplateOutlet]=\"singleTemplate\" [ngTemplateOutletContext]=\"{controls: controls()}\">\r\n </ng-container>\r\n }\r\n @if (!tabDisplay() && sections()) {\r\n <ng-container [ngTemplateOutlet]=\"sectionTemplate\" [ngTemplateOutletContext]=\"{sections: sections()}\">\r\n </ng-container>\r\n }\r\n @if (tabDisplay() && sections()) {\r\n <ng-container [ngTemplateOutlet]=\"tabsTemplate\" [ngTemplateOutletContext]=\"{sects: sections()}\">\r\n </ng-container>\r\n }\r\n </form>\r\n }\r\n</div>\r\n\r\n<ng-template #tabsTemplate let-sections='sects'>\r\n <fieldset>\r\n <chr-tab-group color=\"primary\" [fade]=\"true\">\r\n @for (section of sections; track section; let index = $index; let lastSection = $last) {\r\n <chr-tab [label]=\"section.title || 'Étape ' + (index + 1)\" class=\"custom-tab\">\r\n @if (initialized) {\r\n <div class=\"mt-4\"\r\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'\">\r\n @for (ctrl of section.controls; track index; let index = $index; let\r\n last =\r\n $last)\r\n {\r\n <!-- <p class=\"bg-purple-600\">{{ctrl.name}} ({{formControls[ctrl.name].touched}}) ->\r\n {{formControls[ctrl.name].valid}} :\r\n {{formControls[ctrl.name].errors?.['required']}}\r\n </p> -->\r\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n (keyup.enter)=\"lastSection && last && ctrl.type !== 'textArea' && this.doSubmit()\"\r\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n </chr-tab>\r\n }\r\n </chr-tab-group>\r\n <!-- <mat-tab-group>\r\n @for (section of sections; track section; let index = $index) {\r\n <mat-tab [label]=\"section.title || 'Étape ' + (index + 1)\" class=\"custom-tab\">\r\n @if (initialized) {\r\n <div class=\"mt-4\"\r\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'\">\r\n @for (ctrl of section.controls; track index; let index = $index; let\r\n last =\r\n $last)\r\n { -->\r\n <!-- NOT UNCOMMENT <p class=\"bg-purple-600\">{{ctrl.name}} ({{formControls[ctrl.name].touched}}) ->\r\n {{formControls[ctrl.name].valid}} :\r\n {{formControls[ctrl.name].errors?.['required']}}\r\n </p> -->\r\n <!-- <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n [ngTemplateOutletContext]=\"{control: ctrl, index: index, last: $last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n </mat-tab>\r\n }\r\n </mat-tab-group> -->\r\n </fieldset>\r\n</ng-template>\r\n\r\n<ng-template #singleTemplate let-controls=\"controls\">\r\n <fieldset [disabled]=\"disabled()\">\r\n @if (initialized) {\r\n <div [ngClass]=\"compact() ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\r\n @for (control of controls; track control; let index = $index; let last = $last) {\r\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n (keyup.enter)=\"last && control.type !== 'textArea' && this.doSubmit()\"\r\n [ngTemplateOutletContext]=\"{control: control, index: index, last: last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n\r\n </fieldset>\r\n</ng-template>\r\n\r\n<ng-template #sectionTemplate let-sections='sections'>\r\n <fieldset>\r\n @for (section of sections; track section; let index = $index; let lastSection = $last) {\r\n <div>\r\n @if (section.title) {\r\n <h2 class=\"mb-2 font-bold text-xl text-gray-900 dark:text-white\">\r\n {{ section.title }}\r\n </h2>\r\n }\r\n @if (initialized) {\r\n <div [ngClass]=\"compact() ? 'grid gap-y-2 gap-x-6 sm:grid-cols-4':'grid gap-y-2 gap-x-6 sm:grid-cols-2'\">\r\n @for (control of section.controls; track index; let index = $index; let\r\n last =\r\n $last)\r\n {\r\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"\r\n (keyup.enter)=\"lastSection && last && control.type !== 'textArea' && this.doSubmit()\"\r\n [ngTemplateOutletContext]=\"{control: control, index: index, last: $last}\">\r\n </ng-container>\r\n }\r\n </div>\r\n }\r\n @if (index != (sections||[]).length - 1 && !compact()) {\r\n <div class=\"py-4\">\r\n <hr class=\"\" />\r\n </div>\r\n }\r\n </div>\r\n }\r\n </fieldset>\r\n</ng-template>\r\n\r\n<ng-template #controlTemplate let-control='control' let-last='last' let-index='index'>\r\n <div class=\"relative h-min mt-2\" [formGroup]=\"form()\" [ngClass]=\"{\r\n 'sm:col-span-2': (control.width == 'row' && !compact()) || control.type=='textArea' && compact() && control.width != 'row',\r\n 'sm:row-span-2': control.type == 'file' && control.multiple===true,\r\n 'sm:col-span-4': control.width =='row' && compact(),\r\n }\" (keyup.enter)=\"last && this.doSubmit()\">\r\n @if (control.type=='searchSelect') {\r\n <app-chr-search-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\" [filters]=\"control.filters\"\r\n [debounceTime]=\"debounceTime()\" [data]=\"control.data || []\" [addCallback]=\"control.addCallback\"\r\n [autofocus]=\"control?.autofocus\" [acceptText]=\"control.acceptText\"\r\n [validations]=\"control.validations\"></app-chr-search-select>\r\n }\r\n @if (control.type=='tagSelect') {\r\n <app-chr-tag-select [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [editCallback]=\"control.editCallback\" [iconTooltip]=\"control.iconTooltip\" [display]=\"control.fn!\"\r\n [debounceTime]=\"debounceTime()\" [filters]=\"control.filters\" [data]=\"control.data || []\"\r\n [editCallback]=\"control.editCallback\" [addCallback]=\"control.addCallback\"\r\n [removeCallback]=\"control.removeCallback\" [validations]=\"control.validations\" [autofocus]=\"control?.autofocus\"\r\n [acceptText]=\"control.acceptText\"></app-chr-tag-select>\r\n }\r\n <div class=\"relative z-0 w-full group/inputs content\">\r\n <!-- Here we will *ngIf each type of input cause it's the cleanest way I can imagine-->\r\n <!--TEXT, PASSWORD AND NUMBER-->\r\n @if (control.type == 'text' || control.type == 'number' || control.type == 'password') {\r\n <chr-base-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [mask]=\"control.mask\" [maskShownExpression]=\"control.shownMaskExpression\" [maskPrefix]=\"control.maskPrefix\"\r\n [maskSuffix]=\"control.maskSuffix\" [maskValidation]=\"control.maskValidation ?? true\"\r\n [maskDropSpecialCharacters]=\"control.maskDropSpecialCharacters ?? true \" [debounceTime]=\"debounceTime()\"\r\n [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-base-input>\r\n }\r\n <!--TEXT AREA-->\r\n @if (control.type == 'textArea') {\r\n <chr-textarea-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-textarea-input>\r\n }\r\n <!--DATE-->\r\n @if (control.type == 'date') {\r\n <chr-date-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-date-input>\r\n }\r\n @if (control.type == 'datetime') {\r\n <chr-datetime-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-datetime-input>\r\n }\r\n <!--COLOR-->\r\n @if (control.type == 'color') {\r\n <chr-color-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-color-input>\r\n }\r\n @if (control.type == 'toggle'){\r\n <chr-toggle-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [debounceTime]=\"debounceTime()\" [iconTooltip]=\"control.iconTooltip\" [autofocus]=\"control?.autofocus\"\r\n [validations]=\"control.validations\"></chr-toggle-input>\r\n }\r\n @if (control.type == 'file'){\r\n <chr-file-input [name]=\"control.name\" [label]=\"control.label\" [type]=\"control.type\" [id]=\"control\"\r\n [formControlName]=\"control.name\" [span]=\"control.span\" [tooltip]=\"control.tooltip\" [icon]=\"control.icon\"\r\n [iconCallback]=\"control.iconCallback\" [iconCallbackDisabled]=\"control.iconCallbackDisabled\"\r\n [iconTooltip]=\"control.iconTooltip\" [accept]=\"control.accept\" [debounceTime]=\"debounceTime()\"\r\n [autofocus]=\"control?.autofocus\" [multiple]=\"control.multiple\" [base64]=\"control.base64\"\r\n [validations]=\"control.validations\"></chr-file-input>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } 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 platformId = inject<Object>(PLATFORM_ID);\r\n\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() {\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 {\r\n AfterContentChecked,\r\n AfterContentInit,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n SimpleChanges,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n effect,\r\n} from '@angular/core';\r\nimport { NgClass, CommonModule } from '@angular/common';\r\nimport { ChrFormComponent } from '../chr-form/chr-form.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { CookiesService } from '../services/cookie.service';\r\nimport { DataService } from '../services/data.service';\r\nimport { ChrBaseInputComponent } from '../chr-form/chr-base-input/chr-base-input.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { distinctUntilChanged, take } from 'rxjs';\r\nimport { PaginationInstance, PaginationService } from 'ngx-pagination';\r\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\n\r\n@Component({\r\n selector: 'app-chr-paginator,chr-paginator, chr-paginator',\r\n templateUrl: './chr-paginator.component.html',\r\n styleUrls: [\r\n './chr-paginator.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n ChrBaseInputComponent,\r\n FormsModule,\r\n ContextMenuDirective,\r\n ],\r\n})\r\nexport class ChrPaginatorComponent implements OnInit, AfterContentChecked {\r\n private service = inject(PaginationService);\r\n private dataService = inject(DataService);\r\n private pageInput = viewChild.required<ChrBaseInputComponent>('pageInput');\r\n private pageSizeInput =\r\n viewChild.required<ChrBaseInputComponent>('pageSizeInput');\r\n\r\n public page = input<number>(1);\r\n public pageChange = output<number>();\r\n\r\n public pageSize = input<number>(20);\r\n public pageSizeChange = output<number>();\r\n\r\n private instance = signal<PaginationInstance | undefined>(undefined);\r\n\r\n protected dataSize = computed(() => this.instance()?.totalItems ?? 0);\r\n\r\n public isLastPage = computed(() => {\r\n if (!this.instance()?.totalItems) return false;\r\n return this.page() >= Math.ceil(this.dataSize() / this.pageSize());\r\n });\r\n\r\n public lastPage = computed(() =>\r\n this.instance()?.totalItems\r\n ? Math.ceil(this.dataSize() / this.pageSize())\r\n : 1\r\n );\r\n\r\n protected contextMenuItems = computed(() => {\r\n const items: IContextMenuItem[] = [];\r\n if (!this.isLastPage()) {\r\n items.push({\r\n label: 'Page suivante',\r\n action: () => this.next(),\r\n icon: 'chevron_right',\r\n });\r\n }\r\n if (!this.isFirstPage()) {\r\n items.push({\r\n label: 'Page précédente',\r\n action: () => this.previous(),\r\n icon: 'chevron_left',\r\n });\r\n }\r\n if (this.allowPageEdit()) {\r\n items.push({\r\n label: 'Modifier la page',\r\n action: () => {\r\n this.isPageEditing.set(!this.isPageEditing());\r\n },\r\n icon: 'edit',\r\n });\r\n }\r\n if (this.allowSizeChange()) {\r\n items.push({\r\n label: 'Modifier la taille de la page',\r\n action: () => {\r\n this.pageSizeInput().forceFocus();\r\n },\r\n icon: 'edit',\r\n });\r\n }\r\n return items;\r\n });\r\n\r\n protected currentlyShownSize = computed(() => {\r\n const mult = this.page() * this.pageSize();\r\n return mult > this.dataSize() ? this.dataSize() : mult;\r\n });\r\n\r\n public readonly id = input.required<string>();\r\n\r\n public readonly allowSizeChange = input<boolean>(true);\r\n public readonly allowPageEdit = input<boolean>(true);\r\n public isPageEditing = model<boolean>(false);\r\n\r\n constructor() {\r\n // effect(() => {\r\n // this.dataService.set(`${this.id()}_page`, this.page() - 1);\r\n // });\r\n // effect(() => {\r\n // this.dataService.set(`${this.id()}_pagesize`, this.pageSize());\r\n // });\r\n }\r\n\r\n ngAfterContentChecked(): void {\r\n const paginationInstance = this.service.getInstance(\r\n `${this.id()}`\r\n ) as PaginationInstance;\r\n if (paginationInstance && paginationInstance !== this.instance()) {\r\n this.instance.set(paginationInstance);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dataService\r\n .get(`${this.id()}_pagesize`)\r\n .pipe(distinctUntilChanged(), take(2))\r\n .subscribe((res) => {\r\n if (res) {\r\n this.pageSizeChange.emit(res);\r\n }\r\n });\r\n this.dataService\r\n .get(`${this.id()}_page`)\r\n .pipe(distinctUntilChanged(), take(2))\r\n .subscribe((res) => {\r\n if (res) {\r\n this.pageChange.emit(res);\r\n }\r\n });\r\n }\r\n\r\n public previous = () => {\r\n if (this.isFirstPage()) return;\r\n this.pageChange.emit(this.page() - 1);\r\n // this.dataService.set(`${this.id()}_page`, this.page() - 1);\r\n };\r\n\r\n public next = () => {\r\n if (this.isLastPage()) return;\r\n this.pageChange.emit(this.page() + 1);\r\n // this.dataService.set(`${this.id()}_page`, this.page() + 1);\r\n };\r\n\r\n public setPage = (page: number) => {\r\n if (page < 1 || page > this.lastPage()) return;\r\n this.pageChange.emit(page);\r\n // this.dataService.set(`${this.id()}_page`, page);\r\n };\r\n\r\n public setPageEventHandler = (event: any) => {\r\n this.setPage(+event.target.value);\r\n this.isPageEditing.set(false);\r\n };\r\n\r\n public isFirstPage = computed(() => this.page() == 1);\r\n\r\n public setPageSize = (pageSize: number) => {\r\n //this.setPage(1);\r\n //if (this.instance) this.instance.itemsPerPage = pageSize;\r\n // this.dataService.set(`${this.id()}_pagesize`, pageSize);\r\n this.pageSizeChange.emit(pageSize);\r\n };\r\n\r\n public setPageSizeEventHandler = (event: any) => {\r\n return this.setPageSize(event.target.value);\r\n };\r\n\r\n public focusInput = () => {\r\n this.pageInput().forceFocus();\r\n };\r\n}\r\n","<div class=\"flex flex-row justify-between dark:text-gray-400\" [contextMenu]=\"contextMenuItems()\">\r\n <div class=\"flex flex-row justify-start py-2 items-center content-center\">\r\n @if (allowSizeChange() === true || allowSizeChange() === true) {\r\n <div class=\"w-40\">\r\n <!-- <chr-base-input class=\"\" #pageSizeInput type=\"number\" label=\"Éléments par page\" [ngModel]=\"pageSize()\"\r\n (keyup.enter)=\"setPageSizeEventHandler($event)\" icon=\"check\"\r\n iconTooltip=\"Cliquez ici pour mettre à jour le nombre d'éléments affichés\" [iconCallback]=\"setPageSize\">\r\n </chr-base-input> -->\r\n <chr-base-input class=\"\" #pageSizeInput type=\"number\" label=\"Éléments par page\" [ngModel]=\"pageSize()\"\r\n (keyup.enter)=\"setPageSizeEventHandler($event)\"\r\n iconTooltip=\"Cliquez ici pour mettre à jour le nombre d'éléments affichés\">\r\n </chr-base-input>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"flex flex-row justify-end py-2 items-center content-center \">\r\n <span class=\"entry-indicator\">{{currentlyShownSize()}} éléments sur {{dataSize()}}</span>\r\n\r\n <button type=\"button\" (click)=\"previous()\" [ngClass]=\"isFirstPage() ? 'cursor-not-allowed':'cursor-pointer'\"\r\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_left</mat-icon></button>\r\n <div class=\"flex flex-row items-center content-center mx-2 w-fit table-page-wrapper\"\r\n (click)=\"isPageEditing.set(true);\">\r\n @if(isPageEditing() && allowPageEdit()) {\r\n <!-- <chr-base-input #pageInput type=\"number\" [autofocus]=\"true\" [ngModel]=\"page()\"\r\n (ngModelChange)=\"setPage($event)\" class=\"page-input\"\r\n (blur)=\"isPageEditing.set(false)\" [debounceTime]=\"250\"></chr-base-input> -->\r\n <chr-base-input #pageInput type=\"number\" [autofocus]=\"true\" [value]=\"page()\"\r\n (keyup.enter)=\"setPageEventHandler($event)\" class=\"page-input\"\r\n (blur)=\"isPageEditing.set(false)\"></chr-base-input>\r\n <!-- <input [value]=\"page()\" type=\"number\" [min]=\"1\" [max]=\"lastPage()\"\r\n (change)=\"setPage($any($event.target)!.value)\" class=\"page-input\" (blur)=\"isPageEditing.set(false)\" /> -->\r\n } @else {\r\n <span class=\"page-number\" [attr.data-editable]=\"allowPageEdit()\">{{page()}}</span>\r\n }\r\n <div class=\"page-number\" [attr.data-editable]=\"allowPageEdit()\">\r\n / {{lastPage()}}\r\n </div>\r\n </div>\r\n <button type=\"button\" [ngClass]=\"!isLastPage() ? 'cursor-pointer' : 'cursor-not-allowed'\"\r\n (click)=\"!isLastPage() && next()\"\r\n class=\"w-fit flex justify-center align-middle items-center\"><mat-icon>arrow_right</mat-icon></button>\r\n </div>\r\n</div>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\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 getVariableColor,\r\n getVariableContrastColor,\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\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\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 ContextMenuDirective,\r\n ],\r\n templateUrl: './chr-table-new.component.html',\r\n styleUrls: [\r\n './chr-table-new.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n providers: [PaginationService],\r\n})\r\nexport class ChrDataTable {\r\n private dataService = inject(DataService);\r\n private changeDetector = inject(ChangeDetectorRef);\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 public data = input<any[]>([]);\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 readonly selectable = input<boolean>(false);\r\n\r\n /**\r\n * The selected entries\r\n */\r\n readonly selection = model<any[]>([]);\r\n\r\n /**\r\n * The table's action column definition\r\n */\r\n readonly actions = input<IAction[]>();\r\n\r\n readonly contextMenuItems = (entry: any) => {\r\n const entries = this.actions()\r\n ?.filter((action) =>\r\n action.disabledCallback\r\n ? !action.disabledCallback(entry)\r\n : !action.disabled || false\r\n )\r\n ?.map(\r\n (action) =>\r\n ({\r\n label: action.display,\r\n icon: action.icon,\r\n action: () => action.callback(entry),\r\n color: action.color,\r\n } as IContextMenuItem)\r\n );\r\n if (this.selectable()) {\r\n const checked = this.contains(entry);\r\n entries?.push({\r\n label: checked ? 'Désélectionner' : 'Sélectionner',\r\n icon: checked ? 'close' : 'check_box',\r\n action: () => {\r\n this.select(entry, {\r\n target: { checked: !checked } as any,\r\n } as any);\r\n },\r\n });\r\n }\r\n return entries || [];\r\n };\r\n\r\n /**\r\n * Wheter or not the current sort is ascendant. Default is true\r\n */\r\n readonly isAsc = model<boolean>(true);\r\n /**\r\n * The property by which the data will be sorted\r\n */\r\n readonly sortBy = model<string>();\r\n\r\n /**\r\n * The page size for the table. Default is 20\r\n */\r\n readonly pageSize = model<number>(20);\r\n\r\n /**\r\n * The current page of the table. Default is 1\r\n */\r\n readonly currentPage = model<number>(1);\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 readonly id = input<string>(`chr_base-data-table_${crypto.randomUUID()}`);\r\n\r\n /**\r\n * The color to use for the table's header\r\n */\r\n readonly color = input<Color>('primary');\r\n\r\n readonly primaryColor = computed(() => {\r\n return getVariableColor(this.color());\r\n });\r\n readonly textColor = computed(() => {\r\n return getVariableContrastColor(this.color());\r\n });\r\n\r\n /**\r\n * The table's columns definitions\r\n */\r\n readonly columns = input<TColumn[]>([]);\r\n\r\n ngOnInit(): void {\r\n this.dataService.get(`${this.id()}_sortBy`).subscribe((res) => {\r\n if (res) this.sortBy.set(res);\r\n this.changeDetector.markForCheck();\r\n });\r\n this.dataService.get(`${this.id()}_isAsc`).subscribe((res) => {\r\n if (res) this.isAsc.set(res);\r\n this.changeDetector.markForCheck();\r\n });\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 | 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.set([\r\n ...this.selection(),\r\n ...(Array.isArray(entry) ? entry : [entry]),\r\n ]);\r\n } else {\r\n this.selection.set([\r\n ...(Array.isArray(entry)\r\n ? this.selection().filter((x) => !entry.includes(x))\r\n : this.selection().filter((x) => x !== entry)),\r\n ]);\r\n }\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.set(data);\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 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 //console.log(`[Table] getBackgroundColor: `, color);\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 getVariableColor = (color: Color) => {\r\n return getVariableColor(color);\r\n };\r\n\r\n getVariableContrastColor = (color: Color) => {\r\n return getVariableContrastColor(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.set(!this.isAsc());\r\n } else {\r\n this.sortBy.set(properties);\r\n this.isAsc.set(true);\r\n }\r\n };\r\n}\r\n","<table class=\"hidden md:!table chr-table\">\r\n <thead>\r\n <tr>\r\n @if (selectable()) {\r\n <th class=\"w-min row-selector\" [style]=\"{'background-color': primaryColor(), 'color': textColor()}\"\r\n (click)=\"checkbox.click()\">\r\n <input #checkbox type=\"checkbox\" class=\"pointer-events-none no-events table-checkbox\"\r\n [style]=\"{'accent-color': primaryColor()}\" (click)=\"select(data(), $event)\" />\r\n </th>\r\n }\r\n @for (column of columns() || []; track column) {\r\n <th class=\"header-cell\" [style]=\"{'background-color': primaryColor(), 'color': textColor()}\"\r\n (click)=\"sort(column.properties)\">\r\n <div class=\"header-cell-content-wrapper\">\r\n <span class=\"header-cell-content\">{{column.display}}</span>\r\n @if (column.properties && sortBy() == column.properties && !isAsc()) {\r\n <mat-icon class=\"header-cell-content\">arrow_upward</mat-icon>\r\n }\r\n <!-- 🡱 🡳 -->\r\n @if (column.properties && sortBy() == column.properties && isAsc()) {\r\n <mat-icon class=\"header-cell-content\">arrow_downward</mat-icon>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (actions()) {\r\n <th class=\"actions-header-cell\" [style]=\"{'background-color': primaryColor(), 'color': textColor()}\">Actions\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (data() === null || data() === undefined || data().length <= 0) { <tr>\r\n @if (selectable()) {\r\n <td></td>\r\n }\r\n <td>Pas de données</td>\r\n </tr>\r\n }\r\n @for (entry of data() | sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(),\r\n id: this.id()}; track entry) {\r\n <tr [style]=\"{'border-color': primaryColor()}\" [contextMenu]=\"contextMenuItems(entry)\">\r\n @if (selectable()) {\r\n <td class=\"w-min row-selector\" (click)=\"checkbox.click()\">\r\n <input #checkbox type=\"checkbox\" class=\"pointer-events-none no-events table-checkbox\"\r\n [style]=\"{'accent-color': primaryColor()}\" (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" />\r\n </td>\r\n }\r\n @for (column of columns() || []; track column) {\r\n <td tab-input-only>\r\n @switch (column.type) {\r\n @default {\r\n <ng-container [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('date') {\r\n <ng-container [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('input') {\r\n <ng-container [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('chips') {\r\n <ng-container [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n }\r\n </td>\r\n }\r\n @if (actions() != undefined && actions()!.length > 0) {\r\n <td>\r\n <div class=\"actions-cell\">\r\n @for (action of actions(); track action) {\r\n <app-chr-button [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry)\"\r\n [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 }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n <tfoot></tfoot>\r\n</table>\r\n\r\n<div class=\"md:!hidden chr-mobile-table\">\r\n @for (entry of data() | sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id:\r\n this.id()}; track entry; let i = $index) {\r\n <div class=\"entry\" [contextMenu]=\"contextMenuItems(entry)\">\r\n @if (selectable()) {\r\n <div class=\"entry-row\" [style]=\"{'border-color': primaryColor()}\">\r\n <div class=\"entry-header\" [style]=\"{'background-color': primaryColor(), color: textColor()}\">\r\n </div>\r\n\r\n <div class=\"entry-content flex flex-row justify-center row-selector\" (click)=\"checkbox.click()\">\r\n <input #checkbox type=\"checkbox\" class=\"pointer-events-none no-events table-checkbox\"\r\n (click)=\"select(entry, $event)\" [style]=\"{'accent-color': primaryColor()}\" [checked]=\"contains(entry)\" />\r\n </div>\r\n </div>\r\n }\r\n @for (column of columns() || []; track column) {\r\n <div class=\"entry-row\" [style]=\"{'border-color': primaryColor()}\">\r\n <div class=\"entry-header\" [style]=\"{'background-color': primaryColor(), color: textColor()}\">\r\n {{column.display}}\r\n </div>\r\n <div class=\"entry-content\" tab-input-only>\r\n @switch (column.type) {\r\n @default {\r\n <ng-container [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('date') {\r\n <ng-container [ngTemplateOutlet]=\"date\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('input') {\r\n <ng-container [ngTemplateOutlet]=\"input\" class=\"form-wrapper\"\r\n [ngTemplateOutletContext]=\"{entry: entry, value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n @case ('chips') {\r\n <ng-container [ngTemplateOutlet]=\"chip\"\r\n [ngTemplateOutletContext]=\"{value: getNestedProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (actions()) {\r\n <div class=\"entry-row\">\r\n <div class=\"entry-header\" [style]=\"{'background-color': primaryColor(), color: textColor()}\">\r\n Actions\r\n </div>\r\n\r\n @if (actions() != undefined && actions()!.length > 0) {\r\n <div class=\"entry-content actions-cell\">\r\n @for (action of actions(); track action) {\r\n <app-chr-button class=\"w-full\" [display]=\"action.display\" [icon]=\"action.icon\" type=\"full\"\r\n [click]=\"action.callback.bind(null, entry, i)\" [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 }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<app-chr-paginator [id]=\"this.id()\" [(page)]=\"currentPage\" [(pageSize)]=\"pageSize\"\r\n (pageSizeChange)=\"currentPage.set(1)\" />\r\n\r\n<!-- CELL TEMPLATES -->\r\n<ng-template #default let-column='column' let-value=\"value\">\r\n @if (column.callback? column.callback(value) : value; as val) {\r\n <span>{{val}}</span>\r\n }\r\n</ng-template>\r\n<ng-template #date let-column='column' let-value=\"value\">\r\n @if (column.callback? column.callback(value) : value; as val) {\r\n <span>{{val | date: column.format}}</span>\r\n }\r\n</ng-template>\r\n<ng-template #link let-column='column' let-value=\"value\">\r\n @if (column.callback? column.callback(value) : value; as val) {\r\n <a target=\"_blank\" [href]=\"column.url + '/'+ val\">{{val}}</a>\r\n }\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</ng-template>\r\n<ng-template #chip let-column='column' let-value=\"value\">\r\n @let val = column.callback? column.callback(value) : value;\r\n @if (val !== null && val !== undefined) {\r\n <div class=\"w-full h-full flex flex-row items-center align-middle\">\r\n @if ((column.chipsCallback ? column.chips?.[column.chipsCallback(val)]: column.chips?.[val]); as chip) {\r\n <span\r\n class=\"w-full md:max-w-36 flex text-center content-center align-middle items-center justify-center text-xs font-medium py-0.5 rounded-full\"\r\n [style]=\"{'background-color': getVariableColor(chip.color), color: chip.color === 'none'? getVariableColor('text'):getVariableContrastColor(chip.color)}\">\r\n {{ chip.display }}\r\n </span>\r\n }\r\n </div>\r\n }\r\n</ng-template>","import {\r\n AfterViewInit,\r\n Component,\r\n Input,\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 { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { ToastService } from '../../services/toast.service';\r\nimport { FileService } from '../../services/files.service';\r\nimport { catchError, forkJoin, Observable, take } from 'rxjs';\r\nimport { IFile } from '../../models/file';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ChrFileInputComponent } from '../chr-file-input/chr-file-input.component';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'chr-nice-file-input',\r\n imports: [CommonModule, MatIconModule, AutofocusDirective],\r\n templateUrl: './chr-nice-file-input.component.html',\r\n styleUrl: './chr-nice-file-input.component.scss',\r\n})\r\nexport class ChrNiceFileInputComponent\r\n extends ChrFileInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy {}\r\n","<div class=\"flex flex-col items-center justify-center w-full h-full\">\r\n <div\r\n class=\"flex flex-col items-center justify-center w-full h-full border-2 border-dashed rounded-lg cursor-pointer dropzone p-4\"\r\n [ngClass]=\"{\r\n 'border-error': hasError() && isTouched\r\n }\" (click)=\"input.click()\" (click)=\"onTouch($event)\">\r\n <!-- Zone de drop / clic fichier -->\r\n <div class=\"flex flex-col items-center justify-center pt-5 pb-2\">\r\n <svg class=\"w-8 h-8\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 20 16\">\r\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n d=\"M13 13h3a3 3 0 0 0 0-6h-.025A5.56 5.56 0 0 0 16 6.5 5.5 5.5 0 0 0 5.207 5.021C5.137 5.017 5.071 5 5 5a4 4 0 0 0 0 8h2.167M10 15V6m0 0L8 8m2-2 2 2\" />\r\n </svg>\r\n @if (files.length <= 0) { <p class=\"text-sm text-color\">\r\n <span class=\"font-semibold\">{{label() ?? 'Cliquez pour ajouter'}}</span> @if (isControlRequired()) {\r\n <span class=\"text-error\">*</span>\r\n }\r\n </p>\r\n }\r\n @if (hasError() && isTouched()) {\r\n <p class=\"text-error font-bold\">{{ getLastError() }}</p>\r\n }\r\n <p class=\"text-xs text-neutral font-semibold mt-2\">Format(s) accepté(s):</p>\r\n <p class=\"text-xs text-neutral\">{{ getToAccept() }}</p>\r\n <input #input type=\"file\" [disabled]=\"disabled()\" [attr.multiple]=\"multiple()\" class=\"hidden\"\r\n [chrAutofocus]=\"autofocus() || false\" [accept]=\"acceptToString()\" (change)=\"onFileChange($event)\" />\r\n </div>\r\n </div>\r\n <div class=\"w-full\">\r\n @for(file of files; track file; let index = $index){\r\n @if (file | async; as conversion) {\r\n <div class=\"progress-bar\">\r\n <div class=\"progress\" [style.width]=\"conversion.progress + '%'\" [ngClass]=\"{\r\n 'ongoing': conversion.progress > 0 && conversion.progress < 100,\r\n 'finished': !fileErrors?.[index] && conversion.progress === 100,\r\n 'error': fileErrors?.[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 class=\"progress-bar-progress\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\">\r\n {{conversion.progress}}%\r\n </span>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"openFile(index, conversion.file)\">visibility</mat-icon>\r\n <mat-icon class=\"progress-bar-delete cursor-pointer\"\r\n [ngClass]=\"{'text-contrast': conversion.progress === 100 || fileErrors?.[index]}\"\r\n (click)=\"removeFile(index, conversion.file)\">delete</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>","import { Component, input, output } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-chr-searchbar, chr-searchbar',\r\n templateUrl: './chr-searchbar.component.html',\r\n styleUrls: [\r\n './chr-searchbar.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [ReactiveFormsModule],\r\n})\r\nexport class ChrSearchbarComponent {\r\n readonly model = input<string | null>();\r\n readonly modelChange = output<string>();\r\n readonly placeholder = input<string | null>();\r\n readonly label = input<string | null>();\r\n public searchBy = new FormControl<string>('');\r\n\r\n constructor() {\r\n this.searchBy.valueChanges.subscribe((value) => this.emit(value));\r\n }\r\n\r\n emit(event: any) {\r\n this.modelChange.emit(event);\r\n }\r\n}\r\n","<div class=\"w-full relative z-0 group/inputs\">\r\n <input matInput [formControl]=\"searchBy\" placeholder=\" \" type=\"text\"\r\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\" />\r\n <label\r\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\">{{\r\n label()\r\n }}\r\n <!--\r\n @for (validation of control.validations; track validation) {\r\n @if (\r\n control?.touched &&\r\n form.hasError(validation.rule.toLowerCase(), name)\r\n ) {\r\n <mat-error class=\"text-red-500 dark:text-red-800\">{{ validation.display }}</mat-error>\r\n }\r\n }\r\n -->\r\n </label>\r\n</div>","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgClass } from '@angular/common';\r\n/**\r\n * This should only be used as a directive\r\n */\r\n@Component({\r\n selector:\r\n 'app-chr-table-header-cell, [app-chr-table-header-cell], chr-table-header-cell',\r\n templateUrl: './chr-table-header-cell.component.html',\r\n styleUrls: [\r\n './chr-table-header-cell.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [NgClass, MatIcon],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrTableHeaderCellComponent {\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n readonly display = input<string>();\r\n readonly column = input<string[]>();\r\n readonly alignment = input<string>();\r\n readonly isAsc = input<boolean>(true);\r\n readonly isAscChange = output<boolean>();\r\n readonly sortBy = input<string[]>();\r\n readonly sortByChange = output<string[]>();\r\n\r\n orderBy = (column?: string[]) => {\r\n const sortBy = this.sortBy();\r\n if (!sortBy) this.sortByChange.emit(column!);\r\n\r\n if (sortBy == column) {\r\n this.isAscChange.emit(!this.isAsc());\r\n this.sortByChange.emit(column!);\r\n // this.isAscChange.emit(this.isAsc());\r\n // this.sortByChange.emit(sortBy);\r\n } else {\r\n this.isAscChange.emit(true);\r\n this.sortByChange.emit(column!);\r\n }\r\n this.changeDetector.markForCheck();\r\n };\r\n}\r\n","<div class=\"relative w-full cursor-pointer flex flex-row align-middle self-center\" [ngClass]=\"\r\n alignment() == 'left' ? 'justify-start' : \r\n alignment() == 'center' ? 'justify-center' : \r\n alignment() == 'right' ? 'justify-end' : \r\n 'justify-left'\" (click)=\"orderBy(column())\">\r\n <p>{{ display() }}</p>\r\n @if (sortBy()) {\r\n <div class=\"absolute right-3 top-0 h-0 w-0\">\r\n @if (sortBy() == column() && isAsc()) {\r\n <mat-icon>arrow_upward</mat-icon>\r\n }\r\n @if (sortBy() == column() && !isAsc()) {\r\n <mat-icon>arrow_downward</mat-icon>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<ng-content />","import {\r\n Component,\r\n Input,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n OnInit,\r\n ChangeDetectionStrategy,\r\n inject,\r\n input,\r\n output,\r\n model,\r\n} from '@angular/core';\r\nimport { ChrPaginatorComponent } from '../chr-paginator/chr-paginator.component';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { ChrTableHeaderCellComponent } from '../chr-table-header-cell/chr-table-header-cell.component';\r\nimport { NgxPaginationModule } from 'ngx-pagination';\r\nimport {\r\n CommonModule,\r\n DATE_PIPE_DEFAULT_OPTIONS,\r\n DatePipe,\r\n} from '@angular/common';\r\nimport { DataService } from '../services/data.service';\r\n\r\nimport { SortPipe } from 'chrv-pipes';\r\nimport { getContrastTextColor } from '../models/colors';\r\nimport {\r\n Color,\r\n getBackgroundColor,\r\n getBorderColor,\r\n getTextColor,\r\n} from '../models/colors';\r\nimport { TabToInputHandlerDirective } from '../directives/tab-input-only-handler.directive';\r\nimport { take } from 'rxjs';\r\nimport { ContextMenuDirective } from '../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\n\r\nexport type Alignment = 'left' | 'center' | 'right';\r\n\r\nexport const Aligments: { [key: string]: string } = {\r\n left: 'text-left justify-start',\r\n center: 'text-center justify-center',\r\n right: 'text-right justify-end',\r\n};\r\n\r\nexport interface IChips {\r\n display: string;\r\n name: string;\r\n callback: (entry: any) => string | boolean;\r\n textColor?: Color;\r\n backgroundColor?: Color;\r\n}\r\n\r\nexport interface IColumn {\r\n display: string;\r\n alignment?: 'left' | 'center' | 'right';\r\n chips?: IChips[];\r\n properties?: string[];\r\n callback?: Function;\r\n date?: string;\r\n isLink?: boolean;\r\n linkStaticUrl?: string;\r\n}\r\n\r\nexport interface IComputedRow {\r\n columns: IComputedColumn[];\r\n}\r\n\r\nexport interface IComputedColumn {\r\n label?: string;\r\n value?: any;\r\n callback?: Function;\r\n alignment?: 'left' | 'center' | 'right';\r\n after?: string;\r\n}\r\n\r\nexport interface IAction {\r\n display?: string;\r\n icon?: string;\r\n callback: ((entry: any, index?: number) => void | any) | Function;\r\n disabled?: boolean;\r\n disabledCallback?: ((entry: any) => boolean) | Function;\r\n color: Color;\r\n}\r\n\r\n@Component({\r\n selector: 'app-chr-table, [app-chr-table], chr-table',\r\n templateUrl: './chr-table.component.html',\r\n styleUrls: ['./chr-table.component.scss', '../../../../../tailwindbuild.css'],\r\n imports: [\r\n ChrTableHeaderCellComponent,\r\n ChrButtonComponent,\r\n ChrPaginatorComponent,\r\n SortPipe,\r\n NgxPaginationModule,\r\n CommonModule,\r\n ContextMenuDirective,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n providers: [\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 ChrTableComponent implements OnInit, AfterViewInit {\r\n private _date = inject(DatePipe);\r\n private dataService = inject(DataService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n readonly computedRows = input<IComputedRow[]>();\r\n readonly columns = input<IColumn[]>();\r\n\r\n private _data: any[] | null = [];\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.changeDetector.markForCheck();\r\n }\r\n\r\n readonly actions = input<IAction[]>([]);\r\n\r\n readonly isAsc = model<boolean>(true);\r\n readonly sortBy = model<string[]>();\r\n readonly pageSize = model<number>(50);\r\n readonly currentPage = model<number>(1);\r\n readonly selectable = input<boolean>(false);\r\n\r\n readonly selection = model<any[]>([]);\r\n\r\n readonly id = input<string>(`chr_base-data-table_${crypto.randomUUID()}`);\r\n\r\n readonly color = input<Color>('secondary');\r\n\r\n readonly textColor = input<Color>('secondary-contrast');\r\n\r\n private _page: number = 1;\r\n\r\n readonly contextMenuItems = (entry: any) => {\r\n const entries = this.actions()\r\n ?.filter((action) =>\r\n action.disabledCallback\r\n ? !action.disabledCallback(entry)\r\n : !action.disabled || false\r\n )\r\n .map(\r\n (action) =>\r\n ({\r\n label: action.display,\r\n icon: action.icon,\r\n action: () => action.callback(entry),\r\n color: action.color,\r\n } as IContextMenuItem)\r\n );\r\n if (this.selectable()) {\r\n const checked = this.contains(entry);\r\n entries?.push({\r\n label: checked ? 'Désélectionner' : 'Sélectionner',\r\n icon: checked ? 'close' : 'check_box',\r\n action: () => {\r\n this.select(entry, {\r\n target: { checked: !checked } as any,\r\n } as any);\r\n },\r\n });\r\n }\r\n return entries || [];\r\n };\r\n\r\n currentProperty: any | null = null;\r\n currentText: string | null = null;\r\n\r\n ngOnInit(): void {\r\n this.dataService.get(`${this.id()}_sortBy`).subscribe((res) => {\r\n if (res) this.sortBy.set(res);\r\n });\r\n this.dataService.get(`${this.id()}_isAsc`).subscribe((res) => {\r\n if (res) this.isAsc.set(res);\r\n });\r\n }\r\n ngAfterViewInit(): void {}\r\n\r\n protected getProperty = (entry: any, properties?: any[]) => {\r\n this.currentProperty = null;\r\n this.currentText = null;\r\n\r\n if (!properties) {\r\n this.currentProperty = entry;\r\n return entry;\r\n }\r\n let value = entry;\r\n for (const i of properties) {\r\n value = (value as any)?.[i];\r\n }\r\n this.currentProperty = value;\r\n return value;\r\n };\r\n\r\n protected getText = (property: any, column: IColumn) => {\r\n let text = null;\r\n\r\n if (column.callback) text = column.callback(property);\r\n\r\n if (text == null && column.date)\r\n text = this._date.transform(property, column.date);\r\n\r\n this.currentText = text || property;\r\n\r\n return text || property;\r\n // column.date\r\n // ? column.callback\r\n // \t? column.callback(property)\r\n // \t: (property | date : column.date)\r\n // : column.callback\r\n // \t? column.callback(property)\r\n // \t: property\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 //console.log('selecting', entry, event);\r\n this.selection.set([\r\n ...this.selection(),\r\n ...(Array.isArray(entry) ? entry : [entry]),\r\n ]);\r\n } else {\r\n this.selection.set(this.selection().filter((x) => x !== entry));\r\n }\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.selection.set(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 protected getIsAsc = () => {\r\n return this.isAsc();\r\n };\r\n\r\n protected getSortBy = () => {\r\n return this.sortBy();\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 getAlignment = (alignment: Alignment = 'center') => {\r\n return Aligments[alignment] || Aligments['left'];\r\n };\r\n}\r\n","<div class=\"h-full no-scrollbar\">\r\n <ng-content class=\"mt-5\"></ng-content>\r\n <div class=\"flex flex-col flex-1 overflow-auto no-scrollbar\">\r\n @if (data) {\r\n <!-- max-w-[75%] -->\r\n <table\r\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\">\r\n <thead>\r\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0\"\r\n [ngClass]=\"[getBackgroundColor(color()), getContrastTextColor(textColor())]\">\r\n @for (column of columns(); track column) {\r\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\r\n [(isAsc)]=\"isAsc\" [(sortBy)]=\"sortBy\">\r\n </th>\r\n }\r\n @if (actions()) {\r\n <th\r\n class=\"h-14 p-3 text-left sm:text-center place-content-center place-items-center items-center align-middle sm:w-0\">\r\n Actions\r\n </th>\r\n }\r\n </tr>\r\n }\r\n @for (entry of data |\r\n sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id: this.id()}; track\r\n entry)\r\n {\r\n <tr class=\"flex flex-col flex-no wrap sm:table-row rounded-lg mb-2 sm:mb-0 \"\r\n [ngClass]=\"[getBackgroundColor(color()), getContrastTextColor(textColor())]\">\r\n @if (selectable()) {\r\n <th class=\"p-3 h-14\"></th>\r\n }\r\n @for (column of columns(); track column) {\r\n <th app-chr-table-header-cell class=\"p-3 h-14\" display=\"{{ column.display }}\" [column]=\"column.properties\"\r\n [(isAsc)]=\"isAsc\" alignment=\"{{column.alignment}}\" [(sortBy)]=\"sortBy\"></th>\r\n }\r\n @if (actions()) {\r\n <th\r\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\">\r\n Actions\r\n </th>\r\n }\r\n </tr>\r\n }\r\n </thead>\r\n <tbody class=\"w-full\">\r\n @if (data.length <= 0) { <tr class=\"flex flex-col flex-no-wrap sm:table-row rounded-lg mb-0 sm:mb-2 \">\r\n <td class=\"p-3 h-14\">Pas de donnée(s)</td>\r\n @for (column of columns() | slice: 1; track column) {\r\n <td class=\"p-3 h-14\"></td>\r\n }\r\n @if (actions()) {\r\n <td class=\"p-3 h-14 grid gap-3 justify-center align-middle items-center\"\r\n [ngClass]=\"actions().length > 1 ? 'grid-cols-2' : 'grid-cols-1'\"></td>\r\n }\r\n </tr>\r\n }\r\n @for (entry of data |\r\n sort:isAsc():sortBy() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id: this.id()}; track\r\n entry; let i = $index) {\r\n <tr [attr.data-index]=\"i\" [contextMenu]=\"contextMenuItems(entry)\"\r\n class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 sm:border-t-2 sm:first:border-0\"\r\n [ngClass]=\"[getBorderColor(color())]\">\r\n @if (selectable()) {\r\n <td class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\r\n [ngClass]=\"getBorderColor(color())\"><input type=\"checkbox\" class=\"table-checkbox\"\r\n (click)=\"select(entry, $event)\" [checked]=\"contains(entry)\" /></td>\r\n }\r\n @for (column of columns(); track column;) {\r\n <td [ngClass]=\"\r\n column.chips\r\n ? ''\r\n : ''\r\n \" class=\"p-3 h-14 text-ellipsis max-w-full border-t-2 first:border-0 sm:first:border-t-2\"\r\n [ngClass]=\"getBorderColor(color())\">\r\n <ng-container [ngTemplateOutlet]=\"default\"\r\n [ngTemplateOutletContext]=\"{prop: getProperty(entry, column.properties), column: column}\">\r\n </ng-container>\r\n </td>\r\n }\r\n <ng-template #default let-column='column' let-property=\"prop\">\r\n @if (column.isLink) {\r\n <a target=\"_blank\" class=\"text-{{column.alignment}}\" href=\"{{column.linkStaticUrl}}{{\r\n getText(property, column)\r\n }}\">\r\n {{\r\n currentText\r\n }}\r\n </a>\r\n }\r\n @if (!column.isLink) {\r\n <div class=\"flex flex-row\" [ngClass]=\"{\r\n 'justify-start': column.alignment == 'left',\r\n 'justify-center': column.alignment == 'center',\r\n 'justify-end': column.alignment == 'right',\r\n 'gap-2': column.chipsDisplay && getText(property, column)\r\n }\">\r\n @if (column.chips && column.chips.length > 0) {\r\n <div>\r\n @for(chip of column.chips; track chip; let i = $index){\r\n @if (chip.callback(entry) === true || chip.callback(entry) === chip.name) {\r\n <span\r\n class=\"w-24 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.backgroundColor), chip.backgroundColor != 'none' ? getContrastTextColor(chip.backgroundColor) : getTextColor(chip.textColor)]\">\r\n {{ chip.display }}\r\n </span>\r\n }\r\n }\r\n </div>\r\n }@else {\r\n <p class=\"inline-block overflow-hidden text-nowrap text-ellipsis max-w-full\">\r\n {{\r\n currentText || getText(property, column)\r\n }}\r\n </p>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n\r\n @if (actions()) {\r\n <td class=\"p-3 h-14 flex gap-2 w-full sm:w-min justify-center\">\r\n @for (action of actions(); track action) {\r\n <app-chr-button class=\"w-full\" [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(entry)\r\n : action.disabled || false\r\n \" [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"action.callback.bind(null, entry, i)\"\r\n [color]=\"action.color\" type=\"responsive\">\r\n </app-chr-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n @for (r of computedRows(); track r) {\r\n <tr class=\"flex flex-col flex-no-wrap sm:table-row mb-2 sm:mb-0 \">\r\n @for (c of r.columns; track c) {\r\n <td [ngClass]=\"c.alignment && 'text-'+(c.alignment||'left')\" class=\"p-3 h-14\">\r\n {{c.label && c.label + ':'}} {{c.value || (c.callback && c.callback(data))}} {{c.after}}\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n <app-chr-paginator [id]=\"this.id()\" [(pageSize)]=\"pageSize\" [(page)]=\"currentPage\"\r\n (pageSizeChange)=\"currentPage.set(1)\"></app-chr-paginator>\r\n }\r\n </div>\r\n</div>","import { Component, input, output } from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-chr-checkbox, chr-checkbox',\r\n templateUrl: './chr-checkbox.component.html',\r\n styleUrls: [\r\n './chr-checkbox.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [MatIcon],\r\n})\r\nexport class ChrCheckboxComponent {\r\n public checked: boolean = false;\r\n\r\n readonly type = input<'info' | 'success'>('info');\r\n\r\n readonly disabled = input<boolean>(false);\r\n\r\n readonly change = output<{\r\n checked: boolean;\r\n }>();\r\n\r\n check(end: boolean) {\r\n if (this.disabled()) return;\r\n if (end) {\r\n this.checked = true;\r\n this.change.emit({ checked: true });\r\n } else {\r\n this.checked = false;\r\n this.change.emit({ checked: false });\r\n }\r\n }\r\n}\r\n","<div>\r\n @if (checked) {\r\n <div (click)=\"check(false)\" [class.info]=\"type()=='info'&&!disabled()\"\r\n [class.bg-green-100]=\"type()=='success'&&!disabled()\" [class.cursor-pointer]=\"!disabled()\"\r\n [class.bg-grey-400]=\"disabled()\"\r\n class=\"box-border rounded-lg p-3 h-12 text-center border-bottom-accent sm:border-none\">\r\n <div class=\"flex justify-center items-center\"><mat-icon>check-circle</mat-icon></div>\r\n </div>\r\n }\r\n @if (!checked) {\r\n <div (click)=\"check(true)\" [class.cursor-pointer]=\"!disabled()\" [class.disabled]=\"disabled()\"\r\n [class.bg-gray-200]=\"disabled()\" [class.bg-red-100]=\"!disabled()\"\r\n class=\"box-border p-3 h-12 text-center rounded-lg border-bottom-accent sm:border-none\">\r\n <div class=\"flex justify-center items-center\"><mat-icon>close</mat-icon></div>\r\n </div>\r\n }\r\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 {\r\n HttpContextToken,\r\n HttpEvent,\r\n HttpInterceptorFn,\r\n HttpResponse,\r\n} from '@angular/common/http';\r\nimport { finalize, Observable, tap } from 'rxjs';\r\nimport { LiveUpdateService } from '../../services/live-update.service';\r\nimport {\r\n HUBURL,\r\n XSRFCOOKIENAME,\r\n XSRFHEADERNAME,\r\n} from '../providers/xsrf-provider';\r\nimport { DataService } from '../../services/data.service';\r\n\r\nexport const XsrfInterceptor: HttpInterceptorFn = (req, next) => {\r\n const headerName: string = inject(XSRFHEADERNAME);\r\n const hubUrl: string = inject(HUBURL);\r\n\r\n const liveUpdateService: LiveUpdateService | null =\r\n hubUrl != null && hubUrl != undefined ? inject(LiveUpdateService) : null;\r\n const dataService: DataService = inject(DataService);\r\n const csrfToken = dataService.getSync(headerName);\r\n\r\n const hasCsrfToken = csrfToken !== null && csrfToken !== undefined;\r\n const shouldIntercept = ['PUT', 'POST', 'DELETE'].includes(req.method);\r\n\r\n const isWebSocket =\r\n liveUpdateService && liveUpdateService.getHubUrl() !== null\r\n ? req.url.includes(liveUpdateService.getHubUrl()!)\r\n : false;\r\n\r\n if (hasCsrfToken && shouldIntercept && !isWebSocket) {\r\n const cloned = req.clone({\r\n headers: req.headers.set(headerName, csrfToken),\r\n });\r\n\r\n liveUpdateService?.initConnection().subscribe();\r\n return next(cloned).pipe(\r\n WaitAndStoreXsrfToken(headerName, dataService),\r\n finalize(() => liveUpdateService?.closeConnection().subscribe())\r\n );\r\n } else {\r\n return next(req).pipe(WaitAndStoreXsrfToken(headerName, dataService));\r\n }\r\n};\r\n\r\nexport const WaitAndStoreXsrfToken = (\r\n headername: string,\r\n dataService: DataService\r\n) => {\r\n return (source: Observable<HttpEvent<any>>) => {\r\n return source.pipe(\r\n tap((event) => {\r\n if (event instanceof HttpResponse) {\r\n const xsrfToken = event.headers.get(headername);\r\n if (xsrfToken) {\r\n dataService.set(headername, xsrfToken);\r\n }\r\n }\r\n return event;\r\n })\r\n );\r\n };\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 { Injectable, inject } from '@angular/core';\r\nimport {\r\n BehaviorSubject,\r\n delay,\r\n filter,\r\n from,\r\n Observable,\r\n ReplaySubject,\r\n skipWhile,\r\n switchMap,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\nimport {\r\n HttpClient,\r\n HttpTransportType,\r\n HubConnection,\r\n HubConnectionBuilder,\r\n HubConnectionState,\r\n IHttpConnectionOptions,\r\n LogLevel,\r\n} from '@microsoft/signalr';\r\nimport {\r\n DEFAULTLIVEUPDATEMESSAGE,\r\n ILiveUpdateMessage,\r\n LiveUpdateStatus,\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 providedIn: 'root',\r\n})\r\nexport class LiveUpdateService {\r\n private dataService = inject<DataService>(DataService);\r\n\r\n private _hubUrl: string | null = null;\r\n private _connection: HubConnection | null = null;\r\n private _xsrf: string | null = null;\r\n private _xsrfHeader: string | null;\r\n //private _client: HttpClient;\r\n private _message: BehaviorSubject<ILiveUpdateMessage> = new BehaviorSubject(\r\n DEFAULTLIVEUPDATEMESSAGE\r\n );\r\n private _update: BehaviorSubject<string> = new BehaviorSubject(\r\n DEFAULTLIVEUPDATEMESSAGE?.message || ''\r\n );\r\n\r\n constructor() {\r\n const hubUrl = inject(HUBURL, { optional: true });\r\n const xsrfHeader = inject(XSRFHEADERNAME, { optional: true });\r\n const dataService = this.dataService;\r\n\r\n this._hubUrl = hubUrl;\r\n this._xsrfHeader = xsrfHeader;\r\n if (this._xsrfHeader !== null)\r\n this._xsrf = dataService.getSync(this._xsrfHeader);\r\n }\r\n\r\n public initConnection = (): Observable<void> => {\r\n if (this._xsrfHeader == null) throw new Error('xsrfHeader is not set');\r\n if (this._hubUrl == null) throw new Error('hubUrl is not set');\r\n\r\n this._xsrf = this.dataService.getSync(this._xsrfHeader);\r\n if (this._connection == null)\r\n this._connection = new HubConnectionBuilder()\r\n .withUrl(this._hubUrl, {\r\n transport: HttpTransportType.ServerSentEvents,\r\n headers: { [this._xsrfHeader]: this._xsrf },\r\n } as IHttpConnectionOptions)\r\n .configureLogging(LogLevel.None)\r\n .withAutomaticReconnect()\r\n .build();\r\n\r\n return new Observable<void>((observer) => {\r\n if (this._connection?.state == HubConnectionState.Connected)\r\n this._connection;\r\n else\r\n this._connection\r\n ?.start()\r\n .then(() => {\r\n observer.next();\r\n observer.complete();\r\n })\r\n .catch((error: any) => {\r\n observer.error(error);\r\n });\r\n\r\n this._connection?.on('UPDATE', (message: ILiveUpdateMessage) => {\r\n this.pushMessage(message);\r\n });\r\n });\r\n };\r\n\r\n public onUpdate(): Observable<string> {\r\n return this._update\r\n .asObservable()\r\n .pipe(skipWhile((message) => message == null));\r\n }\r\n\r\n public closeConnection(): Observable<void> {\r\n return from(this._connection!.stop()).pipe(\r\n tap(() => {\r\n this._connection = null;\r\n\r\n //We push a null to flush the observable\r\n this._message.next(DEFAULTLIVEUPDATEMESSAGE);\r\n this._update.next(DEFAULTLIVEUPDATEMESSAGE?.message || '');\r\n })\r\n );\r\n }\r\n\r\n public getMessage(): Observable<ILiveUpdateMessage> {\r\n return this._message\r\n .asObservable()\r\n .pipe(skipWhile((message) => message == null));\r\n }\r\n\r\n public getHubUrl = (): string | null => this._hubUrl;\r\n\r\n private pushMessage(message: ILiveUpdateMessage) {\r\n this._message.next(message);\r\n this._update.next(\r\n message?.message || DEFAULTLIVEUPDATEMESSAGE?.message || ''\r\n );\r\n if (message.status === LiveUpdateStatus.End) {\r\n this._connection?.stop();\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n} from '@angular/core';\r\n\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, 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: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChrSpinnerComponent implements OnInit {\r\n loader = inject(LoaderService);\r\n liveUpdate = inject(LiveUpdateService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n public message: ILiveUpdateMessage = DefaultLiveUpdateMessage;\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, inject, 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, 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 toastService = inject(ToastService);\r\n\r\n readonly topmargin = input('0px');\r\n}\r\n","@if ((toastService.current() | async); as toast;) {\r\n<div 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>\r\n}","import { Component, computed, inject, input, model } from '@angular/core';\r\nimport {\r\n MatDialogRef,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MAT_DIALOG_DATA,\r\n MatDialogConfig,\r\n} from '@angular/material/dialog';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ChrButtonComponent } from '../chr-button/chr-button.component';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { IAction } from '../chr-table/chr-table.component';\r\nimport { ModalOptions } from '../models/modal';\r\n\r\n@Component({\r\n selector: 'app-chr-default-modal, chr-default-modal',\r\n templateUrl: './chr-default-modal.component.html',\r\n styleUrls: [\r\n './chr-default-modal.component.scss',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n imports: [ChrButtonComponent],\r\n})\r\nexport class ChrDefaultModalComponent {\r\n private dialogRef =\r\n inject<MatDialogRef<ChrDefaultModalComponent>>(MatDialogRef);\r\n private config = inject<ModalOptions>(MAT_DIALOG_DATA);\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n public valid: boolean = false;\r\n\r\n readonly title = model<string>('Attention: ');\r\n readonly text = model<string>('');\r\n readonly actions = model<IAction[]>();\r\n readonly close = model<string>('Fermer');\r\n\r\n protected html = computed(() => {\r\n this.text.set(this.text()!.replace(/(\\r\\n|\\r|\\n)/g, '<br>'));\r\n return this.sanitizer.bypassSecurityTrustHtml(this.text() || '');\r\n });\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n public closeModal = (callback?: Function) => {\r\n const value = callback?.();\r\n this.dialogRef.close(value || true);\r\n };\r\n}\r\n","<div class=\"w-full overflow-auto overflow-x-hidden p-6\"\r\n style=\"background-color: var(--background-color); color:var(--text-color); border-radius: 0.5rem;\">\r\n <h2 class=\"dialog-title\">{{title()}}</h2>\r\n <div [innerHTML]=\"html()\">\r\n </div>\r\n <div class=\"w-full flex flex-row justify-between\">\r\n <app-chr-button class=\"w-36\" [display]=\"close()\" color=\"secondary\" [click]=\"closeModal\"></app-chr-button>\r\n @if (actions()) {\r\n @for (action of actions(); track action) {\r\n <app-chr-button class=\"w-36\" [disabled]=\"\r\n action.disabledCallback\r\n ? action.disabledCallback(null)\r\n : action.disabled || false\r\n \" [display]=\"action.display\" [icon]=\"action.icon\"\r\n [click]=\"closeModal.bind(null, action.callback.bind(null))\" [color]=\"action.color\">\r\n </app-chr-button>\r\n }\r\n }\r\n </div>\r\n</div>","import {\r\n Component,\r\n effect,\r\n HostListener,\r\n input,\r\n model,\r\n OnInit,\r\n output,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Color } from '../models/colors';\r\n\r\n@Component({\r\n selector: 'chr-modal',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './chr-modal.component.html',\r\n styleUrls: ['./chr-modal.component.scss'],\r\n})\r\nexport class ChrModalComponent<T> implements OnInit {\r\n @ViewChild('dynamicContent', { read: ViewContainerRef })\r\n dynamicContent!: ViewContainerRef;\r\n\r\n /**\r\n * Indique si le modal est ouvert ou fermé.\r\n * @default false\r\n */\r\n isOpen = input<boolean>(false);\r\n\r\n /**\r\n * Indique si le modal doit se fermer lorsque l'utilisateur clique sur le fond.\r\n * @default true\r\n */\r\n closeOnBackdropClick = model<boolean>(true);\r\n\r\n /**\r\n * Indique si le modal doit se fermer lorsque l'utilisateur appuie sur la touche Échap.\r\n * @default true\r\n */\r\n closeOnEscape = model<boolean>(true);\r\n\r\n /**\r\n * Shorthand for closeOnBackdropClick and closeOnEscape\r\n * @default undefined\r\n */\r\n disableClose = input<boolean | undefined>(undefined);\r\n\r\n /**\r\n * Événement émis lorsque le modal doit être fermé.\r\n * @default undefined\r\n */\r\n close = output<any | undefined | null>();\r\n\r\n /**\r\n * Largeur du modal en pourcentage de la largeur de la fenêtre.\r\n */\r\n width = input<number>();\r\n\r\n /**\r\n * Hauteur du modal en pourcentage de la hauteur de la fenêtre.\r\n */\r\n height = input<number>();\r\n\r\n /**\r\n * Fond par défaut du conteneur modal. Par défaut, 'none' pour permettre la personnalisation via CSS avec la classe '.modal-wrapper' ou '.modal-content'.\r\n * @default 'none'\r\n */\r\n background = input<Color>('none');\r\n\r\n constructor() {\r\n // effect(() => {\r\n // console.log(`[ChrModalComponent] width: ${this.width()}`);\r\n // console.log(`[ChrModalComponent] height: ${this.height()}`);\r\n // console.log(`[ChrModalComponent] background: ${this.background()}`);\r\n // });\r\n }\r\n\r\n getDynamicContentContainer(): ViewContainerRef {\r\n return this.dynamicContent;\r\n }\r\n\r\n onBackdropClick(): void {\r\n if (this.closeOnBackdropClick()) {\r\n this.close.emit(undefined);\r\n }\r\n }\r\n\r\n onModalClick(event: Event): void {\r\n // Empêche la propagation du clic pour éviter de fermer le modal\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onEscapeKey(event: KeyboardEvent): void {\r\n if (this.isOpen() && this.closeOnEscape()) {\r\n this.close.emit(undefined);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.disableClose() === false) {\r\n this.closeOnBackdropClick.set(false);\r\n this.closeOnEscape.set(false);\r\n }\r\n if (this.disableClose() === true) {\r\n this.closeOnBackdropClick.set(true);\r\n this.closeOnEscape.set(true);\r\n }\r\n }\r\n}\r\n","<div #modalWrapper class=\"modal-wrapper relative\">\r\n <div class=\"modal-backdrop\" (click)=\"onBackdropClick()\">\r\n </div>\r\n <div class=\"modal-content\" [attr.data-background]=\"background()\" [attr.data-open]=\"isOpen()\"\r\n (click)=\"onModalClick($event)\" [attr.data-width]=\"width()\" [attr.data-height]=\"height()\">\r\n <ng-container #dynamicContent class=\"w-full h-full\"></ng-container>\r\n </div>\r\n</div>","import { HttpClient } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ElementRef,\r\n input,\r\n OnInit,\r\n signal,\r\n Input,\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { SafeHtmlPipe } from 'chrv-pipes';\r\n\r\n@Component({\r\n selector: 'chr-inline-svg',\r\n imports: [SafeHtmlPipe],\r\n templateUrl: './chr-inline-svg.component.html',\r\n styleUrl: './chr-inline-svg.component.css',\r\n})\r\nexport class InlineSvgComponent implements OnInit {\r\n src = input<string>();\r\n class = input<string>();\r\n svgContent = signal<string>('');\r\n height = input('100%', {\r\n transform: (value: number | string) => this.transformWidth(value),\r\n });\r\n width = input('100%', {\r\n transform: (value: number | string) => this.transformWidth(value),\r\n });\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private sanitizer: DomSanitizer,\r\n private el: ElementRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.src()) {\r\n this.http.get(this.src()!, { responseType: 'text' }).subscribe((svg) => {\r\n // remove the class tags\r\n this.svgContent.update((content) => svg);\r\n });\r\n }\r\n }\r\n\r\n transformWidth(value: number | string): string {\r\n if (typeof value === 'number') {\r\n return `${value}px`;\r\n }\r\n return value;\r\n }\r\n}\r\n","<div [style.height]=\"height()\" [style.width]=\"width()\" [innerHTML]=\"svgContent() | safeHtml\"\r\n [attr.class]=\"class() + ' flex items-center justify-center'\">\r\n</div>","import { Component, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule, UrlTree } from '@angular/router';\r\nimport { InlineSvgComponent } from '../chr-inline-svg/chr-inline-svg.component';\r\n\r\n@Component({\r\n selector: 'chr-nbutton',\r\n imports: [InlineSvgComponent, CommonModule, RouterModule],\r\n templateUrl: './chr-button.component.html',\r\n styleUrl: './chr-button.component.css',\r\n})\r\nexport class ButtonComponent {\r\n /**\r\n * The color of the button.\r\n */\r\n color = input<'primary' | 'secondary' | 'tertiary'>('primary');\r\n /**\r\n * Whether the button is disabled.\r\n */\r\n disabled = input<boolean>(false);\r\n /**\r\n * The text to display on the button.\r\n */\r\n text = input<string | null>(null);\r\n alt = input<string>();\r\n /**\r\n * The icon to display on the button.\r\n */\r\n icon = input<string>();\r\n /**\r\n * The direction of the button.\r\n */\r\n direction = input<'left' | 'right'>('right');\r\n /**\r\n * Whether the button is rounded.\r\n */\r\n rounded = input<boolean>(false);\r\n /**\r\n * The size of the icon.\r\n */\r\n size = input<'small' | 'medium' | 'large'>('medium');\r\n\r\n routerLink = input<string | any[] | UrlTree | null>(null);\r\n\r\n routerLinkActive = input<string | string[]>([]);\r\n\r\n public getWidth(): string {\r\n switch (this.size()) {\r\n case 'small':\r\n return '12px';\r\n case 'medium':\r\n return '24px';\r\n case 'large':\r\n return '.32px';\r\n default:\r\n return '12px';\r\n }\r\n }\r\n}\r\n","<a class=\"w-full h-full flex justify-between items-center align-middle cursor-pointer button\"\r\n [routerLink]=\"routerLink()\" [routerLinkActive]=\"routerLinkActive()\" [ngClass]=\"{\r\n 'flex-row': direction() === 'right',\r\n 'flex-row-reverse': direction() === 'left',\r\n 'bg-primary': color() === 'primary',\r\n 'bg-secondary': color() === 'secondary',\r\n 'bg-tertiary': color() === 'tertiary',\r\n 'rounded-l-md': direction() === 'right',\r\n 'rounded-r-md': direction() === 'left',\r\n '!rounded-full': rounded(),\r\n}\">\r\n <span class=\"link\" [ngClass]=\"{\r\n 'text-primary-contrast': color() === 'primary',\r\n 'text-secondary-contrast': color() === 'secondary',\r\n 'text-tertiary-contrast': color() === 'tertiary',\r\n 'link-primary-contrast': color() === 'primary',\r\n 'link-secondary-contrast': color() === 'secondary',\r\n 'link-tertiary-contrast': color() === 'tertiary',\r\n }\">\r\n @if(text()) {\r\n {{ text() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n <chr-inline-svg [src]=\"icon()\" class=\"h-4 w-4 flex items-center align-middle\" [height]=\"getWidth()\"\r\n [width]=\"getWidth()\" [ngClass]=\"{\r\n 'text-primary-contrast': color() === 'primary',\r\n 'text-secondary-contrast': color() === 'secondary',\r\n 'text-tertiary-contrast': color() === 'tertiary',\r\n 'rotate-180': direction() === 'left',\r\n }\">\r\n </chr-inline-svg>\r\n</a>","import { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n effect,\r\n ElementRef,\r\n HostListener,\r\n Inject,\r\n input,\r\n output,\r\n PLATFORM_ID,\r\n signal,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, debounceTime, interval, Observable } from 'rxjs';\r\nimport { ButtonComponent } from '../chr-button-new/chr-button.component';\r\n\r\n@Component({\r\n selector: 'chr-carousel',\r\n imports: [CommonModule, ButtonComponent],\r\n templateUrl: './chr-carousel.component.html',\r\n styleUrl: './chr-carousel.component.css',\r\n})\r\nexport class CarouselComponent implements AfterContentInit, AfterViewInit {\r\n @ViewChild('container', { read: ElementRef }) containerRef!: ElementRef;\r\n @HostListener('window:resize') onResize() {\r\n this.resizeEvent.next();\r\n }\r\n protected initialized = new BehaviorSubject<boolean>(false);\r\n protected resizeEvent = new BehaviorSubject<void>(undefined);\r\n protected resize = this.resizeEvent.pipe(debounceTime(150));\r\n protected items = signal<HTMLElement[]>([]);\r\n protected pages = signal<number>(0);\r\n\r\n /**\r\n * Whether the selectors should be stacked on top of the carousel body.\r\n * Defaults to true.\r\n */\r\n public stackSelectors = input<boolean>(true);\r\n\r\n /**\r\n * Whether the buttons should be stacked on top of the carousel body.\r\n * Defaults to true.\r\n */\r\n public stackButtons = input<boolean>(true);\r\n\r\n /**\r\n * Whether the carousel should display only one item per page or be dynamic.\r\n * If set to true, the carousel will always show one item per page.\r\n */\r\n public singleItemPerPage = input<boolean>(true);\r\n\r\n public currentIndex = signal<number>(0);\r\n /**\r\n * Whether to show the selectors.\r\n * Defaults to 'Roboto, sans-serif'.\r\n */\r\n public showSelectors = input<boolean>(true);\r\n /**\r\n * Whether to show the next and previous buttons.\r\n * Defaults to true.\r\n */\r\n public showButtons = input<boolean>(true);\r\n /**\r\n * An output event that emits when the user clicks the next button.\r\n */\r\n public onNext = output<number>();\r\n /**\r\n * An output event that emits when the user clicks the previous button.\r\n */\r\n public onPrevious = output<number>();\r\n\r\n /**\r\n * An output event that emits when the user selects a slide with the selector.\r\n */\r\n public onChange = output<number>();\r\n\r\n /**\r\n * An observable that emits a value every `timer` seconds.\r\n * This is used to automatically advance the carousel.\r\n */\r\n public interval: Observable<number> | null = null;\r\n\r\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\r\n effect(() => {\r\n const element = this.items()[this.currentIndex()];\r\n if (!element) return;\r\n element.classList.add('active');\r\n\r\n const siblings = this.items().filter(\r\n (_, index) => index !== this.currentIndex()\r\n );\r\n siblings.forEach((sibling) => {\r\n sibling.classList.remove('active');\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * The time in seconds before the next slide is shown.\r\n * If set to 0, the carousel will not auto-advance.\r\n */\r\n public timer = input<number>(10);\r\n\r\n ngAfterContentInit() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n if (this.timer() <= 0) return;\r\n this.interval = interval(this.timer() * 1000);\r\n this.interval.subscribe(() => {\r\n this.next(false);\r\n });\r\n }\r\n //interval(this.timer() * 1000).subscribe(() => this.next());\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.updatePages();\r\n this.resize.subscribe(() => {\r\n this.updatePages();\r\n });\r\n this.initialized.next(true);\r\n }\r\n }\r\n\r\n public next = (emit: boolean = true) => {\r\n if (this.pages() > 0) {\r\n this.currentIndex.update((index) => (index + 1) % this.pages());\r\n if (emit) this.onNext.emit(this.currentIndex());\r\n }\r\n };\r\n\r\n public prev = () => {\r\n if (this.pages() > 0) {\r\n this.currentIndex.update(\r\n (index) => (index - 1 + this.pages()) % this.pages()\r\n );\r\n this.onPrevious.emit(this.currentIndex());\r\n }\r\n };\r\n\r\n public select = (index: number) => {\r\n if (this.pages() > 0 && index >= 0 && index < this.pages()) {\r\n this.currentIndex.set(index);\r\n this.onChange.emit(index);\r\n }\r\n };\r\n\r\n public updatePages = () => {\r\n const container = this.containerRef.nativeElement as HTMLElement;\r\n const nodes = container.children;\r\n\r\n this.items.set(Array.from(nodes) as HTMLElement[]);\r\n //console.log('Carousel items:', this.items());\r\n const containerWidth = container.offsetWidth;\r\n let usedWidth = 0;\r\n let count = 0;\r\n for (let i = 0; i < this.items().length; i++) {\r\n // console.log(`Item ${i}:`, nodes[i]);\r\n const item = nodes[i] as HTMLElement;\r\n //Item width is the width of the item, plus the margin on both sides\r\n const itemWidth =\r\n item.offsetWidth +\r\n parseFloat(getComputedStyle(item).marginLeft) +\r\n parseFloat(getComputedStyle(item).marginRight);\r\n usedWidth += itemWidth;\r\n }\r\n\r\n this.pages.set(Math.ceil(usedWidth / containerWidth));\r\n };\r\n\r\n public arrayFrom = (length: number): number[] => {\r\n return Array.from({ length }, (_, i) => i);\r\n };\r\n}\r\n","@if (currentIndex() >= 0) {\r\n<div class=\"relative flex items-center justify-center w-full h-full\">\r\n <!-- Previous button -->\r\n @if (showButtons()) {\r\n <chr-button (click)=\"prev()\" icon=\"assets/icons/misc/arrow-right.svg\" [ngClass]=\"{\r\n 'absolute left-0 top-1/2 transform -translate-y-1/2': stackButtons(),\r\n 'static mr-4': !stackButtons()\r\n }\" class=\"flex h-24 w-8 z-10\" direction=\"left\" color=\"tertiary\"></chr-button>\r\n }\r\n <!-- Carousel content -->\r\n <div class=\"flex flex-col items-center w-full h-full relative overflow-hidden\">\r\n <div class=\"carousel-viewport w-full h-full relative z-0\">\r\n <div #container class=\"carousel-track flex transition-transform duration-500 w-full h-full\"\r\n [ngClass]=\"{'appearance-effect': singleItemPerPage()}\"\r\n [style.transform]=\"'translateX(-' + (currentIndex() * 100) + '%)'\">\r\n <!-- <div #item *ngFor=\"let template of templates; let i = index\" class=\"carousel-slide w-full h-full \">\r\n <ng-container *ngTemplateOutlet=\"template\" class=\"relative\"></ng-container>\r\n </div> -->\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <!-- Carousel item selector -->\r\n @if (showSelectors()) {\r\n <div [ngClass]=\"{\r\n 'absolute bottom-2 left-1/2 transform -translate-x-1/2': stackSelectors(),\r\n 'static mt-4': !stackSelectors(),\r\n }\" class=\"flex items-center max-w-1/2\">\r\n <!-- <button *ngFor=\"let template of templates; let i = index\"\r\n class=\"inline-block w-9 h-2 mx-1 rounded-full selector\" (click)=\"select(i)\"\r\n [class.active]=\"currentIndex() === i\"></button> -->\r\n @for (element of arrayFrom(pages()); track element; let i = $index) {\r\n <button class=\"inline-block w-9 h-2 mx-1 rounded-full selector z-10\" (click)=\"select(i)\"\r\n [class.active]=\"currentIndex() === i\"></button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <!-- Next buttons -->\r\n @if (showButtons()) {\r\n <chr-button (click)=\"next()\" icon=\"assets/icons/misc/arrow-right.svg\" [ngClass]=\"{\r\n 'absolute right-0 top-1/2 transform -translate-y-1/2': stackButtons(),\r\n 'static ml-4': !stackButtons()\r\n }\" class=\"flex h-24 w-8 z-10\" direction=\"right\" color=\"tertiary\"></chr-button>\r\n }\r\n</div>\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'chr-dropdown',\r\n imports: [CommonModule, MatIcon],\r\n templateUrl: './chr-dropdown.component.html',\r\n styleUrls: [\r\n './chr-dropdown.component.css',\r\n '../../../../../tailwindbuild.css',\r\n ],\r\n})\r\nexport class ChrDropdownComponent {\r\n public isOpen = model(false);\r\n public title = input.required<string>();\r\n\r\n private children = viewChildren<ElementRef>('content');\r\n\r\n public hasContent = computed(() => {\r\n return this.children()[0]?.nativeElement?.childNodes?.length > 0;\r\n });\r\n}\r\n","<div class=\"flex flex-col h-auto w-full p-2 dropdown-wrapper cursor-pointer\" (click)=\"isOpen.set(!isOpen())\"\r\n [attr.data-empty]=\"!hasContent()\">\r\n <div class=\"flex flex-row justify-between items-center dropdown-title-wrapper\">\r\n <h3 class=\"w-5/6 dropdown-title flex items-center\">{{title()}}</h3>\r\n <mat-icon class=\"icon dropdown-icon\" [attr.data-active]=\"isOpen()\">keyboard_arrow_right</mat-icon>\r\n </div>\r\n <div class=\"content-wrapper\" [attr.data-open]=\"isOpen()\">\r\n <div class=\"content\" #content (click)=\"$event.stopPropagation()\">\r\n <ng-content />\r\n </div>\r\n </div>\r\n</div>","export interface IMinimumColumnMetadata {\r\n tableSchema: string;\r\n tableName: string;\r\n columnName: string;\r\n columnDefault?: string | null;\r\n ordinalPosition: number;\r\n dataType: string | null;\r\n length: number;\r\n scale?: number | null;\r\n isNullable: boolean;\r\n isIdentity: boolean;\r\n isGenerated: boolean;\r\n isUpdatable: boolean;\r\n get tooltip(): string;\r\n}\r\n\r\nexport interface IDB2ColumnMetadata extends IMinimumColumnMetadata {\r\n tableCatalog: string;\r\n // labels: {\r\n // columnHeading?: string | null;\r\n // columnText?: string | null;\r\n // systemColumnName: string;\r\n // columnName: string;\r\n // tableName: string;\r\n // tableShema: string;\r\n // };\r\n columnHeading?: string | null;\r\n columnText?: string | null;\r\n longComment?: string | null;\r\n maxLength?: number | null;\r\n minLength?: number | null;\r\n characterMaximumLength?: number | null;\r\n characterOctetLength?: number | null;\r\n characterMinLength?: number | null;\r\n numericPrecision?: number | null;\r\n numericPrecisionRadix?: number | null;\r\n numericScale?: number | null;\r\n dateTimePrecision?: number | null;\r\n // characterSetCatalog?: string | null;\r\n // characterSetSchema?: string | null;\r\n // characterSetName?: string | null;\r\n // collationCatalog?: string | null;\r\n // collationSchema?: string | null;\r\n // collationName?: string | null;\r\n // domainCatalog?: string | null;\r\n // domainSchema?: string | null;\r\n // domainName?: string | null;\r\n // udtCatalog?: string | null;\r\n // udtSchema?: string | null;\r\n // udtName?: string | null;\r\n // scopeCatalog?: string | null;\r\n // scopeSchema?: string | null;\r\n // scopeName?: string | null;\r\n // maximumCardinality?: number | null;\r\n // dtdIdentifier: string;\r\n // isSelfReferencing: boolean;\r\n identityGeneration?: string | null;\r\n identityStart?: string | null;\r\n identityIncrement?: string | null;\r\n identityMaximum?: string | null;\r\n identityMinimum?: string | null;\r\n identityCycle?: string | null;\r\n // generationExpression?: string | null;\r\n // isSystemTimePeriodStart: boolean;\r\n // isSystemTimePeriodEnd: boolean;\r\n // systemTimePeriodTimestampGeneration?: string | null;\r\n // declaredDataType: string;\r\n // declaredNumericPrecision?: number | null;\r\n // declaredNumericScale?: number | null;\r\n}\r\n\r\nexport class ColumnMetadata implements IDB2ColumnMetadata {\r\n tableCatalog: string;\r\n tableSchema: string;\r\n tableName: string;\r\n columnName: string;\r\n // labels: {\r\n // columnHeading?: string | null;\r\n // columnText?: string | null;\r\n // systemColumnName: string;\r\n // columnName: string;\r\n // tableName: string;\r\n // tableShema: string;\r\n // };\r\n columnHeading?: string | null;\r\n columnText?: string | null;\r\n longComment?: string | null;\r\n ordinalPosition: number;\r\n columnDefault?: string | null;\r\n isNullable: boolean;\r\n dataType: string | null;\r\n maxLength?: number | null;\r\n minLength?: number | null;\r\n length: number;\r\n scale?: number | null;\r\n characterMaximumLength?: number | null;\r\n characterOctetLength?: number | null;\r\n characterMinLength?: number | null;\r\n numericPrecision?: number | null;\r\n numericPrecisionRadix?: number | null;\r\n numericScale?: number | null;\r\n dateTimePrecision?: number | null;\r\n // characterSetCatalog?: string | null;\r\n // characterSetSchema?: string | null;\r\n // characterSetName?: string | null;\r\n // collationCatalog?: string | null;\r\n // collationSchema?: string | null;\r\n // collationName?: string | null;\r\n // domainCatalog?: string | null;\r\n // domainSchema?: string | null;\r\n // domainName?: string | null;\r\n // udtCatalog?: string | null;\r\n // udtSchema?: string | null;\r\n // udtName?: string | null;\r\n // scopeCatalog?: string | null;\r\n // scopeSchema?: string | null;\r\n // scopeName?: string | null;\r\n // maximumCardinality?: number | null;\r\n // dtdIdentifier: string;\r\n // isSelfReferencing: boolean;\r\n isIdentity: boolean;\r\n identityGeneration?: string | null;\r\n identityStart?: string | null;\r\n identityIncrement?: string | null;\r\n identityMaximum?: string | null;\r\n identityMinimum?: string | null;\r\n identityCycle?: string | null;\r\n isGenerated: boolean;\r\n // generationExpression?: string | null;\r\n // isSystemTimePeriodStart: boolean;\r\n // isSystemTimePeriodEnd: boolean;\r\n // systemTimePeriodTimestampGeneration?: string | null;\r\n isUpdatable: boolean;\r\n // declaredDataType: string;\r\n // declaredNumericPrecision?: number | null;\r\n // declaredNumericScale?: number | null;\r\n\r\n constructor(data: Partial<ColumnMetadata> = {}) {\r\n this.tableCatalog = data.tableCatalog || '';\r\n this.tableSchema = data.tableSchema || '';\r\n this.tableName = data.tableName || '';\r\n this.columnName = data.columnName || '';\r\n // this.labels = data.labels || {\r\n // systemColumnName: this.columnName,\r\n // columnHeading: null,\r\n // columnText: null,\r\n // columnName: this.columnName,\r\n // tableName: this.tableName,\r\n // tableShema: this.tableSchema,\r\n // };\r\n this.columnHeading = data.columnHeading || null;\r\n this.columnText = data.columnText || null;\r\n this.longComment = data.longComment || null;\r\n this.ordinalPosition = data.ordinalPosition || 0;\r\n this.columnDefault = data.columnDefault || null;\r\n this.isNullable =\r\n data.isNullable === undefined ? false : Boolean(data.isNullable);\r\n this.dataType = data.dataType || null;\r\n this.maxLength = data.maxLength || null;\r\n this.minLength = data.minLength || null;\r\n this.characterMaximumLength = data.characterMaximumLength || null;\r\n this.characterOctetLength = data.characterOctetLength || null;\r\n this.characterMinLength = data.characterMinLength || null;\r\n this.length =\r\n data.maxLength ||\r\n data.characterMaximumLength ||\r\n data.length ||\r\n data.numericPrecision ||\r\n 0;\r\n this.numericPrecision = data.numericPrecision || null;\r\n this.numericPrecisionRadix = data.numericPrecisionRadix || null;\r\n this.numericScale = data.numericScale || 0;\r\n this.scale = (data.numericScale || data.scale || this.numericScale) ?? 0;\r\n this.dateTimePrecision = data.dateTimePrecision || 0;\r\n // this.characterSetCatalog = data.characterSetCatalog || null;\r\n // this.characterSetSchema = data.characterSetSchema || null;\r\n // this.characterSetName = data.characterSetName || null;\r\n // this.collationCatalog = data.collationCatalog || null;\r\n // this.collationSchema = data.collationSchema || null;\r\n // this.collationName = data.collationName || null;\r\n // this.domainCatalog = data.domainCatalog || null;\r\n // this.domainSchema = data.domainSchema || null;\r\n // this.domainName = data.domainName || null;\r\n // this.udtCatalog = data.udtCatalog || null;\r\n // this.udtSchema = data.udtSchema || null;\r\n // this.udtName = data.udtName || null;\r\n // this.scopeCatalog = data.scopeCatalog || null;\r\n // this.scopeSchema = data.scopeSchema || null;\r\n // this.scopeName = data.scopeName || null;\r\n // this.maximumCardinality = data.maximumCardinality || null;\r\n // this.dtdIdentifier = data.dtdIdentifier || '';\r\n // this.isSelfReferencing =\r\n // data.isSelfReferencing === undefined\r\n // ? false\r\n // : Boolean(data.isSelfReferencing);\r\n this.isIdentity =\r\n data.isIdentity === undefined ? false : Boolean(data.isIdentity);\r\n this.identityGeneration = data.identityGeneration || null;\r\n this.identityStart = data.identityStart || null;\r\n this.identityIncrement = data.identityIncrement || null;\r\n this.identityMaximum = data.identityMaximum || null;\r\n this.identityMinimum = data.identityMinimum || null;\r\n this.identityCycle = data.identityCycle || null;\r\n this.isGenerated =\r\n data.isGenerated === undefined ? false : Boolean(data.isGenerated);\r\n // this.generationExpression = data.generationExpression || null;\r\n // this.isSystemTimePeriodStart =\r\n // data.isSystemTimePeriodStart === undefined\r\n // ? false\r\n // : Boolean(data.isSystemTimePeriodStart);\r\n // this.isSystemTimePeriodEnd =\r\n // data.isSystemTimePeriodEnd === undefined\r\n // ? false\r\n // : Boolean(data.isSystemTimePeriodEnd);\r\n // this.systemTimePeriodTimestampGeneration =\r\n // data.systemTimePeriodTimestampGeneration || null;\r\n this.isUpdatable =\r\n data.isUpdatable === undefined ? false : Boolean(data.isUpdatable);\r\n // this.declaredDataType = data.declaredDataType || '';\r\n // this.declaredNumericPrecision = data.declaredNumericPrecision || null;\r\n // this.declaredNumericScale = data.declaredNumericScale || null;\r\n }\r\n\r\n get fullTableName(): string {\r\n return `${this.tableSchema}.${this.tableName}`;\r\n }\r\n\r\n get tooltip(): string {\r\n const parts: string[] = [];\r\n if (this.dataType) {\r\n parts.push(\r\n `Type: ${this.dataType} ${\r\n this.length\r\n ? `(${this.length}${this.scale ? `, ${this.scale}` : ''})`\r\n : ''\r\n }`\r\n );\r\n }\r\n if (this.columnHeading) {\r\n parts.push(`Heading: ${this.columnHeading}`);\r\n }\r\n if (this.columnText) {\r\n parts.push(`Text: ${this.columnText}`);\r\n }\r\n if (this.longComment) {\r\n parts.push(`Comment: ${this.longComment}`);\r\n }\r\n return parts.join(' | ');\r\n }\r\n}\r\n","import {\r\n IMinimumTableConstraintReference,\r\n ITableConstraintColumn,\r\n TableConstraintColumn,\r\n} from './TableConstraintColumn.model';\r\n\r\nexport interface ITableConstraintReference\r\n extends IMinimumTableConstraintReference {\r\n constraintSchema: string;\r\n systemConstraintSchema: string;\r\n constraintName: string;\r\n uniqueConstraintSchema: string;\r\n systemUniqueConstraintSchema: string;\r\n uniqueConstraintName: string;\r\n columnCount: number;\r\n thisKey: ITableConstraintColumn;\r\n otherKey: ITableConstraintColumn;\r\n}\r\n\r\nexport class TableConstraintReference implements ITableConstraintReference {\r\n constraintSchema: string;\r\n systemConstraintSchema: string;\r\n constraintName: string;\r\n uniqueConstraintSchema: string;\r\n systemUniqueConstraintSchema: string;\r\n uniqueConstraintName: string;\r\n columnCount: number;\r\n thisKey: TableConstraintColumn;\r\n otherKey: TableConstraintColumn;\r\n\r\n constructor(data: Partial<TableConstraintReference> = {}) {\r\n this.constraintSchema = data.constraintSchema || '';\r\n this.systemConstraintSchema = data.systemConstraintSchema || '';\r\n this.constraintName = data.constraintName || '';\r\n this.uniqueConstraintSchema = data.uniqueConstraintSchema || '';\r\n this.systemUniqueConstraintSchema = data.systemUniqueConstraintSchema || '';\r\n this.uniqueConstraintName = data.uniqueConstraintName || '';\r\n this.columnCount = data.columnCount || 0;\r\n this.thisKey = data.thisKey\r\n ? new TableConstraintColumn(data.thisKey)\r\n : (null as any);\r\n this.otherKey = data.otherKey\r\n ? new TableConstraintColumn(data.otherKey)\r\n : (null as any);\r\n }\r\n}\r\n","import {\r\n ITableConstraintReference,\r\n TableConstraintReference,\r\n} from './TableConstraintReference.model';\r\n\r\nexport interface IMinimumTableConstraintColumn {\r\n constraintName: string;\r\n tableName: string;\r\n tableSchema?: string;\r\n columnName: string;\r\n reference?: IMinimumTableConstraintReference | null;\r\n}\r\n\r\nexport interface IMinimumTableConstraintReference {\r\n constraintSchema: string;\r\n constraintName: string;\r\n columnCount: number;\r\n thisKey: IMinimumTableConstraintColumn;\r\n otherKey: IMinimumTableConstraintColumn;\r\n}\r\n\r\nexport interface ITableConstraintColumn extends IMinimumTableConstraintColumn {\r\n systemConstraintSchema: string;\r\n constraintSchema: string;\r\n systemTableName: string;\r\n tableSchema: string;\r\n systemTableSchema: string;\r\n systemColumnName: string;\r\n reference: ITableConstraintReference | null;\r\n}\r\n\r\nexport class TableConstraintColumn implements ITableConstraintColumn {\r\n constraintSchema: string;\r\n systemConstraintSchema: string;\r\n constraintName: string;\r\n tableName: string;\r\n systemTableName: string;\r\n tableSchema: string;\r\n systemTableSchema: string;\r\n columnName: string;\r\n systemColumnName: string;\r\n reference: TableConstraintReference | null;\r\n\r\n constructor(data: Partial<TableConstraintColumn> = {}) {\r\n this.constraintSchema = data.constraintSchema || '';\r\n this.systemConstraintSchema = data.systemConstraintSchema || '';\r\n this.constraintName = data.constraintName || '';\r\n this.tableName = data.tableName || '';\r\n this.systemTableName = data.systemTableName || '';\r\n this.tableSchema = data.tableSchema || '';\r\n this.systemTableSchema = data.systemTableSchema || '';\r\n this.columnName = data.columnName || '';\r\n this.systemColumnName = data.systemColumnName || '';\r\n this.reference = data.reference\r\n ? new TableConstraintReference(data.reference)\r\n : null;\r\n }\r\n}\r\n","import {\r\n IMinimumTableConstraintColumn,\r\n ITableConstraintColumn,\r\n TableConstraintColumn,\r\n} from './TableConstraintColumn.model';\r\n\r\nexport interface IMinimumTableConstraint {\r\n constraintSchema: string;\r\n constraintName: string;\r\n constraintType: string | 'PRIMARY KEY' | 'FOREIGN KEY' | 'UNIQUE' | 'CHECK';\r\n tableName: string;\r\n columns: IMinimumTableConstraintColumn[];\r\n}\r\n\r\nexport interface ITableConstraint extends IMinimumTableConstraint {\r\n constraintCatalog: string;\r\n tableCatalog: string;\r\n tableSchema: string;\r\n columns: ITableConstraintColumn[];\r\n}\r\n\r\nexport class TableConstraint implements ITableConstraint {\r\n constraintCatalog: string;\r\n constraintSchema: string;\r\n constraintName: string;\r\n constraintType: string | 'PRIMARY KEY' | 'FOREIGN KEY' | 'UNIQUE' | 'CHECK';\r\n tableCatalog: string;\r\n tableName: string;\r\n tableSchema: string;\r\n columns: TableConstraintColumn[] = [];\r\n\r\n constructor(data: Partial<TableConstraint> = {}) {\r\n this.constraintCatalog = data.constraintCatalog || '';\r\n this.constraintSchema = data.constraintSchema || '';\r\n this.constraintName = data.constraintName || '';\r\n this.constraintType = data.constraintType || '';\r\n this.tableCatalog = data.tableCatalog || '';\r\n this.tableName = data.tableName || '';\r\n this.tableSchema = data.tableSchema || '';\r\n this.columns = data.columns\r\n ? data.columns.map((d) => new TableConstraintColumn(d))\r\n : [];\r\n }\r\n\r\n fullTableName(): string {\r\n return `${this.tableSchema}.${this.tableName}`;\r\n }\r\n\r\n fullConstraintName(): string {\r\n return `${this.constraintSchema}.${this.constraintName}`;\r\n }\r\n\r\n isPrimaryKey(): boolean {\r\n return this.constraintType === 'PRIMARY KEY';\r\n }\r\n\r\n isForeignKey(): boolean {\r\n return this.constraintType === 'FOREIGN KEY';\r\n }\r\n\r\n isUnique(): boolean {\r\n return this.constraintType === 'UNIQUE';\r\n }\r\n\r\n isCheck(): boolean {\r\n return this.constraintType === 'CHECK';\r\n }\r\n}\r\n","import { setThrowInvalidWriteToSignalError } from '@angular/core/primitives/signals';\r\nimport {\r\n ColumnMetadata,\r\n IDB2ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from './ColumnMetadata.model';\r\nimport {\r\n IMinimumTableConstraint,\r\n TableConstraint,\r\n} from './TableConstraint.model';\r\n\r\nexport interface IAnonymousTable {\r\n catalog: string;\r\n schema: string;\r\n name: string;\r\n description?: string;\r\n isReadOnly?: boolean;\r\n rowNumberIdentity: string;\r\n columnMetadatas: ColumnMetadata[];\r\n tableConstraints: TableConstraint[];\r\n hasPrimaryKey: boolean;\r\n rows: any[];\r\n count: number;\r\n total: number;\r\n}\r\n\r\nexport interface IDataTable {\r\n name: string;\r\n schema: string;\r\n description?: string;\r\n rowNumberIdentity: string;\r\n rows: any[];\r\n count: number;\r\n\r\n addRow(row: any): any;\r\n updateRow(row: any): boolean;\r\n removeRow(row: any): boolean;\r\n getRowIdentifier(row: any): string;\r\n getRowNumber(row: any): number;\r\n compareRows(row1: any, row2: any): boolean;\r\n primaryKeyColumns(): IMinimumColumnMetadata[];\r\n getColumnByName(columnName: string): IMinimumColumnMetadata | undefined;\r\n getConstraintsByType(type: string): IMinimumTableConstraint[];\r\n}\r\n\r\nexport abstract class BaseTable implements IDataTable {\r\n abstract name: string;\r\n abstract schema: string;\r\n abstract description?: string;\r\n abstract columnMetadatas: IMinimumColumnMetadata[];\r\n abstract tableConstraints: IMinimumTableConstraint[];\r\n abstract isReadOnly?: boolean;\r\n abstract hasPrimaryKey: boolean;\r\n abstract rows: any[];\r\n abstract count: number;\r\n abstract rowNumberIdentity: string;\r\n\r\n abstract getRowIdentifier(row: any): string;\r\n abstract getRowNumber(row: any): number;\r\n abstract primaryKeyColumns(): IMinimumColumnMetadata[];\r\n\r\n public addRow(row: any): any {\r\n this.rows.push(row);\r\n this.count += 1;\r\n return row;\r\n }\r\n\r\n public updateRow(row: any): boolean {\r\n const index = this.rows.findIndex((r) => this.compareRows(r, row));\r\n if (index !== -1) {\r\n this.rows[index] = row;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public removeRow(row: any): boolean {\r\n const index = this.rows.findIndex((r) => this.compareRows(r, row));\r\n if (index !== -1) {\r\n this.rows.splice(index, 1);\r\n this.count -= 1;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public compareRows(row1: any, row2: any): boolean {\r\n return JSON.stringify(row1) === JSON.stringify(row2);\r\n }\r\n\r\n public getColumnByName(\r\n columnName: string\r\n ): IMinimumColumnMetadata | IDB2ColumnMetadata | any | undefined {\r\n return this.columnMetadatas.find((cmd) => cmd.columnName === columnName);\r\n }\r\n\r\n public getConstraintsByType(type: string): IMinimumTableConstraint[] {\r\n return this.tableConstraints.filter((tc) => tc.constraintType === type);\r\n }\r\n}\r\n\r\nexport class AnonymousTable\r\n extends BaseTable\r\n implements IAnonymousTable, IDataTable\r\n{\r\n catalog: string;\r\n schema: string;\r\n name: string;\r\n description?: string;\r\n isReadOnly?: boolean;\r\n rowNumberIdentity: string;\r\n columnMetadatas: ColumnMetadata[];\r\n tableConstraints: TableConstraint[];\r\n hasPrimaryKey: boolean;\r\n rows: any[];\r\n count: number;\r\n total: number;\r\n\r\n constructor(data: IAnonymousTable) {\r\n super();\r\n this.catalog = data.catalog;\r\n this.schema = data.schema;\r\n this.name = data.name;\r\n this.description = data.description;\r\n this.isReadOnly = data.isReadOnly;\r\n this.rowNumberIdentity = data.rowNumberIdentity;\r\n this.columnMetadatas = data.columnMetadatas\r\n ? data.columnMetadatas\r\n .map((d) => new ColumnMetadata(d))\r\n .sort((a, b) => a.ordinalPosition - b.ordinalPosition)\r\n : [];\r\n this.tableConstraints = data.tableConstraints\r\n ? data.tableConstraints.map((d) => new TableConstraint(d))\r\n : [];\r\n this.hasPrimaryKey =\r\n data.hasPrimaryKey === undefined ? false : Boolean(data.hasPrimaryKey);\r\n this.rows = data.rows || [];\r\n this.count = data.count || 0;\r\n this.total = data.total || 0;\r\n }\r\n\r\n public fullName(): string {\r\n return `${this.schema}.${this.name}`;\r\n }\r\n\r\n public primaryKeyColumns(): ColumnMetadata[] {\r\n const pkColumns = this.tableConstraints.filter((tc) =>\r\n tc.isPrimaryKey()\r\n )?.[0]?.columns;\r\n if (!pkColumns || pkColumns.length === 0) {\r\n const rn = this.columnMetadatas.find(\r\n (cmd) => cmd.columnName === 'ROW_NUMBER'\r\n );\r\n return rn ? [rn] : [];\r\n }\r\n return this.columnMetadatas.filter((cmd) =>\r\n pkColumns?.some((pc) => pc.columnName === cmd.columnName)\r\n );\r\n }\r\n\r\n public getRowIdentifier(row: any): string {\r\n if (!this.hasPrimaryKey) {\r\n if (row[this.rowNumberIdentity] !== undefined) {\r\n return `${row[this.rowNumberIdentity]}`;\r\n }\r\n }\r\n const pkColumns = this.primaryKeyColumns();\r\n if (this.hasPrimaryKey && pkColumns.length > 0) {\r\n let key = '';\r\n let index = 0;\r\n for (const pc of pkColumns) {\r\n if (row[pc.columnName] === undefined || row[pc.columnName] === null) {\r\n if (row[this.rowNumberIdentity] !== undefined)\r\n return `${row[this.rowNumberIdentity]}`;\r\n else break;\r\n }\r\n if (index == pkColumns.length - 1) {\r\n key += `${pc.columnName}:${row[pc.columnName]}`;\r\n } else key += `${pc.columnName}:${row[pc.columnName]}|`;\r\n index++;\r\n }\r\n return key;\r\n }\r\n return JSON.stringify(row);\r\n }\r\n\r\n public getRowNumber(row: any): any {\r\n return row[this.rowNumberIdentity];\r\n }\r\n\r\n public override compareRows(row1: any, row2: any): boolean {\r\n if (!this.hasPrimaryKey) {\r\n if (\r\n row1[this.rowNumberIdentity] !== undefined &&\r\n row2[this.rowNumberIdentity] !== undefined\r\n ) {\r\n return row1[this.rowNumberIdentity] === row2[this.rowNumberIdentity];\r\n }\r\n }\r\n\r\n const pkColumns = this.primaryKeyColumns();\r\n if (this.hasPrimaryKey && pkColumns.length > 0) {\r\n return pkColumns.every(\r\n (pc) => row1[pc.columnName] === row2[pc.columnName]\r\n );\r\n }\r\n\r\n return super.compareRows(row1, row2);\r\n }\r\n\r\n public override addRow(row: any): any {\r\n row[this.rowNumberIdentity] = this.generateTempRowIdentifier();\r\n return super.addRow(row);\r\n }\r\n\r\n public generateTempRowIdentifier(): any {\r\n return crypto.randomUUID();\r\n }\r\n}\r\n","import { Directive, inject, ElementRef, output, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[CrossCellNavigation]',\r\n host: {\r\n '(keydown.tab)': 'onTab($event)',\r\n '(keydown.shift.tab)': 'onShiftTab($event)',\r\n },\r\n})\r\nexport class CrossCellNavigationDirective {\r\n private elementRef = inject(ElementRef);\r\n\r\n public allowNavigation = input<boolean>(true);\r\n\r\n public navigateNext = output<void>();\r\n public navigatePrevious = output<void>();\r\n public navigateAway = output<void>();\r\n\r\n public onTab(event: Event) {\r\n event.preventDefault();\r\n if (this.allowNavigation()) this.navigateToNextCell();\r\n }\r\n\r\n public onShiftTab(event: Event) {\r\n event.preventDefault();\r\n if (this.allowNavigation()) this.navigateToPreviousCell();\r\n }\r\n\r\n private navigateToNextCell() {\r\n this.navigateNext.emit();\r\n this.navigateAway.emit();\r\n\r\n const currentCell = (this.elementRef.nativeElement as HTMLElement).closest(\r\n 'div.grid-cell'\r\n );\r\n let nextCell = currentCell?.nextElementSibling;\r\n //console.log('navigating to next cell', nextCell);\r\n if (!nextCell) {\r\n const currentRow = currentCell?.closest('div.grid-row');\r\n const nextRow = currentRow?.nextElementSibling as HTMLTableRowElement;\r\n nextCell = nextRow?.querySelector('div.grid-cell');\r\n }\r\n\r\n if (nextCell) {\r\n this.activateEditableCell(nextCell);\r\n }\r\n }\r\n\r\n private navigateToPreviousCell() {\r\n this.navigatePrevious.emit();\r\n this.navigateAway.emit();\r\n\r\n const currentCell = this.elementRef.nativeElement.closest('div.grid-cell');\r\n let previousCell = currentCell?.previousElementSibling;\r\n if (!previousCell) {\r\n const currentRow = currentCell?.closest('div.grid-row');\r\n const nextRow = currentRow?.previousElementSibling as HTMLTableRowElement;\r\n const nextRowCells = nextRow?.querySelectorAll('div.grid-cell');\r\n previousCell = nextRowCells[nextRowCells.length - 1];\r\n }\r\n\r\n if (previousCell) {\r\n this.activateEditableCell(previousCell);\r\n }\r\n }\r\n\r\n private activateEditableCell(cell: Element) {\r\n const editableCell = cell.querySelector(\r\n 'app-editable-cell, chr-editable-cell'\r\n );\r\n const firstChild = editableCell?.childNodes[0] as HTMLElement;\r\n\r\n if (firstChild) {\r\n firstChild.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));\r\n firstChild.dispatchEvent(new Event('validate', { bubbles: true }));\r\n }\r\n }\r\n}\r\n","import { formatNumber } from '@angular/common';\r\nimport { IFormatter, ValidationResult } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\n\r\nexport abstract class BaseFormatter implements IFormatter {\r\n abstract canFormat(value: any, metadata: IMinimumColumnMetadata): boolean;\r\n\r\n abstract format(\r\n value: any,\r\n metadatas?: IMinimumColumnMetadata,\r\n ...args: any[]\r\n ): string | null;\r\n\r\n canEdit?(value: any, columnMetadata: IMinimumColumnMetadata): boolean {\r\n if (!columnMetadata.dataType) {\r\n return false;\r\n }\r\n return (\r\n this.canFormat(value, columnMetadata) &&\r\n columnMetadata.isUpdatable &&\r\n columnMetadata.isIdentity === false &&\r\n (columnMetadata as any).identityGeneration !== 'ALWAYS'\r\n );\r\n }\r\n\r\n abstract getEditInputType?(metadata: IMinimumColumnMetadata): string;\r\n\r\n abstract parseValue?(inputValue: string): any;\r\n\r\n protected validateNullValue(\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): ValidationResult | null {\r\n if (value === null || value === undefined) {\r\n return metadata.isNullable ||\r\n (metadata.columnDefault !== null &&\r\n metadata.columnDefault !== undefined)\r\n ? { isValid: true }\r\n : { isValid: false, errorMessage: 'Value cannot be null' };\r\n }\r\n return null;\r\n }\r\n\r\n abstract validateValue?(\r\n value: any,\r\n columnMetadata: IMinimumColumnMetadata\r\n ): ValidationResult;\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\nimport { BaseFormatter } from './base.formatter';\r\nexport class DateFormatter extends BaseFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n override canFormat = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): boolean => {\r\n const type = metadata.dataType?.toUpperCase();\r\n return (\r\n type === 'TIMESTAMP' ||\r\n type === 'TIMESTMP' ||\r\n type === 'DATE' ||\r\n type === 'DATETIME2'\r\n );\r\n };\r\n\r\n override format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format: string | null = null\r\n ): string | null => {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n const formatted =\r\n metadata?.dataType === 'DATE'\r\n ? formatDate(value, format || 'dd/MM/yyyy', this.locale)\r\n : formatDate(value, format || 'dd/MM/yyyy HH:mm:ss', this.locale);\r\n return formatted;\r\n };\r\n\r\n override getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n switch (metadata.dataType?.toUpperCase()) {\r\n case 'TIMESTAMP':\r\n case 'TIMESTMP':\r\n case 'DATETIME2':\r\n return 'datetime-local';\r\n case 'DATE':\r\n default:\r\n return 'date';\r\n }\r\n };\r\n\r\n override parseValue = (inputValue: string): any => {\r\n const date = new Date(inputValue);\r\n return isNaN(date.getTime()) ? null : date;\r\n };\r\n\r\n override validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n const nullValidation = this.validateNullValue(value, metadata);\r\n if (nullValidation) return nullValidation;\r\n\r\n if (value instanceof Date && !isNaN(value.getTime())) {\r\n return { isValid: true };\r\n }\r\n const date = new Date(value);\r\n if (date instanceof Date && !isNaN(date.getTime())) {\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Invalid date' };\r\n };\r\n}\r\n","import { formatNumber } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport { IMinimumColumnMetadata } from '../ColumnMetadata.model';\r\nimport { BaseFormatter } from './base.formatter';\r\n\r\nexport class NumberFormatter extends BaseFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n override canFormat(value: any, metadata: IMinimumColumnMetadata): boolean {\r\n const type = metadata.dataType?.toUpperCase();\r\n return (\r\n type === 'INTEGER' ||\r\n type === 'FLOAT' ||\r\n type === 'DOUBLE' ||\r\n type === 'DOUBLE PRECISION' ||\r\n type === 'SMALLINT' ||\r\n type === 'BIGINT' ||\r\n type === 'DECIMAL' ||\r\n type === 'NUMERIC' ||\r\n type === 'INT' ||\r\n type === 'INT32' ||\r\n type === 'INT64'\r\n );\r\n }\r\n\r\n override format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format?: string\r\n ): string | null => {\r\n if (typeof value !== 'number') {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n return String(value);\r\n }\r\n\r\n return formatNumber(value, this.locale, format || '1.0-2');\r\n };\r\n\r\n override getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n return 'number';\r\n };\r\n\r\n override parseValue = (inputValue: string): any => {\r\n const parsed = parseFloat(inputValue);\r\n return isNaN(parsed) ? null : parsed;\r\n };\r\n\r\n override validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n const nullValidation = this.validateNullValue(value, metadata);\r\n if (nullValidation) return nullValidation;\r\n\r\n value = Number(value);\r\n if (typeof value === 'number' && !isNaN(value)) {\r\n const stringnumber = value.toString().replace(/\\D/g, '');\r\n if (stringnumber.length > (metadata.length || Infinity)) {\r\n return {\r\n isValid: false,\r\n errorMessage: `Number exceeds maximum precision of ${metadata.length}`,\r\n };\r\n }\r\n if (\r\n metadata.scale !== null &&\r\n metadata.scale !== undefined &&\r\n metadata.dataType !== 'FLOAT' &&\r\n metadata.dataType !== 'DOUBLE'\r\n ) {\r\n const parts = stringnumber.split('.');\r\n if (parts.length === 2 && parts[1].length > metadata.scale) {\r\n return {\r\n isValid: false,\r\n errorMessage: `Number exceeds maximum scale of ${metadata.scale}`,\r\n };\r\n }\r\n }\r\n\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Invalid number' };\r\n };\r\n}\r\n","import { formatNumber } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\nimport { BaseFormatter } from './base.formatter';\r\n\r\nexport class CharacterFormatter extends BaseFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n override canFormat = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): boolean => {\r\n const type = metadata.dataType?.toUpperCase();\r\n return (\r\n type === 'CHARACTER' ||\r\n type === 'CHAR' ||\r\n type === 'CHARACTER VARYING' ||\r\n type === 'VARCHAR'\r\n );\r\n };\r\n\r\n override format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format?: string\r\n ): string | null => {\r\n if (value === null || value === undefined) {\r\n if (metadata?.isNullable) return null;\r\n return '';\r\n }\r\n return String(value);\r\n };\r\n\r\n override getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n return 'text';\r\n };\r\n\r\n override parseValue = (inputValue: string): any => {\r\n return inputValue;\r\n };\r\n\r\n override validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n const nullValidation = this.validateNullValue(value, metadata);\r\n if (nullValidation) return nullValidation;\r\n\r\n if (typeof value === 'string') {\r\n if (metadata.length && metadata.length < value.length)\r\n return {\r\n isValid: false,\r\n errorMessage: `Value exceeds maximum length of ${metadata.length}`,\r\n };\r\n\r\n // if (metadata.minLength && metadata.minLength > value.length)\r\n // return {\r\n // isValid: false,\r\n // errorMessage: `Value is below minimum length of ${metadata.minLength}`,\r\n // };\r\n\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Not a string' };\r\n };\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\nimport { BaseFormatter } from './base.formatter';\r\n\r\nexport class TimeFormatter extends BaseFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n override canFormat = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): boolean => {\r\n const type = metadata.dataType?.toUpperCase();\r\n return type === 'TIME';\r\n };\r\n\r\n override format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format: string | null = null\r\n ): string | null => {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n const dateWithTime = new Date(`1970-01-01T${value}`);\r\n const formatted = formatDate(\r\n dateWithTime,\r\n format || 'HH:mm:ss',\r\n this.locale\r\n );\r\n return formatted;\r\n // return value;\r\n };\r\n\r\n override getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n switch (metadata.dataType?.toUpperCase()) {\r\n default:\r\n return 'time';\r\n }\r\n };\r\n\r\n override parseValue = (inputValue: string): any => {\r\n const date = new Date(inputValue);\r\n return isNaN(date.getTime()) ? null : date;\r\n };\r\n\r\n override validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n const nullValidation = this.validateNullValue(value, metadata);\r\n if (nullValidation) return nullValidation;\r\n\r\n const dateWithTime = new Date(`1970-01-01T${value}`);\r\n if (dateWithTime instanceof Date && !isNaN(dateWithTime.getTime())) {\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Invalid date' };\r\n };\r\n}\r\n","import { formatNumber } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\nimport { BaseFormatter } from './base.formatter';\r\n\r\nexport class VarCharFormatter extends BaseFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n canFormat = (value: any, metadata: IMinimumColumnMetadata): boolean => {\r\n const type = metadata.dataType?.toUpperCase();\r\n return type === 'NVARCHAR' || type === 'STRING';\r\n };\r\n\r\n format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format?: string\r\n ): string | null => {\r\n if (value === null || value === undefined) {\r\n if (metadata?.isNullable) return null;\r\n return '';\r\n }\r\n return String(value);\r\n };\r\n\r\n getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n return 'text';\r\n };\r\n\r\n override parseValue = (inputValue: string): any => {\r\n return inputValue;\r\n };\r\n\r\n override validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n const nullValidation = this.validateNullValue(value, metadata);\r\n if (nullValidation) return nullValidation;\r\n\r\n if (typeof value === 'string') {\r\n if (\r\n metadata.length &&\r\n metadata.length > 0 &&\r\n metadata.length < value.length\r\n )\r\n return {\r\n isValid: false,\r\n errorMessage: `Value exceeds maximum length of ${metadata.length}`,\r\n };\r\n\r\n // if (metadata.minLength && metadata.minLength > value.length)\r\n // return {\r\n // isValid: false,\r\n // errorMessage: `Value is below minimum length of ${metadata.minLength}`,\r\n // };\r\n\r\n return { isValid: true };\r\n }\r\n return { isValid: false, errorMessage: 'Not a string' };\r\n };\r\n}\r\n","import { formatNumber } from '@angular/common';\r\nimport { IFormatter } from './formatter.interface';\r\nimport { inject, LOCALE_ID } from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../ColumnMetadata.model';\r\nimport { BaseFormatter } from './base.formatter';\r\n\r\nexport class BitFormatter extends BaseFormatter implements IFormatter {\r\n private readonly locale = inject(LOCALE_ID);\r\n\r\n override canFormat = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): boolean => {\r\n const type = metadata.dataType?.toUpperCase();\r\n return (\r\n type === 'BIT' ||\r\n type === 'BOOLEAN' ||\r\n type === 'BOOL' ||\r\n type === 'TINYINT'\r\n );\r\n };\r\n\r\n override format = (\r\n value: any,\r\n metadata?: IMinimumColumnMetadata,\r\n format?: string\r\n ): string | null => {\r\n if (value === null || value === undefined) {\r\n if (metadata?.isNullable) return null;\r\n return 'false';\r\n }\r\n return String(value);\r\n };\r\n\r\n override getEditInputType = (metadata: IMinimumColumnMetadata): string => {\r\n return 'checkbox';\r\n };\r\n\r\n override parseValue = (inputValue: string): any => {\r\n return inputValue;\r\n };\r\n\r\n override validateValue = (\r\n value: any,\r\n metadata: IMinimumColumnMetadata\r\n ): { isValid: boolean; errorMessage?: string } => {\r\n const nullValidation = this.validateNullValue(value, metadata);\r\n if (nullValidation) return nullValidation;\r\n\r\n if (typeof value === 'boolean') {\r\n // if (metadata.minLength && metadata.minLength > value.length)\r\n // return {\r\n // isValid: false,\r\n // errorMessage: `Value is below minimum length of ${metadata.minLength}`,\r\n // };\r\n\r\n return { isValid: true };\r\n }\r\n\r\n return { isValid: false, errorMessage: 'Not a boolean' };\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IFormatter } from '../models/formatters/formatter.interface';\r\nimport { DateFormatter } from '../models/formatters/date.formatter';\r\nimport { NumberFormatter } from '../models/formatters/number.formatter';\r\nimport { CharacterFormatter } from '../models/formatters/character.formatter';\r\nimport { TimeFormatter } from '../models/formatters/time.formatter';\r\nimport { VarCharFormatter } from '../models/formatters/varchar.formatter';\r\nimport { BitFormatter } from '../models/formatters/bit.formatter';\r\nimport { IMinimumColumnMetadata } from '../models/ColumnMetadata.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DataFormatterService {\r\n private formatters: IFormatter[] = [\r\n new DateFormatter(),\r\n new NumberFormatter(),\r\n new CharacterFormatter(),\r\n new TimeFormatter(),\r\n new VarCharFormatter(),\r\n new BitFormatter(),\r\n ];\r\n\r\n constructor() {}\r\n\r\n public setFormatters(formatters: IFormatter[]) {\r\n this.formatters = formatters;\r\n }\r\n\r\n public registerFormatter(formatter: IFormatter) {\r\n this.formatters.push(formatter);\r\n }\r\n\r\n public getFormatter = (\r\n value: any,\r\n columnMetadata?: IMinimumColumnMetadata | null\r\n ): IFormatter | null => {\r\n const formatter = this.formatters.find((f) =>\r\n f.canFormat(value, columnMetadata)\r\n );\r\n return formatter || null;\r\n };\r\n\r\n public validateRow(\r\n row: any,\r\n columnMetadatas: IMinimumColumnMetadata[]\r\n ): boolean {\r\n for (const column of columnMetadatas) {\r\n if (column.isIdentity || column.isGenerated || !column.isUpdatable)\r\n continue;\r\n const value = row[column.columnName];\r\n const formatter = this.getFormatter(value, column);\r\n if (formatter) {\r\n const validationResult = formatter.validateValue?.(value, column);\r\n if (!validationResult?.isValid) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../../models/ColumnMetadata.model';\r\nimport { BehaviorSubject, debounceTime, take } from 'rxjs';\r\nimport { IFormatter } from '../../models/formatters/formatter.interface';\r\nimport { CrossCellNavigationDirective } from '../../directives/cross-cell-navigation.directive';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\n// import { DataListDirective } from '../../directives/DataList.directive';\r\n\r\n@Component({\r\n selector: 'app-editable-cell, chr-editable-cell',\r\n imports: [\r\n CrossCellNavigationDirective,\r\n // DataListDirective\r\n ],\r\n templateUrl: './editable-cell.html',\r\n styleUrls: ['./editable-cell.scss', '../../../../../../tailwindbuild.css'],\r\n})\r\nexport class EditableCell implements OnInit, OnDestroy {\r\n public readonly formatterService = inject(DataFormatterService);\r\n public allowUpdate = input<boolean>(false);\r\n public isTouched = signal(false);\r\n public hasChanged = signal(false);\r\n public formatter = signal<IFormatter | null>(null);\r\n //public suggestions = input<any[]>([]);\r\n\r\n private inputRef = viewChild<ElementRef>('inputElement');\r\n public input = computed(\r\n () => this.inputRef()?.nativeElement as HTMLInputElement | null\r\n );\r\n\r\n public inputType = computed(() => {\r\n if (this.formatter()) {\r\n const type =\r\n this.formatter()!.getEditInputType?.(this.columnMetadata()) || 'text';\r\n return type;\r\n }\r\n return null;\r\n });\r\n\r\n private spanRef = viewChild<ElementRef>('spanElement');\r\n public spanElement = computed(\r\n () => this.spanRef()?.nativeElement as HTMLSpanElement | null\r\n );\r\n\r\n public value = input.required<any>();\r\n public valueChange = output<any>();\r\n public formattedValue = computed(() => {\r\n if (!this.formatter()) return this.value() ?? '-';\r\n return this.formatter()!.format(this.value(), this.columnMetadata());\r\n });\r\n public columnMetadata = input.required<IMinimumColumnMetadata>();\r\n\r\n public isEditing = signal(false);\r\n public isEditingChange = output<boolean>();\r\n public error = signal<string | null>(null);\r\n\r\n private valueSubjet = new BehaviorSubject<any>(null);\r\n\r\n public debounce = this.valueSubjet.pipe(debounceTime(150));\r\n\r\n public constructor() {\r\n effect(() => {\r\n if (this.isEditing()) {\r\n this.input()?.focus();\r\n this.input()?.select();\r\n } else {\r\n this.input()?.blur();\r\n }\r\n this.isEditingChange.emit(this.isEditing());\r\n });\r\n effect(() => {\r\n this.formatter.set(\r\n this.formatterService.getFormatter(this.value(), this.columnMetadata())\r\n );\r\n });\r\n this.valueChange.subscribe(() => {\r\n this.hasChanged.set(true);\r\n });\r\n this.debounce.subscribe((value) => {\r\n if (!this.formatter() || !this.formatter()!.validateValue) return;\r\n const validation = this.formatter()!.validateValue!(\r\n value,\r\n this.columnMetadata()\r\n );\r\n if (!validation.isValid) {\r\n this.error.set(validation.errorMessage || 'Invalid value');\r\n } else {\r\n this.error.set(null);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.valueSubjet.next(this.value());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.valueSubjet.complete();\r\n }\r\n\r\n public enableEditing = () => {\r\n if (\r\n !this.formatter() ||\r\n !this.formatter()!.canEdit ||\r\n !this.allowUpdate()\r\n ) {\r\n return;\r\n }\r\n if (this.formatter()!.canEdit!(this.value(), this.columnMetadata())) {\r\n this.isEditing.set(true);\r\n } else {\r\n this.spanElement()!.tabIndex = 0;\r\n this.spanElement()?.focus();\r\n }\r\n };\r\n\r\n public onInputChange(value: any) {\r\n if (!value === null || value === undefined || value === '') value = null;\r\n this.valueSubjet.next(value);\r\n }\r\n\r\n public validate = () => {\r\n this.valueSubjet.pipe(take(1)).subscribe((value) => {\r\n if (this.error()) return;\r\n this.valueChange.emit(this.formatter()?.parseValue?.(value) ?? value);\r\n this.isEditing.set(false);\r\n //this.isTouched.set(false);\r\n });\r\n };\r\n\r\n public cancel = () => {\r\n if (this.inputType() === 'checkbox') {\r\n return this.validate();\r\n }\r\n this.isEditing.set(false);\r\n this.isTouched.set(false);\r\n this.valueSubjet.next(this.value());\r\n };\r\n}\r\n","<div CrossCellNavigation [allowNavigation]=\"!error()\" class=\"cell-wrapper\" [title]=\"value()\"\r\n (dblclick)=\"enableEditing()\" (navigateAway)=\"validate()\">\r\n <!-- [attr.data-has-changed]=\"hasChanged()\" -->\r\n @if(!isEditing()){\r\n <span class=\"cell-value\" #spanElement tabindex=\"0\">\r\n @let val = '' + formattedValue() || '';\r\n @if(val === null || val === undefined){\r\n <span class=\"empty-value\">(null)</span>\r\n }@else if (val === '') {\r\n <span class=\"empty-value\">(vide)</span>\r\n }@else if (val?.trim() === '') {\r\n <span class=\"empty-value\">({{val.length}} blancs)</span>\r\n }\r\n @else {\r\n {{val}}\r\n }\r\n </span>\r\n }\r\n @else {\r\n <input #input class=\"edit-input\" [attr.list]=\"'suggestions-' + columnMetadata().columnName\" [type]=\"inputType()\"\r\n [value]=\"value() || null\" #inputElement\r\n (change)=\"inputType() === 'checkbox' ? onInputChange(input.checked) : null\" (focus)=\"isTouched.set(true)\"\r\n (input)=\"onInputChange($any($event).target.value)\" (blur)=\"cancel()\" [checked]=\"value() === true\"\r\n (keydown.enter)=\"validate()\" (keydown.escape)=\"cancel()\" autofocus />\r\n <!-- <input chr-data-list #input class=\"edit-input\" [attr.list]=\"'suggestions-' + columnMetadata().columnName\"\r\n [type]=\"inputType()\" [value]=\"value() || null\" #inputElement\r\n (change)=\"inputType() === 'checkbox' ? onInputChange(input.checked) : null\" (focus)=\"isTouched.set(true)\"\r\n (input)=\"onInputChange($event.target.value)\" (blur)=\"cancel()\" [checked]=\"value() === true\"\r\n (keydown.enter)=\"validate()\" (keydown.escape)=\"cancel()\" autofocus [suggestions]=\"suggestions()\" /> -->\r\n <!-- @if(suggestions().length > 0){\r\n <datalist [id]=\"'suggestions-' + columnMetadata().columnName\">\r\n @for(suggestion of suggestions(); track suggestion){\r\n <option [value]=\"suggestion\">{{suggestion}}</option>\r\n }\r\n </datalist>\r\n } -->\r\n }\r\n @if(isTouched() || hasChanged()){\r\n <div class=\"error-message\" [title]=\"error()\">\r\n {{ error() }}\r\n </div>\r\n }\r\n</div>","export enum DGFilterMode {\r\n EQUALS,\r\n NOT_EQUALS,\r\n CONTAINS,\r\n LOWER_OR_EQUAL,\r\n GREATER_OR_EQUAL,\r\n STARTS_WITH,\r\n ENDS_WITH,\r\n}\r\n","import {\r\n Directive,\r\n inject,\r\n ElementRef,\r\n output,\r\n HostListener,\r\n input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[OutsideClickAware]',\r\n})\r\nexport class OutsideClickAwareDirective {\r\n private elementRef = inject(ElementRef);\r\n public outsideClick = output<MouseEvent>();\r\n public OutsideClickAware = input<boolean>(true);\r\n\r\n constructor() {}\r\n\r\n @HostListener('document:mousedown', ['$event'])\r\n public onClickOutside(event: MouseEvent) {\r\n if (!this.OutsideClickAware()) return;\r\n\r\n const targetElement = this.elementRef.nativeElement;\r\n if (targetElement && !targetElement.contains(event.target as Node)) {\r\n this.outsideClick.emit(event);\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { DGFilterMode } from '../../models/FilterMode.enum';\r\nimport {\r\n IFormatter,\r\n ValidationResult,\r\n} from '../../models/formatters/formatter.interface';\r\nimport { IMinimumColumnMetadata } from '../../models/ColumnMetadata.model';\r\n\r\nimport { OutsideClickAwareDirective } from '../../directives/outside-click-aware.directive';\r\nimport { DataListComponent } from '../../chr-data-list/chr-data-list';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'app-column-filter, chr-column-filter',\r\n imports: [DataListComponent, OutsideClickAwareDirective, AutofocusDirective],\r\n templateUrl: './column-filter.html',\r\n styleUrls: ['./column-filter.scss', '../../../../../../tailwindbuild.css'],\r\n})\r\nexport class ColumnFilter {\r\n public readonly formatterService = inject(DataFormatterService);\r\n public readonly FilterMode = DGFilterMode;\r\n public isOpen = model<boolean>(false);\r\n public by = input.required<string>();\r\n public suggestions = input<any[]>([]);\r\n public mode = model<DGFilterMode>(DGFilterMode.EQUALS);\r\n\r\n public formatter = signal<IFormatter | null>(null);\r\n private inputRef = viewChild<ElementRef>('inputElement');\r\n public input = computed(\r\n () => this.inputRef()?.nativeElement as HTMLInputElement | null\r\n );\r\n public columnMetadata = input.required<IMinimumColumnMetadata>();\r\n public value = model<any>();\r\n public error = signal<string | null>(null);\r\n\r\n public filterChange = output<{\r\n column: string;\r\n mode: DGFilterMode;\r\n value: string;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.columnMetadata();\r\n this.formatter.set(\r\n this.formatterService.getFormatter(this.value(), this.columnMetadata())\r\n );\r\n });\r\n }\r\n\r\n public toggle = () => {\r\n this.isOpen.set(!this.isOpen());\r\n };\r\n\r\n public apply = () => {\r\n if (this.error()) return;\r\n if (this.mode() === null || this.mode() === undefined) return;\r\n this.mode.set(this.mode());\r\n this.value.set(this.value());\r\n this.isOpen.set(false);\r\n this.filterChange.emit({\r\n column: this.by(),\r\n mode: Number(this.mode()),\r\n value: this.value(),\r\n });\r\n };\r\n\r\n public onInputChange = (inputValue: string) => {\r\n let res: ValidationResult = {\r\n isValid: false,\r\n errorMessage: 'Invalid value',\r\n };\r\n if (inputValue === '') {\r\n this.error.set(null);\r\n this.value.set(null);\r\n return;\r\n }\r\n if (this.formatter()?.validateValue) {\r\n res = this.formatter()?.validateValue?.(\r\n inputValue,\r\n this.columnMetadata()\r\n )!;\r\n } else {\r\n res = { isValid: true };\r\n }\r\n if (!res?.isValid) {\r\n this.error.set(res?.errorMessage || 'Invalid value');\r\n } else {\r\n this.error.set(null);\r\n this.value.set(inputValue);\r\n }\r\n };\r\n\r\n public getModeLabel = (mode: DGFilterMode): string => {\r\n switch (Number(mode)) {\r\n case DGFilterMode.EQUALS:\r\n return 'Égal à';\r\n case DGFilterMode.NOT_EQUALS:\r\n return 'Différent de';\r\n case DGFilterMode.CONTAINS:\r\n return 'Contient';\r\n case DGFilterMode.LOWER_OR_EQUAL:\r\n return 'Plus petit ou égal à';\r\n case DGFilterMode.GREATER_OR_EQUAL:\r\n return 'Plus grand ou égal à';\r\n case DGFilterMode.STARTS_WITH:\r\n return 'Commence par';\r\n case DGFilterMode.ENDS_WITH:\r\n return 'Se termine par';\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n public filterModes = computed((): string[] => {\r\n return Object.values(DGFilterMode)\r\n .filter((v) => typeof v === 'number')\r\n .map((mode) => {\r\n return this.getModeLabel(Number(mode));\r\n });\r\n });\r\n}\r\n","<div class=\"filter-wrapper\" [OutsideClickAware]=\"isOpen()\" (outsideClick)=\"isOpen.set(false)\">\r\n <span class=\"material-symbols filter-icon toggle\" (dblclick)=\"toggle()\">filter_list</span>\r\n @if(isOpen()){\r\n <div class=\"input-wrapper\" (keyup.enter)=\"apply()\" title=\"Appuyer sur enter pour appliquer le filtre\">\r\n <input #modeSelector type=\"text\" class=\"filter-input mode-selector\" [value]=\"getModeLabel(mode())\"\r\n [chrAutofocus]=\"mode() === null\" placeholder=\"Type de filtre\" />\r\n <chr-data-list for=\"column-filter-mode-{{by()}}\" [suggestions]=\"filterModes()\"\r\n (optionSelected)=\"this.mode.set($event.index)\" [targetElement]=\"modeSelector\"></chr-data-list>\r\n <div class=\"input-wrapper\">\r\n <div class=\"input-and-error\">\r\n <input #inputElement [type]=\"formatter()?.getEditInputType(columnMetadata())\"\r\n placeholder=\"Valeur du filtre\" class=\"filter-input form-control no-input-buttons\" [value]=\"value()\"\r\n (input)=\"onInputChange($any($event).target.value)\" [chrAutofocus]=\"mode() !== null \" />\r\n <chr-data-list for=\"column-filter-{{by()}}\" [suggestions]=\"suggestions()\"\r\n (optionSelected)=\"value.set($event.value)\" [targetElement]=\"inputElement\"></chr-data-list>\r\n <div class=\"error-message\" [title]=\"error()\" [class.hidden]=\"!error()\">\r\n {{ error() }}\r\n </div>\r\n </div>\r\n <!-- <span class=\"mat-icon apply-button\" title=\"Cliquez pour appliquer le filtre\" (click)=\"apply()\">check</span> -->\r\n </div>\r\n </div>\r\n } @else {\r\n @let val = value();\r\n @if(val){\r\n <span class=\"toggle\" (dblclick)=\"toggle()\">{{getModeLabel(mode())}} {{ val ? `\"${val}\"` : '' }}</span>\r\n }\r\n @else {\r\n <span class=\"toggle faded\" (dblclick)=\"toggle()\">Appliquer un filtre</span>\r\n }\r\n }\r\n</div>","export enum DGGroupAggregationEnum {\r\n COUNT,\r\n SUM,\r\n AVERAGE,\r\n MIN,\r\n MAX,\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { DGGroupAggregationEnum } from '../../models/GroupAggregationEnum';\r\nimport { IDGGroup } from '../data-grid/data-grid';\r\nimport { OutsideClickAwareDirective } from '../../directives/outside-click-aware.directive';\r\nimport { DataListComponent } from '../../chr-data-list/chr-data-list';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\n\r\n@Component({\r\n selector: 'app-column-group, chr-column-group',\r\n templateUrl: './column-group.html',\r\n styleUrls: ['./column-group.scss', '../../../../../../tailwindbuild.css'],\r\n imports: [DataListComponent, OutsideClickAwareDirective, AutofocusDirective],\r\n})\r\nexport class ColumnGroup {\r\n public readonly formatterService = inject(DataFormatterService);\r\n public readonly Aggregation = DGGroupAggregationEnum;\r\n public input = viewChild<ElementRef>('input');\r\n public isOpen = model<boolean>(false);\r\n public by = input.required<string>();\r\n public mode = model<DGGroupAggregationEnum | null>(null);\r\n\r\n public aggregations = computed(() => {\r\n return Object.values(DGGroupAggregationEnum)\r\n .filter((v) => typeof v === 'number')\r\n .map((mode) => {\r\n return this.getModeLabel(Number(mode));\r\n });\r\n });\r\n\r\n public textValue = computed(() => {\r\n if (this.mode() === null) {\r\n return 'Aucun';\r\n }\r\n return this.getModeLabel(this.mode() as DGGroupAggregationEnum);\r\n });\r\n\r\n public groupChange = output<IDGGroup>();\r\n\r\n constructor() {}\r\n\r\n public toggle = () => {\r\n this.isOpen.set(!this.isOpen());\r\n };\r\n\r\n public apply = () => {\r\n this.mode.set(this.mode());\r\n this.isOpen.set(false);\r\n this.groupChange.emit({\r\n column: this.by(),\r\n included: [],\r\n mode: typeof this.mode() === 'number' ? this.mode() : (null as any),\r\n });\r\n };\r\n\r\n public onOptionSelected = (modeLabel: string) => {\r\n const modeEntry = Object.values(DGGroupAggregationEnum)\r\n .filter((v) => typeof v === 'number')\r\n .find((mode) => {\r\n return this.getModeLabel(Number(mode)) === modeLabel;\r\n });\r\n if (typeof modeEntry === 'number') {\r\n const mode = Number(modeEntry);\r\n this.mode.set(mode);\r\n }\r\n };\r\n\r\n public getModeLabel = (mode: DGGroupAggregationEnum): string => {\r\n switch (Number(mode)) {\r\n case DGGroupAggregationEnum.COUNT:\r\n return 'Total';\r\n case DGGroupAggregationEnum.SUM:\r\n return 'Somme';\r\n case DGGroupAggregationEnum.AVERAGE:\r\n return 'Moyenne';\r\n case DGGroupAggregationEnum.MIN:\r\n return 'Minimum';\r\n case DGGroupAggregationEnum.MAX:\r\n return 'Maximum';\r\n default:\r\n return '';\r\n }\r\n };\r\n}\r\n","<div class=\"filter-wrapper\" [OutsideClickAware]=\"isOpen()\" (outsideClick)=\"isOpen.set(false)\">\r\n <span class=\" material-symbols filter-icon toggle\" (dblclick)=\"toggle()\">stack</span>\r\n @if(isOpen()){\r\n <div class=\"input-wrapper\" (keyup.enter)=\"apply()\" title=\"Appuyer sur enter pour appliquer le groupement\">\r\n <!-- <select (change)=\"mode.set($any($event).target.value)\" class=\"mode-selector\">\r\n <option [selected]=\"mode() === null\" [value]=\"null\">Aucune aggrégation</option>\r\n <option [selected]=\"mode() === Aggregation.COUNT\" [value]=\"Aggregation.COUNT\">Total</option>\r\n <option [selected]=\"mode() === Aggregation.SUM\" [value]=\"Aggregation.SUM\">Somme</option>\r\n <option [selected]=\"mode() === Aggregation.AVERAGE\" [value]=\"Aggregation.AVERAGE\">Moyenne</option>\r\n <option [selected]=\"mode() === Aggregation.MIN\" [value]=\"Aggregation.MIN\">Minimum</option>\r\n <option [selected]=\"mode() === Aggregation.MAX\" [value]=\"Aggregation.MAX\">Maximum</option>\r\n </select> -->\r\n <input #input type=\"text\" name=\"groupBy\" [value]=\"textValue()\" (input)=\"mode.set(null)\" [chrAutofocus]=\"true\"\r\n placeholder=\"Fonction d'agrégation\" class=\"filter-input form-control no-input-buttons\" />\r\n <chr-data-list [targetElement]=\"input\" [suggestions]=\"aggregations()\"\r\n (optionSelected)=\"onOptionSelected($event.value)\"></chr-data-list>\r\n <!-- <span class=\" apply-button\" title=\"Cliquez pour appliquer le filtre\" (click)=\"apply()\">check</span> -->\r\n </div>\r\n } @else {\r\n @let val = mode();\r\n @if(val !== null){\r\n <span class=\"toggle\" (dblclick)=\"toggle()\">{{getModeLabel(mode()!)}}</span>\r\n }@else {\r\n <span class=\"toggle faded\" (dblclick)=\"toggle()\">Appliquer un groupement</span>\r\n }\r\n }\r\n</div>","import { Directive, ElementRef, input, effect, inject } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[scrollIntoView]',\r\n})\r\nexport class ScrollIntoViewDirective {\r\n private elementRef = inject(ElementRef);\r\n\r\n scrollIntoView = input<boolean>(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.scrollIntoView()) {\r\n this.scrollToElement();\r\n }\r\n });\r\n }\r\n\r\n private scrollToElement(): void {\r\n const element = this.elementRef.nativeElement;\r\n\r\n setTimeout(() => {\r\n element.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n inline: 'nearest',\r\n });\r\n });\r\n }\r\n}\r\n","import {\r\n Directive,\r\n inject,\r\n ElementRef,\r\n output,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[CtrlClick], [ControlClick]',\r\n host: {\r\n '(mouseover)': 'onMouseOver($event)',\r\n '(mouseout)': 'onMouseOut($event)',\r\n '(keydown.control)': 'isCtrlPressed.set(true)',\r\n '(keyup.control)': 'isCtrlPressed.set(false)',\r\n '[style.cursor]': 'isCtrlPressed() ? `pointer` : `default`',\r\n '[style.textDecoration]': '`underline dotted`',\r\n '[style.color]':\r\n \"(isHovered() && isCtrlPressed())? 'var(--tertiary-color)' : 'inherit'\",\r\n },\r\n})\r\nexport class ControlClickDirective {\r\n private elementRef = inject(ElementRef);\r\n\r\n public callback? = input<() => void>();\r\n public ctrlClick = output<MouseEvent>();\r\n public isCtrlPressed = signal<boolean>(false);\r\n public isHovered = signal<boolean>(false);\r\n\r\n constructor() {\r\n // Capture the native click before it is fired, otherwise, it will allow other click events to fire before we can stop the propagation in case of Ctrl+Click\r\n this.elementRef.nativeElement.addEventListener(\r\n 'click',\r\n (event: MouseEvent) => {\r\n this.onClickIntercepted(event);\r\n },\r\n true\r\n );\r\n }\r\n\r\n private onClickIntercepted(event: MouseEvent) {\r\n if (event.ctrlKey || event.metaKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.stopImmediatePropagation();\r\n this.onCtrlClick(event);\r\n }\r\n }\r\n\r\n private onCtrlClick(event: MouseEvent) {\r\n this.ctrlClick.emit(event);\r\n if (this.callback) {\r\n this.callback();\r\n }\r\n }\r\n\r\n onMouseOver(event: MouseEvent): void {\r\n this.isHovered.set(true);\r\n if (event.ctrlKey || event.metaKey) {\r\n this.isCtrlPressed.set(true);\r\n }\r\n }\r\n\r\n onMouseOut(event: MouseEvent): void {\r\n this.isHovered.set(false);\r\n this.isCtrlPressed.set(false);\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n input,\r\n signal,\r\n output,\r\n inject,\r\n model,\r\n effect,\r\n viewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { AnonymousTable, BaseTable } from '../../models/AnonymousTable.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n ColumnMetadata,\r\n IDB2ColumnMetadata,\r\n IMinimumColumnMetadata,\r\n} from '../../models/ColumnMetadata.model';\r\nimport { EditableCell } from '../editable-cell/editable-cell';\r\nimport { TableConstraintColumn } from '../../models/TableConstraintColumn.model';\r\nimport { ColumnFilter } from '../filter/column-filter';\r\nimport { DGFilterMode } from '../../models/FilterMode.enum';\r\nimport {\r\n CdkVirtualScrollViewport,\r\n ScrollingModule,\r\n} from '@angular/cdk/scrolling';\r\nimport { ColumnGroup } from '../group/column-group';\r\nimport { DGGroupAggregationEnum } from '../../models/GroupAggregationEnum';\r\nimport { ScrollIntoViewDirective } from '../../directives/scroll-into-view.directive';\r\nimport { ControlClickDirective } from '../../directives/control-click.directive';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\nimport { ChrPaginatorComponent } from '../../chr-paginator/chr-paginator.component';\r\nimport { NgxPaginationModule, PaginationService } from 'ngx-pagination';\r\nimport { ContextMenuDirective } from '../../directives/context-menu.directive';\r\nimport { IContextMenuItem } from '../../models/context-menu';\r\n\r\nexport interface IDGAddedEntry {\r\n index: number;\r\n row: any;\r\n}\r\n\r\nexport interface IDGChangedEntry {\r\n index: number;\r\n original: any;\r\n current: any;\r\n}\r\n\r\nexport interface IDGDeletedEntry {\r\n index: number;\r\n row: any;\r\n}\r\n\r\nexport interface IDGSort {\r\n column: string;\r\n isAsc: boolean;\r\n}\r\n\r\nexport interface IDGFilter {\r\n column: string;\r\n mode: DGFilterMode;\r\n value: string;\r\n}\r\n\r\nexport interface IDGGroup {\r\n column: string;\r\n included: string[];\r\n mode: DGGroupAggregationEnum;\r\n}\r\n\r\nexport interface IDGRow {\r\n id: string;\r\n data: any;\r\n flag: 'added' | 'modified' | 'deleted' | 'unchanged';\r\n valid: boolean;\r\n}\r\n\r\nexport type IDGTrackByMode = 'primaryKey' | 'index';\r\n\r\n@Component({\r\n selector: 'app-data-grid, chr-data-grid',\r\n imports: [\r\n CommonModule,\r\n ChrPaginatorComponent,\r\n NgxPaginationModule,\r\n EditableCell,\r\n ContextMenuDirective,\r\n ScrollIntoViewDirective,\r\n ControlClickDirective,\r\n ColumnFilter,\r\n ScrollingModule,\r\n ColumnGroup,\r\n ],\r\n templateUrl: './data-grid.html',\r\n styleUrls: ['./data-grid.scss', '../../../../../../tailwindbuild.css'],\r\n providers: [\r\n PaginationService,\r\n // {\r\n // provide: VIRTUAL_SCROLL_STRATEGY,\r\n // useClass: DynamicSizeScrollStrategy,\r\n // },\r\n ],\r\n})\r\nexport class DataGrid {\r\n public readonly formatterService = inject(DataFormatterService);\r\n\r\n public id = signal(crypto.randomUUID());\r\n public title = input<string | null>(null);\r\n public table = input<BaseTable>();\r\n public viewport = viewChild<CdkVirtualScrollViewport>('viewport');\r\n public headerScroll = viewChild<ElementRef>('headerScroll');\r\n\r\n public currentPage = input<number>(1);\r\n public pageSize = input<number>(10);\r\n\r\n public pageChange = output<number>();\r\n public pageSizeChange = output<number>();\r\n\r\n public sort = model<IDGSort | null>(null);\r\n public filter = model<{ [key: string]: IDGFilter }>({});\r\n public groupBy = model<IDGGroup | null>(null);\r\n\r\n public cellChange = output<{\r\n index: number;\r\n row: any;\r\n column: IMinimumColumnMetadata | IDB2ColumnMetadata | any;\r\n value: any;\r\n }>();\r\n public rowClick = output<{ rowIndex: number; row: any; event: Event }>();\r\n\r\n public enableVirtualization = input<boolean>(false);\r\n public allowInsert = input<boolean>(false);\r\n public allowUpdate = input<boolean>(false);\r\n public allowDelete = input<boolean>(false);\r\n public allowSync = input<boolean>(true);\r\n public allowRefresh = input<boolean>(false);\r\n public allowNavigation = input<boolean>(false);\r\n public allowExport = input<boolean>(false);\r\n public allowManageTrackingPersistence = input<boolean>(false);\r\n\r\n public maxHeight = input<string>('100%');\r\n\r\n public onExport = output<void>();\r\n public onSync = output<void>();\r\n public onRefresh = output<void>();\r\n public onAddRow = output<void>();\r\n public onDeleteRow = output<{ index: number; row: any }>();\r\n /**\r\n * Only supported for DB2 tables. For other types, use the onNavigate event.\r\n */\r\n public onForeignTableNavigate = output<{\r\n targetTable: string;\r\n targetSchema: string;\r\n }>();\r\n public onNavigate = output<{\r\n targetColumnMetadata: IMinimumColumnMetadata;\r\n }>();\r\n\r\n public crossRequestTrackingPersistence = model<boolean>(false);\r\n public modifiedCells = model<\r\n {\r\n rowIndex: number;\r\n columnName: string;\r\n originalValue: any;\r\n currentValue: any;\r\n }[]\r\n >([]);\r\n public modifiedRows = model<IDGChangedEntry[]>([]);\r\n public addedRows = model<IDGAddedEntry[]>([]);\r\n public deletedRows = model<IDGDeletedEntry[]>([]);\r\n\r\n public columnSuggestions = computed<{ [key: string]: any[] }>(() => {\r\n const suggestions: { [key: string]: Set<any> } = {};\r\n this.columns().forEach((column) => {\r\n suggestions[column.columnName] = new Set<any>();\r\n });\r\n this.table()?.rows.forEach((row) => {\r\n this.columns().forEach((column) => {\r\n const value = row[column.columnName];\r\n if (value !== null && value !== undefined) {\r\n suggestions[column.columnName].add(value);\r\n }\r\n });\r\n });\r\n return Object.entries(suggestions).reduce((acc, [key, value]) => {\r\n acc[key] = Array.from(value);\r\n return acc;\r\n }, {} as { [key: string]: any[] });\r\n });\r\n\r\n // protected _addedRows = computed(() => this.addedRows().map((r) => r.row));\r\n public trackByMode = model<IDGTrackByMode>('index');\r\n\r\n public hasChanges = computed(() => {\r\n return (\r\n this.addedRows().length > 0 ||\r\n this.modifiedRows().length > 0 ||\r\n this.deletedRows().length > 0\r\n );\r\n });\r\n\r\n public groupByMap = computed(() => {\r\n const includedMap: { [key: string]: boolean } = {};\r\n this.groupBy()?.included.forEach((col) => {\r\n includedMap[col] = true;\r\n });\r\n return includedMap;\r\n });\r\n\r\n public columns = computed(() => {\r\n const table = this.table();\r\n const metadatas = table?.columnMetadatas || [];\r\n const groupedColumns = this.groupBy()?.included || [];\r\n\r\n //Sort grouped columns first then computed columns then the rest\r\n if (this.groupBy() !== null)\r\n return [\r\n ...metadatas.filter((col) => groupedColumns.includes(col.columnName)),\r\n ...(metadatas.filter(\r\n (col) => !groupedColumns.includes(col.columnName) && !col.tableName\r\n ) as IMinimumColumnMetadata[]),\r\n ...(metadatas.filter(\r\n (col) => !groupedColumns.includes(col.columnName) && col.tableName\r\n ) as IMinimumColumnMetadata[]),\r\n ];\r\n // if (this.groupBy() !== null)\r\n // return metadatas.filter(\r\n // (col) =>\r\n // groupedColumns.includes(col.columnName) ||\r\n // (!col.tableSchema && !col.tableName) // Keep computed columns\r\n // );\r\n else return metadatas;\r\n });\r\n\r\n // public rows = computed(() => {\r\n // const table = this.table();\r\n // return table?.rows || [];\r\n // });\r\n\r\n public rows = computed(() => {\r\n const table = this.table();\r\n if (!table) return [];\r\n const computedRows: IDGRow[] = [];\r\n\r\n for (const row of table.rows) {\r\n const rowId = table.getRowIdentifier(row);\r\n const updated = this.modifiedRows().find(\r\n (mr) => table.getRowIdentifier(mr.current) === rowId\r\n );\r\n const deleted = this.deletedRows().find(\r\n (dr) => table.getRowIdentifier(dr.row) === rowId\r\n );\r\n\r\n computedRows.push({\r\n id: rowId,\r\n data: updated ? updated.current : row,\r\n flag: deleted ? 'deleted' : updated ? 'modified' : 'unchanged',\r\n valid: this.validateRow(\r\n deleted ? deleted.row : updated ? updated.current : row\r\n ),\r\n });\r\n }\r\n for (const addedEntry of this.addedRows()) {\r\n const rowId = table.getRowIdentifier(addedEntry.row);\r\n computedRows.push({\r\n id: rowId,\r\n data: addedEntry.row,\r\n flag: 'added',\r\n valid: this.validateRow(addedEntry.row),\r\n });\r\n }\r\n\r\n return computedRows;\r\n });\r\n\r\n public totalItems = computed(() => {\r\n if (this.table() instanceof AnonymousTable) {\r\n return (this.table() as AnonymousTable).total || 0;\r\n }\r\n return this.table()?.count || 0;\r\n });\r\n\r\n public currentItems = computed(() => {\r\n return this.table()?.count || 0;\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.table() && !this.crossRequestTrackingPersistence()) {\r\n this.resetChanges();\r\n }\r\n });\r\n effect(() => {\r\n const mode = this.table()?.hasPrimaryKey ? 'primaryKey' : 'index';\r\n this.trackByMode.set(mode);\r\n });\r\n }\r\n\r\n public getColumnTooltip(column: IMinimumColumnMetadata): string {\r\n return column.tooltip;\r\n }\r\n\r\n public toggleSort(columnName: string): void {\r\n const currentSort = this.sort();\r\n let isAsc = true;\r\n if (currentSort?.column === columnName) isAsc = !currentSort.isAsc;\r\n\r\n this.sort.set({ column: columnName, isAsc: isAsc });\r\n }\r\n\r\n public onFilterBy(\r\n columnName: string,\r\n filter: { column: string; mode: DGFilterMode; value: string }\r\n ): void {\r\n const currentFilters = { ...this.filter() };\r\n\r\n if (filter.value) {\r\n currentFilters[columnName] = {\r\n column: filter.column,\r\n mode: filter.mode,\r\n value: filter.value,\r\n };\r\n } else {\r\n delete currentFilters[columnName];\r\n }\r\n this.filter.set(currentFilters);\r\n }\r\n\r\n public onGroupBy(group: IDGGroup): void {\r\n if (group.mode === null) this.groupBy.set(null);\r\n else {\r\n // group.included =\r\n // this.table()?.columnMetadatas.map((c) => c.columnName) || [];\r\n group.included = [group.column];\r\n this.groupBy.set(group as IDGGroup);\r\n }\r\n }\r\n\r\n public onGroupByIncludedChange = (columnName: string, included: boolean) => {\r\n this.groupBy.update((currentGroup) => {\r\n if (currentGroup === null) return currentGroup;\r\n if (included) {\r\n currentGroup?.included.push(columnName);\r\n } else {\r\n currentGroup!.included = currentGroup!.included.filter(\r\n (c) => c !== columnName\r\n );\r\n }\r\n return { ...currentGroup };\r\n });\r\n };\r\n\r\n // Event handlers for pagination\r\n public onPageChange(page: number): void {\r\n this.pageChange.emit(page);\r\n }\r\n\r\n public onPageSizeChange(pageSize: number): void {\r\n this.pageSizeChange.emit(pageSize);\r\n }\r\n\r\n public refresh(): void {\r\n this.onRefresh.emit();\r\n // this.sort.set(null);\r\n // this.filter.set({});\r\n }\r\n\r\n public getCellValue(row: any, columnName: string): any {\r\n return row && row[columnName] !== undefined ? row[columnName] : '';\r\n }\r\n\r\n // public onCellChange(\r\n // index: number,\r\n // row: any,\r\n // column: IMinimumColumnMetadata,\r\n // value: any\r\n // ) {\r\n // const initial = { ...row };\r\n // row[column.columnName] = value;\r\n // // If the row is created, we don't track it as modified\r\n // if (this.isRowAdded(row, index)) {\r\n // this.addedRows.update((rows) => {\r\n // rows.find((r) => r.index === index)!.row[column.columnName] = value;\r\n // return rows;\r\n // });\r\n // return;\r\n // }\r\n // // If the row was already changed, we update the current value\r\n // if (this.isRowChanged(row, index)) {\r\n // const changed = this.modifiedRows().find(\r\n // (modifiedRow) => modifiedRow.index === index\r\n // );\r\n // changed!.current = row;\r\n // } else {\r\n // this.modifiedRows.set([\r\n // ...this.modifiedRows(),\r\n // { index: index, original: initial, current: row },\r\n // ]);\r\n // }\r\n // //console.log('[DataGrid] onCellChange - modifiedRows:', this.modifiedRows());\r\n // this.modifiedCells.update((cells) => [\r\n // ...cells.filter(\r\n // (c) => !(c.rowIndex === index && c.columnName === column.columnName)\r\n // ),\r\n // {\r\n // rowIndex: index,\r\n // columnName: column.columnName,\r\n // originalValue: initial[column.columnName],\r\n // currentValue: row[column.columnName],\r\n // },\r\n // ]);\r\n // // We emit the cell change event\r\n // this.cellChange.emit({ index, row, column, value });\r\n // }\r\n\r\n public onCellChange = (\r\n index: number,\r\n row: IDGRow,\r\n column: IMinimumColumnMetadata,\r\n value: any\r\n ) => {\r\n const initial = { ...row.data };\r\n row.data[column.columnName] = value;\r\n\r\n // If the row is created, we don't track it as modified\r\n switch (row.flag) {\r\n case 'added':\r\n this.addedRows.update((rows) =>\r\n rows.map((r) => {\r\n if (\r\n this.table()?.getRowIdentifier(r.row) ===\r\n this.table()?.getRowIdentifier(row.data)\r\n ) {\r\n r.row[column.columnName] = value;\r\n }\r\n return r;\r\n })\r\n );\r\n // this.addedRows.update((rows) => {\r\n // rows.find(\r\n // (r) =>\r\n // this.table()?.getRowIdentifier(r.row) ===\r\n // this.table()?.getRowIdentifier(row.data)\r\n // )!.row[column.columnName] = value;\r\n // return [...rows];\r\n // });\r\n return;\r\n case 'modified':\r\n this.modifiedRows.update((rows) =>\r\n rows.map((r) => {\r\n if (r.index === index) {\r\n r.current = row.data;\r\n }\r\n return r;\r\n })\r\n );\r\n // this.modifiedRows.update((rows) => {\r\n // const changed = this.modifiedRows().find(\r\n // (modifiedRow) => modifiedRow.index === index\r\n // );\r\n // changed!.current = row.data;\r\n // return [...rows];\r\n // });\r\n break;\r\n case 'unchanged':\r\n this.modifiedRows.set([\r\n ...this.modifiedRows(),\r\n { index: index, original: initial, current: row.data },\r\n ]);\r\n break;\r\n }\r\n };\r\n\r\n public isRowAdded(row: any, index: number): boolean {\r\n return this.addedRows().some((addedRow) => addedRow.index === index);\r\n }\r\n\r\n public isRowChanged(row: any, index: number): boolean {\r\n return this.modifiedRows().some(\r\n (modifiedRow) => modifiedRow.index === index\r\n );\r\n }\r\n\r\n public isCellChanged(rowIndex: number, columnName: string): boolean {\r\n return this.modifiedCells().some(\r\n (cell) => cell.rowIndex === rowIndex && cell.columnName === columnName\r\n );\r\n }\r\n\r\n public isRowDeleted(row: any, index: number): boolean {\r\n return this.deletedRows().some((deletedRow) => deletedRow.index === index);\r\n }\r\n\r\n public addRow = () => {\r\n this.addedRows.set([\r\n ...this.addedRows(),\r\n { index: this.addedRows().length, row: {} },\r\n ]);\r\n this.onAddRow.emit();\r\n };\r\n\r\n public deleteRow(index: number, row: any): void {\r\n // If the row was modified, we need to get the original value and remove it from modifiedRows\r\n if (this.isRowChanged(row, index)) {\r\n const original =\r\n this.modifiedRows().find((modifiedRow) => modifiedRow.index === index)\r\n ?.original || row;\r\n this.deletedRows.set([...this.deletedRows(), { index, row: original }]);\r\n this.modifiedRows.set(\r\n this.modifiedRows().filter((modifiedRow) => modifiedRow.index !== index)\r\n );\r\n return;\r\n }\r\n\r\n // If the row was added, we just remove it from addedRows\r\n if (this.isRowAdded(row, index)) {\r\n this.addedRows.set(\r\n this.addedRows().filter((addedRow) => addedRow.index !== index)\r\n );\r\n }\r\n\r\n if (!this.isRowDeleted(row, index)) {\r\n this.deletedRows.set([...this.deletedRows(), { index, row }]);\r\n }\r\n\r\n this.onDeleteRow.emit({ index, row });\r\n }\r\n\r\n public navigateToForeignTable(column: IMinimumColumnMetadata): void {\r\n if (!this.allowNavigation()) return;\r\n if (column instanceof ColumnMetadata) {\r\n this.table()\r\n ?.getConstraintsByType('FOREIGN KEY')\r\n .forEach((constraint) => {\r\n const cstCol = constraint.columns.find(\r\n (c) => c.columnName === column.columnName\r\n );\r\n if (cstCol && cstCol instanceof TableConstraintColumn) {\r\n const reference = (cstCol as unknown as TableConstraintColumn)\r\n .reference;\r\n if (reference) {\r\n return this.onForeignTableNavigate.emit({\r\n targetTable: cstCol.reference!.otherKey.tableName,\r\n targetSchema: cstCol.reference!.otherKey.tableSchema,\r\n });\r\n }\r\n }\r\n });\r\n } else {\r\n this.onNavigate.emit({ targetColumnMetadata: column });\r\n }\r\n }\r\n\r\n public resetChanges(): void {\r\n this.modifiedRows.set([]);\r\n this.addedRows.set([]);\r\n this.deletedRows.set([]);\r\n }\r\n\r\n public getChangeSummary(): {\r\n modified: any[];\r\n added: any[];\r\n deleted: any[];\r\n hasChanges: boolean;\r\n } {\r\n const modified = this.modifiedRows();\r\n const added = this.addedRows();\r\n const deleted = this.deletedRows();\r\n\r\n return {\r\n modified,\r\n added,\r\n deleted,\r\n hasChanges: modified.length > 0 || added.length > 0 || deleted.length > 0,\r\n };\r\n }\r\n\r\n public getRowTrackBy = (row: any, index: number): number => {\r\n const table = this.table();\r\n // return table ? table.getRowIdentifier(row) : `row-${index}`;\r\n return table?.getRowNumber(row) ? table.getRowNumber(row) : index;\r\n };\r\n\r\n public hasInvalidRows = () => {\r\n const allRows = [\r\n ...this.addedRows().map((r) => r.row),\r\n ...this.modifiedRows().map((r) => r.current),\r\n ];\r\n return allRows.some((row) => !this.validateRow(row));\r\n };\r\n\r\n public validateRow = (row: any): boolean => {\r\n if (this.groupBy() !== null) return true;\r\n return this.formatterService.validateRow(row, this.columns());\r\n };\r\n\r\n public canEdit = (column: IMinimumColumnMetadata): boolean => {\r\n const formatter = this.formatterService.getFormatter(null, column);\r\n if (!formatter) return false && this.allowUpdate();\r\n return this.allowUpdate() && formatter.canEdit!(null, column);\r\n };\r\n\r\n public isPrimaryKeyColumn = (column: IMinimumColumnMetadata): boolean => {\r\n const table = this.table();\r\n if (!table) return false;\r\n return table\r\n .primaryKeyColumns()\r\n .some((pk) => pk.columnName === column.columnName);\r\n };\r\n\r\n public isUniqueKeyColumn = (column: IMinimumColumnMetadata): boolean => {\r\n const table = this.table();\r\n if (!table) return false;\r\n const uniqueConstraints = table.tableConstraints.filter(\r\n (tc) => tc.constraintType === 'UNIQUE'\r\n );\r\n for (const uc of uniqueConstraints) {\r\n if (uc.columns.some((col) => col.columnName === column.columnName)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n public isEditSafe = (column: IMinimumColumnMetadata): boolean => {\r\n if (this.groupBy() !== null) return false;\r\n if (this.trackByMode() === 'index') return true;\r\n if (this.crossRequestTrackingPersistence() === false) return true;\r\n\r\n return (\r\n this.trackByMode() === 'primaryKey' &&\r\n this.table()\r\n ?.primaryKeyColumns()\r\n .some((pk) => pk.columnName === column.columnName) == false\r\n );\r\n };\r\n\r\n public isForeignKeyColumn = (column: IMinimumColumnMetadata): boolean => {\r\n const table = this.table();\r\n if (!table) return false;\r\n const fkConstraints = table.tableConstraints.filter(\r\n (tc) => tc.constraintType === 'FOREIGN KEY'\r\n );\r\n for (const fk of fkConstraints) {\r\n if (fk.columns.some((col) => col.columnName === column.columnName)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n // public getContextMenuItems = (\r\n // row: any,\r\n // rowIndex: number\r\n // ): IContextMenuItem[] => {\r\n // const items: IContextMenuItem[] = [];\r\n // if (this.isRowDeleted(row, rowIndex)) {\r\n // items.push({\r\n // label: 'Annuler la suppression',\r\n // action: () =>\r\n // this.deletedRows.set(\r\n // this.deletedRows().filter((r) => r.index !== rowIndex)\r\n // ),\r\n // icon: 'undo',\r\n // color: 'primary',\r\n // });\r\n // } else if (this.isRowAdded(row, rowIndex)) {\r\n // items.push({\r\n // label: 'Supprimer la ligne ajoutée',\r\n // action: () => {\r\n // this.addedRows.update((rows) =>\r\n // rows\r\n // .filter((r) => {\r\n // return r.index !== rowIndex;\r\n // })\r\n // .map((r, idx) => {\r\n // return {\r\n // index: this.table()!.rows.length + idx,\r\n // row: r.row,\r\n // };\r\n // })\r\n // );\r\n // this.table()?.removeRow(row);\r\n // },\r\n // icon: 'delete',\r\n // color: 'error',\r\n // });\r\n // } else if (this.allowDelete()) {\r\n // items.push({\r\n // label: 'Supprimer la ligne',\r\n // action: () => this.deleteRow(rowIndex, row),\r\n // icon: 'delete',\r\n // color: 'error',\r\n // });\r\n // }\r\n\r\n // return items;\r\n // };\r\n\r\n public getContextMenuItems = (\r\n row: IDGRow,\r\n rowIndex: number\r\n ): IContextMenuItem[] => {\r\n const items: IContextMenuItem[] = [];\r\n switch (row.flag) {\r\n case 'deleted':\r\n items.push({\r\n label: 'Annuler la suppression',\r\n action: () =>\r\n this.deletedRows.set(\r\n this.deletedRows().filter((r) => r.index !== rowIndex)\r\n ),\r\n icon: 'undo',\r\n color: 'primary',\r\n });\r\n break;\r\n case 'added':\r\n items.push({\r\n label: 'Supprimer la ligne ajoutée',\r\n action: () => {\r\n this.addedRows.update((rows) =>\r\n rows.filter(\r\n (r) => this.table()!.getRowIdentifier(r.row) !== row.id\r\n )\r\n );\r\n this.table()?.removeRow(row);\r\n },\r\n icon: 'delete',\r\n color: 'error',\r\n });\r\n break;\r\n default:\r\n if (this.allowInsert()) {\r\n items.push({\r\n label: 'Dupliquer la ligne',\r\n action: () => {\r\n const newRow = { ...row.data };\r\n this.addedRows.set([\r\n ...this.addedRows(),\r\n { index: this.addedRows().length, row: newRow },\r\n ]);\r\n },\r\n icon: 'file_copy',\r\n color: 'primary',\r\n });\r\n }\r\n items.push({\r\n label: 'Supprimer la ligne',\r\n action: () => this.deleteRow(rowIndex, row.data),\r\n icon: 'delete',\r\n color: 'error',\r\n });\r\n break;\r\n }\r\n return items;\r\n };\r\n\r\n public toggleCrossRequestTrackingPersistence(): void {\r\n this.crossRequestTrackingPersistence.set(\r\n !this.crossRequestTrackingPersistence()\r\n );\r\n }\r\n\r\n public onViewportScroll(event: Event): void {\r\n const viewport = event.target as HTMLElement;\r\n const headerScrollElement = this.headerScroll()?.nativeElement;\r\n if (headerScrollElement) {\r\n headerScrollElement.scrollLeft = viewport.scrollLeft;\r\n }\r\n }\r\n}\r\n","@if (table()) {\r\n<div class=\"data-grid-container\">\r\n <div class=\"data-grid-header\">\r\n <h3>{{ title() ? title() : `${table()?.schema ? `${table()?.schema}.` : ''}${table()?.name}` }}</h3>\r\n @if(table()?.description){\r\n <span class=\"table-description\">{{ table()?.description }}</span>\r\n }\r\n <div class=\"data-grid-info\">\r\n <!-- {{allowSync()}} {{hasChanges()}} {{!hasInvalidRows()}} -->\r\n @if (allowSync() && allowManageTrackingPersistence()) {\r\n <div>\r\n <span class=\" material-symbols icon-button tracking-persistence-button\"\r\n [attr.data-enabled]=\"crossRequestTrackingPersistence()\"\r\n (click)=\"toggleCrossRequestTrackingPersistence()\"\r\n title=\"Persistance du suivi des modifications entre les requêtes\">track_changes</span>\r\n </div>\r\n }\r\n @if(allowSync() && hasChanges() && !hasInvalidRows()){\r\n <span class=\" material-symbols icon-button sync-button\" (click)=\"onSync.emit()\"\r\n title=\"Synchroniser les changements\">file_upload</span>\r\n }\r\n @if(allowRefresh()){\r\n <span class=\" material-symbols material-symbols icon-button\" (click)=\"refresh()\"\r\n title=\"Recharger les données\">refresh</span>\r\n }\r\n @if(allowInsert()){\r\n <span class=\" material-symbols icon-button\" (click)=\"onAddRow.emit()\" title=\"Ajouter une ligne\">add</span>\r\n }\r\n @if(allowExport()){\r\n <span class=\" material-symbols icon-button\" (click)=\"onExport.emit()\"\r\n title=\"Télécharger les données\">file_download</span>\r\n }\r\n <span>Total: {{ totalItems() }} enregistrements</span>\r\n </div>\r\n </div>\r\n <div class=\"grid-container data-grid-wrapper\"\r\n [style.grid-template-columns]=\"'repeat(' + columns().length + ', minmax(15rem, auto))'\"\r\n [style.max-height]=\"maxHeight()\" [style.overflow-y]=\"enableVirtualization() ? 'clip': 'auto'\">\r\n <div class=\"grid-header\" [style.column-span]=\"'all'\">\r\n @for (column of columns(); track column.columnName) {\r\n @let isForeignKey = isForeignKeyColumn(column);\r\n @let isPrimaryKey = isPrimaryKeyColumn(column);\r\n @let isComputedColumn = column.isGenerated;\r\n @let isUniqueColumn = isUniqueKeyColumn(column);\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column, isForeignKey: isForeignKey, isPrimaryKey: isPrimaryKey, isComputedColumn: isComputedColumn, isUniqueColumn: isUniqueColumn}\"></ng-container>\r\n }\r\n </div>\r\n <div class=\"grid-body\">\r\n @if(enableVirtualization()){\r\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"41\" [style.height]=\"maxHeight()\" class=\"viewport\">\r\n <ng-container *cdkVirtualFor=\"let row of rows() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id:\r\n this.id(),\r\n totalItems: currentItems()}; let $index = index\" [ngTemplateOutlet]=\"rowTemplate\"\r\n [ngTemplateOutlet]=\"rowTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: row, index: getRowTrackBy(row.data, $index)}\">\r\n </ng-container>\r\n\r\n </cdk-virtual-scroll-viewport>\r\n } @else {\r\n @for (row of rows() | paginate: {itemsPerPage: pageSize(), currentPage: currentPage(), id:\r\n this.id(),\r\n totalItems: currentItems()};\r\n track getRowTrackBy(row.data, $index)) {\r\n <ng-container [ngTemplateOutlet]=\"rowTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: row, index: getRowTrackBy(row.data, $index)}\">\r\n </ng-container>\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #headerTemplate let-column=\"column\" let-isForeignKey=\"isForeignKey\" let-isPrimaryKey=\"isPrimaryKey\"\r\n let-isComputedColumn=\"isComputedColumn\" let-isUniqueColumn=\"isUniqueColumn\">\r\n <div class=\"grid-header-cell\" [title]=\"getColumnTooltip(column)\">\r\n @if(allowNavigation() && isForeignKey){\r\n <span ControlClick class=\"sort-receiver\" (click)=\"toggleSort(column.columnName)\"\r\n (ctrlClick)=\"navigateToForeignTable(column)\">{{ column.columnName\r\n }}</span>\r\n } @else {\r\n <span class=\"sort-receiver\" (click)=\"toggleSort(column.columnName)\">{{ column.columnName\r\n }}</span>\r\n }\r\n <small class=\"sort-receiver\" (click)=\"toggleSort(column.columnName)\" class=\"column-type\">{{\r\n column.dataType }}\r\n {{column.length ?\r\n `(${column.length}${column.scale ? `, ${column.scale}` : ''})`: ''}}</small>\r\n <div class=\"column-icons\">\r\n @if(isUniqueColumn){\r\n <span class=\" material-symbols unique-key-icon\"\r\n title=\"Colonne avec contrainte d'unicité\">looks_one</span>\r\n }\r\n @if(isPrimaryKey || isForeignKey){\r\n <span class=\" material-symbols\" [class.primary-key-icon]=\"isPrimaryKey\" [title]=\"'Colonne de la clef ' + (isPrimaryKey ?\r\n 'primaire' : 'étrangère')\" [class.key-icon]=\"isForeignKey\">key</span>\r\n }\r\n @if(!canEdit(column) || !isEditSafe(column)){\r\n <span class=\"lock-icon material-symbols\" title=\"Colonne verrouillée\">lock</span>\r\n }\r\n </div>\r\n @if (sort()?.column === column.columnName) {\r\n @if (sort()?.isAsc) {\r\n <span class=\"sort-icon material-symbols\">arrow_upward</span>\r\n } @else {\r\n <span class=\"sort-icon material-symbols\">arrow_downward</span>\r\n }\r\n }\r\n <div class=\"filter-group-controls\">\r\n <chr-column-filter [by]=\"column.columnName\" [mode]=\"filter()[column.columnName]?.mode || 0\"\r\n [value]=\"filter()[column.columnName]?.value || ''\" [columnMetadata]=\"column\"\r\n [suggestions]=\"columnSuggestions()[column.columnName]\"\r\n (filterChange)=\"onFilterBy(column.columnName, $event)\" title=\"Double-clic pour définir un filtre\"\r\n class=\"filter\"></chr-column-filter>\r\n @if(isComputedColumn){\r\n <span class=\"filter-icon material-symbols\" title=\"Colonne calculée\">functions</span>\r\n }\r\n @else if(groupBy() == null || groupBy()?.column === column.columnName){\r\n <chr-column-group [by]=\"column.columnName\" [mode]=\"groupBy()?.mode ?? null\"\r\n (groupChange)=\"onGroupBy($event)\" class=\"group\"\r\n title=\"Double-clic pour définir un groupement\"></chr-column-group>\r\n }@else {\r\n <div class=\"group-by-include\" title=\"Inclure cette colonne dans le résultat groupé\">\r\n <span class=\" material-symbols filter-icon disabled\">stack</span>\r\n <span class=\"toggle faded\">Inclure</span>\r\n <input #checkbox [checked]=\"groupByMap()[column.columnName]\"\r\n (change)=\"onGroupByIncludedChange(column.columnName, checkbox.checked)\"\r\n [name]=\"column.columnName+'-include'\" type=\"checkbox\" />\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #rowTemplate let-row let-index=\"index\">\r\n <div #rowElement class=\"grid-row\"\r\n [style.grid-template-columns]=\"'repeat(' + columns().length + ', minmax(15rem, auto))'\"\r\n [attr.data-is-added]=\"row.flag === 'added'\" [scrollIntoView]=\"!row.valid\" [attr.data-is-valid]=\"row.valid\"\r\n (click)=\"rowClick.emit({ rowIndex: index, row: row.data, event: $event })\"\r\n [contextMenu]=\"getContextMenuItems(row, index)\" [attr.data-has-changed]=\"row.flag === 'modified'\"\r\n [attr.data-is-deleted]=\"row.flag === 'deleted'\">\r\n @for (column of columns(); track column.columnName) {\r\n <div class=\"grid-cell\">\r\n <chr-editable-cell class=\"cell\" [value]=\"row.data[column.columnName]\"\r\n (valueChange)=\"onCellChange(index, row, column, $event)\"\r\n [allowUpdate]=\"allowUpdate() && (isEditSafe(column)||row.flag === 'added') && row.flag !== 'deleted' && canEdit(column)\"\r\n [columnMetadata]=\"column\"></chr-editable-cell>\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n\r\n <chr-paginator [id]=\"id()\" [page]=\"currentPage()\" [pageSize]=\"pageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></chr-paginator>\r\n</div>\r\n} @else {\r\n<div class=\"empty-state\">\r\n <p>Aucune donnée</p>\r\n</div>\r\n}","import { Component, input, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'chr-message-banner',\r\n imports: [],\r\n templateUrl: './message-banner.html',\r\n styleUrl: './message-banner.scss',\r\n})\r\nexport class MessageBanner {\r\n public isVisible = signal(true);\r\n public closable = input<boolean>(false);\r\n\r\n public title = input.required<string>();\r\n public icon = input<string | null>(null);\r\n public message = input<string>();\r\n public type = input<'none' | 'info' | 'warning' | 'error'>('none');\r\n\r\n public close = () => {\r\n this.isVisible.set(false);\r\n };\r\n}\r\n","@if(isVisible()){\r\n<div class=\"message-banner\" [attr.data-type]=\"type()\">\r\n <div class=\"banner-header\">\r\n <span class=\"mat-icon material-symbols banner-icon\" [attr.data-icon]=\"icon()\">{{ icon() }}</span>\r\n <strong class=\"banner-title\">{{title()}}</strong>\r\n </div>\r\n <div class=\"message-content\">\r\n {{message()}}\r\n <ng-content></ng-content>\r\n </div>\r\n @if(closable()){\r\n <span class=\"mat-icon material-symbols close-icon\" (click)=\"close()\">close</span>\r\n }\r\n</div>\r\n}","import { Directive, HostListener, ElementRef, inject } 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 private el = inject(ElementRef);\r\n\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 {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n inject,\r\n Injectable,\r\n Injector,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { ChrModalComponent } from '../chr-modal/chr-modal.component';\r\nimport { CHR_MODAL_DATA, CHR_MODAL_REF } from './modal-tokens';\r\nimport { Color } from './colors';\r\nimport { IAction } from '../chr-table/chr-table.component';\r\n\r\nexport interface ModalOptions {\r\n /**\r\n * Indicates if the modal is open or closed.\r\n * @default true\r\n */\r\n closeOnBackdropClick?: boolean;\r\n /**\r\n * Indicates if the modal should close when the user presses the Escape key.\r\n * @default true\r\n */\r\n closeOnEscape?: boolean;\r\n /**\r\n * Shorthand for closeOnBackdropClick and closeOnEscape\r\n */\r\n disableClose?: boolean;\r\n /**\r\n * Width in vw\r\n */\r\n width?: number;\r\n /**\r\n * Height in vh\r\n */\r\n height?: number;\r\n /**\r\n * Extra configuration to be passed to the modal component instance\r\n */\r\n extraConfig?:\r\n | {\r\n /**\r\n * Title of the modal\r\n */\r\n title: string;\r\n /**\r\n * Text/HTML content of the modal\r\n */\r\n text: string;\r\n /**\r\n * Label for the close button\r\n * @default 'Fermer'\r\n */\r\n close: string;\r\n /**\r\n * Array of actions to be shown as buttons in the modal\r\n */\r\n actions: IAction[];\r\n }\r\n | any;\r\n /**\r\n * Default background of the modal container. Defaults to 'none' as to allow customisation through css with the class '.modal-content'.\r\n * @default 'none'\r\n */\r\n background?: Color;\r\n\r\n /**\r\n * Data to be passed to the modal component\r\n */\r\n data?: any;\r\n}\r\n\r\nexport interface ModalData {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IModalRef<ChrModalComponent, T extends object = any> {\r\n //componentInstance: T;\r\n open: () => void;\r\n configure(options: ModalOptions): void;\r\n close: (result?: any) => void;\r\n afterClosed: () => Observable<any>;\r\n}\r\n\r\n/**\r\n * Classe ModalRef générique qui gère la logique de création, configuration et fermeture des modales.\r\n * Cette classe extrait la logique du ModalService pour permettre une meilleure séparation des responsabilités.\r\n *\r\n * Usage dans le ModalService refactorisé:\r\n * ```typescript\r\n * open<T>(component: Type<T>, options: ModalOptions = {}): ModalRef<T> {\r\n * const modalRef = new ModalRef(component, options);\r\n * const modalComponentRef = modalRef.create();\r\n * this.activeModals.add(modalRef);\r\n * return modalRef;\r\n * }\r\n * ```\r\n */\r\nexport class ModalRef<T extends object>\r\n implements IModalRef<ChrModalComponent<T>>\r\n{\r\n private _afterClosed = new Subject<any>();\r\n private modalComponentRef: ComponentRef<ChrModalComponent<T>> | null = null;\r\n private contentComponentRef: ComponentRef<T> | null = null;\r\n private appRef: ApplicationRef;\r\n private environmentInjector: EnvironmentInjector;\r\n\r\n constructor(\r\n private _component: Type<T>,\r\n private options: ModalOptions,\r\n appRef: ApplicationRef,\r\n injector: EnvironmentInjector\r\n ) {\r\n this.appRef = appRef;\r\n this.environmentInjector = injector;\r\n }\r\n\r\n /**\r\n * Returns the component instance of the modal content.\r\n * Throws an error if the content component is not initialized.\r\n */\r\n get componentInstance(): T {\r\n if (!this.contentComponentRef) {\r\n throw new Error('Modal content component not initialized');\r\n }\r\n return this.contentComponentRef.instance;\r\n }\r\n\r\n /**\r\n * Returns the modal instance.\r\n * Throws an error if the modal component is not initialized.\r\n */\r\n get instance(): ChrModalComponent<T> {\r\n if (!this.modalComponentRef) {\r\n throw new Error('Modal content component not initialized');\r\n }\r\n return this.modalComponentRef.instance;\r\n }\r\n\r\n setWidth(width: number): void {\r\n this.set('width', width);\r\n }\r\n\r\n setHeight(height: number): void {\r\n this.set('height', height);\r\n }\r\n\r\n protected set(property: string, value: any) {\r\n this.options = { ...this.options, [property]: value };\r\n this.modalComponentRef?.setInput(property, value);\r\n }\r\n\r\n /**\r\n * Creates and initializes the modal component and its content\r\n */\r\n create(): ComponentRef<ChrModalComponent<T>> {\r\n // Create the modal container component\r\n this.modalComponentRef = createComponent(ChrModalComponent, {\r\n environmentInjector: this.environmentInjector,\r\n });\r\n\r\n // Set up close handler\r\n this.modalComponentRef.instance.close.subscribe(() => {\r\n this.close();\r\n });\r\n\r\n // Create injector for modal content with data and ref\r\n const injector = Injector.create({\r\n providers: [\r\n { provide: CHR_MODAL_DATA, useValue: this.options?.data || {} },\r\n { provide: CHR_MODAL_REF, useValue: this },\r\n ],\r\n parent: this.environmentInjector,\r\n });\r\n\r\n // Create the modal content component\r\n this.contentComponentRef = createComponent(this._component, {\r\n environmentInjector: this.environmentInjector,\r\n elementInjector: injector,\r\n });\r\n\r\n this._configureModal();\r\n this._attachToDom();\r\n\r\n return this.modalComponentRef;\r\n }\r\n\r\n /**\r\n * Opens the modal by setting isOpen to true\r\n */\r\n open(): void {\r\n this.modalComponentRef?.setInput('isOpen', true);\r\n }\r\n\r\n /**\r\n * Closes the modal and emits the result\r\n */\r\n close(result?: any): void {\r\n if (this.modalComponentRef) {\r\n this.modalComponentRef.setInput('isOpen', false);\r\n\r\n // Remove from DOM and destroy\r\n this.modalComponentRef.location.nativeElement.remove();\r\n this.appRef.detachView(this.modalComponentRef.hostView);\r\n this.modalComponentRef.destroy();\r\n this.modalComponentRef = null;\r\n }\r\n\r\n if (this.contentComponentRef) {\r\n this.appRef.detachView(this.contentComponentRef.hostView);\r\n this.contentComponentRef.destroy();\r\n this.contentComponentRef = null;\r\n }\r\n\r\n this._afterClosed.next(result);\r\n this._afterClosed.complete();\r\n }\r\n\r\n /**\r\n * Returns an observable that emits when the modal is closed\r\n */\r\n afterClosed(): Observable<any> {\r\n return this._afterClosed.asObservable();\r\n }\r\n\r\n /**\r\n * Configures the modal with the provided options.\r\n * This methods allow dynamic configuration of the modal after its creation.\r\n * It will however not properly update the data as it is injected at creation time.\r\n * @param options\r\n */\r\n configure(options: ModalOptions): void {\r\n this.options = { ...this.options, ...options };\r\n this._configureModal();\r\n }\r\n\r\n private _configureModal = () => {\r\n if (!this.modalComponentRef)\r\n throw new Error('Modal component reference is not initialized');\r\n this._setInputs(this.options);\r\n if (this.options.extraConfig) {\r\n this._setInputs(this.options.extraConfig);\r\n }\r\n };\r\n\r\n private _setInputs = (options: any) => {\r\n if (!this.modalComponentRef)\r\n throw new Error('Modal component reference is not initialized');\r\n for (const key in options) {\r\n if (Object.hasOwn(this.modalComponentRef.instance, key)) {\r\n this.modalComponentRef.setInput(\r\n key,\r\n this.options[key as keyof ModalOptions]\r\n );\r\n }\r\n }\r\n };\r\n\r\n private _attachToDom = () => {\r\n if (!this.modalComponentRef || !this.contentComponentRef) {\r\n throw new Error('Modal component or content component not initialized');\r\n }\r\n // Attach modal to DOM\r\n this.appRef.attachView(this.modalComponentRef.hostView);\r\n document.body.appendChild(this.modalComponentRef.location.nativeElement);\r\n this.modalComponentRef.changeDetectorRef.detectChanges();\r\n\r\n this.appRef.attachView(this.contentComponentRef.hostView);\r\n\r\n // Insert content into modal\r\n const container =\r\n this.modalComponentRef.location.nativeElement.querySelector(\r\n '.modal-content'\r\n );\r\n if (container) {\r\n container.appendChild(this.contentComponentRef.location.nativeElement);\r\n }\r\n };\r\n}\r\n","import {\r\n Injectable,\r\n Type,\r\n ApplicationRef,\r\n EnvironmentInjector,\r\n inject,\r\n} from '@angular/core';\r\nimport { IModalRef, ModalOptions, ModalRef } from '../models/modal';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ModalService {\r\n private activeModals: Set<ModalRef<any>> = new Set();\r\n private appRef = inject(ApplicationRef);\r\n private environmentInjector = inject(EnvironmentInjector);\r\n\r\n open<T extends object>(\r\n component: Type<T>,\r\n options: ModalOptions = {}\r\n ): IModalRef<T> {\r\n const modalRef: ModalRef<T> = new ModalRef<T>(\r\n component,\r\n options,\r\n this.appRef,\r\n this.environmentInjector\r\n );\r\n modalRef.create();\r\n\r\n this.activeModals.add(modalRef);\r\n\r\n modalRef.open();\r\n return modalRef;\r\n }\r\n\r\n close(modalRefType: Type<any>): void {\r\n const modalRef = Array.from(this.activeModals).find(\r\n (ref) => ref instanceof modalRefType\r\n );\r\n\r\n if (modalRef) {\r\n modalRef.close();\r\n this.activeModals.delete(modalRef);\r\n }\r\n }\r\n\r\n closeAll(): void {\r\n this.activeModals.forEach((modalRef) => {\r\n modalRef.close();\r\n });\r\n }\r\n}\r\n","import { IExporter } from './exporter';\r\n\r\nexport type IExportCSV = '.csv' | 'text/csv' | 'csv';\r\n\r\nexport class CsvExporter implements IExporter {\r\n public export(data: any[], columns: string[]): string {\r\n const csvRows: string[] = [];\r\n\r\n csvRows.push(columns.join(','));\r\n\r\n data.forEach((row) => {\r\n const values = columns.map((col) => {\r\n const cell = row[col];\r\n return typeof cell === 'string' ? cell.replace(/;/g, ',') : cell;\r\n });\r\n csvRows.push(values.join(','));\r\n });\r\n\r\n const csvContent = csvRows.join('\\n');\r\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\r\n return URL.createObjectURL(blob);\r\n }\r\n\r\n public canExport(filetype: string): boolean {\r\n const supportedTypes: IExportCSV[] = ['.csv', 'text/csv', 'csv'];\r\n return supportedTypes.includes(filetype as IExportCSV);\r\n }\r\n}\r\n","import { IExporter } from './exporter';\r\n\r\nexport type IExportJSON = '.json' | 'application/json' | 'json';\r\n\r\nexport class JsonExporter implements IExporter {\r\n public export(data: any[], columns: string[]): string {\r\n const jsonData = data.map((row) => {\r\n const obj: any = {};\r\n columns.forEach((col) => {\r\n obj[col] = row[col];\r\n });\r\n return obj;\r\n });\r\n\r\n const blob = new Blob([JSON.stringify(jsonData, null, 2)], {\r\n type: 'application/json;charset=utf-8;',\r\n });\r\n return URL.createObjectURL(blob);\r\n }\r\n\r\n public canExport(filetype: string): boolean {\r\n const supportedTypes: IExportJSON[] = ['.json', 'application/json', 'json'];\r\n return supportedTypes.includes(filetype as IExportJSON);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IExporter } from '../models/exporters/exporter';\r\nimport { CsvExporter } from '../models/exporters/csvExporter';\r\nimport { JsonExporter } from '../models/exporters/jsonExporter';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DataExporterService {\r\n private exporter: IExporter[] = [new CsvExporter(), new JsonExporter()];\r\n\r\n constructor() {}\r\n\r\n public setExporters(exporters: IExporter[]) {\r\n this.exporter = exporters;\r\n }\r\n\r\n public registerExporter(exporter: IExporter) {\r\n this.exporter.push(exporter);\r\n }\r\n\r\n public export(\r\n data: any[],\r\n columns: string[],\r\n filetype: string,\r\n filename: string = 'export',\r\n autodownload: boolean = false\r\n ): string | null {\r\n const exporter = this.exporter.find((exp) => exp.canExport(filetype));\r\n if (exporter) {\r\n const url = exporter.export(data, columns);\r\n if (autodownload) {\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = `${filename}.${filetype.split('.').pop()}`;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n return url;\r\n }\r\n return null;\r\n }\r\n}\r\n","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","/*\r\n * Public API Surface of chr-components\r\n */\r\n\r\nimport e from 'express';\r\n\r\n//COMPONENTS\r\nexport * from './lib/chr-breadcrumb/chr-breadcrumb.component';\r\nexport * from './lib/chr-button/chr-button.component';\r\nexport * from './lib/chr-delete-modal/chr-delete-modal.component';\r\n\r\n//FORM\r\nexport * from './lib/chr-form/chr-form.component';\r\n//INPUTS\r\nexport * from './lib/chr-form/chr-base-input/chr-base-input.component';\r\nexport * from './lib/chr-form/chr-color-input/chr-color-input.component';\r\nexport * from './lib/chr-form/chr-date-input/chr-date-input.component';\r\nexport * from './lib/chr-form/chr-datetime-input/chr-datetime-input.component';\r\nexport * from './lib/chr-form/chr-file-input/chr-file-input.component';\r\nexport * from './lib/chr-form/chr-textarea-input/chr-textarea-input.component';\r\nexport * from './lib/chr-form/chr-toggle-input/chr-toggle-input.component';\r\nexport * from './lib/chr-search-select/chr-search-select.component';\r\nexport * from './lib/chr-tag-select/chr-tag-select.component';\r\nexport * from './lib/chr-table-new/chr-table-new.component';\r\nexport * from './lib/chr-form/chr-nice-file-input/chr-nice-file-input.component';\r\n\r\n//COMPONENTS\r\nexport * from './lib/chr-searchbar/chr-searchbar.component';\r\nexport * from './lib/chr-paginator/chr-paginator.component';\r\nexport * from './lib/chr-table/chr-table.component';\r\nexport * from './lib/chr-table-header-cell/chr-table-header-cell.component';\r\nexport * from './lib/chr-checkbox/chr-checkbox.component';\r\nexport * from './lib/chr-separator/chr-separator.component';\r\nexport * from './lib/chr-spinner/chr-spinner.component';\r\nexport * from './lib/chr-toast/chr-toast.component';\r\nexport * from './lib/chr-default-modal/chr-default-modal.component';\r\nexport * from './lib/chr-modal/chr-modal.component';\r\nexport * from './lib/chr-inline-svg/chr-inline-svg.component';\r\nexport * from './lib/chr-tab/chr-tab.component';\r\nexport * from './lib/chr-tab-group/chr-tab-group.component';\r\nexport * from './lib/chr-carousel/chr-carousel.component';\r\nexport * from './lib/chr-button-new/chr-button.component';\r\nexport * from './lib/chr-context-menu/chr-context-menu.component';\r\nexport * from './lib/chr-dropdown/chr-dropdown.component';\r\nexport * from './lib/chr-datagrid/data-grid/data-grid';\r\nexport * from './lib/chr-datagrid/filter/column-filter';\r\nexport * from './lib/chr-datagrid/editable-cell/editable-cell';\r\nexport * from './lib/chr-message-banner/message-banner';\r\n\r\n//DIRECTIVES\r\nexport * from './lib/directives/tab-input-only-handler.directive';\r\nexport * from './lib/directives/tab-to-enter-handler.directive';\r\nexport * from './lib/directives/autofocus.directive';\r\nexport * from './lib/directives/context-menu.directive';\r\nexport * from './lib/directives/control-click.directive';\r\nexport * from './lib/directives/cross-cell-navigation.directive';\r\nexport * from './lib/directives/scroll-into-view.directive';\r\nexport * from './lib/directives/outside-click-aware.directive';\r\n\r\n//ANIMATIONS\r\n// export * from './lib/animations/in-out.animation';\r\n// export * from './lib/animations/rotation.animation';\r\n\r\n//SERVICES\r\nexport * from './lib/services/modal.service';\r\nexport * from './lib/services/data-formatter.service';\r\nexport * from './lib/services/data-exporter.service';\r\n\r\n//MODELS & TOKENS\r\nexport * from './lib/models/modal-tokens';\r\nexport * from './lib/models/modal';\r\nexport * from './lib/services/data.service';\r\nexport * from './lib/services/live-update.service';\r\nexport * from './lib/services/loader.service';\r\nexport * from './lib/services/toast.service';\r\nexport * from './lib/services/cookie.service';\r\nexport * from './lib/services/files.service';\r\nexport * from './lib/models/context-menu';\r\nexport * from './lib/models/file';\r\nexport * from './lib/models/AnonymousTable.model';\r\nexport * from './lib/models/TableConstraint.model';\r\nexport * from './lib/models/TableConstraintColumn.model';\r\nexport * from './lib/models/TableConstraintReference.model';\r\nexport * from './lib/models/ColumnMetadata.model';\r\nexport * from './lib/models/FilterMode.enum';\r\nexport * from './lib/models/formatters/formatter.interface';\r\n\r\n//INTERFACES\r\nexport * from './lib/models/colors';\r\nexport * from './lib/models/controls';\r\nexport * from './lib/models/live-update-message';\r\n\r\n//VALIDATORS\r\nexport * from './lib/models/chr-validators/base-validator';\r\nexport * from './lib/models/chr-validators/decimal-validator';\r\nexport * from './lib/models/chr-validators/max-date-validator';\r\nexport * from './lib/models/chr-validators/max-file-size-validator';\r\nexport * from './lib/models/chr-validators/maxlength-validator';\r\nexport * from './lib/models/chr-validators/min-file-size-validator';\r\nexport * from './lib/models/chr-validators/minlength-validator';\r\nexport * from './lib/models/chr-validators/required-validator';\r\nexport * from './lib/models/chr-validators/type-validator';\r\n\r\n//MODELS\r\nexport * from './lib/models/live-update-message';\r\n\r\n//INTERCEPTORS\r\nexport * from './lib/config/interceptors/SpinnerInterceptor';\r\nexport * from './lib/config/interceptors/XsrfInterceptor';\r\n\r\n//PROVIDERS\r\nexport * from './lib/config/providers/xsrf-provider';\r\n\r\n//OTHERS\r\nexport * from 'ngx-pagination';\r\nexport * from 'chrv-pipes';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i4","finalize"],"mappings":"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"}
|