@wlcm/angular 17.5.13 → 17.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/core/esm2022/index.mjs +7 -4
  2. package/core/esm2022/lib/components/default-loader/default-loader.component.mjs +12 -0
  3. package/core/esm2022/lib/components/{calendar-icon → icons/calendar-icon}/calendar-icon.component.mjs +1 -1
  4. package/core/esm2022/lib/components/{chevron-down-icon → icons/chevron-down-icon}/chevron-down-icon.component.mjs +1 -1
  5. package/core/esm2022/lib/components/{close-icon → icons/close-icon}/close-icon.component.mjs +1 -1
  6. package/core/esm2022/lib/components/{search-icon → icons/search-icon}/search-icon.component.mjs +1 -1
  7. package/core/esm2022/lib/components/loader/loader.component.mjs +32 -0
  8. package/core/esm2022/lib/constants/icon.contants.mjs +4 -4
  9. package/core/esm2022/lib/constants/loader.constants.mjs +7 -0
  10. package/core/esm2022/lib/directives/icon.directive.mjs +2 -2
  11. package/core/esm2022/lib/utils/paginated-data-emulator.utils.mjs +20 -0
  12. package/core/fesm2022/wlcm-angular-core.mjs +64 -3
  13. package/core/fesm2022/wlcm-angular-core.mjs.map +1 -1
  14. package/core/index.d.ts +6 -3
  15. package/core/lib/components/default-loader/default-loader.component.d.ts +5 -0
  16. package/core/lib/components/loader/loader.component.d.ts +11 -0
  17. package/core/lib/constants/loader.constants.d.ts +2 -0
  18. package/core/lib/utils/paginated-data-emulator.utils.d.ts +10 -0
  19. package/datepicker/esm2022/lib/components/calendar-header/calendar-header.component.mjs +7 -5
  20. package/datepicker/esm2022/lib/components/range/date-range-calendar-header/date-range-calendar-header.component.mjs +39 -5
  21. package/datepicker/esm2022/lib/components/range/date-range-picker/date-range-picker.component.mjs +14 -9
  22. package/datepicker/esm2022/lib/components/single/datepicker-input-container/datepicker-input-container.component.mjs +2 -2
  23. package/datepicker/esm2022/lib/components/single/datepicker-panel/datepicker-panel.component.mjs +15 -9
  24. package/datepicker/esm2022/lib/constants/datepicker.constants.mjs +3 -1
  25. package/datepicker/esm2022/lib/directives/datepicker-input.base.mjs +20 -4
  26. package/datepicker/esm2022/lib/directives/datepicker-trigger.base.mjs +23 -4
  27. package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input-end.directive.mjs +12 -8
  28. package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input-start.directive.mjs +12 -8
  29. package/datepicker/esm2022/lib/directives/ragne/date-range-picker-input.base.mjs +7 -4
  30. package/datepicker/esm2022/lib/directives/ragne/left-calendar.directive.mjs +10 -5
  31. package/datepicker/esm2022/lib/directives/ragne/right-calendar.directive.mjs +10 -5
  32. package/datepicker/esm2022/lib/directives/single/datepicker-input.directive.mjs +2 -2
  33. package/datepicker/esm2022/lib/models/date-picker.models.mjs +3 -1
  34. package/datepicker/esm2022/lib/models/range/data-range-calendar.models.mjs +21 -3
  35. package/datepicker/fesm2022/wlcm-angular-datepicker.mjs +202 -94
  36. package/datepicker/fesm2022/wlcm-angular-datepicker.mjs.map +1 -1
  37. package/datepicker/lib/components/calendar-header/calendar-header.component.d.ts +3 -1
  38. package/datepicker/lib/components/range/date-range-calendar-header/date-range-calendar-header.component.d.ts +8 -2
  39. package/datepicker/lib/components/range/date-range-picker/date-range-picker.component.d.ts +5 -3
  40. package/datepicker/lib/components/single/datepicker-input-container/datepicker-input-container.component.d.ts +3 -3
  41. package/datepicker/lib/components/single/datepicker-panel/datepicker-panel.component.d.ts +10 -6
  42. package/datepicker/lib/constants/datepicker.constants.d.ts +3 -1
  43. package/datepicker/lib/directives/datepicker-input.base.d.ts +5 -1
  44. package/datepicker/lib/directives/datepicker-trigger.base.d.ts +7 -2
  45. package/datepicker/lib/directives/ragne/date-range-picker-input-end.directive.d.ts +4 -2
  46. package/datepicker/lib/directives/ragne/date-range-picker-input-start.directive.d.ts +4 -2
  47. package/datepicker/lib/directives/ragne/date-range-picker-input.base.d.ts +3 -1
  48. package/datepicker/lib/directives/ragne/left-calendar.directive.d.ts +3 -1
  49. package/datepicker/lib/directives/ragne/right-calendar.directive.d.ts +3 -1
  50. package/datepicker/lib/directives/single/datepicker-input.directive.d.ts +5 -5
  51. package/datepicker/lib/models/date-picker.models.d.ts +8 -1
  52. package/datepicker/lib/models/range/data-range-calendar.models.d.ts +6 -1
  53. package/forms/esm2022/lib/forms/components/form-field/form-field.component.mjs +9 -6
  54. package/forms/fesm2022/wlcm-angular-forms.mjs +8 -5
  55. package/forms/fesm2022/wlcm-angular-forms.mjs.map +1 -1
  56. package/forms/lib/forms/components/form-field/form-field.component.d.ts +2 -1
  57. package/package.json +1 -1
  58. package/search-field/esm2022/lib/components/search-field/search-field.component.mjs +3 -3
  59. package/search-field/fesm2022/wlcm-angular-search-field.mjs +2 -2
  60. package/search-field/fesm2022/wlcm-angular-search-field.mjs.map +1 -1
  61. package/styles/components/calendar/_calendar-header.scss +4 -0
  62. package/styles/components/loader/_loader.scss +168 -0
  63. package/styles/components/loader/index.scss +5 -0
  64. package/styles/core/_all-theme.scss +2 -0
  65. package/table/esm2022/lib/components/table/table.component.mjs +3 -1
  66. package/table/esm2022/lib/components/table-row/table-row.component.mjs +48 -20
  67. package/table/esm2022/lib/components/table-row-actions/table-row-actions.component.mjs +13 -46
  68. package/table/esm2022/lib/directives/scrollable-table-container.directive.mjs +38 -7
  69. package/table/fesm2022/wlcm-angular-table.mjs +86 -61
  70. package/table/fesm2022/wlcm-angular-table.mjs.map +1 -1
  71. package/table/lib/components/table-row/table-row.component.d.ts +9 -4
  72. package/table/lib/components/table-row-actions/table-row-actions.component.d.ts +3 -12
  73. package/table/lib/directives/scrollable-table-container.directive.d.ts +9 -1
  74. /package/core/lib/components/{calendar-icon → icons/calendar-icon}/calendar-icon.component.d.ts +0 -0
  75. /package/core/lib/components/{chevron-down-icon → icons/chevron-down-icon}/chevron-down-icon.component.d.ts +0 -0
  76. /package/core/lib/components/{close-icon → icons/close-icon}/close-icon.component.d.ts +0 -0
  77. /package/core/lib/components/{search-icon → icons/search-icon}/search-icon.component.d.ts +0 -0
@@ -3,19 +3,21 @@ import { DateRange, MatCalendar, MatCalendarUserEvent, MatDateRangeSelectionStra
3
3
  import { DateAdapter } from '@angular/material/core';
4
4
  import { WlcmDateRangePickerConfig } from '../../../models/range/date-range-picker.models';
5
5
  import { WlcmDatepickerTrigger } from '../../../directives/datepicker-trigger.base';
6
+ import { WlcmDatepickerConfig } from '../../../models/date-picker.models';
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class WlcmDateRangePickerComponent {
8
- private config;
9
+ private rangeConfig;
9
10
  private rangeSelectionStrategy;
10
11
  protected localSelectionModel: MatDateSelectionModel<DateRange<Date>>;
11
12
  protected triggerSelectionModel: MatDateSelectionModel<DateRange<Date>>;
12
13
  protected trigger: WlcmDatepickerTrigger<WlcmDateRangePickerComponent>;
14
+ protected datepickerConfig: WlcmDatepickerConfig;
13
15
  protected dateAdapter: DateAdapter<Date>;
14
16
  protected headerComponent: Type<unknown>;
15
17
  private _isViewInitialized;
16
18
  private _isComplete;
17
19
  readonly isComplete: Signal<boolean>;
18
- constructor(config: WlcmDateRangePickerConfig, rangeSelectionStrategy: MatDateRangeSelectionStrategy<Date>, localSelectionModel: MatDateSelectionModel<DateRange<Date>>, triggerSelectionModel: MatDateSelectionModel<DateRange<Date>>, trigger: WlcmDatepickerTrigger<WlcmDateRangePickerComponent>, dateAdapter: DateAdapter<Date>);
20
+ constructor(rangeConfig: WlcmDateRangePickerConfig, rangeSelectionStrategy: MatDateRangeSelectionStrategy<Date>, localSelectionModel: MatDateSelectionModel<DateRange<Date>>, triggerSelectionModel: MatDateSelectionModel<DateRange<Date>>, trigger: WlcmDatepickerTrigger<WlcmDateRangePickerComponent>, datepickerConfig: WlcmDatepickerConfig, dateAdapter: DateAdapter<Date>);
19
21
  leftCalendar: MatCalendar<Date>;
20
22
  rightCalendar: MatCalendar<Date>;
21
23
  leftCalendarElement: ElementRef<HTMLElement>;
@@ -32,6 +34,6 @@ export declare class WlcmDateRangePickerComponent {
32
34
  private get leftCalendarActiveCell();
33
35
  private handleSelectionChanged;
34
36
  private handleRightCalendarPreviewChange;
35
- static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDateRangePickerComponent, [{ optional: true; }, null, null, null, null, null]>;
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDateRangePickerComponent, [{ optional: true; }, null, null, null, null, null, null]>;
36
38
  static ɵcmp: i0.ɵɵComponentDeclaration<WlcmDateRangePickerComponent, "wlcm-date-range-picker", never, {}, {}, never, never, true, never>;
37
39
  }
@@ -6,7 +6,7 @@ import { Observable } from 'rxjs';
6
6
  import { WlcmDatepickerTrigger } from '../../../directives/datepicker-trigger.base';
7
7
  import { Overlay } from '@angular/cdk/overlay';
8
8
  import * as i0 from "@angular/core";
9
- export declare class WlcmDatepickerInputContainerComponent extends WlcmDatepickerTrigger<WlcmDatepickerPanelComponent> implements WlcmFormFieldInput, AfterContentInit {
9
+ export declare class WlcmDatepickerInputContainerComponent<T> extends WlcmDatepickerTrigger<WlcmDatepickerPanelComponent<T>> implements WlcmFormFieldInput, AfterContentInit {
10
10
  protected overlay: Overlay;
11
11
  protected viewContainerRef: ViewContainerRef;
12
12
  protected selectionModel: MatDateSelectionModel<Date>;
@@ -25,6 +25,6 @@ export declare class WlcmDatepickerInputContainerComponent extends WlcmDatepicke
25
25
  isFocused: () => boolean;
26
26
  private get inputElement();
27
27
  private attachFocusBlurListeners;
28
- static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDatepickerInputContainerComponent, [null, null, null, { host: true; }]>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<WlcmDatepickerInputContainerComponent, "wlcm-datepicker-input-container", ["wlcmDatepicker"], {}, {}, ["inputRef"], ["[wlcmDatepickerInput]"], true, never>;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDatepickerInputContainerComponent<any>, [null, null, null, { host: true; }]>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<WlcmDatepickerInputContainerComponent<any>, "wlcm-datepicker-input-container", ["wlcmDatepicker"], {}, {}, ["inputRef"], ["[wlcmDatepickerInput]"], true, never>;
30
30
  }
@@ -1,13 +1,17 @@
1
- import { MatDateSelectionModel } from '@angular/material/datepicker';
1
+ import { Signal } from '@angular/core';
2
+ import { MatCalendar, MatDateSelectionModel } from '@angular/material/datepicker';
2
3
  import { WlcmCalendarHeaderComponent } from '../../calendar-header/calendar-header.component';
3
4
  import { WlcmDatepickerTrigger } from '../../../directives/datepicker-trigger.base';
5
+ import { WlcmDatepickerConfig } from '../../../models/date-picker.models';
4
6
  import * as i0 from "@angular/core";
5
- export declare class WlcmDatepickerPanelComponent {
7
+ export declare class WlcmDatepickerPanelComponent<D> {
6
8
  protected selectionModel: MatDateSelectionModel<Date>;
7
- protected trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent>;
9
+ protected trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent<D>>;
10
+ protected config: WlcmDatepickerConfig;
8
11
  protected headerComponent: typeof WlcmCalendarHeaderComponent;
9
- constructor(selectionModel: MatDateSelectionModel<Date>, trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent>);
12
+ matCalendar: Signal<MatCalendar<D> | undefined>;
13
+ constructor(selectionModel: MatDateSelectionModel<Date>, trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent<D>>, config: WlcmDatepickerConfig);
10
14
  select(date: Date): void;
11
- static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDatepickerPanelComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<WlcmDatepickerPanelComponent, "wlcm-datepicker-panel", never, {}, {}, never, never, true, never>;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDatepickerPanelComponent<any>, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<WlcmDatepickerPanelComponent<any>, "wlcm-datepicker-panel", never, {}, {}, never, never, true, never>;
13
17
  }
@@ -1,4 +1,6 @@
1
- import { Provider } from '@angular/core';
1
+ import { InjectionToken, Provider } from '@angular/core';
2
2
  import { MatDateFormats } from '@angular/material/core';
3
+ import { WlcmDatepickerConfig } from '../models/date-picker.models';
3
4
  export declare const WLCM_DEFAULT_DATE_FORMATS: MatDateFormats;
4
5
  export declare const WLCM_DEFAULT_DATEPICKER_PROVIDERS: Provider[];
6
+ export declare const WLCM_DATEPICKER_CONFIG: InjectionToken<WlcmDatepickerConfig>;
@@ -1,17 +1,19 @@
1
1
  import { ElementRef } from '@angular/core';
2
2
  import { ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
3
3
  import { DateAdapter, MatDateFormats } from '@angular/material/core';
4
+ import { WlcmDatepickerTrigger } from './datepicker-trigger.base';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare abstract class WlcmDatepickerInputBase implements ControlValueAccessor, Validator {
6
7
  protected element: ElementRef;
7
8
  protected dateAdapter: DateAdapter<Date>;
8
9
  protected dateFormats: MatDateFormats;
10
+ protected trigger: WlcmDatepickerTrigger<unknown>;
9
11
  handleBlur(): void;
10
12
  handleInput(): void;
11
13
  protected _changed?: (value: Date | null) => void;
12
14
  protected _touched?: () => void;
13
15
  protected _validatorChanged?: () => void;
14
- constructor(element: ElementRef, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats);
16
+ constructor(element: ElementRef, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, trigger: WlcmDatepickerTrigger<unknown>);
15
17
  writeValue(value: Date | null): void;
16
18
  registerOnChange(callback: (value: Date | null) => void): void;
17
19
  registerOnTouched(callback: () => void): void;
@@ -20,6 +22,8 @@ export declare abstract class WlcmDatepickerInputBase implements ControlValueAcc
20
22
  parseCurrentValue(): Date | null;
21
23
  protected isValidFormat(value: string, pattern: string): boolean;
22
24
  protected abstract updateSelection(): void;
25
+ protected get minDate(): Date | undefined;
26
+ protected get maxDate(): Date | undefined;
23
27
  protected get inputElement(): HTMLInputElement;
24
28
  protected get currentValue(): string;
25
29
  protected updateInputValue(value: Date | null): void;
@@ -1,12 +1,15 @@
1
1
  import { OverlayRef, Overlay } from '@angular/cdk/overlay';
2
- import { ElementRef, Type, ComponentRef, ViewContainerRef } from '@angular/core';
2
+ import { ElementRef, Type, ComponentRef, ViewContainerRef, Injector, InputSignal } from '@angular/core';
3
3
  import { MatDateSelectionModel } from '@angular/material/datepicker';
4
4
  import { Observable } from 'rxjs';
5
+ import { WlcmDatepickerConfig } from '../models/date-picker.models';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare abstract class WlcmDatepickerTrigger<T, D = Date> {
7
8
  protected overlay: Overlay;
8
9
  protected viewContainerRef: ViewContainerRef;
9
10
  protected selectionModel: MatDateSelectionModel<D>;
11
+ minDate: InputSignal<Date | undefined>;
12
+ maxDate: InputSignal<Date | undefined>;
10
13
  protected overlayRef: OverlayRef;
11
14
  protected abstract connectedTo: ElementRef<HTMLElement>;
12
15
  protected abstract componentType: Type<T>;
@@ -17,10 +20,12 @@ export declare abstract class WlcmDatepickerTrigger<T, D = Date> {
17
20
  get isOpen(): boolean;
18
21
  get opened(): Observable<void>;
19
22
  get closed(): Observable<void>;
23
+ get datepickerInjector(): Injector;
24
+ get datepickerConfig(): WlcmDatepickerConfig;
20
25
  private get overlayOrigin();
21
26
  private handleBackdropClick;
22
27
  private updatePositionStrategy;
23
28
  private createOverlayConfig;
24
29
  static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDatepickerTrigger<any, any>, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<WlcmDatepickerTrigger<any, any>, never, never, {}, {}, never, never, false, never>;
30
+ static ɵdir: i0.ɵɵDirectiveDeclaration<WlcmDatepickerTrigger<any, any>, never, never, { "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, never, false, never>;
26
31
  }
@@ -3,16 +3,18 @@ import { WlcmDateRangePickerInputBase } from './date-range-picker-input.base';
3
3
  import { DateAdapter, MatDateFormats } from '@angular/material/core';
4
4
  import { MatDateSelectionModel, DateRange } from '@angular/material/datepicker';
5
5
  import { ValidationErrors } from '@angular/forms';
6
+ import { WlcmDatepickerTrigger } from '../datepicker-trigger.base';
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class DateRangePickerInputEndDirective extends WlcmDateRangePickerInputBase {
8
9
  element: ElementRef<HTMLInputElement>;
9
10
  protected dateAdapter: DateAdapter<Date>;
10
11
  protected dateFormats: MatDateFormats;
11
12
  protected selectionModel: MatDateSelectionModel<DateRange<Date>>;
12
- constructor(element: ElementRef<HTMLInputElement>, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, selectionModel: MatDateSelectionModel<DateRange<Date>>);
13
+ protected trigger: WlcmDatepickerTrigger<unknown>;
14
+ constructor(element: ElementRef<HTMLInputElement>, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, selectionModel: MatDateSelectionModel<DateRange<Date>>, trigger: WlcmDatepickerTrigger<unknown>);
13
15
  validate(): ValidationErrors | null;
14
16
  updateSelection: () => void;
15
17
  private handleSelectionChange;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerInputEndDirective, [null, null, { optional: true; }, null]>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerInputEndDirective, [null, null, { optional: true; }, null, null]>;
17
19
  static ɵdir: i0.ɵɵDirectiveDeclaration<DateRangePickerInputEndDirective, "[wlcmDateRangePickerInputEnd]", never, {}, {}, never, never, true, never>;
18
20
  }
@@ -3,16 +3,18 @@ import { WlcmDateRangePickerInputBase } from './date-range-picker-input.base';
3
3
  import { DateAdapter, MatDateFormats } from '@angular/material/core';
4
4
  import { MatDateSelectionModel, DateRange } from '@angular/material/datepicker';
5
5
  import { ValidationErrors } from '@angular/forms';
6
+ import { WlcmDatepickerTrigger } from '../datepicker-trigger.base';
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class DateRangePickerInputStartDirective extends WlcmDateRangePickerInputBase {
8
9
  element: ElementRef<HTMLInputElement>;
9
10
  protected dateAdapter: DateAdapter<Date>;
10
11
  protected dateFormats: MatDateFormats;
11
12
  protected selectionModel: MatDateSelectionModel<DateRange<Date>>;
12
- constructor(element: ElementRef<HTMLInputElement>, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, selectionModel: MatDateSelectionModel<DateRange<Date>>);
13
+ protected trigger: WlcmDatepickerTrigger<unknown>;
14
+ constructor(element: ElementRef<HTMLInputElement>, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, selectionModel: MatDateSelectionModel<DateRange<Date>>, trigger: WlcmDatepickerTrigger<unknown>);
13
15
  validate(): ValidationErrors | null;
14
16
  updateSelection: () => void;
15
17
  private handleSelectionChange;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerInputStartDirective, [null, null, { optional: true; }, null]>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerInputStartDirective, [null, null, { optional: true; }, null, null]>;
17
19
  static ɵdir: i0.ɵɵDirectiveDeclaration<DateRangePickerInputStartDirective, "[wlcmDateRangePickerInputStart]", never, {}, {}, never, never, true, never>;
18
20
  }
@@ -2,13 +2,15 @@ import { AfterViewInit, ElementRef } from '@angular/core';
2
2
  import { ControlValueAccessor, Validator } from '@angular/forms';
3
3
  import { DateAdapter, MatDateFormats } from '@angular/material/core';
4
4
  import { WlcmDatepickerInputBase } from '../datepicker-input.base';
5
+ import { WlcmDatepickerTrigger } from '../datepicker-trigger.base';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare abstract class WlcmDateRangePickerInputBase extends WlcmDatepickerInputBase implements AfterViewInit, ControlValueAccessor, Validator {
7
8
  element: ElementRef<HTMLInputElement>;
8
9
  protected dateAdapter: DateAdapter<Date>;
9
10
  protected dateFormats: MatDateFormats;
11
+ protected trigger: WlcmDatepickerTrigger<unknown>;
10
12
  private _inputMirror;
11
- constructor(element: ElementRef<HTMLInputElement>, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats);
13
+ constructor(element: ElementRef<HTMLInputElement>, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, trigger: WlcmDatepickerTrigger<unknown>);
12
14
  ngAfterViewInit(): void;
13
15
  handleInput(): void;
14
16
  protected updateInputValue(value: Date | null): void;
@@ -2,12 +2,14 @@ import { ElementRef } from '@angular/core';
2
2
  import { DateAdapter } from '@angular/material/core';
3
3
  import { MatCalendar } from '@angular/material/datepicker';
4
4
  import { WlcmDataRangeCalendar } from '../../models/range/data-range-calendar.models';
5
+ import { WlcmDatepickerConfig } from '../../models/date-picker.models';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare class WlcmLeftCalendarDirective extends WlcmDataRangeCalendar {
7
8
  element: ElementRef<HTMLElement>;
8
9
  protected dateAdapter: DateAdapter<Date>;
9
10
  protected calendar: MatCalendar<Date>;
10
- constructor(element: ElementRef<HTMLElement>, dateAdapter: DateAdapter<Date>, calendar: MatCalendar<Date>);
11
+ protected datepickerConfig: WlcmDatepickerConfig;
12
+ constructor(element: ElementRef<HTMLElement>, dateAdapter: DateAdapter<Date>, calendar: MatCalendar<Date>, datepickerConfig: WlcmDatepickerConfig);
11
13
  handleYearChange(): void;
12
14
  handleMonthChange(): void;
13
15
  static ɵfac: i0.ɵɵFactoryDeclaration<WlcmLeftCalendarDirective, never>;
@@ -2,12 +2,14 @@ import { ElementRef } from '@angular/core';
2
2
  import { WlcmDataRangeCalendar } from '../../models/range/data-range-calendar.models';
3
3
  import { MatCalendar } from '@angular/material/datepicker';
4
4
  import { DateAdapter } from '@angular/material/core';
5
+ import { WlcmDatepickerConfig } from '../../models/date-picker.models';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare class WlcmRightCalendarDirective extends WlcmDataRangeCalendar {
7
8
  element: ElementRef<HTMLElement>;
8
9
  protected dateAdapter: DateAdapter<Date>;
9
10
  protected calendar: MatCalendar<Date>;
10
- constructor(element: ElementRef<HTMLElement>, dateAdapter: DateAdapter<Date>, calendar: MatCalendar<Date>);
11
+ protected datepickerConfig: WlcmDatepickerConfig;
12
+ constructor(element: ElementRef<HTMLElement>, dateAdapter: DateAdapter<Date>, calendar: MatCalendar<Date>, datepickerConfig: WlcmDatepickerConfig);
11
13
  handleYearChange(): void;
12
14
  handleMonthChange(): void;
13
15
  nextMonth(): void;
@@ -6,16 +6,16 @@ import { MatDateSelectionModel } from '@angular/material/datepicker';
6
6
  import { WlcmDatepickerInputBase } from '../datepicker-input.base';
7
7
  import { WlcmDatepickerTrigger } from '../datepicker-trigger.base';
8
8
  import * as i0 from "@angular/core";
9
- export declare class WlcmDatepickerInputDirective extends WlcmDatepickerInputBase implements ControlValueAccessor, Validator {
9
+ export declare class WlcmDatepickerInputDirective<T> extends WlcmDatepickerInputBase implements ControlValueAccessor, Validator {
10
10
  protected element: ElementRef;
11
11
  protected dateAdapter: DateAdapter<Date>;
12
12
  protected dateFormats: MatDateFormats;
13
13
  protected selectionModel: MatDateSelectionModel<Date | null>;
14
- protected trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent>;
15
- constructor(element: ElementRef, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, selectionModel: MatDateSelectionModel<Date | null>, trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent>);
14
+ protected trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent<T>>;
15
+ constructor(element: ElementRef, dateAdapter: DateAdapter<Date>, dateFormats: MatDateFormats, selectionModel: MatDateSelectionModel<Date | null>, trigger: WlcmDatepickerTrigger<WlcmDatepickerPanelComponent<T>>);
16
16
  updateSelection(): void;
17
17
  private handleClosePanel;
18
18
  private handleSelectionChange;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDatepickerInputDirective, never>;
20
- static ɵdir: i0.ɵɵDirectiveDeclaration<WlcmDatepickerInputDirective, "[wlcmDatepickerInput]", ["wlcmDatepickerInput"], {}, {}, never, never, true, never>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDatepickerInputDirective<any>, never>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<WlcmDatepickerInputDirective<any>, "[wlcmDatepickerInput]", ["wlcmDatepickerInput"], {}, {}, never, never, true, never>;
21
21
  }
@@ -1,3 +1,4 @@
1
+ import { Signal } from '@angular/core';
1
2
  import { DateFnsAdapter } from '@angular/material-date-fns-adapter';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class WlcmDateAdapter extends DateFnsAdapter {
@@ -6,5 +7,11 @@ export declare class WlcmDateAdapter extends DateFnsAdapter {
6
7
  static ɵprov: i0.ɵɵInjectableDeclaration<WlcmDateAdapter>;
7
8
  }
8
9
  export declare enum WlcmDateValidation {
9
- Format = "WlcmInvalidDateFormat"
10
+ Format = "WlcmInvalidDateFormat",
11
+ MinDate = "WlcmDateIsBeforeMinDate",
12
+ MaxDate = "WlcmDateIsAfterMaxDate"
13
+ }
14
+ export interface WlcmDatepickerConfig {
15
+ minDate?: Signal<Date | undefined>;
16
+ maxDate?: Signal<Date | undefined>;
10
17
  }
@@ -1,20 +1,25 @@
1
1
  import { ElementRef, InputSignal, OutputEmitterRef } from '@angular/core';
2
2
  import { MatCalendar, MatCalendarView } from '@angular/material/datepicker';
3
+ import { WlcmDatepickerConfig } from '../date-picker.models';
3
4
  import { DateAdapter } from '@angular/material/core';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class WlcmDataRangeCalendar {
6
7
  element: ElementRef<HTMLElement>;
7
8
  protected calendar: MatCalendar<Date>;
8
9
  protected dateAdapter: DateAdapter<Date>;
10
+ protected datepickerConfig: WlcmDatepickerConfig;
9
11
  location: 'left' | 'right';
10
12
  readonly dateChange: OutputEmitterRef<Date>;
11
13
  readonly viewChange: OutputEmitterRef<MatCalendarView>;
12
14
  readonly disabled: InputSignal<boolean>;
13
- constructor(location: 'left' | 'right', element: ElementRef<HTMLElement>, calendar: MatCalendar<Date>, dateAdapter: DateAdapter<Date>);
15
+ constructor(location: 'left' | 'right', element: ElementRef<HTMLElement>, calendar: MatCalendar<Date>, dateAdapter: DateAdapter<Date>, datepickerConfig: WlcmDatepickerConfig);
16
+ get minDate(): Date | undefined;
17
+ get maxDate(): Date | undefined;
14
18
  prevMonth(): void;
15
19
  nextMonth(): void;
16
20
  prevYear(): void;
17
21
  nextYear(): void;
22
+ handleConfigValues(): void;
18
23
  static ɵfac: i0.ɵɵFactoryDeclaration<WlcmDataRangeCalendar, never>;
19
24
  static ɵdir: i0.ɵɵDirectiveDeclaration<WlcmDataRangeCalendar, never, never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "dateChange": "dateChange"; "viewChange": "viewChange"; }, never, never, false, never>;
20
25
  }
@@ -1,5 +1,5 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, HostBinding, Inject, Optional, ViewChild, forwardRef, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, HostBinding, Inject, Input, Optional, ViewChild, forwardRef, } from '@angular/core';
3
3
  import { Validators, ControlContainer, NgControl } from '@angular/forms';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { WlcmErrorComponent } from '../error/error.component';
@@ -32,6 +32,7 @@ let WlcmFormFieldComponent = class WlcmFormFieldComponent {
32
32
  constructor(parentFormMember, changeDetectorRef) {
33
33
  this.parentFormMember = parentFormMember;
34
34
  this.changeDetectorRef = changeDetectorRef;
35
+ this.displayErrorMessages = true;
35
36
  }
36
37
  ngAfterViewInit() {
37
38
  if (!this.inputRef && !this.customContainer) {
@@ -72,10 +73,10 @@ let WlcmFormFieldComponent = class WlcmFormFieldComponent {
72
73
  return events;
73
74
  }
74
75
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldComponent, deps: [{ token: WLCM_FORM_CONTROL, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
75
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: WlcmFormFieldComponent, isStandalone: true, selector: "wlcm-form-field", host: { properties: { "class.wlcm-field-focused": "this.isFocused", "class.wlcm-field-required": "this.isRequired", "class.wlcm-field-invalid": "this.isInvalid", "class.wlcm-field-touched": "this.isTouched", "class.wlcm-field-disabled": "this.isDisabled" }, classAttribute: "wlcm-form-field" }, providers: [
76
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: WlcmFormFieldComponent, isStandalone: true, selector: "wlcm-form-field", inputs: { displayErrorMessages: "displayErrorMessages" }, host: { properties: { "class.wlcm-field-focused": "this.isFocused", "class.wlcm-field-required": "this.isRequired", "class.wlcm-field-invalid": "this.isInvalid", "class.wlcm-field-touched": "this.isTouched", "class.wlcm-field-disabled": "this.isDisabled" }, classAttribute: "wlcm-form-field" }, providers: [
76
77
  WLCM_FORM_CONTROL_PROVIDER,
77
78
  { provide: WLCM_FORM_FIELD, useExisting: forwardRef(() => WlcmFormFieldComponent) },
78
- ], queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true }, { propertyName: "controlContainer", first: true, predicate: ControlContainer, descendants: true }, { propertyName: "_inputRef", first: true, predicate: WLCM_INPUT, descendants: true }, { propertyName: "prefix", first: true, predicate: WlcmFormFieldPrefixDirective, descendants: true }, { propertyName: "suffix", first: true, predicate: WlcmFormFieldSuffixDirective, descendants: true }, { propertyName: "customContainer", first: true, predicate: WlcmFormFieldCustomContainerDirective, descendants: true }], viewQueries: [{ propertyName: "defaultContainer", first: true, predicate: ["defaultContainer"], descendants: true }], ngImport: i0, template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WlcmErrorComponent, selector: "wlcm-error" }, { kind: "pipe", type: ErrorsMapperPipe, name: "errorsMapper" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
79
+ ], queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true }, { propertyName: "controlContainer", first: true, predicate: ControlContainer, descendants: true }, { propertyName: "_inputRef", first: true, predicate: WLCM_INPUT, descendants: true }, { propertyName: "prefix", first: true, predicate: WlcmFormFieldPrefixDirective, descendants: true }, { propertyName: "suffix", first: true, predicate: WlcmFormFieldSuffixDirective, descendants: true }, { propertyName: "customContainer", first: true, predicate: WlcmFormFieldCustomContainerDirective, descendants: true }], viewQueries: [{ propertyName: "defaultContainer", first: true, predicate: ["defaultContainer"], descendants: true }], ngImport: i0, template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control && displayErrorMessages\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WlcmErrorComponent, selector: "wlcm-error" }, { kind: "pipe", type: ErrorsMapperPipe, name: "errorsMapper" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
79
80
  };
80
81
  WlcmFormFieldComponent = __decorate([
81
82
  UntilDestroy(),
@@ -87,13 +88,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
87
88
  args: [{ selector: 'wlcm-form-field', standalone: true, imports: [CommonModule, WlcmErrorComponent, ErrorsMapperPipe], host: { class: 'wlcm-form-field' }, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
88
89
  WLCM_FORM_CONTROL_PROVIDER,
89
90
  { provide: WLCM_FORM_FIELD, useExisting: forwardRef(() => WlcmFormFieldComponent) },
90
- ], template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n" }]
91
+ ], template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control && displayErrorMessages\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n" }]
91
92
  }], ctorParameters: () => [{ type: undefined, decorators: [{
92
93
  type: Optional
93
94
  }, {
94
95
  type: Inject,
95
96
  args: [WLCM_FORM_CONTROL]
96
- }] }, { type: i0.ChangeDetectorRef }], propDecorators: { ngControl: [{
97
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { displayErrorMessages: [{
98
+ type: Input
99
+ }], ngControl: [{
97
100
  type: ContentChild,
98
101
  args: [NgControl, { descendants: true }]
99
102
  }], controlContainer: [{
@@ -130,4 +133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
130
133
  type: HostBinding,
131
134
  args: ['class.wlcm-field-disabled']
132
135
  }] } });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2Zvcm1zL3NyYy9saWIvZm9ybXMvY29tcG9uZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9mb3Jtcy9zcmMvbGliL2Zvcm1zL2NvbXBvbmVudHMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQW1CLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFHNUYsT0FBTyxF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cUNBQXFDO2dCQUl6QyxnQkFBZ0I7c0JBRHpCLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUdnQixTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFJTyxVQUFVO3NCQUF2RCxXQUFXO3VCQUFDLDJCQUEyQjtnQkFJSyxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFJTSxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFJTyxVQUFVO3NCQUF2RCxXQUFXO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIE9wdGlvbmFsLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV2xjbUVycm9yQ29tcG9uZW50IH0gZnJvbSAnLi4vZXJyb3IvZXJyb3IuY29tcG9uZW50JztcbmltcG9ydCB7IFdMQ01fRk9STV9DT05UUk9MLCBXTENNX0ZPUk1fQ09OVFJPTF9QUk9WSURFUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9mb3JtLXN0YXRlLWhhbmRsZXJzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBXbGNtRm9ybUZpZWxkQ3VzdG9tQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWZpZWxkLWN1c3RvbS1jb250YWluZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgRXJyb3JzTWFwcGVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2Vycm9ycy1tYXBwZXIucGlwZSc7XG5pbXBvcnQgeyBXTENNX0ZPUk1fRklFTEQsIFdMQ01fSU5QVVQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZm9ybS1lbGVtZW50cy5jb25zdGFudHMnO1xuaW1wb3J0IHsgV2xjbUZvcm1GaWVsZFByZWZpeERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9ybS1maWVsZC1wcmVmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IFdsY21Gb3JtRmllbGRJbnB1dCwgV2xjbUlucHV0R2V0dGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2lucHV0Lm1vZGVscyc7XG5pbXBvcnQgeyBXbGNtRm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS5tb2RlbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFdsY21Gb3JtRmllbGRTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tZmllbGQtc3VmZml4LmRpcmVjdGl2ZSc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd2xjbS1mb3JtLWZpZWxkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV2xjbUVycm9yQ29tcG9uZW50LCBFcnJvcnNNYXBwZXJQaXBlXSxcbiAgaG9zdDogeyBjbGFzczogJ3dsY20tZm9ybS1maWVsZCcgfSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBXTENNX0ZPUk1fQ09OVFJPTF9QUk9WSURFUixcbiAgICB7IHByb3ZpZGU6IFdMQ01fRk9STV9GSUVMRCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV2xjbUZvcm1GaWVsZENvbXBvbmVudCkgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV2xjbUZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAQ29udGVudENoaWxkKE5nQ29udHJvbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwcml2YXRlIG5nQ29udHJvbD86IE5nQ29udHJvbDtcblxuICBAQ29udGVudENoaWxkKENvbnRyb2xDb250YWluZXIsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyPzogQ29udHJvbENvbnRhaW5lcjtcblxuICBAQ29udGVudENoaWxkKFdMQ01fSU5QVVQpIHByaXZhdGUgX2lucHV0UmVmPzogV2xjbUlucHV0R2V0dGVyO1xuXG4gIEBDb250ZW50Q2hpbGQoV2xjbUZvcm1GaWVsZFByZWZpeERpcmVjdGl2ZSkgcHJvdGVjdGVkIHByZWZpeD86IFdsY21Gb3JtRmllbGRQcmVmaXhEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZChXbGNtRm9ybUZpZWxkU3VmZml4RGlyZWN0aXZlKSBwcm90ZWN0ZWQgc3VmZml4PzogV2xjbUZvcm1GaWVsZFN1ZmZpeERpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFdsY21Gb3JtRmllbGRDdXN0b21Db250YWluZXJEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBjdXN0b21Db250YWluZXI/OiBXbGNtRm9ybUZpZWxkQ3VzdG9tQ29udGFpbmVyRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRDb250YWluZXInKVxuICBwcm90ZWN0ZWQgZGVmYXVsdENvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2xjbS1maWVsZC1mb2N1c2VkJykgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dFJlZj8uaXNGb2N1c2VkKCkgPz8gZmFsc2U7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndsY20tZmllbGQtcmVxdWlyZWQnKSBnZXQgaXNSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndsY20tZmllbGQtaW52YWxpZCcpIGdldCBpc0ludmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbD8uaW52YWxpZDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2xjbS1maWVsZC10b3VjaGVkJykgZ2V0IGlzVG91Y2hlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sPy50b3VjaGVkO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy53bGNtLWZpZWxkLWRpc2FibGVkJykgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoV0xDTV9GT1JNX0NPTlRST0wpXG4gICAgcHJpdmF0ZSBwYXJlbnRGb3JtTWVtYmVyOiBXbGNtRm9ybUNvbnRyb2wsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRSZWYgJiYgIXRoaXMuY3VzdG9tQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGVsZW1lbnQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSB3bGNtSW5wdXQgZGlyZWN0aXZlLicpO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlU3RhdGVDaGFuZ2VzKCk7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNGb2N1c2VkKSB0aGlzLmlucHV0UmVmPy5mb2N1cygpO1xuICB9XG5cbiAgZ2V0IGNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuICh0aGlzLmNvbnRyb2xDb250YWluZXI/LmNvbnRyb2wgfHwgdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpID8/IG51bGw7XG4gIH1cblxuICBnZXQgaW5wdXRDb250YWluZXIoKTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbUNvbnRhaW5lcj8uZWxlbWVudFJlZiB8fCAodGhpcy5kZWZhdWx0Q29udGFpbmVyIGFzIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3RhdGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50czogT2JzZXJ2YWJsZTx1bmtub3duPltdID0gdGhpcy5jb250cm9sRXZlbnRzO1xuXG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybU1lbWJlcikge1xuICAgICAgZXZlbnRzLnB1c2godGhpcy5wYXJlbnRGb3JtTWVtYmVyLnN0YXRlQ2hhbmdlcyQpO1xuICAgIH1cblxuICAgIG1lcmdlKC4uLmV2ZW50cylcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlucHV0UmVmKCk6IFdsY21Gb3JtRmllbGRJbnB1dCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0UmVmPy5nZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbnRyb2xFdmVudHMoKTogT2JzZXJ2YWJsZTx1bmtub3duPltdIHtcbiAgICBjb25zdCBldmVudHM6IE9ic2VydmFibGU8dW5rbm93bj5bXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuaW5wdXRSZWYpIHtcbiAgICAgIGV2ZW50cy5wdXNoKHRoaXMuaW5wdXRSZWYuZm9jdXMkLCB0aGlzLmlucHV0UmVmLmJsdXIkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICBldmVudHMucHVzaCh0aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50cztcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwid2xjbS1sYWJlbFwiPjwvbmctY29udGVudD5cblxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3dsY21Gb3JtRmllbGRDdXN0b21Db250YWluZXJdXCI+PC9uZy1jb250ZW50PlxuXG48ZGl2XG4gIGNsYXNzPVwid2xjbS1maWVsZC1jb250YWluZXJcIlxuICAoY2xpY2spPVwiZm9jdXMoKVwiXG4gICNkZWZhdWx0Q29udGFpbmVyXG4gICpuZ0lmPVwiIWN1c3RvbUNvbnRhaW5lclwiXG4+XG4gIDxkaXYgY2xhc3M9XCJ3bGNtLWZpZWxkLXByZWZpeFwiIFtjbGFzcy5jb250YWlucy1jaGlsZHJlbl09XCJwcmVmaXhcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbd2xjbUZvcm1GaWVsZFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt3bGNtSW5wdXRdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxkaXYgY2xhc3M9XCJ3bGNtLWZpZWxkLXN1ZmZpeFwiIFtjbGFzcy5jb250YWlucy1jaGlsZHJlbl09XCJzdWZmaXhcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbd2xjbUZvcm1GaWVsZFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250ZW50IHNlbGVjdD1cIlt3bGNtRm9ybUZpZWxkSGludF1cIj48L25nLWNvbnRlbnQ+XG5cbjxkaXYgY2xhc3M9XCJ3bGNtLWZpZWxkLWVycm9yLWNvbnRhaW5lclwiICpuZ0lmPVwiY29udHJvbFwiPlxuICA8d2xjbS1lcnJvcj57eyAkYW55KGNvbnRyb2wpIHwgZXJyb3JzTWFwcGVyIH19PC93bGNtLWVycm9yPlxuPC9kaXY+XG4iXX0=
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2Zvcm1zL3NyYy9saWIvZm9ybXMvY29tcG9uZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9mb3Jtcy9zcmMvbGliL2Zvcm1zL2NvbXBvbmVudHMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFtQixnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDOUcsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FB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Z0JBRVksTUFBTTtzQkFBM0QsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBR2hDLGVBQWU7c0JBRHhCLFlBQVk7dUJBQUMscUNBQXFDO2dCQUl6QyxnQkFBZ0I7c0JBRHpCLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUdnQixTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFJTyxVQUFVO3NCQUF2RCxXQUFXO3VCQUFDLDJCQUEyQjtnQkFJSyxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFJTSxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFJTyxVQUFVO3NCQUF2RCxXQUFXO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvcnMsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFdsY21FcnJvckNvbXBvbmVudCB9IGZyb20gJy4uL2Vycm9yL2Vycm9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXTENNX0ZPUk1fQ09OVFJPTCwgV0xDTV9GT1JNX0NPTlRST0xfUFJPVklERVIgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZm9ybS1zdGF0ZS1oYW5kbGVycy5jb25zdGFudHMnO1xuaW1wb3J0IHsgV2xjbUZvcm1GaWVsZEN1c3RvbUNvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9ybS1maWVsZC1jdXN0b20tY29udGFpbmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IEVycm9yc01hcHBlclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9lcnJvcnMtbWFwcGVyLnBpcGUnO1xuaW1wb3J0IHsgV0xDTV9GT1JNX0ZJRUxELCBXTENNX0lOUFVUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Zvcm0tZWxlbWVudHMuY29uc3RhbnRzJztcbmltcG9ydCB7IFdsY21Gb3JtRmllbGRQcmVmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tZmllbGQtcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBXbGNtRm9ybUZpZWxkSW5wdXQsIFdsY21JbnB1dEdldHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9pbnB1dC5tb2RlbHMnO1xuaW1wb3J0IHsgV2xjbUZvcm1Db250cm9sIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBXbGNtRm9ybUZpZWxkU3VmZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWZpZWxkLXN1ZmZpeC5kaXJlY3RpdmUnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dsY20tZm9ybS1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFdsY21FcnJvckNvbXBvbmVudCwgRXJyb3JzTWFwcGVyUGlwZV0sXG4gIGhvc3Q6IHsgY2xhc3M6ICd3bGNtLWZvcm0tZmllbGQnIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgV0xDTV9GT1JNX0NPTlRST0xfUFJPVklERVIsXG4gICAgeyBwcm92aWRlOiBXTENNX0ZPUk1fRklFTEQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFdsY21Gb3JtRmllbGRDb21wb25lbnQpIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdsY21Gb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgZGlzcGxheUVycm9yTWVzc2FnZXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBDb250ZW50Q2hpbGQoTmdDb250cm9sLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHByaXZhdGUgbmdDb250cm9sPzogTmdDb250cm9sO1xuXG4gIEBDb250ZW50Q2hpbGQoQ29udHJvbENvbnRhaW5lciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI/OiBDb250cm9sQ29udGFpbmVyO1xuXG4gIEBDb250ZW50Q2hpbGQoV0xDTV9JTlBVVCkgcHJpdmF0ZSBfaW5wdXRSZWY/OiBXbGNtSW5wdXRHZXR0ZXI7XG5cbiAgQENvbnRlbnRDaGlsZChXbGNtRm9ybUZpZWxkUHJlZml4RGlyZWN0aXZlKSBwcm90ZWN0ZWQgcHJlZml4PzogV2xjbUZvcm1GaWVsZFByZWZpeERpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFdsY21Gb3JtRmllbGRTdWZmaXhEaXJlY3RpdmUpIHByb3RlY3RlZCBzdWZmaXg/OiBXbGNtRm9ybUZpZWxkU3VmZml4RGlyZWN0aXZlO1xuXG4gIEBDb250ZW50Q2hpbGQoV2xjbUZvcm1GaWVsZEN1c3RvbUNvbnRhaW5lckRpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGN1c3RvbUNvbnRhaW5lcj86IFdsY21Gb3JtRmllbGRDdXN0b21Db250YWluZXJEaXJlY3RpdmU7XG5cbiAgQFZpZXdDaGlsZCgnZGVmYXVsdENvbnRhaW5lcicpXG4gIHByb3RlY3RlZCBkZWZhdWx0Q29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy53bGNtLWZpZWxkLWZvY3VzZWQnKSBnZXQgaXNGb2N1c2VkKCkge1xuICAgIHJldHVybiB0aGlzLmlucHV0UmVmPy5pc0ZvY3VzZWQoKSA/PyBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2xjbS1maWVsZC1yZXF1aXJlZCcpIGdldCBpc1JlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2xjbS1maWVsZC1pbnZhbGlkJykgZ2V0IGlzSW52YWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sPy5pbnZhbGlkO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy53bGNtLWZpZWxkLXRvdWNoZWQnKSBnZXQgaXNUb3VjaGVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2w/LnRvdWNoZWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndsY20tZmllbGQtZGlzYWJsZWQnKSBnZXQgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sPy5kaXNhYmxlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChXTENNX0ZPUk1fQ09OVFJPTClcbiAgICBwcml2YXRlIHBhcmVudEZvcm1NZW1iZXI6IFdsY21Gb3JtQ29udHJvbCxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dFJlZiAmJiAhdGhpcy5jdXN0b21Db250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgZWxlbWVudCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIHdsY21JbnB1dCBkaXJlY3RpdmUuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVTdGF0ZUNoYW5nZXMoKTtcbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHRoaXMuaW5wdXRSZWY/LmZvY3VzKCk7XG4gIH1cblxuICBnZXQgY29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgICByZXR1cm4gKHRoaXMuY29udHJvbENvbnRhaW5lcj8uY29udHJvbCB8fCB0aGlzLm5nQ29udHJvbD8uY29udHJvbCkgPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBpbnB1dENvbnRhaW5lcigpOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tQ29udGFpbmVyPy5lbGVtZW50UmVmIHx8ICh0aGlzLmRlZmF1bHRDb250YWluZXIgYXMgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRzOiBPYnNlcnZhYmxlPHVua25vd24+W10gPSB0aGlzLmNvbnRyb2xFdmVudHM7XG5cbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtTWVtYmVyKSB7XG4gICAgICBldmVudHMucHVzaCh0aGlzLnBhcmVudEZvcm1NZW1iZXIuc3RhdGVDaGFuZ2VzJCk7XG4gICAgfVxuXG4gICAgbWVyZ2UoLi4uZXZlbnRzKVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaW5wdXRSZWYoKTogV2xjbUZvcm1GaWVsZElucHV0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRSZWY/LmdldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29udHJvbEV2ZW50cygpOiBPYnNlcnZhYmxlPHVua25vd24+W10ge1xuICAgIGNvbnN0IGV2ZW50czogT2JzZXJ2YWJsZTx1bmtub3duPltdID0gW107XG5cbiAgICBpZiAodGhpcy5pbnB1dFJlZikge1xuICAgICAgZXZlbnRzLnB1c2godGhpcy5pbnB1dFJlZi5mb2N1cyQsIHRoaXMuaW5wdXRSZWYuYmx1ciQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgIGV2ZW50cy5wdXNoKHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJ3bGNtLWxhYmVsXCI+PC9uZy1jb250ZW50PlxuXG48bmctY29udGVudCBzZWxlY3Q9XCJbd2xjbUZvcm1GaWVsZEN1c3RvbUNvbnRhaW5lcl1cIj48L25nLWNvbnRlbnQ+XG5cbjxkaXZcbiAgY2xhc3M9XCJ3bGNtLWZpZWxkLWNvbnRhaW5lclwiXG4gIChjbGljayk9XCJmb2N1cygpXCJcbiAgI2RlZmF1bHRDb250YWluZXJcbiAgKm5nSWY9XCIhY3VzdG9tQ29udGFpbmVyXCJcbj5cbiAgPGRpdiBjbGFzcz1cIndsY20tZmllbGQtcHJlZml4XCIgW2NsYXNzLmNvbnRhaW5zLWNoaWxkcmVuXT1cInByZWZpeFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt3bGNtRm9ybUZpZWxkUHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3dsY21JbnB1dF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgPGRpdiBjbGFzcz1cIndsY20tZmllbGQtc3VmZml4XCIgW2NsYXNzLmNvbnRhaW5zLWNoaWxkcmVuXT1cInN1ZmZpeFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt3bGNtRm9ybUZpZWxkU3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3dsY21Gb3JtRmllbGRIaW50XVwiPjwvbmctY29udGVudD5cblxuPGRpdiBjbGFzcz1cIndsY20tZmllbGQtZXJyb3ItY29udGFpbmVyXCIgKm5nSWY9XCJjb250cm9sICYmIGRpc3BsYXlFcnJvck1lc3NhZ2VzXCI+XG4gIDx3bGNtLWVycm9yPnt7ICRhbnkoY29udHJvbCkgfCBlcnJvcnNNYXBwZXIgfX08L3dsY20tZXJyb3I+XG48L2Rpdj5cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, ChangeDetectionStrategy, Injectable, InjectionToken, inject, Directive, Pipe, Inject, HostListener, forwardRef, ChangeDetectorRef, Optional, ContentChild, ViewChild, HostBinding, Input, EventEmitter, NgZone, Host, Output, output, input, NgModule } from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, Injectable, InjectionToken, inject, Directive, Pipe, Inject, HostListener, forwardRef, ChangeDetectorRef, Optional, Input, ContentChild, ViewChild, HostBinding, EventEmitter, NgZone, Host, Output, output, input, NgModule } from '@angular/core';
3
3
  import { __decorate, __metadata } from 'tslib';
4
4
  import * as i4 from '@angular/forms';
5
5
  import { Validators, NgControl, ControlContainer, FormControl, NG_VALUE_ACCESSOR, NG_VALIDATORS, ReactiveFormsModule } from '@angular/forms';
@@ -181,6 +181,7 @@ let WlcmFormFieldComponent = class WlcmFormFieldComponent {
181
181
  constructor(parentFormMember, changeDetectorRef) {
182
182
  this.parentFormMember = parentFormMember;
183
183
  this.changeDetectorRef = changeDetectorRef;
184
+ this.displayErrorMessages = true;
184
185
  }
185
186
  ngAfterViewInit() {
186
187
  if (!this.inputRef && !this.customContainer) {
@@ -221,10 +222,10 @@ let WlcmFormFieldComponent = class WlcmFormFieldComponent {
221
222
  return events;
222
223
  }
223
224
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: WlcmFormFieldComponent, deps: [{ token: WLCM_FORM_CONTROL, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
224
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: WlcmFormFieldComponent, isStandalone: true, selector: "wlcm-form-field", host: { properties: { "class.wlcm-field-focused": "this.isFocused", "class.wlcm-field-required": "this.isRequired", "class.wlcm-field-invalid": "this.isInvalid", "class.wlcm-field-touched": "this.isTouched", "class.wlcm-field-disabled": "this.isDisabled" }, classAttribute: "wlcm-form-field" }, providers: [
225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: WlcmFormFieldComponent, isStandalone: true, selector: "wlcm-form-field", inputs: { displayErrorMessages: "displayErrorMessages" }, host: { properties: { "class.wlcm-field-focused": "this.isFocused", "class.wlcm-field-required": "this.isRequired", "class.wlcm-field-invalid": "this.isInvalid", "class.wlcm-field-touched": "this.isTouched", "class.wlcm-field-disabled": "this.isDisabled" }, classAttribute: "wlcm-form-field" }, providers: [
225
226
  WLCM_FORM_CONTROL_PROVIDER,
226
227
  { provide: WLCM_FORM_FIELD, useExisting: forwardRef(() => WlcmFormFieldComponent) },
227
- ], queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true }, { propertyName: "controlContainer", first: true, predicate: ControlContainer, descendants: true }, { propertyName: "_inputRef", first: true, predicate: WLCM_INPUT, descendants: true }, { propertyName: "prefix", first: true, predicate: WlcmFormFieldPrefixDirective, descendants: true }, { propertyName: "suffix", first: true, predicate: WlcmFormFieldSuffixDirective, descendants: true }, { propertyName: "customContainer", first: true, predicate: WlcmFormFieldCustomContainerDirective, descendants: true }], viewQueries: [{ propertyName: "defaultContainer", first: true, predicate: ["defaultContainer"], descendants: true }], ngImport: i0, template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WlcmErrorComponent, selector: "wlcm-error" }, { kind: "pipe", type: ErrorsMapperPipe, name: "errorsMapper" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
228
+ ], queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true }, { propertyName: "controlContainer", first: true, predicate: ControlContainer, descendants: true }, { propertyName: "_inputRef", first: true, predicate: WLCM_INPUT, descendants: true }, { propertyName: "prefix", first: true, predicate: WlcmFormFieldPrefixDirective, descendants: true }, { propertyName: "suffix", first: true, predicate: WlcmFormFieldSuffixDirective, descendants: true }, { propertyName: "customContainer", first: true, predicate: WlcmFormFieldCustomContainerDirective, descendants: true }], viewQueries: [{ propertyName: "defaultContainer", first: true, predicate: ["defaultContainer"], descendants: true }], ngImport: i0, template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control && displayErrorMessages\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WlcmErrorComponent, selector: "wlcm-error" }, { kind: "pipe", type: ErrorsMapperPipe, name: "errorsMapper" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
228
229
  };
229
230
  WlcmFormFieldComponent = __decorate([
230
231
  UntilDestroy(),
@@ -235,13 +236,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
235
236
  args: [{ selector: 'wlcm-form-field', standalone: true, imports: [CommonModule, WlcmErrorComponent, ErrorsMapperPipe], host: { class: 'wlcm-form-field' }, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
236
237
  WLCM_FORM_CONTROL_PROVIDER,
237
238
  { provide: WLCM_FORM_FIELD, useExisting: forwardRef(() => WlcmFormFieldComponent) },
238
- ], template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n" }]
239
+ ], template: "<ng-content select=\"wlcm-label\"></ng-content>\n\n<ng-content select=\"[wlcmFormFieldCustomContainer]\"></ng-content>\n\n<div\n class=\"wlcm-field-container\"\n (click)=\"focus()\"\n #defaultContainer\n *ngIf=\"!customContainer\"\n>\n <div class=\"wlcm-field-prefix\" [class.contains-children]=\"prefix\">\n <ng-content select=\"[wlcmFormFieldPrefix]\"></ng-content>\n </div>\n\n <ng-content select=\"[wlcmInput]\"></ng-content>\n\n <div class=\"wlcm-field-suffix\" [class.contains-children]=\"suffix\">\n <ng-content select=\"[wlcmFormFieldSuffix]\"></ng-content>\n </div>\n</div>\n\n<ng-content select=\"[wlcmFormFieldHint]\"></ng-content>\n\n<div class=\"wlcm-field-error-container\" *ngIf=\"control && displayErrorMessages\">\n <wlcm-error>{{ $any(control) | errorsMapper }}</wlcm-error>\n</div>\n" }]
239
240
  }], ctorParameters: () => [{ type: undefined, decorators: [{
240
241
  type: Optional
241
242
  }, {
242
243
  type: Inject,
243
244
  args: [WLCM_FORM_CONTROL]
244
- }] }, { type: i0.ChangeDetectorRef }], propDecorators: { ngControl: [{
245
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { displayErrorMessages: [{
246
+ type: Input
247
+ }], ngControl: [{
245
248
  type: ContentChild,
246
249
  args: [NgControl, { descendants: true }]
247
250
  }], controlContainer: [{