{"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-hover-title/chr-hover-title.component.ts","../../../projects/chrv-components/src/lib/chr-hover-title/chr-hover-title.component.html","../../../projects/chrv-components/src/lib/models/tokens/debounce-defaults-token.ts","../../../projects/chrv-components/src/lib/directives/chr-hover-title.directive.ts","../../../projects/chrv-components/src/lib/chr-button-legacy/chr-button.component.ts","../../../projects/chrv-components/src/lib/chr-button-legacy/chr-button.component.html","../../../projects/chrv-components/src/lib/models/tokens/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/models/toasts/toast-config.ts","../../../projects/chrv-components/src/lib/chr-toast-container/toast-container.ts","../../../projects/chrv-components/src/lib/chr-toast-container/toast-container.html","../../../projects/chrv-components/src/lib/chr-toast/toast.ts","../../../projects/chrv-components/src/lib/chr-toast/toast.html","../../../projects/chrv-components/src/lib/models/toasts/toast-ref.ts","../../../projects/chrv-components/src/lib/services/toast/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/models/tokens/http-context-tokens.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/services/toast.service.ts","../../../projects/chrv-components/src/lib/chr-toast-legacy/chr-toast.component.ts","../../../projects/chrv-components/src/lib/chr-toast-legacy/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-carousel/chr-carousel.component.ts","../../../projects/chrv-components/src/lib/chr-carousel/chr-carousel.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-button/button.component.ts","../../../projects/chrv-components/src/lib/chr-button/button.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/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/TableConstraintReference.model.ts","../../../projects/chrv-components/src/lib/models/TableConstraintColumn.model.ts","../../../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/models/modal.ts","../../../projects/chrv-components/src/lib/services/modal.service.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/directives/prevent-reload.directive.ts","../../../projects/chrv-components/src/lib/directives/debounce.directive.ts","../../../projects/chrv-components/src/lib/directives/chr-hover.directive.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/models/tokens/caching-defaults-token.ts","../../../projects/chrv-components/src/lib/services/cache/cache.service.ts","../../../projects/chrv-components/src/lib/services/progress/progress.service.ts","../../../projects/chrv-components/src/lib/services/cookie.service.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/AutoDataTable.model.ts","../../../projects/chrv-components/src/lib/models/AutoDataSource.model.ts","../../../projects/chrv-components/src/lib/config/interceptors/CachingInterceptor.ts","../../../projects/chrv-components/src/lib/config/interceptors/ProgressInterceptor.ts","../../../projects/chrv-components/src/lib/chr-deactivation-warning-modal/chr-deactivation-warning-modal.ts","../../../projects/chrv-components/src/lib/chr-deactivation-warning-modal/chr-deactivation-warning-modal.html","../../../projects/chrv-components/src/lib/guards/form-deactivation/deactivation.guard.ts","../../../projects/chrv-components/src/lib/plugins/debounce-event.ts","../../../projects/chrv-components/src/lib/config/providers/debounce-plugin-provider.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, computed, effect, input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: '[chr-hover-title]',\r\n  imports: [],\r\n  templateUrl: './chr-hover-title.component.html',\r\n  styleUrl: './chr-hover-title.component.scss',\r\n})\r\nexport class ChrHoverTitleComponent {\r\n  public title = input<string>('Default');\r\n  public position = input<'above' | 'below' | 'left' | 'right'>('above');\r\n  //public color = input<string | null>(null);\r\n  public originElement = input<HTMLElement | null>(null);\r\n\r\n  public color = computed(() => {\r\n    if (this.originElement()) {\r\n      return getComputedStyle(this.originElement()!).color;\r\n    }\r\n    return 'inherit';\r\n  });\r\n\r\n  public backgroundColor = computed(() => {\r\n    if (this.originElement()) {\r\n      return getComputedStyle(this.originElement()!).backgroundColor;\r\n    }\r\n    return 'inherit';\r\n  });\r\n\r\n  constructor() {}\r\n}\r\n","<div class=\"title-wrapper\" [style.--parent-text]=\"color()\" [style.--parent-bg]=\"backgroundColor()\"\r\n    [attr.data-position]=\"position()\" [attr.data-color]=\"color()\">\r\n    {{ title() }}\r\n</div>","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface IDebounceDefaults {\r\n  baseInputs: number;\r\n  searchableInputs: number;\r\n  hoverTitle: number;\r\n}\r\nexport class DebounceDefaults implements IDebounceDefaults {\r\n  baseInputs: number = 200;\r\n  searchableInputs: number = 400;\r\n  hoverTitle: number = 500;\r\n\r\n  constructor(init?: Partial<IDebounceDefaults>) {\r\n    Object.assign(this, init);\r\n  }\r\n}\r\nexport const CHR_DEBOUNCE_DEFAULTS = new InjectionToken<DebounceDefaults>(\r\n  'CHR_DEBOUNCE_DEFAULTS',\r\n  {\r\n    factory: () => new DebounceDefaults(),\r\n  },\r\n);\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport {\r\n  ComponentRef,\r\n  Directive,\r\n  ElementRef,\r\n  inject,\r\n  input,\r\n  model,\r\n  OnDestroy,\r\n  OnInit,\r\n  Renderer2,\r\n} from '@angular/core';\r\nimport { ChrHoverTitleComponent } from '../chr-hover-title/chr-hover-title.component';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\nimport { CHR_DEBOUNCE_DEFAULTS } from '../models/tokens/debounce-defaults-token';\r\n\r\n@Directive({\r\n  selector: '[chrTitle], [title]',\r\n  host: {\r\n    '(mouseenter)': 'onMouseEnter($event)',\r\n    '(mousemove)': 'onMouseMove($event)',\r\n    '(mouseleave)': 'onMouseLeave()',\r\n  },\r\n})\r\nexport class ChrHoverTitleDirective implements OnInit, OnDestroy {\r\n  public defaults = inject(CHR_DEBOUNCE_DEFAULTS);\r\n  public chrTitle = model<string | undefined | null>('');\r\n  public chrTitlePosition = input<'above' | 'below' | 'left' | 'right'>(\r\n    'above',\r\n  );\r\n  public chrTitleSnap = input<boolean>(true);\r\n  public chrTitleDebounce = input<number>(this.defaults.hoverTitle);\r\n  private elementRef = inject(ElementRef);\r\n  private element = this.elementRef.nativeElement as HTMLElement;\r\n  private overlay = inject(Overlay);\r\n  private overlayRef: OverlayRef | null = null;\r\n  private componentRef: ComponentRef<ChrHoverTitleComponent> | null = null;\r\n  private renderer = inject(Renderer2);\r\n  private hoverSubject = new Subject<MouseEvent | null>();\r\n  private destroy$ = new Subject<void>();\r\n  private subscription?: Subscription;\r\n  private mutationObserver?: MutationObserver;\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {\r\n    this.initMutationObserver();\r\n    //this.createOverlay();\r\n    //this.setupDebounce();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.mutationObserver?.disconnect();\r\n    this.hoverSubject.complete();\r\n    this.overlayRef?.detach();\r\n    this.overlayRef?.dispose();\r\n    this.overlayRef = null;\r\n  }\r\n\r\n  private initMutationObserver() {\r\n    this.mutationObserver = new MutationObserver(() => {\r\n      if (!document.body.contains(this.element)) {\r\n        this.hide();\r\n      }\r\n    });\r\n    this.mutationObserver.observe(document.body, {\r\n      childList: true,\r\n      subtree: true,\r\n    });\r\n  }\r\n\r\n  private createOverlay = () => {\r\n    if (this.overlayRef !== null) return this.overlayRef;\r\n    const strategy = this.snappedStrategy();\r\n\r\n    const overlayRef = this.overlay.create({\r\n      hasBackdrop: false,\r\n      disposeOnNavigation: true,\r\n      positionStrategy: strategy,\r\n    });\r\n    this.overlayRef = overlayRef;\r\n    return overlayRef;\r\n  };\r\n\r\n  private createComponentPortal = () => {\r\n    const portal = new ComponentPortal(ChrHoverTitleComponent);\r\n    return portal;\r\n  };\r\n\r\n  private setupDebounce = (event: MouseEvent | null = null) => {\r\n    this.subscription?.unsubscribe();\r\n    this.subscription = this.hoverSubject\r\n      .pipe(debounceTime(this.chrTitleDebounce()), takeUntil(this.destroy$))\r\n      .subscribe((event) => {\r\n        this.show(event);\r\n      });\r\n    if (event) this.hoverSubject.next(event);\r\n  };\r\n\r\n  protected onMouseEnter = (event: MouseEvent) => {\r\n    this.createOverlay();\r\n    this.overrideNativeTitle();\r\n    this.setupDebounce(event);\r\n  };\r\n\r\n  protected onMouseMove = (event: MouseEvent) => {\r\n    this.hoverSubject.next(event);\r\n    if (this.componentRef && !this.chrTitleSnap()) {\r\n      this.positionOverlay(event);\r\n    }\r\n  };\r\n\r\n  protected onMouseLeave = () => {\r\n    this.subscription?.unsubscribe();\r\n    this.destroy$.next();\r\n    this.hide();\r\n  };\r\n\r\n  protected show = (event: MouseEvent | null) => {\r\n    if (!this.chrTitle()?.trim()) return;\r\n    if (this.componentRef) {\r\n      this.positionOverlay(event);\r\n      return;\r\n    }\r\n\r\n    const titlePortal = this.createComponentPortal();\r\n    this.componentRef = this.overlayRef?.attach(titlePortal)!;\r\n    this.componentRef!.setInput('title', this.chrTitle());\r\n    this.componentRef!.setInput('position', this.chrTitlePosition());\r\n    this.componentRef!.setInput('originElement', this.element);\r\n\r\n    this.positionOverlay(null);\r\n  };\r\n\r\n  protected positionOverlay = (mousemove: MouseEvent | null) => {\r\n    if (!this.overlayRef) return;\r\n    if (!this.chrTitleSnap() && (mousemove === null || mousemove === undefined))\r\n      return;\r\n\r\n    const positionStrategy = this.chrTitleSnap()\r\n      ? this.snappedStrategy()\r\n      : this.mousePositionStrategy(mousemove!);\r\n\r\n    this.overlayRef.updatePositionStrategy(positionStrategy);\r\n  };\r\n\r\n  protected hide = () => {\r\n    this.overlayRef?.detach();\r\n    this.componentRef = null;\r\n  };\r\n\r\n  private mousePositionStrategy = (mousemove: MouseEvent) => {\r\n    const positionOffset = { left: mousemove.clientX, top: mousemove.clientY };\r\n    const componentSize =\r\n      this.componentRef?.location.nativeElement.getBoundingClientRect();\r\n\r\n    switch (this.chrTitlePosition()) {\r\n      case 'above':\r\n        positionOffset.top -= (componentSize?.height || 0) + 20;\r\n        positionOffset.left -= (componentSize?.width || 0) / 2;\r\n        break;\r\n      case 'below':\r\n        positionOffset.top += 20;\r\n        positionOffset.left -= (componentSize?.width || 0) / 2;\r\n        break;\r\n      case 'left':\r\n        positionOffset.left -= (componentSize?.width || 0) + 20;\r\n        positionOffset.top -= (componentSize?.height || 0) / 2;\r\n        break;\r\n      case 'right':\r\n        positionOffset.left += 20;\r\n        positionOffset.top -= (componentSize?.height || 0) / 2;\r\n        break;\r\n    }\r\n    const positionStrategy = this.overlay\r\n      .position()\r\n      .global()\r\n      .left(`${positionOffset.left}px`)\r\n      .top(`${positionOffset.top}px`);\r\n    return positionStrategy;\r\n  };\r\n\r\n  private snappedStrategy = () => {\r\n    const positionStrategy = this.overlay\r\n      .position()\r\n      .flexibleConnectedTo(this.element);\r\n\r\n    switch (this.chrTitlePosition()) {\r\n      case 'above':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'center',\r\n            originY: 'top',\r\n            overlayX: 'center',\r\n            overlayY: 'bottom',\r\n          },\r\n          {\r\n            originX: 'center',\r\n            originY: 'bottom',\r\n            overlayX: 'center',\r\n            overlayY: 'top',\r\n          },\r\n        ]);\r\n        break;\r\n      case 'below':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'center',\r\n            originY: 'bottom',\r\n            overlayX: 'center',\r\n            overlayY: 'top',\r\n          },\r\n          {\r\n            originX: 'center',\r\n            originY: 'top',\r\n            overlayX: 'center',\r\n            overlayY: 'bottom',\r\n          },\r\n        ]);\r\n        break;\r\n      case 'left':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'start',\r\n            originY: 'center',\r\n            overlayX: 'end',\r\n            overlayY: 'center',\r\n          },\r\n          {\r\n            originX: 'end',\r\n            originY: 'center',\r\n            overlayX: 'start',\r\n            overlayY: 'center',\r\n          },\r\n        ]);\r\n        break;\r\n      case 'right':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'end',\r\n            originY: 'center',\r\n            overlayX: 'start',\r\n            overlayY: 'center',\r\n          },\r\n          {\r\n            originX: 'start',\r\n            originY: 'center',\r\n            overlayX: 'end',\r\n            overlayY: 'center',\r\n          },\r\n        ]);\r\n        break;\r\n    }\r\n    return positionStrategy;\r\n  };\r\n\r\n  private overrideNativeTitle = () => {\r\n    const originalTitle = this.element.getAttribute('title');\r\n    if (!originalTitle) return;\r\n    this.chrTitle.set(originalTitle);\r\n    //this.renderer.removeAttribute(this.elementRef.nativeElement, 'title');\r\n    this.element.removeAttribute('title');\r\n  };\r\n}\r\n","import { Component, input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\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\nimport { ChrHoverTitleDirective } from '../directives/chr-hover-title.directive';\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: [\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    CommonModule,\r\n    ChrHoverTitleDirective,\r\n  ],\r\n})\r\nexport class ChrButtonLegacyComponent {\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<'above' | 'below' | 'left' | 'right'>();\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()\"\r\n  [attr.target]=\"target() && target()\" [chrTitle]=\"tooltip()||''\" [chrTitlePosition]=\"tooltipPosition()||'above'\">\r\n  @if (display()) {\r\n  <span [ngClass]=\"getTextColor(color())\" 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 { Component, InjectionToken, Type } from '@angular/core';\r\nimport { ModalRef } from '../modal';\r\nimport { ICanBeDeactivated } from '../CanBeDeactivated';\r\n\r\nexport const CHR_MODAL_DATA = new InjectionToken<any>('CHR_MODAL_DATA');\r\n\r\nexport const CHR_MODAL_REF = new InjectionToken<ModalRef<any> | null>(\r\n  'CHR_MODAL_REF'\r\n);\r\n\r\nexport const CHR_DEACTIVATION_MODAL = new InjectionToken<Type<any> | null>(\r\n  'CHR_DEACTIVATION_MODAL'\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 { ChrHoverTitleDirective } from '../directives/chr-hover-title.directive';\r\nimport { ChrButtonLegacyComponent } from '../chr-button-legacy/chr-button.component';\r\nimport { CHR_MODAL_REF } from '../models/tokens/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: [ChrButtonLegacyComponent, ChrHoverTitleDirective],\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(false);\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            [chrTitle]=\"'Attention: cette action est irréversible !'\" chrTitlePosition=\"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 { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\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    AutofocusDirective,\r\n    NgxMaskDirective,\r\n    ChrHoverTitleDirective,\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   * The step attribute of the input element. Mostly used for number and time input types.\r\n   */\r\n  readonly step = input<number | null>(null);\r\n\r\n  /**\r\n   * The min attribute of the input element. Mostly used for number and time input types.\r\n   */\r\n  readonly min = input<number | null>(null);\r\n\r\n  /**\r\n   * The max attribute of the input element. Mostly used for number and time input types.\r\n   */\r\n  readonly max = input<number | 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\" [chrTitle]=\"tooltip() || ''\" chrTitlePosition=\"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\" [chrTitle]=\"tooltip() || ''\" chrTitlePosition=\"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()\"\r\n    [type]=\"type() == 'time-seconds' ? 'time' : type()\" [id]=\"id() ?? name()\" [name]=\"name() ?? id() ?? ''\"\r\n    [disabled]=\"disabled()\" [attr.data-disabled]=\"disabled()\" (input)=\"onHtmlInput($event)\"\r\n    [autocomplete]=\"type() == 'password' ? 'current-password': autoComplete()\" [min]=\"min()\" [max]=\"max()\"\r\n    [step]=\"type()=='time-seconds' ? '1' : step()\" placeholder=\" \" [attr.data-touched]=\"isTouched()\"\r\n    [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 focus:outline-none focus:ring-0  peer/inputs\" />\r\n  @if (label() !== null && label()?.trim() != '') {\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    [chrTitle]=\"iconTooltip() || ''\" chrTitlePosition=\"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\n\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\nimport { ChrHoverTitleDirective } from '../directives/chr-hover-title.directive';\r\nimport { IStrictPosition } from '../models/Position.model';\r\n\r\n@Component({\r\n  selector: 'chr-data-list',\r\n  imports: [\r\n    CdkOverlayOrigin,\r\n    CdkConnectedOverlay,\r\n    CdkScrollable,\r\n    ScrollingModule,\r\n    ChrHoverTitleDirective,\r\n  ],\r\n  templateUrl: './chr-data-list.html',\r\n  styleUrls: ['./chr-data-list.scss', '../../../../../tailwindbuild.css'],\r\n})\r\nexport class DataListComponent implements OnInit, AfterViewInit, 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 blurOnSelect = input<boolean>(false);\r\n\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 \"targetElement\" or \"for\" 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<IStrictPosition>({\r\n    top: 0,\r\n    left: 0,\r\n    width: 0,\r\n    height: 0,\r\n    zIndex: '10',\r\n  });\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 =\r\n      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  ngOnInit(): void {\r\n    const target = this.targetInput();\r\n    this.removeEventListeners();\r\n    if (target) {\r\n      this.setupEventListeners(target);\r\n    }\r\n    this.positionDropdown();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.targetInput()) {\r\n      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    if (this.blurOnSelect()) {\r\n      this.targetElement()?.blur();\r\n    }\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    if (!this.targetInput()?.getBoundingClientRect) return;\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        target.select();\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        target.select();\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    [cdkConnectedOverlayDisposeOnNavigation]=\"true\" [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\" [style.width.px]=\"position().width\"\r\n                class=\"viewport\">\r\n                <div *cdkVirtualFor=\"let option of filteredSuggestions(); let i = index\" #optionElement\r\n                    [style.width.px]=\"position().width\" class=\"datalist-option\"\r\n                    [class.focused]=\"focusedIndex() === option.index\" [title]=\"option.display\" [chrTitleSnap]=\"true\"\r\n                    [chrTitleDebounce]=\"400\" (click)=\" selectOption(option.index)\"\r\n                    (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  inject,\r\n  input,\r\n  signal,\r\n  effect,\r\n} from '@angular/core';\r\nimport {\r\n  ControlValueAccessor,\r\n  FormsModule,\r\n  NgControl,\r\n  ReactiveFormsModule,\r\n} from '@angular/forms';\r\nimport { Observable, BehaviorSubject, Subject } from 'rxjs';\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 { DataListComponent } from '../chr-data-list/chr-data-list';\r\nimport { ChrHoverTitleDirective } from '../directives/chr-hover-title.directive';\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: '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    AsyncPipe,\r\n    MatIconModule,\r\n    MatError,\r\n    CommonModule,\r\n    MatError,\r\n    AutofocusDirective,\r\n    DataListComponent,\r\n    ChrHoverTitleDirective,\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 [chrAutofocus]=\"autofocus() || false\" chrTitlePosition=\"above\" #input type=\"text\"\r\n      [title]=\"tooltip() ?? 'Entrez du texte pour rechercher un élément...'\" [chrTitleSnap]=\"true\" [chrTitleSnap]=\"true\"\r\n      [name]=\"name() ?? id() ?? ''\" [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() || ' ' }}\" [ngModel]=\"displayValue()\" [disabled]=\"disabled()\"\r\n      (keyup.enter)=\"addFromText($event)\" (ngModelChange)=\"inputChange($event)\" (input)=\"onHtmlInput($event)\"\r\n      (blur)=\"onTouch()\" (blur)=\"disableShowPanel()\" [attr.data-touched]=\"isTouched()\"\r\n      [attr.data-state]=\"visualState()\" />\r\n\r\n    @if (label() !== null && label()?.trim() != '') {\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 chrTitlePosition=\"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 [chrTitle]=\"filters()?.[filterIndex()]!.tooltip || ''\" chrTitlePosition=\"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  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  input,\r\n  OnInit,\r\n  output,\r\n  signal,\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\nimport { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n  selector: 'chr-context-menu',\r\n  imports: [CommonModule],\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 {\r\n  public items = input.required<IContextMenuItem[]>();\r\n  public click = output<any>();\r\n\r\n  constructor() {}\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  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","<div #origin class=\"context-menu-wrapper\">\r\n    <div class=\"context-menu\">\r\n        <ul class=\"context-menu-list\">\r\n            @for (item of items(); track $index) {\r\n            <li class=\"context-menu-item\"\r\n                (click)=\"$event.preventDefault();$event.stopImmediatePropagation();$event.stopPropagation();trigger(item)\"\r\n                [style]=\"{\r\n                        'background-color': getVariableColor(item.color || 'background'), \r\n                        '--ctm-text-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 mat-icon small\">{{ 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  afterNextRender,\r\n  ApplicationRef,\r\n  ComponentRef,\r\n  createComponent,\r\n  Directive,\r\n  ElementRef,\r\n  EnvironmentInjector,\r\n  Host,\r\n  HostListener,\r\n  inject,\r\n  Injector,\r\n  input,\r\n  OnDestroy,\r\n  output,\r\n  Renderer2,\r\n  signal,\r\n} from '@angular/core';\r\nimport { ChrContextMenuComponent } from '../chr-context-menu/chr-context-menu.component';\r\nimport { IContextMenuItem } from '../models/context-menu';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { OnInit } from '@angular/core';\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  // host: {\r\n  //   '[attr.data-contextual-menu-open]': 'isOpen() ? true : false',\r\n  // },\r\n})\r\nexport class ContextMenuDirective implements OnInit, OnDestroy {\r\n  private elementRef = inject(ElementRef<HTMLElement>);\r\n  private appRef = inject(ApplicationRef);\r\n  private overlay = inject(Overlay);\r\n  private overlayRef: OverlayRef | null = null;\r\n  private injector = inject(EnvironmentInjector);\r\n  private envInjector = inject(Injector);\r\n  public isOpen = signal<boolean>(false);\r\n  private oldStyle: string | null = null;\r\n  // private closedStyle: Partial<CSSStyleDeclaration> = {\r\n  //   transition: 'box-shadow 0.2s ease-in-out',\r\n  //   cursor: 'copy',\r\n  // };\r\n  private openStyle: Partial<CSSStyleDeclaration> = {\r\n    transition: 'box-shadow 0.2s ease-in-out',\r\n    boxShadow:\r\n      'inset 0 0 0.25rem color-mix(in srgb, var(--text-color) 40%, transparent 60%)',\r\n    borderRadius: '0.25rem',\r\n  };\r\n  /**\r\n   * List of context IContextMenuItem to display\r\n   */\r\n  public contextMenu = input<IContextMenuItem[]>([]);\r\n  public openOnClick = input<boolean>(false);\r\n  private menuComponentRef: ComponentRef<ChrContextMenuComponent> | null = null;\r\n  @HostListener('click', ['$event']) onClick(event: MouseEvent): void {\r\n    if (!this.openOnClick()) return;\r\n\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n\r\n    this.closeMenu();\r\n    this.createMenuComponent(event);\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    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.isOpen.set(true);\r\n    this.overlayRef = this.overlay.create();\r\n    this.overlayRef.updatePositionStrategy(this.mousePositionStrategy(event));\r\n\r\n    this.menuComponentRef = this.overlayRef.attach(\r\n      new ComponentPortal(ChrContextMenuComponent, null, this.injector),\r\n    );\r\n\r\n    this.menuComponentRef.setInput('items', this.contextMenu());\r\n    this.menuComponentRef.instance.click.subscribe(() => {\r\n      this.closeMenu();\r\n    });\r\n\r\n    this.setStyle(this.elementRef.nativeElement, this.oldStyle!);\r\n    this.setCustomStyle(this.elementRef.nativeElement, this.openStyle);\r\n\r\n    // Attendre proprement que le DOM soit mis à jour avant de recalculer la position\r\n    afterNextRender(\r\n      () => {\r\n        this.overlayRef?.updatePositionStrategy(\r\n          this.mousePositionStrategy(event, this.menuComponentRef),\r\n        );\r\n      },\r\n      { injector: this.envInjector },\r\n    );\r\n  }\r\n\r\n  private closeMenu = (): void => {\r\n    this.isOpen.set(false);\r\n    this.overlayRef?.detach();\r\n    this.overlayRef = null;\r\n    this.removeCustomStyle(this.elementRef.nativeElement, this.openStyle);\r\n    if (this.oldStyle)\r\n      this.setStyle(this.elementRef.nativeElement, this.oldStyle);\r\n  };\r\n\r\n  ngOnInit(): void {\r\n    this.oldStyle = this.getStyle(this.elementRef.nativeElement);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.closeMenu();\r\n  }\r\n\r\n  private mousePositionStrategy = (\r\n    mousemove: MouseEvent,\r\n    ref: ComponentRef<ChrContextMenuComponent> | null = null,\r\n  ) => {\r\n    const positionOffset = { left: mousemove.clientX, top: mousemove.clientY };\r\n    // Offsets to avoid the menu opening right on the mouse pointer\r\n    positionOffset.top += 10;\r\n    positionOffset.left += 10;\r\n\r\n    if (ref) {\r\n      const componentSize = ref.location.nativeElement.getBoundingClientRect();\r\n      const viewportWidth = window.innerWidth;\r\n      const viewportHeight = window.innerHeight;\r\n      // Adjust position if the menu would go out of viewport\r\n      if (positionOffset.left + (componentSize?.width || 0) > viewportWidth) {\r\n        const horizontalOffset =\r\n          positionOffset.left + (componentSize?.width || 0) - viewportWidth;\r\n        positionOffset.left = positionOffset.left - horizontalOffset - 10;\r\n      }\r\n\r\n      if (positionOffset.top + (componentSize?.height || 0) > viewportHeight) {\r\n        const verticalOffset =\r\n          positionOffset.top + (componentSize?.height || 0) - viewportHeight;\r\n        positionOffset.top = positionOffset.top - verticalOffset - 10;\r\n      }\r\n    }\r\n\r\n    const positionStrategy = this.overlay\r\n      .position()\r\n      .global()\r\n      .left(`${positionOffset.left}px`)\r\n      .top(`${positionOffset.top}px`);\r\n    return positionStrategy;\r\n  };\r\n\r\n  private getStyle = (element: HTMLElement): string | null => {\r\n    return element.getAttribute('style');\r\n  };\r\n\r\n  private setStyle = (element: HTMLElement, style: string): void => {\r\n    element.setAttribute('style', style);\r\n  };\r\n\r\n  private setCustomStyle = (\r\n    element: HTMLElement,\r\n    style: Partial<CSSStyleDeclaration>,\r\n  ): void => {\r\n    for (const key in style) {\r\n      if (style.hasOwnProperty(key) && style[key] !== undefined) {\r\n        element.style[key] = style[key];\r\n      }\r\n    }\r\n  };\r\n\r\n  private removeCustomStyle = (\r\n    element: HTMLElement,\r\n    style: Partial<CSSStyleDeclaration>,\r\n  ): void => {\r\n    for (const key in style) {\r\n      if (style.hasOwnProperty(key)) {\r\n        element.style[key] = '';\r\n      }\r\n    }\r\n  };\r\n}\r\n\r\n/*\r\n* {\r\n  [data-contextual-menu-open=\"false\"] {\r\n    transition: box-shadow 0.2s ease-in-out;\r\n    cursor: copy;\r\n    border-radius: 0.25rem;\r\n    &:hover:focus {\r\n      box-shadow: inset 0 0 0.25rem var(--text-color) !important;\r\n    }\r\n  }\r\n  [data-contextual-menu-open=\"true\"] {\r\n    border-radius: 0.25rem;\r\n    box-shadow: inset 0 0 0.25rem\r\n      color-mix(in srgb, var(--text-color) 40%, transparent 60%) !important;\r\n  }\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 { 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\nimport { ChrHoverTitleDirective } from '../directives/chr-hover-title.directive';\r\n\r\n@Component({\r\n  selector: '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    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    ChrHoverTitleDirective,\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 [matChipInputFor]=\"chipGrid\" chrTitlePosition=\"above\" #input type=\"text\" [name]=\"name() ?? id() ?? ''\"\r\n      [title]=\"tooltip() ?? 'Entrez du texte pour rechercher un élément...'\" [chrTitleSnap]=\"true\" [chrTitleSnap]=\"true\"\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 && label()?.trim() != '') {\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 chrTitlePosition=\"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 [chrTitle]=\"filters()?.[filterIndex()]!.tooltip || ''\" chrTitlePosition=\"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 { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\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    ChrHoverTitleDirective,\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\" [chrTitle]=\"tooltip()\" chrTitlePosition=\"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 && label()?.trim() != '') {\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    [chrTitle]=\"iconTooltip() || ''\" chrTitlePosition=\"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  LOCALE_ID,\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 { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\r\nimport {\r\n  CommonModule,\r\n  DATE_PIPE_DEFAULT_OPTIONS,\r\n  DatePipe,\r\n  formatDate,\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    ChrHoverTitleDirective,\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  private locale = inject(LOCALE_ID);\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    return formatDate(value, 'yyyy-MM-dd', this.locale);\r\n  };\r\n}\r\n","<div class=\"input-wrapper\">\r\n  <input #input class=\"relative\" [chrTitle]=\"tooltip() || ''\" chrTitlePosition=\"above\"\r\n    [ngClass]=\"(isTouched() && hasError()) ? 'error':''\" (blur)=\"onTouch()\" [value]=\"displayValue()\"\r\n    [chrAutofocus]=\"autofocus() || false\" (input)=\"onInputChange($any($event.target).value)\" type=\"date\"\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 && label()?.trim() != '') {\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    [chrTitle]=\"iconTooltip() || ''\" chrTitlePosition=\"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  LOCALE_ID,\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  formatDate,\r\n} from '@angular/common';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatError } from '@angular/material/form-field';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { filter } from 'rxjs';\r\nimport { InputType } from '../../models/controls';\r\nimport { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\r\n\r\n@Component({\r\n  selector: 'chr-datetime-input',\r\n  imports: [\r\n    CommonModule,\r\n    MatIcon,\r\n    MatError,\r\n    FormsModule,\r\n    ChrHoverTitleDirective,\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  private locale = inject(LOCALE_ID);\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    return formatDate(value, 'yyyy-MM-ddTHH:mm', this.locale);\r\n  };\r\n}\r\n","<div class=\"input-wrapper\">\r\n  <input #input class=\"relative\" [chrTitle]=\"tooltip() || ''\" chrTitlePosition=\"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 && label()?.trim() != '') {\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    [chrTitle]=\"iconTooltip() || ''\" chrTitlePosition=\"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 { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { InputType } from '../../models/controls';\r\nimport { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\r\n\r\n@Component({\r\n  selector: 'chr-toggle-input',\r\n  imports: [\r\n    FormsModule,\r\n    CommonModule,\r\n    MatError,\r\n    MatIcon,\r\n    ChrHoverTitleDirective,\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 && label()?.trim() != '') {\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    [chrTitle]=\"iconTooltip() || ''\" chrTitlePosition=\"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 { InjectionToken } from '@angular/core';\r\n\r\nexport interface IToastConfig {\r\n  verticalOffset?: string;\r\n  horizontalOffset?: string;\r\n  position: 'top' | 'bottom' | 'left' | 'right';\r\n  alignment: 'start' | 'center' | 'end';\r\n  direction: 'left' | 'right' | 'top' | 'bottom';\r\n}\r\n\r\nexport class ToastDefaults implements IToastConfig {\r\n  verticalOffset = '1rem';\r\n  horizontalOffset = '1rem';\r\n  position: 'top' | 'bottom' | 'left' | 'right' = 'bottom';\r\n  alignment: 'start' | 'center' | 'end' = 'end';\r\n  direction: 'left' | 'right' | 'top' | 'bottom' = 'bottom';\r\n\r\n  constructor(init?: Partial<IToastConfig>) {\r\n    Object.assign(this, init);\r\n  }\r\n}\r\n\r\nexport const DEFAULT_TOAST_CONFIG = new InjectionToken<ToastDefaults>(\r\n  'CHR_TOAST_DEFAULTS',\r\n  {\r\n    factory: () => new ToastDefaults(),\r\n  },\r\n);\r\n","import { Component, inject, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { DEFAULT_TOAST_CONFIG } from '../models/toasts/toast-config';\r\nimport { IToast } from '../models/toasts/toast';\r\n\r\n@Component({\r\n  selector: 'chr-toast-container',\r\n  imports: [],\r\n  templateUrl: './toast-container.html',\r\n  styleUrl: './toast-container.scss',\r\n})\r\nexport class ToastContainer {\r\n  protected config = inject(DEFAULT_TOAST_CONFIG);\r\n  @ViewChild('contentTemplate', { read: ViewContainerRef, static: true })\r\n  private contentTemplateRef!: ViewContainerRef;\r\n  // public toasts = model<IToast[]>([]);\r\n\r\n  get direction(): string {\r\n    const position = this.config.position;\r\n    const direction = this.config.direction;\r\n\r\n    if (position === 'top' && direction === 'left') {\r\n      return 'row-reverse';\r\n    }\r\n    if (position === 'top' && direction === 'bottom') {\r\n      return 'column';\r\n    }\r\n    if (position === 'bottom' && direction === 'bottom') {\r\n      return 'column';\r\n    }\r\n    if (position === 'bottom' && direction === 'top') {\r\n      return 'column-reverse';\r\n    }\r\n    return 'column';\r\n  }\r\n\r\n  constructor() {}\r\n\r\n  public add(component: any, config: IToast | null = null) {\r\n    const ref = this.contentTemplateRef.createComponent<any>(component);\r\n    for (const key in config) {\r\n      if (config.hasOwnProperty(key) && ref.instance.hasOwnProperty(key)) {\r\n        const value = (config as any)[key];\r\n        if (value !== undefined) ref.setInput(key, value);\r\n      }\r\n    }\r\n\r\n    if (ref.instance.closed) {\r\n      ref.instance.closed.subscribe(() => {\r\n        ref.destroy();\r\n      });\r\n    }\r\n    return ref;\r\n  }\r\n}\r\n","<div class=\"toast-container\" [style.flexDirection]=\"direction\">\r\n    <!-- @for (toast of toasts(); track $index) {\r\n    <app-toast [title]=\"toast.title || null\" [message]=\"toast.message\" [type]=\"toast.type\"\r\n        [duration]=\"toast.duration\"></app-toast>\r\n    } -->\r\n    <ng-container #contentTemplate></ng-container>\r\n</div>","import {\r\n  Component,\r\n  input,\r\n  Output,\r\n  EventEmitter,\r\n  OnInit,\r\n  OnDestroy,\r\n  InputSignal,\r\n} from '@angular/core';\r\nimport { Subject, takeUntil, timer } from 'rxjs';\r\nimport { IBaseAction, IClosureData } from '../models/toasts/toast';\r\n\r\nexport interface IToastComponent {\r\n  type?: InputSignal<'success' | 'error' | 'info' | 'warning'>;\r\n  title?: InputSignal<string | null>;\r\n  message: InputSignal<string>;\r\n  code?: InputSignal<string>;\r\n  duration?: InputSignal<number>; // Durée en millisecondes\r\n  actions?: InputSignal<IBaseAction[]>;\r\n  closed: EventEmitter<IClosureData>;\r\n}\r\n\r\n@Component({\r\n  selector: 'chr-toast',\r\n  imports: [],\r\n  templateUrl: './toast.html',\r\n  styleUrl: './toast.scss',\r\n})\r\nexport class ToastComponent implements IToastComponent, OnInit, OnDestroy {\r\n  public type = input<'success' | 'error' | 'info' | 'warning'>('info');\r\n  public title = input<string | null>(null);\r\n  public message = input<string>('');\r\n  public code = input<string>('');\r\n  public duration = input<number>(10 * 1000); // Durée en millisecondes\r\n  public actions = input<IBaseAction[]>([]);\r\n\r\n  @Output() closed = new EventEmitter<IClosureData>();\r\n  private destroy$ = new Subject<void>();\r\n\r\n  ngOnInit() {\r\n    timer(this.duration())\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe(() => this.close('timeout'));\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n  }\r\n\r\n  close(\r\n    origin: 'timeout' | 'manual' | 'programmatic' | 'action' = 'manual',\r\n    data?: any,\r\n  ) {\r\n    this.closed.emit({ origin, data });\r\n    this.destroy$.next(); // Stoppe le timer si fermeture manuelle\r\n  }\r\n}\r\n","<div [attr.data-type]=\"type()\" [style.--toast-duration]=\"duration()+'ms'\" class=\"toast-wrapper\">\r\n    <span class=\"toast-close-button material-symbols\" (click)=\"close()\">close</span>\r\n    <span class=\"toast-dismiss-progress-ring\">\r\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\r\n            <circle class=\"dismiss-ring-circle\" cx=\"8\" cy=\"8\" r=\"7\" />\r\n        </svg>\r\n    </span>\r\n    @switch (type()) {\r\n    @case ('info') {\r\n    <span class=\"toast-type-icon material-symbols\">info</span>\r\n    }\r\n    @case ('success') {\r\n    <span class=\"toast-type-icon material-symbols\">check_circle</span>\r\n    }\r\n    @case ('error') {\r\n    <span class=\"toast-type-icon material-symbols\">error</span>\r\n    }\r\n    @case ('warning') {\r\n    <span class=\"toast-type-icon material-symbols\">warning</span>\r\n    }\r\n    @default {\r\n    <span class=\"toast-type-icon material-symbols\">notification</span>\r\n    }\r\n    }\r\n    <div class=\"toast-content-wrapper\">\r\n        @if(title()){\r\n        <span class=\"toast-title\">{{ title() }}</span>\r\n        }\r\n        <span class=\"toast-message\">{{ message() }}</span>\r\n        <span class=\"toast-code\">{{code()}}</span>\r\n        <div class=\"toast-actions\">\r\n            @for(action of actions(); track $index) {\r\n            <div class=\"toast-action-button\" (click)=\"this.close('action', action.callback())\">\r\n                <span>{{action.display}}</span>\r\n                @if(action.icon){\r\n                <span class=\"material-symbols toast-action-icon\">{{action.icon}}</span>\r\n                }\r\n            </div>\r\n            }\r\n        </div>\r\n    </div>\r\n</div>","import { ComponentRef } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { ICloseable, IClosureData } from './toast';\r\n\r\nexport class ToastRef<T = ICloseable> {\r\n  private closed$ = new Subject<IClosureData>();\r\n\r\n  constructor(private componentRef: ComponentRef<T>) {\r\n    (componentRef.instance as ICloseable).closed.subscribe((data) => {\r\n      this.close(data);\r\n    });\r\n  }\r\n\r\n  close(result: IClosureData) {\r\n    this.closed$.next(result);\r\n    this.closed$.complete();\r\n    this.componentRef.destroy();\r\n  }\r\n\r\n  afterClosed(): Observable<IClosureData> {\r\n    return this.closed$.asObservable();\r\n  }\r\n}\r\n","import { ComponentRef, inject, Injectable, Injector } from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { ToastContainer } from '../../chr-toast-container/toast-container';\r\nimport { DEFAULT_TOAST_CONFIG } from '../../models/toasts/toast-config';\r\nimport { ToastComponent } from '../../chr-toast/toast';\r\nimport { ToastRef } from '../../models/toasts/toast-ref';\r\nimport { IToast } from '../../models/toasts/toast';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ToastService {\r\n  private overlayRef: OverlayRef;\r\n  private containerRef: ComponentRef<ToastContainer>;\r\n  private toastConfig = inject(DEFAULT_TOAST_CONFIG);\r\n\r\n  constructor(\r\n    private overlay: Overlay,\r\n    private injector: Injector,\r\n  ) {\r\n    const positionBuilder = overlay.position().global();\r\n    positionBuilder[this.toastConfig.position](\r\n      this.toastConfig.verticalOffset!,\r\n    );\r\n\r\n    if (this.toastConfig.alignment !== 'center')\r\n      positionBuilder[this.toastConfig.alignment](\r\n        this.toastConfig.horizontalOffset!,\r\n      );\r\n    else {\r\n      if (\r\n        this.toastConfig.position === 'top' ||\r\n        this.toastConfig.position === 'bottom'\r\n      )\r\n        positionBuilder.centerHorizontally();\r\n      else positionBuilder.centerVertically();\r\n    }\r\n    this.overlayRef = this.overlay.create({\r\n      positionStrategy: positionBuilder,\r\n    });\r\n\r\n    const containerPortal = new ComponentPortal(\r\n      ToastContainer,\r\n      null,\r\n      this.injector,\r\n    );\r\n    this.containerRef = this.overlayRef.attach(containerPortal);\r\n  }\r\n\r\n  open<T>(\r\n    config: IToast | null = null,\r\n    component: T | null = null,\r\n  ): ToastRef<T> {\r\n    const ref = this.containerRef.instance.add(\r\n      component ?? ToastComponent,\r\n      config,\r\n    );\r\n    // On suppose que le composant a un output \"closed\" de type EventEmitter\r\n    return new ToastRef<T>(ref);\r\n  }\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 { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\r\nimport { catchError, forkJoin, Observable, of, skipWhile, take } from 'rxjs';\r\nimport { ChrFile, IFile } from '../../models/file';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { InputType } from '../../models/controls';\r\nimport { ToastService } from '../../services/toast/toast-service';\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    ChrHoverTitleDirective,\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.open({\r\n            type: 'warning',\r\n            message: `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 && label()?.trim() != '') {\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      [chrTitle]=\"iconTooltip() || ''\" chrTitlePosition=\"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 { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\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    ChrHoverTitleDirective,\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 [chrTitle]=\"tooltip() || ''\" chrTitlePosition=\"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 && label()?.trim() != '') {\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    [chrTitle]=\"iconTooltip() || ''\" chrTitlePosition=\"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 { 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\nimport { ChrHoverTitleDirective } from '../directives/chr-hover-title.directive';\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    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    <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\"></chr-search-select>\r\n    }\r\n    @if (control.type=='tagSelect') {\r\n    <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\"></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' || control.type == 'email'\r\n      || control.type == 'tel' || control.type == 'url' || control.type == 'time' || control.type == 'time-seconds') {\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 { ChrButtonLegacyComponent } from '../chr-button-legacy/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    ChrButtonLegacyComponent,\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 { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { ChrFileInputComponent } from '../chr-file-input/chr-file-input.component';\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 { ChrButtonLegacyComponent } from '../chr-button-legacy/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    ChrButtonLegacyComponent,\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 { HttpContextToken } from '@angular/common/http';\r\n\r\nexport const SHOW_SPINNER = new HttpContextToken<boolean>(() => true);\r\n","import { Injectable, inject } from '@angular/core';\r\nimport {\r\n  HttpErrorResponse,\r\n  HttpEvent,\r\n  HttpHandler,\r\n  HttpInterceptor,\r\n  HttpInterceptorFn,\r\n  HttpRequest,\r\n  HttpResponse,\r\n} 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\nimport { SHOW_SPINNER } from '../../models/tokens/http-context-tokens';\r\n\r\nexport const SpinnerInterceptor: HttpInterceptorFn = (req, next) => {\r\n  const loader: LoaderService = inject(LoaderService);\r\n  const showSpinner = req.context.get(SHOW_SPINNER);\r\n\r\n  if (req.headers.get('skip') == 'true' || !showSpinner) {\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 { 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  type: 'error' | 'success' | 'warning';\r\n  message: string;\r\n  duration?: number;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LegacyToastService {\r\n  private toastQueue = new Subject<Toast>();\r\n  private currentToastSubject = new BehaviorSubject<Toast | null>(null);\r\n  public currentToast$ = this.currentToastSubject.asObservable();\r\n  private toastCloseSubject = new Subject<void>();\r\n  private default_duration = 5000;\r\n\r\n  constructor() {\r\n    //We are leveraging the power of RXJS to handle the delay between the\r\n    this.toastQueue\r\n      .pipe(\r\n        concatMap((toast: Toast) => {\r\n          //We reset the click subject to ensure rxjs doesn't beleive it's been clicked\r\n          this.toastCloseSubject = new Subject<void>();\r\n          // We send the next toast\r\n          this.currentToastSubject.next(toast);\r\n          return timer(toast.duration || this.default_duration).pipe(\r\n            //If the user click the next button, we stop the current emission and go to the next one\r\n            takeUntil(this.toastCloseSubject),\r\n            //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            //Otherwise this null value allows us to notify the subscriber that there is no toast waiting.\r\n            finalize(() => {\r\n              this.currentToastSubject.next(null);\r\n            }),\r\n            //Small delay between toasts\r\n            switchMap(() => timer(500)),\r\n          );\r\n        }),\r\n      )\r\n      .subscribe();\r\n  }\r\n\r\n  public current = (): Observable<Toast | null> => {\r\n    return this.currentToastSubject;\r\n  };\r\n\r\n  public next = () => {\r\n    this.toastCloseSubject.next();\r\n  };\r\n\r\n  public setSuccess(message?: string, time?: number) {\r\n    this.set('success', message || '', time);\r\n  }\r\n\r\n  public setError(message: string, time?: number) {\r\n    this.set('error', message, time);\r\n  }\r\n\r\n  public setWarning(message: string, time?: number) {\r\n    this.set('warning', message, time);\r\n  }\r\n\r\n  private set = async (\r\n    type: 'warning' | 'error' | 'success',\r\n    message: string,\r\n    duration?: number,\r\n  ) => {\r\n    this.toastQueue.next({\r\n      type: type,\r\n      message: message,\r\n      duration: duration || this.default_duration,\r\n    });\r\n  };\r\n}\r\n","import { Component, inject, input } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Color, getTextColor } from '../models/colors';\r\nimport { LegacyToastService } from '../services/toast.service';\r\n\r\n@Component({\r\n  selector: 'app-chr-toast, chr-toast-legacy',\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(LegacyToastService);\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 { ChrHoverTitleDirective } from '../directives/chr-hover-title.directive';\r\nimport { ChrButtonLegacyComponent } from '../chr-button-legacy/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\nimport { CHR_MODAL_DATA, CHR_MODAL_REF } from '../models/tokens/modal-tokens';\r\nimport { Color } from '../models/colors';\r\n\r\nexport interface IStaticValueAction extends Partial<IAction> {\r\n  display: string;\r\n  color: Color;\r\n  value?: any;\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: [ChrButtonLegacyComponent],\r\n})\r\nexport class ChrDefaultModalComponent {\r\n  private dialogRef =\r\n    inject<MatDialogRef<ChrDefaultModalComponent>>(CHR_MODAL_REF);\r\n  private config = inject<ModalOptions>(CHR_MODAL_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    'Vous avez des modifications non enregistrées. Voulez-vous vraiment quitter ?',\r\n  );\r\n  readonly actions = model<IStaticValueAction[]>([\r\n    {\r\n      display: 'Annuler',\r\n      color: 'error',\r\n      value: false,\r\n    },\r\n    {\r\n      display: 'Confirmer',\r\n      color: 'primary',\r\n      value: true,\r\n    },\r\n  ]);\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 = (action: IStaticValueAction) => {\r\n    const value = action.callback ? (action as any).callback() : action.value;\r\n    this.dialogRef.close(value === undefined ? null : value);\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 mt-4\">\r\n        @if (actions()) {\r\n        @for (action of actions(); track action) {\r\n        <app-chr-button class=\"w-36\" type=\"fixed\" [disabled]=\"\r\n                      action.disabledCallback\r\n                        ? action.disabledCallback(null)\r\n                        : action.disabled || false\r\n                    \" [display]=\"action.display\" [icon]=\"action.icon\" [click]=\"closeModal.bind(null, action)\"\r\n            [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\n\r\nimport { Color } from '../models/colors';\r\n\r\n@Component({\r\n  selector: 'chr-modal',\r\n  standalone: true,\r\n  imports: [],\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: Event): 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 { 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],\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 { 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 {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  inject,\n  input,\n  model,\n  OnInit,\n  output,\n} from '@angular/core';\nimport { MaybeAsync } from '@angular/router';\nimport { from, Observable } from 'rxjs';\n\nexport type ButtonColors =\n  | 'primary'\n  | 'secondary'\n  | 'tertiary'\n  | 'error'\n  | 'warning'\n  | 'success'\n  | 'none';\n\n@Component({\n  selector: 'chr-button',\n  imports: [],\n  templateUrl: './button.component.html',\n  styleUrl: './button.component.css',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChrButtonComponent implements OnInit {\n  private elementRef = inject(ElementRef);\n  /**\n   * Button's text\n   */\n  display = input<string>();\n\n  variant = input<'filled' | 'outlined' | 'ghost'>('filled');\n\n  padding = input<'large' | 'medium' | 'none'>('large');\n\n  /**\n   * Name of the Google Material Symbols icon\n   */\n  icon = input<string>();\n  iconSize = input<'small' | 'medium' | 'large' | 'inherit'>('medium');\n\n  /**\n   * Button's color. It will affect both the text and the icon\n   */\n  color = input<ButtonColors>('none');\n\n  /**\n   * HTML Button type\n   */\n  type = input<'submit' | 'button'>('button');\n\n  /**\n   * Whether or not the button is disabled\n   */\n  disabled = input<boolean>(false);\n\n  /**\n   * Fixed width in REM\n   */\n  fixed = input<number | null>(null);\n\n  /**\n   * The input may be either a function that returns a value or an observable, or a value that will be wrapped in a click event.\n   * If the value is an observable the button will enter a loading state during the observable's execution. Otherwise, the function will be executed and it's return value directly returned.\n   * If the value is not a function, the value will be directly returned.\n   * @param The function the value to be handled on click\n   */\n  action = input<any | (() => MaybeAsync<any>)>();\n\n  /**\n   * The event that will be thrown when the button is clicked\n   */\n  onAction = output<{ event: MouseEvent; value: any }>();\n\n  loading = model<true | false>(false);\n\n  ngOnInit(): void {}\n\n  public handleClick = (\n    event: MouseEvent,\n  ): { event: MouseEvent; value: any } => {\n    const click = this.action();\n    const result = typeof click === 'function' ? click() : click;\n\n    const obs: Observable<any> | any =\n      result instanceof Promise || (result && typeof result.then === 'function')\n        ? from(result)\n        : result instanceof Observable\n          ? result\n          : result;\n\n    if (obs instanceof Observable) this.loading.set(true);\n    if (result)\n      (result as Observable<any>).subscribe({\n        complete: () => this.loading.set(false),\n        error: () => this.loading.set(false),\n      });\n\n    return { event: event, value: obs };\n  };\n}\n","<button [type]=\"type()\" class=\"btn btn-{{color()}}\" [class.btn-outlined]=\"variant() == 'outlined'\"\n    [class.btn-ghost]=\"variant() == 'ghost'\" [class.btn-med-pdg]=\"padding() == 'medium'\"\n    [class.btn-min-pdg]=\"padding() == 'none'\" [disabled]=\"disabled()\" [style.width.rem]=\"fixed()\"\n    (click)=\"handleClick($event)\">\n    @if(loading()){\n    <div class=\"spinner-wrapper\" [attr.data-size]=\"iconSize()\">\n        <div class=\"spinner\"></div>\n    </div>\n    } @else {\n    @let text = display();\n    @if(text){\n    <span>{{text}}</span>\n    } @else {\n    <ng-content></ng-content>\n    }\n    @if(icon()){\n    <span [attr.data-size]=\"iconSize()\" class=\"material-symbols\">{{icon()}}</span>\n    }\n    }\n</button>","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: [MatIcon, CommonModule],\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 id = input<number | string>();\r\n  public title = input<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\r\n@Component({\r\n  selector: 'dropdown-title',\r\n  imports: [CommonModule],\r\n  template: `<ng-content></ng-content>`,\r\n  styleUrls: [\r\n    './chr-dropdown.component.css',\r\n    '../../../../../tailwindbuild.css',\r\n  ],\r\n})\r\nexport class DropdownTitle {}\r\n\r\n@Component({\r\n  selector: 'dropdown-content',\r\n  imports: [CommonModule],\r\n  template: `<ng-content></ng-content>`,\r\n  styleUrls: [\r\n    './chr-dropdown.component.css',\r\n    '../../../../../tailwindbuild.css',\r\n  ],\r\n})\r\nexport class DropdownContent {}\r\n","<div class=\"flex flex-col h-auto w-full p-2 dropdown-wrapper\" [attr.data-empty]=\"!hasContent()\" [id]=\"id()\">\r\n    <div class=\"flex flex-row justify-between items-center dropdown-title-wrapper cursor-pointer\"\r\n        (click)=\"isOpen.set(!isOpen())\">\r\n        @if(title()){\r\n        <h3 class=\"w-5/6 dropdown-title flex items-center\">{{title()}}</h3>\r\n        } @else {\r\n        <ng-content class=\"w-5/6 dropdown-title flex items-center\" select=\"dropdown-title\" />\r\n        }\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-container [ngTemplateOutlet]=\"knownContent\"></ng-container>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n<ng-template #anonymousContent>\r\n    <ng-content />\r\n</ng-template>\r\n<ng-template #knownContent>\r\n    <ng-content select=\"dropdown-content\">\r\n        <ng-content></ng-content>\r\n    </ng-content>\r\n</ng-template>","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 { 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 [integerPart, decimalPart] = value\r\n        .toString()\r\n        .split('.')\r\n        .map((part) => part.replace(/\\D/g, ''));\r\n\r\n      if (\r\n        metadata.length != 0 &&\r\n        integerPart.length + (decimalPart?.length || 0) > metadata.length\r\n      ) {\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        if (decimalPart?.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 { ChrHoverTitleDirective } from '../../directives/chr-hover-title.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: 'chr-editable-cell',\r\n  imports: [\r\n    CrossCellNavigationDirective,\r\n    ChrHoverTitleDirective,\r\n    // DataListDirective\r\n  ],\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  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($event.target.value)\" (blur)=\"cancel()\" [checked]=\"value() === true\"\r\n        [step]=\"inputType() == 'time' ? 1 : null\" (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>","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","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  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  createEnvironmentInjector,\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 './tokens/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 environment injector for modal content with data and ref\r\n    const customInjector = createEnvironmentInjector(\r\n      [\r\n        { provide: CHR_MODAL_DATA, useValue: this.options?.data || {} },\r\n        { provide: CHR_MODAL_REF, useValue: this },\r\n      ],\r\n      this.environmentInjector\r\n    );\r\n\r\n    // Create the modal content component\r\n    this.contentComponentRef = createComponent(this._component, {\r\n      environmentInjector: customInjector,\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.modalComponentRef, this.options);\r\n    if (this.options.extraConfig) {\r\n      this._setInputs(this.contentComponentRef!, this.options.extraConfig);\r\n    }\r\n  };\r\n\r\n  private _setInputs = (ref: ComponentRef<any>, options: any) => {\r\n    if (!ref) throw new Error('Modal component reference is not initialized');\r\n    for (const key in options) {\r\n      if (Object.hasOwn(ref.instance, key)) {\r\n        ref.setInput(key, options[key as keyof ModalOptions]);\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 {\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\nimport { DataListComponent } from '../../chr-data-list/chr-data-list';\r\nimport { OutsideClickAwareDirective } from '../../directives/outside-click-aware.directive';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\nimport { ModalService } from '../../services/modal.service';\r\nimport { ChrDebounceDirective } from '../../directives/debounce.directive';\r\n\r\n@Component({\r\n  selector: 'chr-column-filter',\r\n  imports: [\r\n    DataListComponent,\r\n    OutsideClickAwareDirective,\r\n    AutofocusDirective,\r\n    ChrHoverTitleDirective,\r\n  ],\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 modalService = inject(ModalService);\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 | null>(null);\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>(null);\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    if (mode === null || mode === undefined) {\r\n      return '';\r\n    }\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);apply()\">\r\n    <span class=\"mat-icon 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\"\r\n            [value]=\"mode() !== null ? getModeLabel(mode()!): ''\" [chrAutofocus]=\"mode() === null\"\r\n            placeholder=\"Type de filtre\" (blur)=\"inputElement.focus()\" />\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                @let type = formatter()?.getEditInputType(columnMetadata());\r\n                <input #inputElement [type]=\"type =='number' ? 'text' : type\"\r\n                    [attr.inputmode]=\"type === 'number' ? 'decimal' : ''\" placeholder=\"Valeur du filtre\"\r\n                    class=\"filter-input form-control no-input-buttons\" [value]=\"value()\"\r\n                    [step]=\"type == 'time' ? 1 : null\" (input)=\"onInputChange($any($event).target.value)\"\r\n                    [chrAutofocus]=\"mode() !== null \" />\r\n                <chr-data-list for=\"column-filter-{{by()}}\" [suggestions]=\"suggestions()\" [blurOnSelect]=\"false\"\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 { DataListComponent } from '../../chr-data-list/chr-data-list';\r\nimport { OutsideClickAwareDirective } from '../../directives/outside-click-aware.directive';\r\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\r\nimport { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\n\r\n@Component({\r\n  selector: 'chr-column-group',\r\n  templateUrl: './column-group.html',\r\n  styleUrl: './column-group.scss',\r\n  imports: [\r\n    DataListComponent,\r\n    OutsideClickAwareDirective,\r\n    AutofocusDirective,\r\n    ChrHoverTitleDirective,\r\n  ],\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>(\r\n    DGGroupAggregationEnum.COUNT\r\n  );\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 '';\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);apply()\">\r\n    <span class=\"mat-icon 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()\" [blurOnSelect]=\"false\"\r\n            (optionSelected)=\"onOptionSelected($event.value)\"></chr-data-list>\r\n        <!-- <span class=\"mat-icon 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  OnDestroy,\r\n  OnInit,\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 { ChrPaginatorComponent } from '../../chr-paginator/chr-paginator.component';\r\nimport { NgxPaginationModule, PaginationService } from 'ngx-pagination';\r\nimport { ContextMenuDirective } from '../../directives/context-menu.directive';\r\nimport { ScrollIntoViewDirective } from '../../directives/scroll-into-view.directive';\r\nimport { ControlClickDirective } from '../../directives/control-click.directive';\r\nimport { ChrHoverTitleDirective } from '../../directives/chr-hover-title.directive';\r\nimport { DataFormatterService } from '../../services/data-formatter.service';\r\nimport { IContextMenuItem } from '../../models/context-menu';\r\nimport {\r\n  CHR_DEBOUNCE_DEFAULTS,\r\n  DebounceDefaults,\r\n} from '../../models/tokens/debounce-defaults-token';\r\nimport { IAction } from '../../chr-table/chr-table.component';\r\nimport { Color } from '../../models/colors';\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 | null;\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 interface IPartialAction extends Omit<\r\n  IAction,\r\n  'display' | 'color' | 'icon'\r\n> {\r\n  display: string;\r\n  color?: Color;\r\n  icon?: string;\r\n}\r\n\r\nexport interface IDisplayableColumn extends IMinimumColumnMetadata {\r\n  displayName: string;\r\n}\r\n\r\nexport type IDGTrackByMode = 'primaryKey' | 'index';\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    ScrollingModule,\r\n    ColumnGroup,\r\n    ChrHoverTitleDirective,\r\n  ],\r\n  templateUrl: './data-grid.html',\r\n  styleUrl: './data-grid.scss',\r\n  providers: [\r\n    PaginationService,\r\n    {\r\n      provide: CHR_DEBOUNCE_DEFAULTS,\r\n      useValue: new DebounceDefaults({ hoverTitle: 0 }),\r\n    },\r\n    // {\r\n    //   provide: VIRTUAL_SCROLL_STRATEGY,\r\n    //   useClass: DynamicSizeScrollStrategy,\r\n    // },\r\n  ],\r\n})\r\nexport class DataGrid implements OnInit, OnDestroy {\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 = model<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 selectedColumn = signal<string | null>(null);\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:\r\n      | IDisplayableColumn\r\n      | IMinimumColumnMetadata\r\n      | IDB2ColumnMetadata\r\n      | 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 allowFiltering = input<boolean>(true);\r\n  public allowGrouping = input<boolean>(true);\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  public allowManageDistincValueFetching = 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  public onFilterValueChange = output<{ column: string; value: string }>();\r\n\r\n  public allowFetchDistinctValues = model<boolean>(false);\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 distinctValues = input<{ [key: string]: any[] }>({});\r\n  public actions = input<IPartialAction[]>([]);\r\n\r\n  public columnSuggestions = computed<{ [key: string]: any[] }>(() => {\r\n    const distinctVals = this.distinctValues();\r\n    // Si des valeurs distinctes sont fournies par le parent, on les utilise\r\n    if (Object.keys(distinctVals).length > 0) {\r\n      return distinctVals;\r\n    }\r\n\r\n    // Sinon, on utilise l'ancien comportement (valeurs locales)\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(\r\n      (acc, [key, value]) => {\r\n        acc[key] = Array.from(value);\r\n        return acc;\r\n      },\r\n      {} as { [key: string]: any[] },\r\n    );\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    else return metadatas;\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    return 'total' in (this.table() || {})\r\n      ? (this.table() as any)?.total || -1\r\n      : this.table()?.count || -1;\r\n  });\r\n\r\n  public currentItems = computed(() => {\r\n    return 'total' in (this.table() || {})\r\n      ? (this.table() as any)?.total || 0\r\n      : 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  ngOnInit(): void {}\r\n\r\n  ngOnDestroy(): void {}\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 setSort(columnName: string, isAsc: boolean): void {\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    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 onFilterValue = (columnName: string, value: any) => {\r\n    if (this.allowFetchDistinctValues()) {\r\n      this.onFilterValueChange.emit({\r\n        column: columnName,\r\n        value: value,\r\n      });\r\n    }\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: 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(\r\n          (modifiedRow) => modifiedRow.index !== index,\r\n        ),\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 toggleCrossRequestTrackingPersistence(): void {\r\n    this.crossRequestTrackingPersistence.set(\r\n      !this.crossRequestTrackingPersistence(),\r\n    );\r\n  }\r\n\r\n  public toggleAllowFetchDistinctValues(): void {\r\n    this.allowFetchDistinctValues.set(!this.allowFetchDistinctValues());\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  public datagridContextMenuActions = (\r\n    column: string,\r\n    filterElement: ColumnFilter,\r\n    groupElement: ColumnGroup,\r\n  ): IContextMenuItem[] => {\r\n    const actions = [\r\n      {\r\n        label: 'Trier par ordre croissant',\r\n        icon: 'arrow_upward',\r\n        action: () => this.setSort(column, true),\r\n      },\r\n      {\r\n        label: 'Trier par ordre décroissant',\r\n        icon: 'arrow_downward',\r\n        action: () => this.setSort(column, false),\r\n      },\r\n      {\r\n        label: 'Effacer le tri',\r\n        icon: 'clear',\r\n        action: () => this.sort.set(null),\r\n      },\r\n    ];\r\n    if (filterElement && this.allowFiltering()) {\r\n      actions.push({\r\n        label: 'Filtrer sur cette colonne...',\r\n        icon: 'filter_list',\r\n        action: () => filterElement.toggle(),\r\n      });\r\n    }\r\n    if (groupElement && this.allowGrouping()) {\r\n      actions.push({\r\n        label: 'Grouper par cette colonne',\r\n        icon: 'group',\r\n        action: () => groupElement.isOpen.set(true),\r\n      });\r\n    }\r\n    return actions;\r\n  };\r\n\r\n  public datarowContextMenuActions = (\r\n    row: IDGRow,\r\n    rowIndex: number,\r\n  ): IContextMenuItem[] => {\r\n    const items: IContextMenuItem[] = [];\r\n    for (const action of this.actions()) {\r\n      items.push({\r\n        label: action.display,\r\n        action: action.callback.bind(null, row.data),\r\n        color: action.color,\r\n        icon: action.icon,\r\n      });\r\n    }\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        if (this.allowDelete()) {\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        }\r\n        break;\r\n    }\r\n    return items;\r\n  };\r\n\r\n  public onAdd = () => {\r\n    this.onAddRow.emit();\r\n    setTimeout(() => {\r\n      this.viewport()?.scrollTo({ bottom: 0 });\r\n    }, 250);\r\n  };\r\n\r\n  public log = (event: any) => {\r\n    console.log(`[DataGrid-${this.id()}]`, event);\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(allowManageDistincValueFetching()){\r\n            <div>\r\n                <span class=\"mat-icon icon-button tracking-persistence-button\"\r\n                    [attr.data-enabled]=\"allowFetchDistinctValues()\" (click)=\"toggleAllowFetchDistinctValues()\"\r\n                    title=\"Récupération des valeurs distinctes d'une colonne lors du filtrage\">filter_list</span>\r\n            </div>\r\n            }\r\n            @if (allowSync() && allowManageTrackingPersistence()) {\r\n            <div>\r\n                <span class=\"mat-icon 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=\"mat-icon 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 icon-button\" (click)=\"refresh()\" title=\"Recharger les données\">refresh</span>\r\n            }\r\n            @if(allowInsert()){\r\n            <span class=\"mat-icon icon-button\" (click)=\"onAdd()\" title=\"Ajouter une ligne\">add</span>\r\n            }\r\n            @if(allowExport()){\r\n            <span class=\"mat-icon icon-button\" (click)=\"onExport.emit()\"\r\n                title=\"Télécharger les données\">file_download</span>\r\n            }\r\n            @if(totalItems() !== -1){\r\n            <span>Total: {{ totalItems() }} enregistrements</span>\r\n            }\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: totalItems()}; 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            </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\" [attr.data-selected]=\"selectedColumn() === column.columnName\"\r\n            [contextMenu]=\"datagridContextMenuActions(column.columnName, filterElement, groupElement)\"\r\n            [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.displayName || column.columnName\r\n                }}</span>\r\n            } @else {\r\n            <span class=\"sort-receiver\" (click)=\"toggleSort(column.columnName)\">{{ column.displayName ||\r\n                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=\"mat-icon unique-key-icon\" title=\"Colonne avec contrainte d'unicité\">looks_one</span>\r\n                }\r\n                @if(isPrimaryKey || isForeignKey){\r\n                <span class=\"mat-icon\" [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(allowSync() && (!canEdit(column) || !isEditSafe(column))){\r\n                <span class=\"lock-icon mat-icon\" 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 mat-icon\">arrow_upward</span>\r\n            } @else {\r\n            <span class=\"sort-icon mat-icon\">arrow_downward</span>\r\n            }\r\n            }\r\n            <div class=\"filter-group-controls\" #controls>\r\n                <chr-column-filter #filterElement [class.hidden]=\"!allowFiltering()\" [by]=\"column.columnName\"\r\n                    [mode]=\"filter()[column.columnName]?.mode ?? null\" [attr.data-applied]=\"\"\r\n                    [value]=\"filter()[column.columnName]?.value ?? ''\" [columnMetadata]=\"column\"\r\n                    [suggestions]=\"columnSuggestions()[column.columnName]\"\r\n                    (valueChange)=\"onFilterValue(column.columnName, $event)\"\r\n                    (filterChange)=\"onFilterBy(column.columnName, $event)\" title=\"Double-clic pour définir un filtre\"\r\n                    class=\"filter\"></chr-column-filter>\r\n                @let isGroupBySource = groupBy() == null || groupBy()?.column === column.columnName;\r\n                <chr-column-group #groupElement [class.hidden]=\"!allowGrouping()\"\r\n                    [style.display]=\"!isGroupBySource ? 'none' : ''\" [by]=\"column.columnName\"\r\n                    [mode]=\"groupBy()?.mode ?? null\" (groupChange)=\"onGroupBy($event)\" class=\"group\"\r\n                    title=\"Double-clic pour définir un groupement\"></chr-column-group>\r\n                @if(isComputedColumn){\r\n                <span class=\"filter-icon mat-icon\" title=\"Colonne calculée\">functions</span>\r\n                }@else if(!isGroupBySource && groupBy() !== null){\r\n                <div class=\"group-by-include\" title=\"Inclure cette colonne dans le résultat groupé\">\r\n                    <span class=\"mat-icon 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        @let contextMenuItems = datarowContextMenuActions(row, 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 })\" [contextMenu]=\"contextMenuItems\"\r\n            [attr.data-has-changed]=\"row.flag === 'modified'\" [attr.data-is-deleted]=\"row.flag === 'deleted'\">\r\n            @for (column of columns(); track column.columnName) {\r\n            <div class=\"grid-cell\" [attr.data-selected]=\"selectedColumn() === column.columnName\">\r\n                <chr-editable-cell class=\"cell\" [value]=\"row.data[column.columnName]\"\r\n                    (isEditingChange)=\"$event ? selectedColumn.set(column.columnName) : selectedColumn.set(null)\"\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                @if($last){\r\n                @if(actions().length > 0){\r\n                <div class=\"actions-menu\">\r\n                    <span class=\"actions-menu-trigger mat-icon icon-button\" [style.cursor]=\"'pointer'\"\r\n                        [openOnClick]=\"true\" [contextMenu]=\"contextMenuItems\">more_vert</span>\r\n                </div>\r\n                }\r\n                }\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  Directive,\r\n  HostListener,\r\n  ElementRef,\r\n  inject,\r\n  input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[chrPreventReload]',\r\n  host: {\r\n    '(window:beforeunload)':\r\n      'chrPreventReload() ? $event.preventDefault() : null',\r\n  },\r\n})\r\nexport class ChrPreventReloadDirective {\r\n  private host = inject(ElementRef);\r\n  readonly chrPreventReload = input<(boolean | '' | null) | undefined>(false);\r\n}\r\n","import {\r\n  Directive,\r\n  HostListener,\r\n  ElementRef,\r\n  inject,\r\n  input,\r\n  Renderer2,\r\n  OnInit,\r\n  OnDestroy,\r\n  computed,\r\n} from '@angular/core';\r\nimport { debounceTime, Observable, of, Subject } from 'rxjs';\r\nimport { CHR_DEBOUNCE_DEFAULTS } from '../models/tokens/debounce-defaults-token';\r\n\r\n@Directive({\r\n  selector: '[chrDebounce]',\r\n})\r\nexport class ChrDebounceDirective implements OnInit, OnDestroy {\r\n  private host = inject(ElementRef);\r\n  private defaults = inject(CHR_DEBOUNCE_DEFAULTS);\r\n  private readonly renderer = inject(Renderer2);\r\n  private subject = new Subject<InputEvent>();\r\n  public chrDebounceTime = input<number | any>(null);\r\n  private debounceTimeValue = computed(() => {\r\n    const time = this.chrDebounceTime();\r\n    if (time !== null && !isNaN(Number(time))) {\r\n      return Number(time);\r\n    }\r\n    return this.defaults.baseInputs;\r\n  });\r\n  private subscription: Observable<InputEvent> = of();\r\n  private isDispatching = false;\r\n  private captureListener?: () => void;\r\n\r\n  ngOnInit() {\r\n    const element = this.host.nativeElement;\r\n    this.subscription = this.subject.pipe(\r\n      debounceTime(this.debounceTimeValue())\r\n    );\r\n    // Listener en phase CAPTURE pour intercepter AVANT tous les listeners Angular\r\n    this.captureListener = this.renderer.listen(\r\n      element,\r\n      'input',\r\n      (event: InputEvent) => {\r\n        if (this.isDispatching) {\r\n          return;\r\n        }\r\n        event.preventDefault();\r\n        event.stopImmediatePropagation();\r\n        event.stopPropagation();\r\n        this.subject.next(event);\r\n      },\r\n      { capture: true } as any\r\n    );\r\n\r\n    this.subscription.subscribe((event) => {\r\n      this.isDispatching = true;\r\n      const newEvent = new InputEvent('input', {\r\n        bubbles: true,\r\n        cancelable: true,\r\n        data: event.data,\r\n        inputType: event.inputType,\r\n      });\r\n      element.dispatchEvent(newEvent);\r\n      setTimeout(() => (this.isDispatching = false), 0);\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.captureListener?.();\r\n    this.subject.complete();\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  Input,\r\n  TemplateRef,\r\n  ViewContainerRef,\r\n  inject,\r\n  OnDestroy,\r\n  input,\r\n  Renderer2,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\n\r\n@Directive({\r\n  selector: '[chrHover]',\r\n})\r\nexport class ChrHoverDirective implements OnInit, OnDestroy {\r\n  private el = inject(ElementRef<HTMLElement>);\r\n  private overlay = inject(Overlay);\r\n  private vcr = inject(ViewContainerRef);\r\n  private renderer = inject(Renderer2);\r\n  private eventListeners: (() => void)[] = [];\r\n\r\n  @Input('chrHover') template!: TemplateRef<any>;\r\n  public chrHoverContext = input<any>({});\r\n  public chrHoverSnap = input<boolean>(false);\r\n  public chrHoverPosition = input<'above' | 'below' | 'left' | 'right'>(\r\n    'right',\r\n  );\r\n\r\n  private overlayRef: OverlayRef;\r\n  private portal?: TemplatePortal;\r\n\r\n  constructor() {\r\n    const positionStrategy = this.snappedStrategy();\r\n\r\n    this.overlayRef = this.overlay.create({\r\n      positionStrategy,\r\n      hasBackdrop: false,\r\n    });\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.eventListeners.push(\r\n      this.renderer.listen(this.el.nativeElement, 'mouseenter', (event) => {\r\n        this.open();\r\n      }),\r\n    );\r\n    this.eventListeners.push(\r\n      this.renderer.listen(this.el.nativeElement, 'mouseleave', (event) => {\r\n        this.close();\r\n      }),\r\n    );\r\n    this.eventListeners.push(\r\n      this.renderer.listen(\r\n        this.el.nativeElement,\r\n        'mousemove',\r\n        (event: MouseEvent) => {\r\n          if (!this.chrHoverSnap()) {\r\n            const positionStrategy = this.mousePositionStrategy(event);\r\n            this.overlayRef.updatePositionStrategy(positionStrategy);\r\n          }\r\n        },\r\n      ),\r\n    );\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.overlayRef.dispose();\r\n    this.removeEventListeners();\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  private open() {\r\n    if (!this.overlayRef.hasAttached()) {\r\n      if (!this.portal) {\r\n        this.portal = new TemplatePortal(\r\n          this.template,\r\n          this.vcr,\r\n          this.chrHoverContext(),\r\n        );\r\n      }\r\n\r\n      const ref = this.overlayRef.attach(this.portal);\r\n    }\r\n  }\r\n\r\n  private mousePositionStrategy = (mousemove: MouseEvent) => {\r\n    const positionOffset = { left: mousemove.clientX, top: mousemove.clientY };\r\n    const componentSize =\r\n      this.overlayRef?.overlayElement.getBoundingClientRect();\r\n\r\n    switch (this.chrHoverPosition()) {\r\n      case 'above':\r\n        positionOffset.top -= (componentSize?.height || 0) + 20;\r\n        positionOffset.left -= (componentSize?.width || 0) / 2;\r\n        break;\r\n      case 'below':\r\n        positionOffset.top += 20;\r\n        positionOffset.left -= (componentSize?.width || 0) / 2;\r\n        break;\r\n      case 'left':\r\n        positionOffset.left -= (componentSize?.width || 0) + 20;\r\n        positionOffset.top -= (componentSize?.height || 0) / 2;\r\n        break;\r\n      case 'right':\r\n        positionOffset.left += 20;\r\n        positionOffset.top -= (componentSize?.height || 0) / 2;\r\n        break;\r\n    }\r\n    const positionStrategy = this.overlay\r\n      .position()\r\n      .global()\r\n      .left(`${positionOffset.left}px`)\r\n      .top(`${positionOffset.top}px`);\r\n    return positionStrategy;\r\n  };\r\n\r\n  private snappedStrategy = () => {\r\n    const positionStrategy = this.overlay\r\n      .position()\r\n      .flexibleConnectedTo(this.el);\r\n\r\n    switch (this.chrHoverPosition()) {\r\n      case 'above':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'center',\r\n            originY: 'top',\r\n            overlayX: 'center',\r\n            overlayY: 'bottom',\r\n          },\r\n          {\r\n            originX: 'center',\r\n            originY: 'bottom',\r\n            overlayX: 'center',\r\n            overlayY: 'top',\r\n          },\r\n        ]);\r\n        break;\r\n      case 'below':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'center',\r\n            originY: 'bottom',\r\n            overlayX: 'center',\r\n            overlayY: 'top',\r\n          },\r\n          {\r\n            originX: 'center',\r\n            originY: 'top',\r\n            overlayX: 'center',\r\n            overlayY: 'bottom',\r\n          },\r\n        ]);\r\n        break;\r\n      case 'left':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'start',\r\n            originY: 'center',\r\n            overlayX: 'end',\r\n            overlayY: 'center',\r\n          },\r\n          {\r\n            originX: 'end',\r\n            originY: 'center',\r\n            overlayX: 'start',\r\n            overlayY: 'center',\r\n          },\r\n        ]);\r\n        break;\r\n      case 'right':\r\n        positionStrategy.withPositions([\r\n          {\r\n            originX: 'end',\r\n            originY: 'center',\r\n            overlayX: 'start',\r\n            overlayY: 'center',\r\n          },\r\n          {\r\n            originX: 'start',\r\n            originY: 'center',\r\n            overlayX: 'end',\r\n            overlayY: 'center',\r\n          },\r\n        ]);\r\n        break;\r\n    }\r\n    return positionStrategy;\r\n  };\r\n\r\n  private close() {\r\n    this.overlayRef.detach();\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 { InjectionToken } from '@angular/core';\r\n\r\nexport interface ICachingDefaults {\r\n  duration: number;\r\n}\r\nexport class CachingDefaults implements ICachingDefaults {\r\n  duration: number = 1000 * 60 * 5; // 5 minutes par défaut;\r\n\r\n  constructor(init?: Partial<ICachingDefaults>) {\r\n    Object.assign(this, init);\r\n  }\r\n}\r\nexport const CHR_CACHING_DEFAULTS = new InjectionToken<CachingDefaults>(\r\n  'CHR_CACHING_DEFAULTS',\r\n  {\r\n    factory: () => new CachingDefaults(),\r\n  },\r\n);\r\n","import { HttpContextToken } from '@angular/common/http';\r\nimport { Injectable, signal, computed, inject } from '@angular/core';\r\nimport { CHR_CACHING_DEFAULTS } from '../../models/tokens/caching-defaults-token';\r\n\r\nexport interface ICacheEntry<T> {\r\n  value: T;\r\n  expiry: number; // Timestamp en millisecondes\r\n  status: 'valid' | 'expired';\r\n}\r\n\r\nexport interface ICacheOptions {\r\n  resource?: string;\r\n}\r\n\r\n/**\r\n * Token de contexte HTTP mettre cache la réponse d'une requête via l'intercepteur CachingInterceptor.\r\n * La ressource doit être spécifiée pour identifier l'entrée de cache.\r\n * Vous êtes responsable de l'invalidation du cache via le token INVALIDATE_CACHE.\r\n */\r\nexport const ENABLE_CACHE = new HttpContextToken<ICacheOptions | null>(\r\n  () => null,\r\n);\r\n\r\n/**\r\n * Token de contexte HTTP pour invalider une entrée de cache spécifique.\r\n * La ressource doit être spécifiée pour identifier l'entrée de cache à invalider.\r\n */\r\nexport const INVALIDATE_CACHE = new HttpContextToken<ICacheOptions | null>(\r\n  () => null,\r\n);\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CacheService {\r\n  private _default = inject(CHR_CACHING_DEFAULTS);\r\n  private _cache: { [key: string]: ICacheEntry<any> } = {};\r\n  private _cacheValidityDuration: number;\r\n\r\n  constructor() {\r\n    this._cacheValidityDuration = this._default.duration;\r\n  }\r\n\r\n  /**\r\n   * Récupère une valeur mise en cache par sa clé\r\n   * @param key La clé de la valeur à récupérer\r\n   * @returns La valeur mise en cache ou undefined si elle n'existe pas\r\n   */\r\n  public get = <T>(key: string): T | null => {\r\n    const entry = this._cache[key];\r\n    if (entry) {\r\n      // Vérifie si l'entrée est expirée\r\n      if (entry.status != 'expired' && Date.now() < entry.expiry) {\r\n        return entry.value as T;\r\n      } else {\r\n        // Marque l'entrée comme expirée\r\n        entry.status = 'expired';\r\n        return null;\r\n      }\r\n    }\r\n    return null;\r\n  };\r\n\r\n  /**\r\n   * Met en cache une valeur avec une clé spécifique\r\n   * @param key La clé sous laquelle stocker la valeur\r\n   * @param value La valeur à mettre en cache\r\n   */\r\n  public set = <T>(key: string, value: T): void => {\r\n    this._cache[key] = {\r\n      value: value,\r\n      expiry: Date.now() + this._cacheValidityDuration,\r\n      status: 'valid',\r\n    };\r\n  };\r\n\r\n  /**\r\n   * Invalide une entrée de cache spécifique\r\n   * @param key La clé de l'entrée à invalider\r\n   */\r\n  public invalidate = (key: string): void => {\r\n    if (this._cache[key]) {\r\n      this._cache[key].status = 'expired';\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Mets à jour la durée de validité du cache\r\n   * @param duration Durée en millisecondes\r\n   */\r\n  public setCacheValidityDuration = (duration: number): void => {\r\n    this._cacheValidityDuration = duration;\r\n  };\r\n}\r\n","import { HttpContextToken, HttpEventType } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nexport interface IProgressStateEntry {\r\n  progress: number;\r\n  status: 'in-progress' | 'completed' | 'failed';\r\n  type?: HttpEventType;\r\n}\r\n\r\nexport const ENABLE_PROGRESS = new HttpContextToken<string | null>(() => null);\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProgressService {\r\n  private _progressStates: {\r\n    [key: string]: BehaviorSubject<IProgressStateEntry>;\r\n  } = {};\r\n\r\n  /**\r\n   * Récupère l'état de progression pour une clé spécifique\r\n   * @param key La clé de l'état de progression à récupérer\r\n   * @returns L'état de progression ou null si inexistant\r\n   */\r\n  public get = (key: string): Observable<IProgressStateEntry> | null => {\r\n    const obs = this._progressStates[key];\r\n    if (!obs) return null;\r\n\r\n    return this._progressStates[key].asObservable();\r\n  };\r\n\r\n  /**\r\n   * Met à jour l'état de progression pour une clé spécifique\r\n   * @param key La clé de l'état de progression à mettre à jour\r\n   * @param state Le nouvel état de progression\r\n   */\r\n  public set = (key: string, state: IProgressStateEntry): void => {\r\n    if (this._progressStates[key]) {\r\n      this._progressStates[key].next(state);\r\n    } else {\r\n      this._progressStates[key] = new BehaviorSubject<IProgressStateEntry>(\r\n        state,\r\n      );\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","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 { BaseTable, IDataTable } from './AnonymousTable.model';\r\nimport { IMinimumColumnMetadata } from './ColumnMetadata.model';\r\nimport { IMinimumTableConstraint } from './TableConstraint.model';\r\n\r\nexport interface IDisplayableColumnMetadata extends IMinimumColumnMetadata {\r\n  displayName: string;\r\n}\r\n\r\nexport class AutoDataTable extends BaseTable implements IDataTable {\r\n  override name: string = '';\r\n  override schema: string = '';\r\n  public total: number = 0;\r\n  override description?: string | undefined;\r\n  private _columnMetadatas: IMinimumColumnMetadata[] = [];\r\n  override get columnMetadatas(): IMinimumColumnMetadata[] {\r\n    return this._columnMetadatas.sort(\r\n      (a, b) => a.ordinalPosition - b.ordinalPosition,\r\n    );\r\n  }\r\n  override set columnMetadatas(value: IMinimumColumnMetadata[]) {\r\n    this._columnMetadatas = value;\r\n  }\r\n  override tableConstraints: IMinimumTableConstraint[] =\r\n    [] as IMinimumTableConstraint[];\r\n  override isReadOnly?: boolean | undefined;\r\n  private _primaryKey: string | string[] | null = null;\r\n  override hasPrimaryKey: boolean = this._primaryKey !== null;\r\n  private _rows: any[] = [];\r\n  override get rows(): any[] {\r\n    return this._rows;\r\n  }\r\n  override set rows(value: any[]) {\r\n    this.count = value.length;\r\n\r\n    this._rows = value.map((row, index) => {\r\n      if (!this.hasPrimaryKey && !row.hasOwnProperty(this.rowNumberIdentity)) {\r\n        return { [this.rowNumberIdentity]: index + 1, ...row };\r\n      }\r\n      return row;\r\n    });\r\n    this.deduceColumnTypes();\r\n  }\r\n  override count: number = 0;\r\n  override rowNumberIdentity: string;\r\n\r\n  constructor(\r\n    name: string,\r\n    primaryKey: string | string[] | null = null,\r\n    metadatas: Partial<IDisplayableColumnMetadata>[] = [],\r\n    rowIdentifier: string = 'ROW_NUMBER',\r\n  ) {\r\n    super();\r\n    this.name = name;\r\n    this._primaryKey = primaryKey;\r\n    this.hasPrimaryKey = this._primaryKey !== null;\r\n    this.rowNumberIdentity = rowIdentifier;\r\n    this.columnMetadatas = metadatas.map(\r\n      (md, index) =>\r\n        ({\r\n          displayName: md.displayName || md.columnName!,\r\n          ordinalPosition: index + 1,\r\n          length: 0,\r\n          tableName: this.name,\r\n          tableSchema: this.schema,\r\n          isIdentity: false,\r\n          isGenerated: false,\r\n          isUpdatable: false,\r\n          tooltip: `${md.dataType?.toUpperCase()} ${md.length ? `(${md.length})` : ''}`,\r\n          ...md,\r\n        }) as IDisplayableColumnMetadata,\r\n    );\r\n  }\r\n\r\n  override getRowIdentifier = (row: any): string => {\r\n    if (this._primaryKey && row.hasOwnProperty(this._primaryKey)) {\r\n      if (Array.isArray(this._primaryKey)) {\r\n        return this._primaryKey.map((key) => row[key]).join('_');\r\n      }\r\n      return row[this._primaryKey].toString();\r\n    }\r\n    return row[this.rowNumberIdentity].toString();\r\n  };\r\n  override getRowNumber = (row: any): number => {\r\n    return row[this.rowNumberIdentity];\r\n  };\r\n  override primaryKeyColumns = (): IMinimumColumnMetadata[] => {\r\n    if (!this._primaryKey) {\r\n      return [];\r\n    }\r\n    return this.columnMetadatas.filter(\r\n      (col) => col.columnName === this._primaryKey,\r\n    );\r\n  };\r\n\r\n  private deduceColumnTypes = (): void => {\r\n    if (this.rows.length === 0) {\r\n      return;\r\n    }\r\n    if (this.columnMetadatas.length !== 0) return;\r\n    for (const key of Object.keys(this.rows[0])) {\r\n      const inferredType = typeof this.rows[0][key];\r\n      const existingIndex = this.columnMetadatas.findIndex(\r\n        (md) => md.columnName === key,\r\n      );\r\n      const existingMetadata = this.columnMetadatas[existingIndex];\r\n      if (!existingMetadata) {\r\n        const md = {\r\n          ordinalPosition: this.columnMetadatas.length + 1,\r\n          length: 0,\r\n          tableName: this.name,\r\n          tableSchema: this.schema,\r\n          isIdentity: false,\r\n          isGenerated: false,\r\n          isUpdatable: false,\r\n          tooltip: `${inferredType} ${length ? `(${inferredType})` : ''}`,\r\n          columnName: key,\r\n          dataType: inferredType,\r\n          isNullable: false,\r\n        };\r\n        this.columnMetadatas.push(md);\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Retourne une copie de l'AutoDataTable\r\n   */\r\n  clone = (): AutoDataTable => {\r\n    const copy = new AutoDataTable(\r\n      this.name,\r\n      this._primaryKey,\r\n      this.columnMetadatas,\r\n      this.rowNumberIdentity,\r\n    );\r\n    for (const key of Object.keys(this) as (keyof AutoDataTable)[]) {\r\n      if (Array.isArray(this[key])) {\r\n        (copy[key] as any) = [...(this[key] as any)];\r\n      } else {\r\n        (copy[key] as any) = this[key];\r\n      }\r\n    }\r\n    return copy;\r\n  };\r\n}\r\n","import {\r\n  signal,\r\n  computed,\r\n  Signal,\r\n  inject,\r\n  ElementRef,\r\n  effect,\r\n  OutputRefSubscription,\r\n} from '@angular/core';\r\nimport { Observable, of, Subscription } from 'rxjs';\r\nimport { AutoDataTable } from './AutoDataTable.model';\r\nimport { BaseTable } from './AnonymousTable.model';\r\nimport { DGFilterMode } from './FilterMode.enum';\r\nimport {\r\n  DataGrid,\r\n  IDGFilter,\r\n  IDGGroup,\r\n  IDGSort,\r\n} from '../chr-datagrid/data-grid/data-grid';\r\n\r\nexport interface DataSourceConfig<T extends BaseTable = BaseTable> {\r\n  initialData?: T;\r\n  pageSize?: number;\r\n  enableClientSidePagination?: boolean;\r\n  enableClientSideFiltering?: boolean;\r\n  enableClientSideSorting?: boolean;\r\n}\r\n\r\nexport class AutoDataSource<T extends AutoDataTable = AutoDataTable> {\r\n  private _subscriptions: (OutputRefSubscription | Subscription)[] = [];\r\n\r\n  // Signaux internes\r\n  protected _datagrid = signal<DataGrid | null>(null);\r\n  protected _data = signal<T | undefined>(undefined);\r\n  protected _currentPage = signal(1);\r\n  protected _pageSize = signal(10);\r\n  protected _sort = signal<IDGSort | null>(null);\r\n  protected _filter = signal<{ [key: string]: IDGFilter }>({});\r\n  protected _groupBy = signal<IDGGroup | null>(null);\r\n  protected _loading = signal(false);\r\n  protected _error = signal<string | null>(null);\r\n\r\n  // Configuration\r\n  protected config: Required<DataSourceConfig<T>>;\r\n\r\n  // Données exposées (read-only)\r\n  public readonly data: Signal<T | undefined> = this._data.asReadonly();\r\n  public readonly currentPage: Signal<number> = this._currentPage.asReadonly();\r\n  public readonly pageSize: Signal<number> = this._pageSize.asReadonly();\r\n  public readonly sort: Signal<IDGSort | null> = this._sort.asReadonly();\r\n  public readonly filter: Signal<{ [key: string]: IDGFilter }> =\r\n    this._filter.asReadonly();\r\n  public readonly groupBy: Signal<IDGGroup | null> = this._groupBy.asReadonly();\r\n  public readonly loading: Signal<boolean> = this._loading.asReadonly();\r\n  public readonly error: Signal<string | null> = this._error.asReadonly();\r\n\r\n  // Données traitées\r\n  public readonly processedData = computed(() => {\r\n    let result = this._data();\r\n    if (!result) return undefined;\r\n    result.total = result.rows.length ?? -1;\r\n    // Filtrage côté client\r\n    if (this.config.enableClientSideFiltering) {\r\n      result = this.applyFilters(result, this.filter());\r\n    }\r\n\r\n    // Tri côté client\r\n    if (this.config.enableClientSideSorting) {\r\n      result = this.applySort(result, this._sort());\r\n    }\r\n    // Pagination côté client\r\n    if (this.config.enableClientSidePagination) {\r\n      // Do nothing, it is handled by the data grid directly\r\n    }\r\n\r\n    result.count = result.rows.length;\r\n    return result;\r\n  });\r\n\r\n  constructor(config?: DataSourceConfig<T>) {\r\n    this.config = {\r\n      initialData: config?.initialData as unknown as T,\r\n      pageSize: config?.pageSize ?? 10,\r\n      enableClientSidePagination: config?.enableClientSidePagination ?? true,\r\n      enableClientSideFiltering: config?.enableClientSideFiltering ?? true,\r\n      enableClientSideSorting: config?.enableClientSideSorting ?? true,\r\n    };\r\n\r\n    if (this.config.initialData) {\r\n      this._data.set(this.config.initialData);\r\n    }\r\n    this._pageSize.set(this.config.pageSize);\r\n    effect(() => {\r\n      if (this.processedData() && this._datagrid()) {\r\n        this._datagrid()!.table.set(this.processedData());\r\n        this._datagrid()!.ngOnDestroy = () => {\r\n          this._datagrid()?.ngOnDestroy();\r\n          this._datagrid.set(null);\r\n          for (const sub of this._subscriptions) {\r\n            sub.unsubscribe();\r\n          }\r\n        };\r\n      }\r\n    });\r\n  }\r\n\r\n  // Méthode pour enregistrer la datagrid et écouter les événements de base\r\n  public registerDataGrid(element?: DataGrid | ElementRef): void {\r\n    if (!element) return;\r\n\r\n    const datagrid = (\r\n      element instanceof ElementRef ? element.nativeElement : element\r\n    ) as DataGrid;\r\n\r\n    this._datagrid.set(datagrid);\r\n\r\n    this._subscriptions.push(\r\n      datagrid.pageChange.subscribe((page: number) => {\r\n        this._subscriptions.push(this.handlePageChange(page).subscribe());\r\n      }),\r\n      datagrid.pageSizeChange.subscribe((pageSize: number) => {\r\n        this._subscriptions.push(\r\n          this.handlePageSizeChange(pageSize).subscribe(),\r\n        );\r\n      }),\r\n      datagrid.sort.subscribe((sort: IDGSort | null) => {\r\n        this._subscriptions.push(this.handleSortChange(sort).subscribe());\r\n      }),\r\n      datagrid.filter.subscribe((filter: { [key: string]: IDGFilter }) => {\r\n        this._subscriptions.push(this.handleFilterChange(filter).subscribe());\r\n      }),\r\n    );\r\n  }\r\n\r\n  // Méthodes publiques pour gérer les événements de la datagrid\r\n  public handlePageChange(page: number): Observable<void> {\r\n    this._currentPage.set(page);\r\n    return this.onPageChange(page);\r\n  }\r\n\r\n  public handlePageSizeChange(pageSize: number): Observable<void> {\r\n    this._pageSize.set(pageSize);\r\n    this._currentPage.set(1); // Reset à la première page\r\n    return this.onPageSizeChange(pageSize);\r\n  }\r\n\r\n  public handleSortChange(sort: IDGSort | null): Observable<void> {\r\n    this._sort.set(sort);\r\n    return this.onSortChange(sort);\r\n  }\r\n\r\n  public handleFilterChange(filter: {\r\n    [key: string]: IDGFilter;\r\n  }): Observable<void> {\r\n    this._filter.set(filter);\r\n    this._currentPage.set(1); // Reset à la première page\r\n    return this.onFilterChange(filter);\r\n  }\r\n\r\n  public handleGroupChange(group: IDGGroup | null): Observable<void> {\r\n    this._groupBy.set(group);\r\n    return this.onGroupChange(group);\r\n  }\r\n\r\n  public refresh(): Observable<void> {\r\n    return this.loadData();\r\n  }\r\n\r\n  public setRows(rows: any[]): void {\r\n    if (!this._data()) {\r\n      return;\r\n    }\r\n    const updated = this._data()!.clone() as T;\r\n    updated.rows = rows;\r\n    updated.total = rows.length;\r\n\r\n    this._data.set(updated);\r\n  }\r\n\r\n  public setData(data: T): void {\r\n    this._data.set(data);\r\n  }\r\n\r\n  // Méthodes virtuelles à surcharger\r\n  protected onPageChange(page: number): Observable<void> {\r\n    // Comportement par défaut : rien (pagination côté client)\r\n    return of(void 0);\r\n  }\r\n\r\n  protected onPageSizeChange(pageSize: number): Observable<void> {\r\n    // Comportement par défaut : rien (pagination côté client)\r\n    return of(void 0);\r\n  }\r\n\r\n  protected onSortChange(sort: IDGSort | null): Observable<void> {\r\n    // Comportement par défaut : rien (tri côté client)\r\n    return of(void 0);\r\n  }\r\n\r\n  protected onFilterChange(filter: {\r\n    [key: string]: IDGFilter;\r\n  }): Observable<void> {\r\n    // Comportement par défaut : rien (filtrage côté client)\r\n    return of(void 0);\r\n  }\r\n\r\n  protected onGroupChange(group: IDGGroup | null): Observable<void> {\r\n    // Comportement par défaut : rien\r\n    return of(void 0);\r\n  }\r\n\r\n  protected loadData(): Observable<void> {\r\n    // À surcharger pour charger les données\r\n    return of(void 0);\r\n  }\r\n\r\n  // Méthodes de traitement côté client (peuvent être surchargées)\r\n  protected applyFilters(data: T, filters: { [key: string]: IDGFilter }): T {\r\n    if (Object.keys(filters).length === 0) return data;\r\n\r\n    const filteredRows = data.rows.filter((row) => {\r\n      return Object.values(filters).every((filter) => {\r\n        const value = row[filter.column];\r\n        const filterValue = String(filter.value).toLowerCase();\r\n        const stringValue = String(value ?? '').toLowerCase();\r\n\r\n        switch (filter.mode) {\r\n          case DGFilterMode.CONTAINS:\r\n            return stringValue.includes(filterValue);\r\n          case DGFilterMode.STARTS_WITH:\r\n            return stringValue.startsWith(filterValue);\r\n          case DGFilterMode.ENDS_WITH:\r\n            return stringValue.endsWith(filterValue);\r\n          case DGFilterMode.EQUALS:\r\n            return stringValue === filterValue;\r\n          case DGFilterMode.NOT_EQUALS:\r\n            return stringValue !== filterValue;\r\n          case DGFilterMode.GREATER_OR_EQUAL:\r\n            return Number(value) >= Number(filter.value);\r\n          case DGFilterMode.LOWER_OR_EQUAL:\r\n            return Number(value) <= Number(filter.value);\r\n          default:\r\n            return true;\r\n        }\r\n      });\r\n    });\r\n\r\n    const cloned = data.clone();\r\n    cloned.rows = filteredRows;\r\n    return cloned as T;\r\n  }\r\n\r\n  protected applySort(data: T, sort: IDGSort | null): T {\r\n    if (!sort) return data;\r\n\r\n    const sortedRows = [...data.rows].sort((a, b) => {\r\n      const aValue = a[sort.column];\r\n      const bValue = b[sort.column];\r\n\r\n      if (aValue === bValue) return 0;\r\n      if (aValue === null || aValue === undefined) return 1;\r\n      if (bValue === null || bValue === undefined) return -1;\r\n\r\n      const comparison = aValue > bValue ? 1 : -1;\r\n      return sort.isAsc ? comparison : -comparison;\r\n    });\r\n\r\n    const cloned = data.clone();\r\n    cloned.rows = sortedRows;\r\n    return cloned as T;\r\n  }\r\n}\r\n","import {\r\n  HttpEventType,\r\n  HttpInterceptorFn,\r\n  HttpResponse,\r\n} from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { finalize, map, tap } from 'rxjs/operators';\r\n\r\nimport { of } from 'rxjs';\r\nimport { response } from 'express';\r\nimport {\r\n  CacheService,\r\n  ENABLE_CACHE,\r\n  INVALIDATE_CACHE,\r\n} from '../../services/cache/cache.service';\r\n\r\nexport const CachingInterceptor: HttpInterceptorFn = (req, next) => {\r\n  const cache = inject(CacheService);\r\n  const url = req.urlWithParams;\r\n  const method = req.method;\r\n  const cacheOptions = req.context.get(ENABLE_CACHE);\r\n  const invalidateCacheOptions = req.context.get(INVALIDATE_CACHE);\r\n\r\n  if (invalidateCacheOptions !== null) {\r\n    cache.invalidate(invalidateCacheOptions.resource || url);\r\n  }\r\n  if (cacheOptions === null) {\r\n    return next(req);\r\n  }\r\n\r\n  const cachedResponse = cache.get<HttpResponse<any>>(\r\n    cacheOptions.resource || url,\r\n  );\r\n  if (cachedResponse && cachedResponse.url === url) {\r\n    return of(\r\n      cachedResponse.clone({ body: structuredClone(cachedResponse.body) }),\r\n    );\r\n  }\r\n\r\n  return next(req).pipe(\r\n    tap((event) => {\r\n      if (event.type === HttpEventType.Response && cacheOptions !== null) {\r\n        cache.set(cacheOptions.resource || url, event);\r\n      }\r\n    }),\r\n  );\r\n};\r\n","import {\r\n  HttpEventType,\r\n  HttpInterceptorFn,\r\n  HttpResponse,\r\n} from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { catchError, finalize, map, tap } from 'rxjs/operators';\r\nimport { of } from 'rxjs';\r\nimport {\r\n  ENABLE_PROGRESS,\r\n  ProgressService,\r\n} from '../../services/progress/progress.service';\r\n\r\nexport const ProgressInterceptor: HttpInterceptorFn = (req, next) => {\r\n  const progressService = inject(ProgressService);\r\n  const shouldTrackProgress = req.context.get(ENABLE_PROGRESS);\r\n\r\n  if (shouldTrackProgress === null) return next(req);\r\n\r\n  const clone = req.clone({ reportProgress: true });\r\n  progressService.set(shouldTrackProgress, {\r\n    progress: 0,\r\n    status: 'in-progress',\r\n  });\r\n\r\n  return next(clone).pipe(\r\n    tap((event) => {\r\n      if (\r\n        event.type === HttpEventType.DownloadProgress ||\r\n        event.type === HttpEventType.UploadProgress\r\n      ) {\r\n        const total = event.total ?? 0;\r\n        const progress =\r\n          total > 0 ? Math.round((event.loaded / total) * 100) : 0;\r\n        progressService.set(shouldTrackProgress, {\r\n          progress: progress,\r\n          status: 'in-progress',\r\n          type: event.type,\r\n        });\r\n      }\r\n    }),\r\n    catchError((err) => {\r\n      progressService.set(shouldTrackProgress, {\r\n        progress: 100,\r\n        status: 'failed',\r\n      });\r\n      return of(err);\r\n    }),\r\n    finalize(() => {\r\n      progressService.set(shouldTrackProgress, {\r\n        progress: 100,\r\n        status: 'completed',\r\n      });\r\n    }),\r\n  );\r\n};\r\n","import { Component, inject } from '@angular/core';\r\nimport { CHR_MODAL_REF } from '../models/tokens/modal-tokens';\r\nimport { ChrButtonLegacyComponent } from '../chr-button-legacy/chr-button.component';\r\n\r\n@Component({\r\n  selector: 'app-form-deactivation-warning-modal',\r\n  imports: [ChrButtonLegacyComponent],\r\n  templateUrl: './chr-deactivation-warning-modal.html',\r\n  styleUrl: './chr-deactivation-warning-modal.scss',\r\n})\r\nexport class ChrDeactivationWarningModal {\r\n  private ref = inject(CHR_MODAL_REF)!;\r\n\r\n  public close(confirm: boolean): void {\r\n    this.ref.close(confirm);\r\n  }\r\n}\r\n","<div class=\"deactivation-modal\" CanBeDeactivated>\r\n    <div class=\"modal-body\">\r\n        <h2>Attention</h2>\r\n        <p>Vous avez des modifications non enregistrées.\r\n        </p>\r\n        <p>Si vous quittez cette page, ces modifications seront perdues.</p>\r\n    </div>\r\n\r\n    <div class=\"modal-actions\">\r\n        <chr-button display=\"Rester\" color=\"primary\" (click)=\"close(false)\" type=\"fixed\"></chr-button>\r\n        <chr-button display=\"Quitter la page\" color=\"error\" (click)=\"close(true)\" type=\"fixed\"></chr-button>\r\n    </div>\r\n</div>","import { inject } from '@angular/core';\r\nimport {\r\n  ActivatedRouteSnapshot,\r\n  CanActivateFn,\r\n  CanDeactivateFn,\r\n  RedirectCommand,\r\n  Router,\r\n  RouterStateSnapshot,\r\n} from '@angular/router';\r\nimport { ICanBeDeactivated } from '../../models/CanBeDeactivated';\r\nimport { ChrDeactivationWarningModal } from '../../chr-deactivation-warning-modal/chr-deactivation-warning-modal';\r\nimport { CHR_DEACTIVATION_MODAL } from '../../models/tokens/modal-tokens';\r\nimport { ModalService } from '../../services/modal.service';\r\n\r\nexport const ChrDeactivationGuard: CanDeactivateFn<ICanBeDeactivated> = (\r\n  component: ICanBeDeactivated,\r\n  currentRoute: ActivatedRouteSnapshot,\r\n  currentState: RouterStateSnapshot,\r\n  nextState: RouterStateSnapshot,\r\n) => {\r\n  const modalService = inject(ModalService);\r\n  const deactivationModalType = inject(CHR_DEACTIVATION_MODAL);\r\n\r\n  if (component && 'canDeactivate' in component && !component.canDeactivate()) {\r\n    const ref = modalService.open(\r\n      deactivationModalType ?? ChrDeactivationWarningModal,\r\n      {\r\n        disableClose: false,\r\n        background: 'background',\r\n        width: 30,\r\n      },\r\n    );\r\n    return ref.afterClosed();\r\n  }\r\n  return true;\r\n};\r\n","import { EventManagerPlugin } from '@angular/platform-browser';\r\nimport { debounceTime, of, Subject, Subscription } from 'rxjs';\r\n\r\nexport class DebounceEventPlugin extends EventManagerPlugin {\r\n  override supports(eventName: string): boolean {\r\n    return eventName.includes('debounce');\r\n  }\r\n\r\n  override addEventListener(\r\n    element: HTMLElement,\r\n    eventName: string,\r\n    handler: Function,\r\n  ): Function {\r\n    const [originalEventName, delayStr] = eventName.split('.debounce.');\r\n    const delay = parseInt(delayStr, 10) || 300;\r\n    const eventSubject = new Subject<Event>();\r\n    let sub: Subscription = eventSubject\r\n      .pipe(debounceTime(delay))\r\n      .subscribe((event) => {\r\n        handler(event);\r\n      });\r\n    const handle = (event: Event) => {\r\n      eventSubject.next(event);\r\n    };\r\n\r\n    element.addEventListener(originalEventName, handle);\r\n\r\n    return () => {\r\n      sub.unsubscribe();\r\n      element.removeEventListener(originalEventName, handle);\r\n      eventSubject.complete();\r\n    };\r\n  }\r\n}\r\n","import { EVENT_MANAGER_PLUGINS } from '@angular/platform-browser';\r\nimport { DebounceEventPlugin } from '../../plugins/debounce-event';\r\n\r\nexport const provideDebounceEventPlugin = () => [\r\n  {\r\n    provide: EVENT_MANAGER_PLUGINS,\r\n    multi: true,\r\n    useClass: DebounceEventPlugin,\r\n  },\r\n];\r\n","/*\r\n * Public API Surface of chr-components\r\n */\r\n\r\n//COMPONENTS\r\nexport * from './lib/chr-breadcrumb/chr-breadcrumb.component';\r\nexport * from './lib/chr-button-legacy/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-legacy/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-button/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/group/column-group';\r\nexport * from './lib/chr-datagrid/editable-cell/editable-cell';\r\nexport * from './lib/chr-message-banner/message-banner';\r\nexport * from './lib/chr-data-list/chr-data-list';\r\nexport * from './lib/chr-hover-title/chr-hover-title.component';\r\nexport * from './lib/chr-toast/toast';\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\nexport * from './lib/directives/chr-hover-title.directive';\r\nexport * from './lib/directives/prevent-reload.directive';\r\nexport * from './lib/directives/debounce.directive';\r\nexport * from './lib/directives/chr-hover.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\nexport * from './lib/services/cache/cache.service';\r\nexport * from './lib/services/progress/progress.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/services/toast/toast-service';\r\nexport * from './lib/services/data.service';\r\nexport * from './lib/services/live-update.service';\r\nexport * from './lib/services/loader.service';\r\n\r\n//MODELS & TOKENS\r\nexport * from './lib/models/tokens/modal-tokens';\r\nexport * from './lib/models/tokens/debounce-defaults-token';\r\nexport * from './lib/models/tokens/http-context-tokens';\r\nexport * from './lib/models/modal';\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\nexport * from './lib/models/CanBeDeactivated';\r\nexport * from './lib/models/toasts/toast';\r\nexport * from './lib/models/toasts/toast-config';\r\nexport * from './lib/models/toasts/toast-ref';\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/colors';\r\nexport * from './lib/models/live-update-message';\r\nexport * from './lib/models/formatters/formatter.interface';\r\nexport * from './lib/models/ColumnMetadata.model';\r\nexport * from './lib/models/FilterMode.enum';\r\nexport * from './lib/models/GroupAggregationEnum';\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/AutoDataTable.model';\r\nexport * from './lib/models/AutoDataSource.model';\r\n\r\n//INTERCEPTORS\r\nexport * from './lib/config/interceptors/SpinnerInterceptor';\r\nexport * from './lib/config/interceptors/XsrfInterceptor';\r\nexport * from './lib/config/interceptors/CachingInterceptor';\r\nexport * from './lib/config/interceptors/ProgressInterceptor';\r\n\r\n//GUARDS\r\nexport * from './lib/guards/form-deactivation/deactivation.guard';\r\n\r\n//PLUGINS\r\nexport * from './lib/plugins/debounce-event';\r\n\r\n//PROVIDERS\r\nexport * from './lib/config/providers/xsrf-provider';\r\nexport * from './lib/config/providers/debounce-plugin-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","debounceTime","i1","i4","takeUntil","i3","finalize","tap","catchError"],"mappings":"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"}