@odx/angular 3.2.0 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  ## 2.14.4
2
2
 
3
+ ## 3.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 2da9e85: Fix form field validation to also validate when parent form resets
8
+
9
+ ## 3.2.1
10
+
11
+ ### Patch Changes
12
+
13
+ - eca1267: Force validation when markAsTouched is called on the form field control
14
+
3
15
  ## 3.2.0
4
16
 
5
17
  ### Minor Changes
@@ -1,15 +1,12 @@
1
1
  import { AfterViewInit, ElementRef, EventEmitter } from '@angular/core';
2
- import { ClickOutsideDirective } from '@odx/angular';
3
2
  import { CustomFormControl } from '@odx/angular/cdk/custom-form-control';
4
3
  import { DateFilter } from '@odx/angular/components/calendar';
5
4
  import { DropdownDirective } from '@odx/angular/components/dropdown';
6
5
  import { Position } from '@odx/angular/utils';
7
6
  import { DatepickerInputControlDirective } from './directives';
8
7
  import * as i0 from "@angular/core";
9
- import * as i1 from "@odx/angular";
10
8
  export declare class DatepickerComponent extends CustomFormControl<Date | null> implements AfterViewInit {
11
9
  protected readonly takeUntilDestroyed: <T>() => import("rxjs").MonoTypeOperatorFunction<T>;
12
- protected readonly clickOutsideDirective: ClickOutsideDirective;
13
10
  protected readonly config: {
14
11
  inputDateOrder: string;
15
12
  inputDateSeparator: string;
@@ -29,11 +26,8 @@ export declare class DatepickerComponent extends CustomFormControl<Date | null>
29
26
  selectDate(value: Date | null): void;
30
27
  protected handleDateFieldChanges(): void;
31
28
  protected handleDateFieldFocus(): void;
32
- protected handleClickOutside(): void;
33
- protected closeDropdown(): void;
34
- protected clickOutside(): void;
35
29
  protected openDatepicker(event: KeyboardEvent): void;
36
30
  private updateDateField;
37
31
  static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "odx-datepicker", never, { "filterFn": { "alias": "filterFn"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; }; }, { "selectedChange": "selectedChange"; }, ["dateField"], ["input[odxDatepickerControl]"], true, [{ directive: typeof i1.ClickOutsideDirective; inputs: {}; outputs: {}; }]>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "odx-datepicker", never, { "filterFn": { "alias": "filterFn"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "dropdownPosition": { "alias": "dropdownPosition"; "required": false; }; }, { "selectedChange": "selectedChange"; }, ["dateField"], ["input[odxDatepickerControl]"], true, never>;
39
33
  }
@@ -13,12 +13,13 @@ export declare class DatepickerInputControlDirective extends InputControlDirecti
13
13
  };
14
14
  protected readonly inputMask: string;
15
15
  protected readonly ngxMaskPipe: NgxMaskPipe;
16
- focused: EventEmitter<FocusEvent>;
16
+ focused: EventEmitter<boolean>;
17
17
  valueChange$: import("rxjs").Observable<string>;
18
18
  applyMask(): void;
19
19
  get valueAsDate(): Date | null;
20
20
  get placeholder(): string;
21
- protected handleFocus(event: FocusEvent): void;
21
+ protected handleFocusIn(): void;
22
+ protected handleFocusOut(): void;
22
23
  static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerInputControlDirective, never>;
23
24
  static ɵdir: i0.ɵɵDirectiveDeclaration<DatepickerInputControlDirective, "input[odxDatepickerControl]", never, {}, { "focused": "focused"; }, never, never, true, [{ directive: typeof i1.WithTabIndex; inputs: {}; outputs: {}; }]>;
24
25
  }
@@ -1,10 +1,9 @@
1
1
  import { OnDestroy, OnInit } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class FormFieldControlDirective implements OnInit, OnDestroy {
4
- private readonly config;
5
4
  private readonly ngControl;
6
5
  private readonly form;
7
- private readonly onFormReset$;
6
+ private readonly forceValidation$$;
8
7
  private readonly onFormSubmit$;
9
8
  private readonly formFieldService;
10
9
  private readonly formFieldErrorService;
@@ -14,8 +13,8 @@ export declare class FormFieldControlDirective implements OnInit, OnDestroy {
14
13
  ngOnInit(): void;
15
14
  ngOnDestroy(): void;
16
15
  private registerOnBlur;
17
- private registerOnChange;
18
- private registerOnSubmit;
16
+ private registerOnStatusChange;
17
+ private patchControl;
19
18
  static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldControlDirective, never>;
20
19
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormFieldControlDirective, "[odxFormFieldControl]", ["odxFormFieldControl"], {}, {}, never, never, true, never>;
21
20
  }
@@ -1,9 +1,8 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class FormDirective {
3
- private readonly takeUntilDestroyed;
4
3
  readonly element: import("@angular/core").ElementRef<HTMLFormElement>;
5
4
  readonly submit$: import("rxjs").Observable<Event>;
6
5
  readonly reset$: import("rxjs").Observable<Event>;
7
6
  static ɵfac: i0.ɵɵFactoryDeclaration<FormDirective, never>;
8
- static ɵdir: i0.ɵɵDirectiveDeclaration<FormDirective, "form[odxForm]", never, {}, {}, never, never, true, never>;
7
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FormDirective, "form[odxForm]", ["odxForm"], {}, {}, never, never, true, never>;
9
8
  }
@@ -7,6 +7,7 @@ export interface FormFieldConfig {
7
7
  errors: FormFieldErrorResolvers;
8
8
  /**
9
9
  * Detect form field control changes on `blur` and/or `change`
10
+ * @deprecated Does not have any effect since version 3.2.2
10
11
  * @default ['blur']
11
12
  */
12
13
  updateOn: Array<'blur' | 'change'>;
@@ -1,7 +1,7 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { A11yModule } from '@angular/cdk/a11y';
3
- import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, HostListener, inject, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
4
- import { ClickOutsideDirective, detectControllerChanges } from '@odx/angular';
3
+ import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
4
+ import { detectControllerChanges } from '@odx/angular';
5
5
  import { CustomFormControl } from '@odx/angular/cdk/custom-form-control';
6
6
  import { ActionGroupComponent } from '@odx/angular/components/action-group';
7
7
  import { ButtonComponent } from '@odx/angular/components/button';
@@ -9,15 +9,14 @@ import { CalendarComponent } from '@odx/angular/components/calendar';
9
9
  import { DropdownDirective, DropdownModule } from '@odx/angular/components/dropdown';
10
10
  import { IconComponent } from '@odx/angular/components/icon';
11
11
  import { CSSComponent } from '@odx/angular/internal';
12
- import { deferFn, injectElement, Position, untilDestroyed } from '@odx/angular/utils';
12
+ import { Position, deferFn, injectElement, untilDestroyed } from '@odx/angular/utils';
13
13
  import { format, startOfDay } from 'date-fns';
14
14
  import { injectDatepickerConfig } from './datepicker.config';
15
15
  import { DatepickerInputControlDirective } from './directives';
16
16
  import { getDatepickerInputFormat } from './utils';
17
17
  import * as i0 from "@angular/core";
18
- import * as i1 from "@odx/angular";
19
- import * as i2 from "@angular/cdk/a11y";
20
- import * as i3 from "@odx/angular/components/dropdown";
18
+ import * as i1 from "@angular/cdk/a11y";
19
+ import * as i2 from "@odx/angular/components/dropdown";
21
20
  export let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
22
21
  get isOpen() {
23
22
  return !!this.dropdown.isOpen;
@@ -25,7 +24,6 @@ export let DatepickerComponent = class DatepickerComponent extends CustomFormCon
25
24
  constructor() {
26
25
  super(null);
27
26
  this.takeUntilDestroyed = untilDestroyed();
28
- this.clickOutsideDirective = inject(ClickOutsideDirective, { host: true });
29
27
  this.config = injectDatepickerConfig();
30
28
  this.element = injectElement();
31
29
  this.filterFn = null;
@@ -38,7 +36,6 @@ export let DatepickerComponent = class DatepickerComponent extends CustomFormCon
38
36
  ngAfterViewInit() {
39
37
  this.handleDateFieldChanges();
40
38
  this.handleDateFieldFocus();
41
- this.handleClickOutside();
42
39
  deferFn(() => {
43
40
  if (!this.value)
44
41
  return;
@@ -52,27 +49,21 @@ export let DatepickerComponent = class DatepickerComponent extends CustomFormCon
52
49
  this.updateValue(value);
53
50
  this.updateDateField(value);
54
51
  this.selectedChange.emit(value);
55
- this.closeDropdown();
52
+ this.dropdown.close();
56
53
  }
57
54
  handleDateFieldChanges() {
58
55
  this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.updateValue(this.dateField?.valueAsDate ?? null));
59
56
  }
60
57
  handleDateFieldFocus() {
61
- this.dateField?.focused.pipe(this.takeUntilDestroyed()).subscribe(() => {
58
+ this.dateField?.focused.pipe(this.takeUntilDestroyed()).subscribe((isFocused) => {
59
+ if (!isFocused) {
60
+ this.onTouched();
61
+ }
62
62
  if (this.isOpen) {
63
- this.closeDropdown();
63
+ this.dropdown.close();
64
64
  }
65
65
  });
66
66
  }
67
- handleClickOutside() {
68
- this.clickOutsideDirective.odxClickOutside.pipe(this.takeUntilDestroyed()).subscribe(() => this.clickOutside());
69
- }
70
- closeDropdown() {
71
- this.dropdown.close();
72
- }
73
- clickOutside() {
74
- this.closeDropdown();
75
- }
76
67
  openDatepicker(event) {
77
68
  event.stopPropagation();
78
69
  if (this.isReadonly || this.isDisabled)
@@ -86,7 +77,7 @@ export let DatepickerComponent = class DatepickerComponent extends CustomFormCon
86
77
  this.dateField.nativeElementValue = format(date, dateFormat);
87
78
  }
88
79
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
89
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerComponent, isStandalone: true, selector: "odx-datepicker", inputs: { filterFn: "filterFn", minDate: "minDate", maxDate: "maxDate", dropdownPosition: "dropdownPosition" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "keydown.alt.ArrowDown": "openDatepicker($event)" } }, queries: [{ propertyName: "dateField", first: true, predicate: DatepickerInputControlDirective, descendants: true }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "dropdownTriggerElement", first: true, predicate: ["dropdownTrigger"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0, template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: CalendarComponent, selector: "odx-calendar", inputs: ["selectedDate", "minDate", "maxDate", "filterFn"], outputs: ["selectedDateChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i3.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
80
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerComponent, isStandalone: true, selector: "odx-datepicker", inputs: { filterFn: "filterFn", minDate: "minDate", maxDate: "maxDate", dropdownPosition: "dropdownPosition" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "keydown.alt.ArrowDown": "openDatepicker($event)" } }, queries: [{ propertyName: "dateField", first: true, predicate: DatepickerInputControlDirective, descendants: true }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "dropdownTriggerElement", first: true, predicate: ["dropdownTrigger"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: CalendarComponent, selector: "odx-calendar", inputs: ["selectedDate", "minDate", "maxDate", "filterFn"], outputs: ["selectedDateChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i2.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
90
81
  };
91
82
  DatepickerComponent = __decorate([
92
83
  CSSComponent('datepicker'),
@@ -94,7 +85,7 @@ DatepickerComponent = __decorate([
94
85
  ], DatepickerComponent);
95
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, decorators: [{
96
87
  type: Component,
97
- args: [{ selector: 'odx-datepicker', standalone: true, imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, hostDirectives: [ClickOutsideDirective], template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n" }]
88
+ args: [{ selector: 'odx-datepicker', standalone: true, imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n" }]
98
89
  }], ctorParameters: function () { return []; }, propDecorators: { filterFn: [{
99
90
  type: Input
100
91
  }], minDate: [{
@@ -118,4 +109,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
118
109
  type: HostListener,
119
110
  args: ['keydown.alt.ArrowDown', ['$event']]
120
111
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxN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LGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGtCQUNyQixDQUFDLHFCQUFxQixDQUFDOzBFQWdCaEMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQUlDLGNBQWM7c0JBRHBCLE1BQU07Z0JBSUEsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFJckIsc0JBQXNCO3NCQUQ1QixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUl6RCxTQUFTO3NCQURmLFlBQVk7dUJBQUMsK0JBQStCO2dCQXdEbkMsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCBkZXRlY3RDb250cm9sbGVyQ2hhbmdlcyB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDdXN0b21Gb3JtQ29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FjdGlvbi1ncm91cCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQsIERhdGVGaWx0ZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9jYWxlbmRhcic7XG5pbXBvcnQgeyBEcm9wZG93bkRpcmVjdGl2ZSwgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgZGVmZXJGbiwgaW5qZWN0RWxlbWVudCwgUG9zaXRpb24sIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGZvcm1hdCwgc3RhcnRPZkRheSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGluamVjdERhdGVwaWNrZXJDb25maWcgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29uZmlnJztcbmltcG9ydCB7IERhdGVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgZ2V0RGF0ZXBpY2tlcklucHV0Rm9ybWF0IH0gZnJvbSAnLi91dGlscyc7XG5cbkBDU1NDb21wb25lbnQoJ2RhdGVwaWNrZXInKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2R4LWRhdGVwaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQTExeU1vZHVsZSwgQWN0aW9uR3JvdXBDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudCwgQ2FsZW5kYXJDb21wb25lbnQsIERyb3Bkb3duTW9kdWxlLCBJY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtDbGlja091dHNpZGVEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tRm9ybUNvbnRyb2w8RGF0ZSB8IG51bGw+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbGlja091dHNpZGVEaXJlY3RpdmUgPSBpbmplY3QoQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCB7IGhvc3Q6IHRydWUgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdERhdGVwaWNrZXJDb25maWcoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdEVsZW1lbnQoKTtcblxuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRyb3Bkb3duLmlzT3BlbjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaWx0ZXJGbjogRGF0ZUZpbHRlciB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5EYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1heERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbjogUG9zaXRpb24gPSAnYm90dG9tJztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25EaXJlY3RpdmUpXG4gIHB1YmxpYyBkcm9wZG93biE6IERyb3Bkb3duRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duVHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBkcm9wZG93blRyaWdnZXJFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQENvbnRlbnRDaGlsZChEYXRlcGlja2VySW5wdXRDb250cm9sRGlyZWN0aXZlKVxuICBwdWJsaWMgZGF0ZUZpZWxkPzogRGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihudWxsKTtcbiAgICBkZXRlY3RDb250cm9sbGVyQ2hhbmdlcyh0aGlzKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVEYXRlRmllbGRDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVEYXRlRmllbGRGb2N1cygpO1xuICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKCk7XG5cbiAgICBkZWZlckZuKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZShzdGFydE9mRGF5KHRoaXMudmFsdWUpKTtcbiAgICAgIHRoaXMudXBkYXRlRGF0ZUZpZWxkKHRoaXMudmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdERhdGUodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy51cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVEYXRlRmllbGQodmFsdWUpO1xuXG4gICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHZhbHVlKTtcblxuICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZURhdGVGaWVsZENoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRmllbGQ/LnZhbHVlQ2hhbmdlJC5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuZGF0ZUZpZWxkPy52YWx1ZUFzRGF0ZSA/PyBudWxsKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRGF0ZUZpZWxkRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRmllbGQ/LmZvY3VzZWQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrT3V0c2lkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrT3V0c2lkZURpcmVjdGl2ZS5vZHhDbGlja091dHNpZGUucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja091dHNpZGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xpY2tPdXRzaWRlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hbHQuQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIG9wZW5EYXRlcGlja2VyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWRvbmx5IHx8IHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcm9wZG93bi5vcGVuKGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZUZpZWxkKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUZpZWxkKSByZXR1cm47XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0ID0gZ2V0RGF0ZXBpY2tlcklucHV0Rm9ybWF0KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRhdGVGaWVsZC5uYXRpdmVFbGVtZW50VmFsdWUgPSBmb3JtYXQoZGF0ZSwgZGF0ZUZvcm1hdCk7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImlucHV0W29keERhdGVwaWNrZXJDb250cm9sXVwiPjwvbmctY29udGVudD5cblxuPG9keC1hY3Rpb24tZ3JvdXAgY2xhc3M9XCJvZHgtbm8tbWFyZ2luXCI+XG4gIDxidXR0b25cbiAgICAjZHJvcGRvd25UcmlnZ2VyXG4gICAgY2xhc3M9XCJvZHgtZGF0ZXBpY2tlcl9fdHJpZ2dlclwiXG4gICAgb2R4QnV0dG9uXG4gICAgc2l6ZT1cInNtYWxsXCJcbiAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgIFtvZHhEcm9wZG93bl09XCJjYWxlbmRhck92ZXJsYXlcIlxuICAgIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwieyBwb3NpdGlvbjogZHJvcGRvd25Qb3NpdGlvbiB9XCJcbiAgICBbb2R4RHJvcGRvd25UcmlnZ2VyRWxlbWVudF09XCJkcm9wZG93blRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIFtvZHhEcm9wZG93bkhvc3RdPVwibnVsbFwiXG4gICAgW29keERyb3Bkb3duUmVmZXJlbmNlRWxlbWVudF09XCJlbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIFtvZHhEcm9wZG93bkNsaWNrT3V0c2lkZUFjdGl2ZV09XCJmYWxzZVwiXG4gID5cbiAgICA8b2R4LWljb24gbmFtZT1cImNhbGVuZGFyXCI+PC9vZHgtaWNvbj5cbiAgPC9idXR0b24+XG48L29keC1hY3Rpb24tZ3JvdXA+XG5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJPdmVybGF5PlxuICA8b2R4LWNhbGVuZGFyXG4gICAgW3NlbGVjdGVkRGF0ZV09XCJ2YWx1ZVwiXG4gICAgW2ZpbHRlckZuXT1cImZpbHRlckZuXCJcbiAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICBjZGtUcmFwRm9jdXNcbiAgICBjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZVxuICAgIChzZWxlY3RlZERhdGVDaGFuZ2UpPVwic2VsZWN0RGF0ZSgkZXZlbnQpXCJcbiAgPjwvb2R4LWNhbGVuZGFyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYs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YztzQkFEdkIsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRldGVjdENvbnRyb2xsZXJDaGFuZ2VzIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IEN1c3RvbUZvcm1Db250cm9sIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9jdXN0b20tZm9ybS1jb250cm9sJztcbmltcG9ydCB7IEFjdGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYWN0aW9uLWdyb3VwJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCwgRGF0ZUZpbHRlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2NhbGVuZGFyJztcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aXZlLCBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBQb3NpdGlvbiwgZGVmZXJGbiwgaW5qZWN0RWxlbWVudCwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgZm9ybWF0LCBzdGFydE9mRGF5IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgaW5qZWN0RGF0ZXBpY2tlckNvbmZpZyB9IGZyb20gJy4vZGF0ZXBpY2tlci5jb25maWcnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBnZXREYXRlcGlja2VySW5wdXRGb3JtYXQgfSBmcm9tICcuL3V0aWxzJztcblxuQENTU0NvbXBvbmVudCgnZGF0ZXBpY2tlcicpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZHgtZGF0ZXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBDYWxlbmRhckNvbXBvbmVudCwgRHJvcGRvd25Nb2R1bGUsIEljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tRm9ybUNvbnRyb2w8RGF0ZSB8IG51bGw+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSBpbmplY3REYXRlcGlja2VyQ29uZmlnKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgcHVibGljIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kcm9wZG93bi5pc09wZW47XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyRm46IERhdGVGaWx0ZXIgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGRyb3Bkb3duUG9zaXRpb246IFBvc2l0aW9uID0gJ2JvdHRvbSc7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBAVmlld0NoaWxkKERyb3Bkb3duRGlyZWN0aXZlKVxuICBwdWJsaWMgZHJvcGRvd24hOiBEcm9wZG93bkRpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkKCdkcm9wZG93blRyaWdnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgZHJvcGRvd25UcmlnZ2VyRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoRGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSlcbiAgcHVibGljIGRhdGVGaWVsZD86IERhdGVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobnVsbCk7XG4gICAgZGV0ZWN0Q29udHJvbGxlckNoYW5nZXModGhpcykuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlRGF0ZUZpZWxkQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlRGF0ZUZpZWxkRm9jdXMoKTtcblxuICAgIGRlZmVyRm4oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlKSByZXR1cm47XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHN0YXJ0T2ZEYXkodGhpcy52YWx1ZSkpO1xuICAgICAgdGhpcy51cGRhdGVEYXRlRmllbGQodGhpcy52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0RGF0ZSh2YWx1ZTogRGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZURhdGVGaWVsZCh2YWx1ZSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZURhdGVGaWVsZENoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRmllbGQ/LnZhbHVlQ2hhbmdlJC5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuZGF0ZUZpZWxkPy52YWx1ZUFzRGF0ZSA/PyBudWxsKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRGF0ZUZpZWxkRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlRmllbGQ/LmZvY3VzZWQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKGlzRm9jdXNlZCkgPT4ge1xuICAgICAgaWYgKCFpc0ZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFsdC5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgb3BlbkRhdGVwaWNrZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmlzUmVhZG9ubHkgfHwgdGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLmRyb3Bkb3duLm9wZW4oZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlRmllbGQoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRlRmllbGQpIHJldHVybjtcblxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBnZXREYXRlcGlja2VySW5wdXRGb3JtYXQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuZGF0ZUZpZWxkLm5hdGl2ZUVsZW1lbnRWYWx1ZSA9IGZvcm1hdChkYXRlLCBkYXRlRm9ybWF0KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiaW5wdXRbb2R4RGF0ZXBpY2tlckNvbnRyb2xdXCI+PC9uZy1jb250ZW50PlxuXG48b2R4LWFjdGlvbi1ncm91cCBjbGFzcz1cIm9keC1uby1tYXJnaW5cIj5cbiAgPGJ1dHRvblxuICAgICNkcm9wZG93blRyaWdnZXJcbiAgICBjbGFzcz1cIm9keC1kYXRlcGlja2VyX190cmlnZ2VyXCJcbiAgICBvZHhCdXR0b25cbiAgICBzaXplPVwic21hbGxcIlxuICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgW29keERyb3Bkb3duXT1cImNhbGVuZGFyT3ZlcmxheVwiXG4gICAgW29keERyb3Bkb3duT3B0aW9uc109XCJ7IHBvc2l0aW9uOiBkcm9wZG93blBvc2l0aW9uIH1cIlxuICAgIFtvZHhEcm9wZG93blRyaWdnZXJFbGVtZW50XT1cImRyb3Bkb3duVHJpZ2dlckVsZW1lbnQubmF0aXZlRWxlbWVudFwiXG4gICAgW29keERyb3Bkb3duSG9zdF09XCJudWxsXCJcbiAgICBbb2R4RHJvcGRvd25SZWZlcmVuY2VFbGVtZW50XT1cImVsZW1lbnQubmF0aXZlRWxlbWVudFwiXG4gICAgKG9keERyb3Bkb3duQmVmb3JlQ2xvc2UpPVwib25Ub3VjaGVkKClcIlxuICA+XG4gICAgPG9keC1pY29uIG5hbWU9XCJjYWxlbmRhclwiPjwvb2R4LWljb24+XG4gIDwvYnV0dG9uPlxuPC9vZHgtYWN0aW9uLWdyb3VwPlxuXG48bmctdGVtcGxhdGUgI2NhbGVuZGFyT3ZlcmxheT5cbiAgPG9keC1jYWxlbmRhclxuICAgIFtzZWxlY3RlZERhdGVdPVwidmFsdWVcIlxuICAgIFtmaWx0ZXJGbl09XCJmaWx0ZXJGblwiXG4gICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgY2RrVHJhcEZvY3VzXG4gICAgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVcbiAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cInNlbGVjdERhdGUoJGV2ZW50KVwiXG4gID48L29keC1jYWxlbmRhcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -29,11 +29,14 @@ export let DatepickerInputControlDirective = class DatepickerInputControlDirecti
29
29
  get placeholder() {
30
30
  return getDatepickerInputFormat(this.config).toUpperCase();
31
31
  }
32
- handleFocus(event) {
33
- this.focused.emit(event);
32
+ handleFocusIn() {
33
+ this.focused.emit(true);
34
+ }
35
+ handleFocusOut() {
36
+ this.focused.emit(false);
34
37
  }
35
38
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerInputControlDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
36
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerInputControlDirective, isStandalone: true, selector: "input[odxDatepickerControl]", outputs: { focused: "focused" }, host: { listeners: { "focus": "handleFocus($event)" }, properties: { "attr.readonly": "readonlyController?.readonly || null", "attr.placeholder": "placeholder" } }, providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }], ngImport: i0 }); }
39
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerInputControlDirective, isStandalone: true, selector: "input[odxDatepickerControl]", outputs: { focused: "focused" }, host: { listeners: { "focusin": "handleFocusIn()", "focusout": "handleFocusOut()" }, properties: { "attr.readonly": "readonlyController?.readonly || null", "attr.placeholder": "placeholder" } }, providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }], ngImport: i0 }); }
37
40
  };
38
41
  DatepickerInputControlDirective = __decorate([
39
42
  CSSComponent('datepicker__control')
@@ -52,8 +55,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
52
55
  }]
53
56
  }], propDecorators: { focused: [{
54
57
  type: Output
55
- }], handleFocus: [{
58
+ }], handleFocusIn: [{
59
+ type: HostListener,
60
+ args: ['focusin']
61
+ }], handleFocusOut: [{
56
62
  type: HostListener,
57
- args: ['focus', ['$event']]
63
+ args: ['focusout']
58
64
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2RhdGVwaWNrZXIvc3JjL2xpYi9kaXJlY3RpdmVzL2RhdGVwaWNrZXItaW5wdXQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBVyxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQWFwRyxXQUFNLCtCQUErQixHQUFyQyxNQUFNLCtCQUFnQyxTQUFRLHFCQUFxQjtJQUFuRTs7UUFDWSxlQUFVLEdBQXFCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUUzRSx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVqRCxXQUFNLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztRQUVsQyxjQUFTLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRzlDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO1FBRWhDLGlCQUFZLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDaEYsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUMzQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQ25DLENBQUM7S0FrQkg7SUFoQlEsU0FBUztRQUNkLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBR1MsV0FBVyxDQUFDLEtBQWlCO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBbkNVLCtCQUErQjttR0FBL0IsK0JBQStCLGdSQUgvQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFdBQVcsQ0FBQzs7QUFHN0QsK0JBQStCO0lBWDNDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztHQVd2QiwrQkFBK0IsQ0FvQzNDOzRGQXBDWSwrQkFBK0I7a0JBVjNDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLElBQUksRUFBRTt3QkFDSixpQkFBaUIsRUFBRSxzQ0FBc0M7d0JBQ3pELG9CQUFvQixFQUFFLGFBQWE7cUJBQ3BDO29CQUNELFNBQVMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFdBQVcsQ0FBQztvQkFDeEUsY0FBYyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUMvQjs4QkFhUSxPQUFPO3NCQURiLE1BQU07Z0JBc0JHLFdBQVc7c0JBRHBCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWRvbmx5Q29udHJvbGxlciwgV2l0aFRhYkluZGV4IH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IElucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgSUNvbmZpZywgTmd4TWFza1BpcGUsIHByb3ZpZGVOZ3hNYXNrIH0gZnJvbSAnbmd4LW1hc2snO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZyb21FdmVudCwgbWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluamVjdERhdGVwaWNrZXJDb25maWcgfSBmcm9tICcuLi9kYXRlcGlja2VyLmNvbmZpZyc7XG5pbXBvcnQgeyBnZXREYXRlcGlja2VySW5wdXRGb3JtYXQsIGdldERhdGVwaWNrZXJJbnB1dE1hc2ssIGdldERhdGVwaWNrZXJJbnB1dFZhbHVlQXNEYXRlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5AQ1NTQ29tcG9uZW50KCdkYXRlcGlja2VyX19jb250cm9sJylcbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2lucHV0W29keERhdGVwaWNrZXJDb250cm9sXScsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gICAgJ1thdHRyLnBsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcicsXG4gIH0sXG4gIHByb3ZpZGVyczogW1JlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksIHByb3ZpZGVOZ3hNYXNrKCksIE5neE1hc2tQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtXaXRoVGFiSW5kZXhdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VySW5wdXRDb250cm9sRGlyZWN0aXZlIGV4dGVuZHMgSW5wdXRDb250cm9sRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXNrQ29uZmlnOiBQYXJ0aWFsPElDb25maWc+ID0geyB2YWxpZGF0aW9uOiBmYWxzZSwgbGVhZFplcm9EYXRlVGltZTogdHJ1ZSB9O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSByZWFkb25seUNvbnRyb2xsZXIgPSBSZWFkb25seUNvbnRyb2xsZXIuaW5qZWN0KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdERhdGVwaWNrZXJDb25maWcoKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5wdXRNYXNrID0gZ2V0RGF0ZXBpY2tlcklucHV0TWFzayh0aGlzLmNvbmZpZyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5neE1hc2tQaXBlID0gaW5qZWN0KE5neE1hc2tQaXBlKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIHZhbHVlQ2hhbmdlJCA9IGZyb21FdmVudCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2lucHV0JykucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHRhcCgoKSA9PiB0aGlzLmFwcGx5TWFzaygpKSxcbiAgICBtYXAoKCkgPT4gdGhpcy5uYXRpdmVFbGVtZW50VmFsdWUpLFxuICApO1xuXG4gIHB1YmxpYyBhcHBseU1hc2soKTogdm9pZCB7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50VmFsdWUgPSB0aGlzLm5neE1hc2tQaXBlLnRyYW5zZm9ybSh0aGlzLm5hdGl2ZUVsZW1lbnRWYWx1ZSwgdGhpcy5pbnB1dE1hc2ssIHRoaXMubWFza0NvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlQXNEYXRlKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0RGF0ZXBpY2tlcklucHV0VmFsdWVBc0RhdGUodGhpcy5jb25maWcsIHRoaXMubmF0aXZlRWxlbWVudFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGF0ZXBpY2tlcklucHV0Rm9ybWF0KHRoaXMuY29uZmlnKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgaGFuZGxlRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdChldmVudCk7XG4gIH1cbn1cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2RhdGVwaWNrZXIvc3JjL2xpYi9kaXJlY3RpdmVzL2RhdGVwaWNrZXItaW5wdXQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBVyxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQWFwRyxXQUFNLCtCQUErQixHQUFyQyxNQUFNLCtCQUFnQyxTQUFRLHFCQUFxQjtJQUFuRTs7UUFDWSxlQUFVLEdBQXFCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUUzRSx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqRCxXQUFNLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxjQUFTLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRzlDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTdCLGlCQUFZLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDaEYsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUMzQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQ25DLENBQUM7S0F1Qkg7SUFyQlEsU0FBUztRQUNkLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBR1MsYUFBYTtRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBR1MsY0FBYztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDOytHQXJDVSwrQkFBK0I7bUdBQS9CLCtCQUErQiw4U0FIL0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxXQUFXLENBQUM7O0FBRzdELCtCQUErQjtJQVgzQyxZQUFZLENBQUMscUJBQXFCLENBQUM7R0FXdkIsK0JBQStCLENBc0MzQzs0RkF0Q1ksK0JBQStCO2tCQVYzQyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxJQUFJLEVBQUU7d0JBQ0osaUJBQWlCLEVBQUUsc0NBQXNDO3dCQUN6RCxvQkFBb0IsRUFBRSxhQUFhO3FCQUNwQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxXQUFXLENBQUM7b0JBQ3hFLGNBQWMsRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDL0I7OEJBVVEsT0FBTztzQkFEYixNQUFNO2dCQXNCRyxhQUFhO3NCQUR0QixZQUFZO3VCQUFDLFNBQVM7Z0JBTWIsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWRvbmx5Q29udHJvbGxlciwgV2l0aFRhYkluZGV4IH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IElucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgSUNvbmZpZywgTmd4TWFza1BpcGUsIHByb3ZpZGVOZ3hNYXNrIH0gZnJvbSAnbmd4LW1hc2snO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZyb21FdmVudCwgbWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluamVjdERhdGVwaWNrZXJDb25maWcgfSBmcm9tICcuLi9kYXRlcGlja2VyLmNvbmZpZyc7XG5pbXBvcnQgeyBnZXREYXRlcGlja2VySW5wdXRGb3JtYXQsIGdldERhdGVwaWNrZXJJbnB1dE1hc2ssIGdldERhdGVwaWNrZXJJbnB1dFZhbHVlQXNEYXRlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5AQ1NTQ29tcG9uZW50KCdkYXRlcGlja2VyX19jb250cm9sJylcbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2lucHV0W29keERhdGVwaWNrZXJDb250cm9sXScsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5Q29udHJvbGxlcj8ucmVhZG9ubHkgfHwgbnVsbCcsXG4gICAgJ1thdHRyLnBsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcicsXG4gIH0sXG4gIHByb3ZpZGVyczogW1JlYWRvbmx5Q29udHJvbGxlci5jb25uZWN0KCksIHByb3ZpZGVOZ3hNYXNrKCksIE5neE1hc2tQaXBlXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtXaXRoVGFiSW5kZXhdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VySW5wdXRDb250cm9sRGlyZWN0aXZlIGV4dGVuZHMgSW5wdXRDb250cm9sRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXNrQ29uZmlnOiBQYXJ0aWFsPElDb25maWc+ID0geyB2YWxpZGF0aW9uOiBmYWxzZSwgbGVhZFplcm9EYXRlVGltZTogdHJ1ZSB9O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSByZWFkb25seUNvbnRyb2xsZXIgPSBSZWFkb25seUNvbnRyb2xsZXIuaW5qZWN0KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSBpbmplY3REYXRlcGlja2VyQ29uZmlnKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbnB1dE1hc2sgPSBnZXREYXRlcGlja2VySW5wdXRNYXNrKHRoaXMuY29uZmlnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5neE1hc2tQaXBlID0gaW5qZWN0KE5neE1hc2tQaXBlKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIHZhbHVlQ2hhbmdlJCA9IGZyb21FdmVudCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2lucHV0JykucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHRhcCgoKSA9PiB0aGlzLmFwcGx5TWFzaygpKSxcbiAgICBtYXAoKCkgPT4gdGhpcy5uYXRpdmVFbGVtZW50VmFsdWUpLFxuICApO1xuXG4gIHB1YmxpYyBhcHBseU1hc2soKTogdm9pZCB7XG4gICAgdGhpcy5uYXRpdmVFbGVtZW50VmFsdWUgPSB0aGlzLm5neE1hc2tQaXBlLnRyYW5zZm9ybSh0aGlzLm5hdGl2ZUVsZW1lbnRWYWx1ZSwgdGhpcy5pbnB1dE1hc2ssIHRoaXMubWFza0NvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlQXNEYXRlKCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0RGF0ZXBpY2tlcklucHV0VmFsdWVBc0RhdGUodGhpcy5jb25maWcsIHRoaXMubmF0aXZlRWxlbWVudFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGF0ZXBpY2tlcklucHV0Rm9ybWF0KHRoaXMuY29uZmlnKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicpXG4gIHByb3RlY3RlZCBoYW5kbGVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnKVxuICBwcm90ZWN0ZWQgaGFuZGxlRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c2VkLmVtaXQoZmFsc2UpO1xuICB9XG59XG4iXX0=
@@ -1,24 +1,23 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Directive, inject } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
4
  import { FormControl, NgControl } from '@angular/forms';
4
5
  import { CSSComponent } from '@odx/angular/internal';
5
- import { booleanToOptionalAttributeString, injectElement, reactiveAttributeBinding, untilDestroyed } from '@odx/angular/utils';
6
- import { EMPTY, fromEvent, map, merge, NEVER, of, startWith, switchMap, tap } from 'rxjs';
7
- import { injectFormFieldConfig } from '../form-field.config';
6
+ import { booleanToOptionalAttributeString, injectElement, reactiveAttributeBinding } from '@odx/angular/utils';
7
+ import { EMPTY, fromEvent, map, merge, of, startWith, Subject, switchMap } from 'rxjs';
8
8
  import { FormFieldService } from '../form-field.service';
9
9
  import { FormFieldErrorService } from '../services';
10
10
  import { FormDirective } from './form.directive';
11
11
  import * as i0 from "@angular/core";
12
12
  export let FormFieldControlDirective = class FormFieldControlDirective {
13
13
  constructor() {
14
- this.config = injectFormFieldConfig();
15
14
  this.ngControl = inject(NgControl, { optional: true, self: true });
16
15
  this.form = inject(FormDirective, { optional: true, skipSelf: true });
17
- this.onFormReset$ = this.form?.reset$ ?? EMPTY;
16
+ this.forceValidation$$ = new Subject();
18
17
  this.onFormSubmit$ = this.form?.submit$ ?? EMPTY;
19
18
  this.formFieldService = inject(FormFieldService);
20
19
  this.formFieldErrorService = inject(FormFieldErrorService);
21
- this.takeUntilDestroyed = untilDestroyed();
20
+ this.takeUntilDestroyed = takeUntilDestroyed();
22
21
  this.element = injectElement();
23
22
  reactiveAttributeBinding(this.formFieldService.controlId$, 'id');
24
23
  reactiveAttributeBinding(this.formFieldService.controlHintId$, 'aria-describedby');
@@ -34,27 +33,28 @@ export let FormFieldControlDirective = class FormFieldControlDirective {
34
33
  this.formFieldService.registerControl(control ?? new FormControl(), this.element);
35
34
  if (!control)
36
35
  return;
37
- const controlChanges$ = merge(this.registerOnBlur(control), this.registerOnChange(control), this.registerOnSubmit(control));
38
- const changes$ = merge(this.onFormReset$.pipe(tap(() => this.formFieldErrorService?.setError(null))), controlChanges$.pipe(tap(() => this.formFieldErrorService?.setError(control.errors))));
39
- changes$.pipe(this.takeUntilDestroyed()).subscribe();
36
+ this.patchControl(control);
37
+ const controlChanges$ = merge(this.registerOnStatusChange(control), this.registerOnBlur(control));
38
+ controlChanges$.pipe(this.takeUntilDestroyed).subscribe(() => {
39
+ this.formFieldErrorService.setError(control.touched ? control.errors : null);
40
+ });
41
+ this.onFormSubmit$.pipe(this.takeUntilDestroyed).subscribe(() => control.markAsTouched({ onlySelf: true }));
40
42
  }
41
43
  ngOnDestroy() {
42
44
  this.formFieldService.removeControl();
43
45
  }
44
- registerOnBlur({ valueChanges }) {
45
- if (this.config.updateOn.includes('blur')) {
46
- return fromEvent(this.element.nativeElement, 'focusout').pipe(switchMap(() => valueChanges.pipe(startWith(true))));
47
- }
48
- return EMPTY;
46
+ registerOnBlur({ status, statusChanges }) {
47
+ return fromEvent(this.element.nativeElement, 'focusout', { once: true }).pipe(switchMap(() => statusChanges.pipe(startWith(status))));
49
48
  }
50
- registerOnChange({ valueChanges }) {
51
- if (this.config.updateOn.includes('change')) {
52
- return valueChanges;
53
- }
54
- return EMPTY;
49
+ registerOnStatusChange({ statusChanges }) {
50
+ return merge(statusChanges, this.forceValidation$$);
55
51
  }
56
- registerOnSubmit({ statusChanges, valueChanges }) {
57
- return merge(this.onFormSubmit$, this.onFormReset$).pipe(switchMap(({ type }) => (type === 'submit' ? merge(statusChanges, valueChanges).pipe(startWith(true)) : NEVER)));
52
+ patchControl(control) {
53
+ const originalMarkAsTouched = control.markAsTouched;
54
+ control.markAsTouched = (...args) => {
55
+ originalMarkAsTouched.apply(control, args);
56
+ this.forceValidation$$.next();
57
+ };
58
58
  }
59
59
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
60
60
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldControlDirective, isStandalone: true, selector: "[odxFormFieldControl]", exportAs: ["odxFormFieldControl"], ngImport: i0 }); }
@@ -71,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
71
71
  exportAs: 'odxFormFieldControl',
72
72
  }]
73
73
  }], ctorParameters: function () { return []; } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2Zvcm0tZmllbGQvc3JjL2xpYi9kaXJlY3RpdmVzL2Zvcm0tZmllbGQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFRMUMsV0FBTSx5QkFBeUIsR0FBL0IsTUFBTSx5QkFBeUI7SUFXcEM7UUFWaUIsV0FBTSxHQUFHLHFCQUFxQixFQUFFLENBQUM7UUFDakMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FB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SyxDQUFDLENBQUMsQ0FDaEgsQ0FBQztJQUNKLENBQUM7K0dBNURVLHlCQUF5QjttR0FBekIseUJBQXlCOztBQUF6Qix5QkFBeUI7SUFOckMsWUFBWSxDQUFDLG9CQUFvQixDQUFDOztHQU10Qix5QkFBeUIsQ0E2RHJDOzRGQTdEWSx5QkFBeUI7a0JBTHJDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgYm9vbGVhblRvT3B0aW9uYWxBdHRyaWJ1dGVTdHJpbmcsIGluamVjdEVsZW1lbnQsIHJlYWN0aXZlQXR0cmlidXRlQmluZGluZywgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgRU1QVFksIGZyb21FdmVudCwgbWFwLCBtZXJnZSwgTkVWRVIsIE9ic2VydmFibGUsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RGb3JtRmllbGRDb25maWcgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbmZpZyc7XG5pbXBvcnQgeyBGb3JtRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS1maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1GaWVsZEVycm9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEZvcm1EaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0uZGlyZWN0aXZlJztcblxuQENTU0NvbXBvbmVudCgnZm9ybS1maWVsZC1jb250cm9sJylcbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tvZHhGb3JtRmllbGRDb250cm9sXScsXG4gIGV4cG9ydEFzOiAnb2R4Rm9ybUZpZWxkQ29udHJvbCcsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbnRyb2xEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0Rm9ybUZpZWxkQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtID0gaW5qZWN0KEZvcm1EaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRm9ybVJlc2V0JCA9IHRoaXMuZm9ybT8ucmVzZXQkID8/IEVNUFRZO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRm9ybVN1Ym1pdCQgPSB0aGlzLmZvcm0/LnN1Ym1pdCQgPz8gRU1QVFk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUZpZWxkU2VydmljZSA9IGluamVjdChGb3JtRmllbGRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtRmllbGRFcnJvclNlcnZpY2UgPSBpbmplY3QoRm9ybUZpZWxkRXJyb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdEVsZW1lbnQoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmcodGhpcy5mb3JtRmllbGRTZXJ2aWNlLmNvbnRyb2xJZCQsICdpZCcpO1xuICAgIHJlYWN0aXZlQXR0cmlidXRlQmluZGluZyh0aGlzLmZvcm1GaWVsZFNlcnZpY2UuY29udHJvbEhpbnRJZCQsICdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgcmVhY3RpdmVBdHRyaWJ1dGVCaW5kaW5nKHRoaXMuZm9ybUZpZWxkU2VydmljZS5pc1JlYWRvbmx5JCwgJ3JlYWRvbmx5Jyk7XG4gICAgcmVhY3RpdmVBdHRyaWJ1dGVCaW5kaW5nKHRoaXMuZm9ybUZpZWxkU2VydmljZS5pc0Rpc2FibGVkJC5waXBlKG1hcChib29sZWFuVG9PcHRpb25hbEF0dHJpYnV0ZVN0cmluZykpLCAnYXJpYS1kaXNhYmxlZCcpO1xuICAgIHJlYWN0aXZlQXR0cmlidXRlQmluZGluZyh0aGlzLmZvcm1GaWVsZFNlcnZpY2UuaXNSZWFkb25seSQucGlwZShtYXAoYm9vbGVhblRvT3B0aW9uYWxBdHRyaWJ1dGVTdHJpbmcpKSwgJ2FyaWEtcmVhZG9ubHknKTtcbiAgICByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmcodGhpcy5mb3JtRmllbGRTZXJ2aWNlLmlzUmVxdWlyZWQkLnBpcGUobWFwKGJvb2xlYW5Ub09wdGlvbmFsQXR0cmlidXRlU3RyaW5nKSksICdhcmlhLXJlcXVpcmVkJyk7XG4gICAgcmVhY3RpdmVBdHRyaWJ1dGVCaW5kaW5nKHRoaXMuZm9ybUZpZWxkRXJyb3JTZXJ2aWNlLmhhc0Vycm9yJC5waXBlKG1hcChib29sZWFuVG9PcHRpb25hbEF0dHJpYnV0ZVN0cmluZykpLCAnYXJpYS1pbnZhbGlkJyk7XG4gICAgcmVhY3RpdmVBdHRyaWJ1dGVCaW5kaW5nKFxuICAgICAgdGhpcy5mb3JtRmllbGRFcnJvclNlcnZpY2UuaGFzRXJyb3IkLnBpcGUoc3dpdGNoTWFwKChoYXNFcnJvcikgPT4gKGhhc0Vycm9yID8gdGhpcy5mb3JtRmllbGRTZXJ2aWNlLmNvbnRyb2xFcnJvcklkJCA6IG9mKG51bGwpKSkpLFxuICAgICAgJ2FyaWEtZXJyb3JtZXNzYWdlJ1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sPy5jb250cm9sO1xuICAgIHRoaXMuZm9ybUZpZWxkU2VydmljZS5yZWdpc3RlckNvbnRyb2woY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2woKSwgdGhpcy5lbGVtZW50KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2xDaGFuZ2VzJCA9IG1lcmdlKHRoaXMucmVnaXN0ZXJPbkJsdXIoY29udHJvbCksIHRoaXMucmVnaXN0ZXJPbkNoYW5nZShjb250cm9sKSwgdGhpcy5yZWdpc3Rlck9uU3VibWl0KGNvbnRyb2wpKTtcbiAgICBjb25zdCBjaGFuZ2VzJCA9IG1lcmdlKFxuICAgICAgdGhpcy5vbkZvcm1SZXNldCQucGlwZSh0YXAoKCkgPT4gdGhpcy5mb3JtRmllbGRFcnJvclNlcnZpY2U/LnNldEVycm9yKG51bGwpKSksXG4gICAgICBjb250cm9sQ2hhbmdlcyQucGlwZSh0YXAoKCkgPT4gdGhpcy5mb3JtRmllbGRFcnJvclNlcnZpY2U/LnNldEVycm9yKGNvbnRyb2wuZXJyb3JzKSkpXG4gICAgKTtcbiAgICBjaGFuZ2VzJC5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUZpZWxkU2VydmljZS5yZW1vdmVDb250cm9sKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyT25CbHVyKHsgdmFsdWVDaGFuZ2VzIH06IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmICh0aGlzLmNvbmZpZy51cGRhdGVPbi5pbmNsdWRlcygnYmx1cicpKSB7XG4gICAgICByZXR1cm4gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnZm9jdXNvdXQnKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB2YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodHJ1ZSkpKSk7XG4gICAgfVxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJPbkNoYW5nZSh7IHZhbHVlQ2hhbmdlcyB9OiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBpZiAodGhpcy5jb25maWcudXBkYXRlT24uaW5jbHVkZXMoJ2NoYW5nZScpKSB7XG4gICAgICByZXR1cm4gdmFsdWVDaGFuZ2VzO1xuICAgIH1cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyT25TdWJtaXQoeyBzdGF0dXNDaGFuZ2VzLCB2YWx1ZUNoYW5nZXMgfTogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIG1lcmdlKHRoaXMub25Gb3JtU3VibWl0JCwgdGhpcy5vbkZvcm1SZXNldCQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHsgdHlwZSB9KSA9PiAodHlwZSA9PT0gJ3N1Ym1pdCcgPyBtZXJnZShzdGF0dXNDaGFuZ2VzLCB2YWx1ZUNoYW5nZXMpLnBpcGUoc3RhcnRXaXRoKHRydWUpKSA6IE5FVkVSKSlcbiAgICApO1xuICB9XG59XG4iXX0=
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2Zvcm0tZmllbGQvc3JjL2xpYi9kaXJlY3RpdmVzL2Zvcm0tZmllbGQtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBUTFDLFdBQU0seUJBQXlCLEdBQS9CLE1BQU0seUJBQXlCO0lBVXBDO1FBVGlCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RCxTQUFJLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN4QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztRQUM1QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QywwQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RCx1QkFBa0IsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNDLFlBQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUd4Qyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLHdCQUF3QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNuRix3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLHdCQUF3QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekgsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN6SCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pILHdCQUF3QixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0gsd0JBQXdCLENBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDakksbUJBQW1CLENBQ3BCLENBQUM7SUFDSixDQUFDO0lBRU0sUUFBUTtRQUNiLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxJQUFJLElBQUksV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMzRCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBbUI7UUFDL0QsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBRU8sc0JBQXNCLENBQUMsRUFBRSxhQUFhLEVBQW1CO1FBQy9ELE9BQU8sS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sWUFBWSxDQUFDLE9BQXdCO1FBQzNDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUNwRCxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNsQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUM7SUFDSixDQUFDOytHQXZEVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qjs7QUFBekIseUJBQXlCO0lBTnJDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQzs7R0FNdEIseUJBQXlCLENBd0RyQzs0RkF4RFkseUJBQXlCO2tCQUxyQyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUUscUJBQXFCO2lCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGJvb2xlYW5Ub09wdGlvbmFsQXR0cmlidXRlU3RyaW5nLCBpbmplY3RFbGVtZW50LCByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgRU1QVFksIGZyb21FdmVudCwgbWFwLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS1maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1GaWVsZEVycm9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEZvcm1EaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0uZGlyZWN0aXZlJztcblxuQENTU0NvbXBvbmVudCgnZm9ybS1maWVsZC1jb250cm9sJylcbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tvZHhGb3JtRmllbGRDb250cm9sXScsXG4gIGV4cG9ydEFzOiAnb2R4Rm9ybUZpZWxkQ29udHJvbCcsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbnRyb2xEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtID0gaW5qZWN0KEZvcm1EaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcmNlVmFsaWRhdGlvbiQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkZvcm1TdWJtaXQkID0gdGhpcy5mb3JtPy5zdWJtaXQkID8/IEVNUFRZO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1GaWVsZFNlcnZpY2UgPSBpbmplY3QoRm9ybUZpZWxkU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUZpZWxkRXJyb3JTZXJ2aWNlID0gaW5qZWN0KEZvcm1GaWVsZEVycm9yU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdGFrZVVudGlsRGVzdHJveWVkKCk7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHJlYWN0aXZlQXR0cmlidXRlQmluZGluZyh0aGlzLmZvcm1GaWVsZFNlcnZpY2UuY29udHJvbElkJCwgJ2lkJyk7XG4gICAgcmVhY3RpdmVBdHRyaWJ1dGVCaW5kaW5nKHRoaXMuZm9ybUZpZWxkU2VydmljZS5jb250cm9sSGludElkJCwgJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmcodGhpcy5mb3JtRmllbGRTZXJ2aWNlLmlzUmVhZG9ubHkkLCAncmVhZG9ubHknKTtcbiAgICByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmcodGhpcy5mb3JtRmllbGRTZXJ2aWNlLmlzRGlzYWJsZWQkLnBpcGUobWFwKGJvb2xlYW5Ub09wdGlvbmFsQXR0cmlidXRlU3RyaW5nKSksICdhcmlhLWRpc2FibGVkJyk7XG4gICAgcmVhY3RpdmVBdHRyaWJ1dGVCaW5kaW5nKHRoaXMuZm9ybUZpZWxkU2VydmljZS5pc1JlYWRvbmx5JC5waXBlKG1hcChib29sZWFuVG9PcHRpb25hbEF0dHJpYnV0ZVN0cmluZykpLCAnYXJpYS1yZWFkb25seScpO1xuICAgIHJlYWN0aXZlQXR0cmlidXRlQmluZGluZyh0aGlzLmZvcm1GaWVsZFNlcnZpY2UuaXNSZXF1aXJlZCQucGlwZShtYXAoYm9vbGVhblRvT3B0aW9uYWxBdHRyaWJ1dGVTdHJpbmcpKSwgJ2FyaWEtcmVxdWlyZWQnKTtcbiAgICByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmcodGhpcy5mb3JtRmllbGRFcnJvclNlcnZpY2UuaGFzRXJyb3IkLnBpcGUobWFwKGJvb2xlYW5Ub09wdGlvbmFsQXR0cmlidXRlU3RyaW5nKSksICdhcmlhLWludmFsaWQnKTtcbiAgICByZWFjdGl2ZUF0dHJpYnV0ZUJpbmRpbmcoXG4gICAgICB0aGlzLmZvcm1GaWVsZEVycm9yU2VydmljZS5oYXNFcnJvciQucGlwZShzd2l0Y2hNYXAoKGhhc0Vycm9yKSA9PiAoaGFzRXJyb3IgPyB0aGlzLmZvcm1GaWVsZFNlcnZpY2UuY29udHJvbEVycm9ySWQkIDogb2YobnVsbCkpKSksXG4gICAgICAnYXJpYS1lcnJvcm1lc3NhZ2UnLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sPy5jb250cm9sO1xuICAgIHRoaXMuZm9ybUZpZWxkU2VydmljZS5yZWdpc3RlckNvbnRyb2woY29udHJvbCA/PyBuZXcgRm9ybUNvbnRyb2woKSwgdGhpcy5lbGVtZW50KTtcbiAgICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgICB0aGlzLnBhdGNoQ29udHJvbChjb250cm9sKTtcblxuICAgIGNvbnN0IGNvbnRyb2xDaGFuZ2VzJCA9IG1lcmdlKHRoaXMucmVnaXN0ZXJPblN0YXR1c0NoYW5nZShjb250cm9sKSwgdGhpcy5yZWdpc3Rlck9uQmx1cihjb250cm9sKSk7XG4gICAgY29udHJvbENoYW5nZXMkLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1GaWVsZEVycm9yU2VydmljZS5zZXRFcnJvcihjb250cm9sLnRvdWNoZWQgPyBjb250cm9sLmVycm9ycyA6IG51bGwpO1xuICAgIH0pO1xuICAgIHRoaXMub25Gb3JtU3VibWl0JC5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveWVkKS5zdWJzY3JpYmUoKCkgPT4gY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUZpZWxkU2VydmljZS5yZW1vdmVDb250cm9sKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyT25CbHVyKHsgc3RhdHVzLCBzdGF0dXNDaGFuZ2VzIH06IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdmb2N1c291dCcsIHsgb25jZTogdHJ1ZSB9KS5waXBlKHN3aXRjaE1hcCgoKSA9PiBzdGF0dXNDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHN0YXR1cykpKSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyT25TdGF0dXNDaGFuZ2UoeyBzdGF0dXNDaGFuZ2VzIH06IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIHJldHVybiBtZXJnZShzdGF0dXNDaGFuZ2VzLCB0aGlzLmZvcmNlVmFsaWRhdGlvbiQkKTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsTWFya0FzVG91Y2hlZCA9IGNvbnRyb2wubWFya0FzVG91Y2hlZDtcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgb3JpZ2luYWxNYXJrQXNUb3VjaGVkLmFwcGx5KGNvbnRyb2wsIGFyZ3MpO1xuICAgICAgdGhpcy5mb3JjZVZhbGlkYXRpb24kJC5uZXh0KCk7XG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,18 +1,18 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { Directive } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
4
  import { CSSComponent } from '@odx/angular/internal';
4
- import { injectElement, untilDestroyed } from '@odx/angular/utils';
5
+ import { injectElement } from '@odx/angular/utils';
5
6
  import { fromEvent, share } from 'rxjs';
6
7
  import * as i0 from "@angular/core";
7
8
  export let FormDirective = class FormDirective {
8
9
  constructor() {
9
- this.takeUntilDestroyed = untilDestroyed();
10
10
  this.element = injectElement();
11
- this.submit$ = fromEvent(this.element.nativeElement, 'submit').pipe(this.takeUntilDestroyed(), share());
12
- this.reset$ = fromEvent(this.element.nativeElement, 'reset').pipe(this.takeUntilDestroyed(), share());
11
+ this.submit$ = fromEvent(this.element.nativeElement, 'submit').pipe(takeUntilDestroyed(), share());
12
+ this.reset$ = fromEvent(this.element.nativeElement, 'reset').pipe(takeUntilDestroyed(), share());
13
13
  }
14
14
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
15
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FormDirective, isStandalone: true, selector: "form[odxForm]", ngImport: i0 }); }
15
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FormDirective, isStandalone: true, selector: "form[odxForm]", exportAs: ["odxForm"], ngImport: i0 }); }
16
16
  };
17
17
  FormDirective = __decorate([
18
18
  CSSComponent('form')
@@ -22,6 +22,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
22
22
  args: [{
23
23
  standalone: true,
24
24
  selector: 'form[odxForm]',
25
+ exportAs: 'odxForm',
25
26
  }]
26
27
  }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9mb3JtLWZpZWxkL3NyYy9saWIvZGlyZWN0aXZlcy9mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPakMsV0FBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYTtJQUFuQjtRQUNZLHVCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRXZDLFlBQU8sR0FBRyxhQUFhLEVBQW1CLENBQUM7UUFDM0MsWUFBTyxHQUFHLFNBQVMsQ0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRyxXQUFNLEdBQUcsU0FBUyxDQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3pIOytHQU5ZLGFBQWE7bUdBQWIsYUFBYTs7QUFBYixhQUFhO0lBTHpCLFlBQVksQ0FBQyxNQUFNLENBQUM7R0FLUixhQUFhLENBTXpCOzRGQU5ZLGFBQWE7a0JBSnpCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxlQUFlO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGZyb21FdmVudCwgc2hhcmUgfSBmcm9tICdyeGpzJztcblxuQENTU0NvbXBvbmVudCgnZm9ybScpXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdmb3JtW29keEZvcm1dJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdEVsZW1lbnQ8SFRNTEZvcm1FbGVtZW50PigpO1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibWl0JCA9IGZyb21FdmVudDxFdmVudD4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdzdWJtaXQnKS5waXBlKHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCksIHNoYXJlKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzZXQkID0gZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3Jlc2V0JykucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpLCBzaGFyZSgpKTtcbn1cbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9mb3JtLWZpZWxkL3NyYy9saWIvZGlyZWN0aXZlcy9mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVFqQyxXQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFhO0lBQW5CO1FBQ1csWUFBTyxHQUFHLGFBQWEsRUFBbUIsQ0FBQztRQUMzQyxZQUFPLEdBQUcsU0FBUyxDQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckcsV0FBTSxHQUFHLFNBQVMsQ0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3BIOytHQUpZLGFBQWE7bUdBQWIsYUFBYTs7QUFBYixhQUFhO0lBTnpCLFlBQVksQ0FBQyxNQUFNLENBQUM7R0FNUixhQUFhLENBSXpCOzRGQUpZLGFBQWE7a0JBTHpCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsU0FBUztpQkFDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBpbmplY3RFbGVtZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGZyb21FdmVudCwgc2hhcmUgfSBmcm9tICdyeGpzJztcblxuQENTU0NvbXBvbmVudCgnZm9ybScpXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdmb3JtW29keEZvcm1dJyxcbiAgZXhwb3J0QXM6ICdvZHhGb3JtJyxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybURpcmVjdGl2ZSB7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudDxIVE1MRm9ybUVsZW1lbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBzdWJtaXQkID0gZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3N1Ym1pdCcpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCksIHNoYXJlKCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzZXQkID0gZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3Jlc2V0JykucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSwgc2hhcmUoKSk7XG59XG4iXX0=
@@ -4,4 +4,4 @@ export const { FormFieldDefaultConfig, FormFieldConfig, injectFormFieldConfig, p
4
4
  ignoreErrors: [],
5
5
  updateOn: ['blur'],
6
6
  });
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9mb3JtLWZpZWxkL3NyYy9saWIvZm9ybS1maWVsZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFpQnhELE1BQU0sQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLEdBQUcsa0JBQWtCLENBQzFILFdBQVcsRUFDWCxvQ0FBb0MsRUFDcEM7SUFDRSxNQUFNLEVBQUUsRUFBRTtJQUNWLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUNBLENBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb25maWdUb2tlbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JSZXNvbHZlcnMgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkQ29uZmlnIHtcbiAgLyoqXG4gICAqIE9iamVjdCBvZiBlcnJvciByZXNvbHZlcnMgdXNlZCB0byByZXNvbHZlIGVycm9yIG1lc3NhZ2VzIGdsb2JhbGx5XG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBlcnJvcnM6IEZvcm1GaWVsZEVycm9yUmVzb2x2ZXJzO1xuICAvKipcbiAgICogRGV0ZWN0IGZvcm0gZmllbGQgY29udHJvbCBjaGFuZ2VzIG9uIGBibHVyYCBhbmQvb3IgYGNoYW5nZWBcbiAgICogQGRlZmF1bHQgWydibHVyJ11cbiAgICovXG4gIHVwZGF0ZU9uOiBBcnJheTwnYmx1cicgfCAnY2hhbmdlJz47XG4gIGlnbm9yZUVycm9yczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCB7IEZvcm1GaWVsZERlZmF1bHRDb25maWcsIEZvcm1GaWVsZENvbmZpZywgaW5qZWN0Rm9ybUZpZWxkQ29uZmlnLCBwcm92aWRlRm9ybUZpZWxkQ29uZmlnIH0gPSBjcmVhdGVDb25maWdUb2tlbnMoXG4gICdGb3JtRmllbGQnLFxuICAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZm9ybS1maWVsZCcsXG4gIHtcbiAgICBlcnJvcnM6IHt9LFxuICAgIGlnbm9yZUVycm9yczogW10sXG4gICAgdXBkYXRlT246IFsnYmx1ciddLFxuICB9IGFzIEZvcm1GaWVsZENvbmZpZ1xuKTtcbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9mb3JtLWZpZWxkL3NyYy9saWIvZm9ybS1maWVsZC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFrQnhELE1BQU0sQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLEdBQUcsa0JBQWtCLENBQzFILFdBQVcsRUFDWCxvQ0FBb0MsRUFDcEM7SUFDRSxNQUFNLEVBQUUsRUFBRTtJQUNWLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUNBLENBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb25maWdUb2tlbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JSZXNvbHZlcnMgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkQ29uZmlnIHtcbiAgLyoqXG4gICAqIE9iamVjdCBvZiBlcnJvciByZXNvbHZlcnMgdXNlZCB0byByZXNvbHZlIGVycm9yIG1lc3NhZ2VzIGdsb2JhbGx5XG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBlcnJvcnM6IEZvcm1GaWVsZEVycm9yUmVzb2x2ZXJzO1xuICAvKipcbiAgICogRGV0ZWN0IGZvcm0gZmllbGQgY29udHJvbCBjaGFuZ2VzIG9uIGBibHVyYCBhbmQvb3IgYGNoYW5nZWBcbiAgICogQGRlcHJlY2F0ZWQgRG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0IHNpbmNlIHZlcnNpb24gMy4yLjJcbiAgICogQGRlZmF1bHQgWydibHVyJ11cbiAgICovXG4gIHVwZGF0ZU9uOiBBcnJheTwnYmx1cicgfCAnY2hhbmdlJz47XG4gIGlnbm9yZUVycm9yczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCB7IEZvcm1GaWVsZERlZmF1bHRDb25maWcsIEZvcm1GaWVsZENvbmZpZywgaW5qZWN0Rm9ybUZpZWxkQ29uZmlnLCBwcm92aWRlRm9ybUZpZWxkQ29uZmlnIH0gPSBjcmVhdGVDb25maWdUb2tlbnMoXG4gICdGb3JtRmllbGQnLFxuICAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZm9ybS1maWVsZCcsXG4gIHtcbiAgICBlcnJvcnM6IHt9LFxuICAgIGlnbm9yZUVycm9yczogW10sXG4gICAgdXBkYXRlT246IFsnYmx1ciddLFxuICB9IGFzIEZvcm1GaWVsZENvbmZpZyxcbik7XG4iXX0=
@@ -1,15 +1,15 @@
1
1
  import { __decorate, __metadata } from 'tslib';
2
- import * as i2 from '@angular/cdk/a11y';
2
+ import * as i1$1 from '@angular/cdk/a11y';
3
3
  import { A11yModule } from '@angular/cdk/a11y';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, EventEmitter, Directive, Output, HostListener, ElementRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, ViewChild, ContentChild, NgModule } from '@angular/core';
6
6
  import * as i1 from '@odx/angular';
7
- import { ReadonlyController, WithTabIndex, ClickOutsideDirective, detectControllerChanges, CoreModule } from '@odx/angular';
7
+ import { ReadonlyController, WithTabIndex, detectControllerChanges, CoreModule } from '@odx/angular';
8
8
  import { InputControlDirective, CustomFormControl } from '@odx/angular/cdk/custom-form-control';
9
9
  import { ActionGroupComponent } from '@odx/angular/components/action-group';
10
10
  import { ButtonComponent } from '@odx/angular/components/button';
11
11
  import { CalendarComponent } from '@odx/angular/components/calendar';
12
- import * as i3 from '@odx/angular/components/dropdown';
12
+ import * as i2 from '@odx/angular/components/dropdown';
13
13
  import { DropdownDirective, DropdownModule } from '@odx/angular/components/dropdown';
14
14
  import { IconComponent } from '@odx/angular/components/icon';
15
15
  import { CSSComponent } from '@odx/angular/internal';
@@ -103,11 +103,14 @@ let DatepickerInputControlDirective = class DatepickerInputControlDirective exte
103
103
  get placeholder() {
104
104
  return getDatepickerInputFormat(this.config).toUpperCase();
105
105
  }
106
- handleFocus(event) {
107
- this.focused.emit(event);
106
+ handleFocusIn() {
107
+ this.focused.emit(true);
108
+ }
109
+ handleFocusOut() {
110
+ this.focused.emit(false);
108
111
  }
109
112
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerInputControlDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
110
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerInputControlDirective, isStandalone: true, selector: "input[odxDatepickerControl]", outputs: { focused: "focused" }, host: { listeners: { "focus": "handleFocus($event)" }, properties: { "attr.readonly": "readonlyController?.readonly || null", "attr.placeholder": "placeholder" } }, providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }], ngImport: i0 }); }
113
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerInputControlDirective, isStandalone: true, selector: "input[odxDatepickerControl]", outputs: { focused: "focused" }, host: { listeners: { "focusin": "handleFocusIn()", "focusout": "handleFocusOut()" }, properties: { "attr.readonly": "readonlyController?.readonly || null", "attr.placeholder": "placeholder" } }, providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe], usesInheritance: true, hostDirectives: [{ directive: i1.WithTabIndex }], ngImport: i0 }); }
111
114
  };
112
115
  DatepickerInputControlDirective = __decorate([
113
116
  CSSComponent('datepicker__control')
@@ -126,9 +129,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
126
129
  }]
127
130
  }], propDecorators: { focused: [{
128
131
  type: Output
129
- }], handleFocus: [{
132
+ }], handleFocusIn: [{
133
+ type: HostListener,
134
+ args: ['focusin']
135
+ }], handleFocusOut: [{
130
136
  type: HostListener,
131
- args: ['focus', ['$event']]
137
+ args: ['focusout']
132
138
  }] } });
133
139
 
134
140
  let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
@@ -138,7 +144,6 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
138
144
  constructor() {
139
145
  super(null);
140
146
  this.takeUntilDestroyed = untilDestroyed();
141
- this.clickOutsideDirective = inject(ClickOutsideDirective, { host: true });
142
147
  this.config = injectDatepickerConfig();
143
148
  this.element = injectElement();
144
149
  this.filterFn = null;
@@ -151,7 +156,6 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
151
156
  ngAfterViewInit() {
152
157
  this.handleDateFieldChanges();
153
158
  this.handleDateFieldFocus();
154
- this.handleClickOutside();
155
159
  deferFn(() => {
156
160
  if (!this.value)
157
161
  return;
@@ -165,27 +169,21 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
165
169
  this.updateValue(value);
166
170
  this.updateDateField(value);
167
171
  this.selectedChange.emit(value);
168
- this.closeDropdown();
172
+ this.dropdown.close();
169
173
  }
170
174
  handleDateFieldChanges() {
171
175
  this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.updateValue(this.dateField?.valueAsDate ?? null));
172
176
  }
173
177
  handleDateFieldFocus() {
174
- this.dateField?.focused.pipe(this.takeUntilDestroyed()).subscribe(() => {
178
+ this.dateField?.focused.pipe(this.takeUntilDestroyed()).subscribe((isFocused) => {
179
+ if (!isFocused) {
180
+ this.onTouched();
181
+ }
175
182
  if (this.isOpen) {
176
- this.closeDropdown();
183
+ this.dropdown.close();
177
184
  }
178
185
  });
179
186
  }
180
- handleClickOutside() {
181
- this.clickOutsideDirective.odxClickOutside.pipe(this.takeUntilDestroyed()).subscribe(() => this.clickOutside());
182
- }
183
- closeDropdown() {
184
- this.dropdown.close();
185
- }
186
- clickOutside() {
187
- this.closeDropdown();
188
- }
189
187
  openDatepicker(event) {
190
188
  event.stopPropagation();
191
189
  if (this.isReadonly || this.isDisabled)
@@ -199,7 +197,7 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
199
197
  this.dateField.nativeElementValue = format(date, dateFormat);
200
198
  }
201
199
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
202
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerComponent, isStandalone: true, selector: "odx-datepicker", inputs: { filterFn: "filterFn", minDate: "minDate", maxDate: "maxDate", dropdownPosition: "dropdownPosition" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "keydown.alt.ArrowDown": "openDatepicker($event)" } }, queries: [{ propertyName: "dateField", first: true, predicate: DatepickerInputControlDirective, descendants: true }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "dropdownTriggerElement", first: true, predicate: ["dropdownTrigger"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0, template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: CalendarComponent, selector: "odx-calendar", inputs: ["selectedDate", "minDate", "maxDate", "filterFn"], outputs: ["selectedDateChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i3.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerComponent, isStandalone: true, selector: "odx-datepicker", inputs: { filterFn: "filterFn", minDate: "minDate", maxDate: "maxDate", dropdownPosition: "dropdownPosition" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "keydown.alt.ArrowDown": "openDatepicker($event)" } }, queries: [{ propertyName: "dateField", first: true, predicate: DatepickerInputControlDirective, descendants: true }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "dropdownTriggerElement", first: true, predicate: ["dropdownTrigger"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: CalendarComponent, selector: "odx-calendar", inputs: ["selectedDate", "minDate", "maxDate", "filterFn"], outputs: ["selectedDateChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i2.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
203
201
  };
204
202
  DatepickerComponent = __decorate([
205
203
  CSSComponent('datepicker'),
@@ -207,7 +205,7 @@ DatepickerComponent = __decorate([
207
205
  ], DatepickerComponent);
208
206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, decorators: [{
209
207
  type: Component,
210
- args: [{ selector: 'odx-datepicker', standalone: true, imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, hostDirectives: [ClickOutsideDirective], template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n" }]
208
+ args: [{ selector: 'odx-datepicker', standalone: true, imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n" }]
211
209
  }], ctorParameters: function () { return []; }, propDecorators: { filterFn: [{
212
210
  type: Input
213
211
  }], minDate: [{
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-components-datepicker.mjs","sources":["../../../../libs/angular/components/datepicker/src/lib/models/datepicker-input-date-order.ts","../../../../libs/angular/components/datepicker/src/lib/models/datepicker-input-pattern.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.config.ts","../../../../libs/angular/components/datepicker/src/lib/utils/get-datepicker-input-pattern.ts","../../../../libs/angular/components/datepicker/src/lib/utils/get-datepicker-input-value-as-date.ts","../../../../libs/angular/components/datepicker/src/lib/directives/datepicker-input-control.directive.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.component.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.component.html","../../../../libs/angular/components/datepicker/src/lib/datepicker.module.ts","../../../../libs/angular/components/datepicker/src/odx-angular-components-datepicker.ts"],"sourcesContent":["export type DatepickerInputDateOrder = (typeof DatepickerInputDateOrder)[keyof typeof DatepickerInputDateOrder];\n\nexport const DatepickerInputDateOrder = {\n DMY: 'DMY',\n MDY: 'MDY',\n YMD: 'YMD',\n};\n","export type DatepickerInputPattern = typeof DatepickerInputFormat | typeof DatepickerInputMask;\n\nexport const DatepickerInputFormat = {\n DAYS: 'dd',\n MONTH: 'MM',\n YEAR: 'yyyy',\n};\n\nexport const DatepickerInputMask = {\n DAYS: 'd0',\n MONTH: 'M0',\n YEAR: '0000',\n};\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { DatepickerInputDateOrder } from './models';\n\nexport interface DatepickerConfig {\n /**\n * Date's order ('DMY' | 'MDY' | 'YMD').\n * @default DatepickerInputDateOrder.DMY\n */\n inputDateOrder: DatepickerInputDateOrder;\n /**\n * Single-character date's separator (dot, slash etc.).\n * @default '.'\n */\n inputDateSeparator: string;\n}\n\nexport const { DatepickerConfig, DatepickerDefaultConfig, injectDatepickerConfig, provideDatepickerConfig } = createConfigTokens(\n 'Datepicker',\n '@odx/angular/components/datepicker',\n {\n inputDateOrder: DatepickerInputDateOrder.DMY,\n inputDateSeparator: '.',\n },\n);\n","import { DatepickerConfig } from '../datepicker.config';\nimport { DatepickerInputDateOrder, DatepickerInputFormat, DatepickerInputMask, DatepickerInputPattern } from '../models';\n\nfunction getDatepickerInputPattern({ inputDateOrder, inputDateSeparator }: DatepickerConfig, pattern: DatepickerInputPattern): string {\n const patternList: Record<DatepickerInputDateOrder, string> = {\n [DatepickerInputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,\n [DatepickerInputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,\n [DatepickerInputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,\n };\n\n return patternList[inputDateOrder];\n}\n\nexport function getDatepickerInputFormat(config: DatepickerConfig): string {\n return getDatepickerInputPattern(config, DatepickerInputFormat);\n}\n\nexport function getDatepickerInputMask(config: DatepickerConfig): string {\n return getDatepickerInputPattern(config, DatepickerInputMask);\n}\n","import { isValid, toDate } from 'date-fns';\nimport { DatepickerConfig } from '../datepicker.config';\nimport { DatepickerInputDateOrder } from '../models';\n\ninterface DateCandidateInterface {\n month: string;\n day: string;\n year: string;\n}\n\nconst functionList: Record<DatepickerInputDateOrder, (splittedValue: string[]) => DateCandidateInterface> = {\n [DatepickerInputDateOrder.DMY]: (splittedValue: string[]) => {\n const [day, month, year] = splittedValue;\n return { month, day, year };\n },\n [DatepickerInputDateOrder.MDY]: (splittedValue: string[]) => {\n const [month, day, year] = splittedValue;\n return { month, day, year };\n },\n [DatepickerInputDateOrder.YMD]: (splittedValue: string[]) => {\n const [year, month, day] = splittedValue;\n return { month, day, year };\n },\n};\n\nfunction getDateCandidate({ inputDateOrder, inputDateSeparator }: DatepickerConfig, value: string): string | null {\n const splittedValue = value.split(inputDateSeparator);\n\n const { month, day, year }: DateCandidateInterface = functionList[inputDateOrder](splittedValue);\n\n const isDateCandidateInvalid = !month || !day || !year;\n\n return isDateCandidateInvalid ? null : `${month}.${day}.${year}`;\n}\n\nexport function getDatepickerInputValueAsDate(config: DatepickerConfig, value: string): Date | null {\n const dateCandidate: string | null = getDateCandidate(config, value);\n\n if (!dateCandidate) return null;\n\n const date = toDate(Date.parse(dateCandidate));\n\n return isValid(date) ? date : null;\n}\n","import { Directive, EventEmitter, HostListener, inject, Output } from '@angular/core';\nimport { ReadonlyController, WithTabIndex } from '@odx/angular';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { IConfig, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { distinctUntilChanged, fromEvent, map, tap } from 'rxjs';\nimport { injectDatepickerConfig } from '../datepicker.config';\nimport { getDatepickerInputFormat, getDatepickerInputMask, getDatepickerInputValueAsDate } from '../utils';\n\n@CSSComponent('datepicker__control')\n@Directive({\n standalone: true,\n selector: 'input[odxDatepickerControl]',\n host: {\n '[attr.readonly]': 'readonlyController?.readonly || null',\n '[attr.placeholder]': 'placeholder',\n },\n providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe],\n hostDirectives: [WithTabIndex],\n})\nexport class DatepickerInputControlDirective extends InputControlDirective {\n private readonly maskConfig: Partial<IConfig> = { validation: false, leadZeroDateTime: true };\n\n protected readonly readonlyController = ReadonlyController.inject();\n\n protected readonly config = injectDatepickerConfig();\n\n protected readonly inputMask = getDatepickerInputMask(this.config);\n\n protected readonly ngxMaskPipe = inject(NgxMaskPipe);\n\n @Output()\n public focused = new EventEmitter<FocusEvent>();\n\n public override valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(\n distinctUntilChanged(),\n tap(() => this.applyMask()),\n map(() => this.nativeElementValue),\n );\n\n public applyMask(): void {\n this.nativeElementValue = this.ngxMaskPipe.transform(this.nativeElementValue, this.inputMask, this.maskConfig);\n }\n\n public get valueAsDate(): Date | null {\n return getDatepickerInputValueAsDate(this.config, this.nativeElementValue);\n }\n\n public get placeholder(): string {\n return getDatepickerInputFormat(this.config).toUpperCase();\n }\n\n @HostListener('focus', ['$event'])\n protected handleFocus(event: FocusEvent): void {\n this.focused.emit(event);\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ClickOutsideDirective, detectControllerChanges } from '@odx/angular';\nimport { CustomFormControl } from '@odx/angular/cdk/custom-form-control';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { CalendarComponent, DateFilter } from '@odx/angular/components/calendar';\nimport { DropdownDirective, DropdownModule } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { deferFn, injectElement, Position, untilDestroyed } from '@odx/angular/utils';\nimport { format, startOfDay } from 'date-fns';\nimport { injectDatepickerConfig } from './datepicker.config';\nimport { DatepickerInputControlDirective } from './directives';\nimport { getDatepickerInputFormat } from './utils';\n\n@CSSComponent('datepicker')\n@Component({\n selector: 'odx-datepicker',\n standalone: true,\n imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent],\n templateUrl: './datepicker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n hostDirectives: [ClickOutsideDirective],\n})\nexport class DatepickerComponent extends CustomFormControl<Date | null> implements AfterViewInit {\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n protected readonly clickOutsideDirective = inject(ClickOutsideDirective, { host: true });\n\n protected readonly config = injectDatepickerConfig();\n\n public readonly element = injectElement();\n\n public get isOpen(): boolean {\n return !!this.dropdown.isOpen;\n }\n\n @Input()\n public filterFn: DateFilter | null = null;\n\n @Input()\n public minDate: Date | null = null;\n\n @Input()\n public maxDate: Date | null = null;\n\n @Input()\n public dropdownPosition: Position = 'bottom';\n\n @Output()\n public selectedChange = new EventEmitter<Date>();\n\n @ViewChild(DropdownDirective)\n public dropdown!: DropdownDirective;\n\n @ViewChild('dropdownTrigger', { read: ElementRef, static: true })\n public dropdownTriggerElement!: ElementRef<HTMLElement>;\n\n @ContentChild(DatepickerInputControlDirective)\n public dateField?: DatepickerInputControlDirective;\n\n constructor() {\n super(null);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.handleDateFieldChanges();\n this.handleDateFieldFocus();\n this.handleClickOutside();\n\n deferFn(() => {\n if (!this.value) return;\n this.updateValue(startOfDay(this.value));\n this.updateDateField(this.value);\n });\n }\n\n public selectDate(value: Date | null): void {\n if (!value) return;\n\n this.updateValue(value);\n this.updateDateField(value);\n\n this.selectedChange.emit(value);\n\n this.closeDropdown();\n }\n\n protected handleDateFieldChanges(): void {\n this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.updateValue(this.dateField?.valueAsDate ?? null));\n }\n\n protected handleDateFieldFocus(): void {\n this.dateField?.focused.pipe(this.takeUntilDestroyed()).subscribe(() => {\n if (this.isOpen) {\n this.closeDropdown();\n }\n });\n }\n\n protected handleClickOutside(): void {\n this.clickOutsideDirective.odxClickOutside.pipe(this.takeUntilDestroyed()).subscribe(() => this.clickOutside());\n }\n\n protected closeDropdown(): void {\n this.dropdown.close();\n }\n\n protected clickOutside(): void {\n this.closeDropdown();\n }\n\n @HostListener('keydown.alt.ArrowDown', ['$event'])\n protected openDatepicker(event: KeyboardEvent) {\n event.stopPropagation();\n\n if (this.isReadonly || this.isDisabled) return;\n\n this.dropdown.open(event);\n }\n\n private updateDateField(date: Date): void {\n if (!this.dateField) return;\n\n const dateFormat = getDatepickerInputFormat(this.config);\n this.dateField.nativeElementValue = format(date, dateFormat);\n }\n}\n","<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownClickOutsideActive]=\"false\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DatepickerComponent } from './datepicker.component';\nimport { DatepickerInputControlDirective } from './directives';\n\nconst modules = [DatepickerComponent, DatepickerInputControlDirective];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class DatepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-components-datepicker.mjs","sources":["../../../../libs/angular/components/datepicker/src/lib/models/datepicker-input-date-order.ts","../../../../libs/angular/components/datepicker/src/lib/models/datepicker-input-pattern.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.config.ts","../../../../libs/angular/components/datepicker/src/lib/utils/get-datepicker-input-pattern.ts","../../../../libs/angular/components/datepicker/src/lib/utils/get-datepicker-input-value-as-date.ts","../../../../libs/angular/components/datepicker/src/lib/directives/datepicker-input-control.directive.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.component.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.component.html","../../../../libs/angular/components/datepicker/src/lib/datepicker.module.ts","../../../../libs/angular/components/datepicker/src/odx-angular-components-datepicker.ts"],"sourcesContent":["export type DatepickerInputDateOrder = (typeof DatepickerInputDateOrder)[keyof typeof DatepickerInputDateOrder];\n\nexport const DatepickerInputDateOrder = {\n DMY: 'DMY',\n MDY: 'MDY',\n YMD: 'YMD',\n};\n","export type DatepickerInputPattern = typeof DatepickerInputFormat | typeof DatepickerInputMask;\n\nexport const DatepickerInputFormat = {\n DAYS: 'dd',\n MONTH: 'MM',\n YEAR: 'yyyy',\n};\n\nexport const DatepickerInputMask = {\n DAYS: 'd0',\n MONTH: 'M0',\n YEAR: '0000',\n};\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { DatepickerInputDateOrder } from './models';\n\nexport interface DatepickerConfig {\n /**\n * Date's order ('DMY' | 'MDY' | 'YMD').\n * @default DatepickerInputDateOrder.DMY\n */\n inputDateOrder: DatepickerInputDateOrder;\n /**\n * Single-character date's separator (dot, slash etc.).\n * @default '.'\n */\n inputDateSeparator: string;\n}\n\nexport const { DatepickerConfig, DatepickerDefaultConfig, injectDatepickerConfig, provideDatepickerConfig } = createConfigTokens(\n 'Datepicker',\n '@odx/angular/components/datepicker',\n {\n inputDateOrder: DatepickerInputDateOrder.DMY,\n inputDateSeparator: '.',\n },\n);\n","import { DatepickerConfig } from '../datepicker.config';\nimport { DatepickerInputDateOrder, DatepickerInputFormat, DatepickerInputMask, DatepickerInputPattern } from '../models';\n\nfunction getDatepickerInputPattern({ inputDateOrder, inputDateSeparator }: DatepickerConfig, pattern: DatepickerInputPattern): string {\n const patternList: Record<DatepickerInputDateOrder, string> = {\n [DatepickerInputDateOrder.DMY]: `${pattern.DAYS}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.YEAR}`,\n [DatepickerInputDateOrder.MDY]: `${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}${inputDateSeparator}${pattern.YEAR}`,\n [DatepickerInputDateOrder.YMD]: `${pattern.YEAR}${inputDateSeparator}${pattern.MONTH}${inputDateSeparator}${pattern.DAYS}`,\n };\n\n return patternList[inputDateOrder];\n}\n\nexport function getDatepickerInputFormat(config: DatepickerConfig): string {\n return getDatepickerInputPattern(config, DatepickerInputFormat);\n}\n\nexport function getDatepickerInputMask(config: DatepickerConfig): string {\n return getDatepickerInputPattern(config, DatepickerInputMask);\n}\n","import { isValid, toDate } from 'date-fns';\nimport { DatepickerConfig } from '../datepicker.config';\nimport { DatepickerInputDateOrder } from '../models';\n\ninterface DateCandidateInterface {\n month: string;\n day: string;\n year: string;\n}\n\nconst functionList: Record<DatepickerInputDateOrder, (splittedValue: string[]) => DateCandidateInterface> = {\n [DatepickerInputDateOrder.DMY]: (splittedValue: string[]) => {\n const [day, month, year] = splittedValue;\n return { month, day, year };\n },\n [DatepickerInputDateOrder.MDY]: (splittedValue: string[]) => {\n const [month, day, year] = splittedValue;\n return { month, day, year };\n },\n [DatepickerInputDateOrder.YMD]: (splittedValue: string[]) => {\n const [year, month, day] = splittedValue;\n return { month, day, year };\n },\n};\n\nfunction getDateCandidate({ inputDateOrder, inputDateSeparator }: DatepickerConfig, value: string): string | null {\n const splittedValue = value.split(inputDateSeparator);\n\n const { month, day, year }: DateCandidateInterface = functionList[inputDateOrder](splittedValue);\n\n const isDateCandidateInvalid = !month || !day || !year;\n\n return isDateCandidateInvalid ? null : `${month}.${day}.${year}`;\n}\n\nexport function getDatepickerInputValueAsDate(config: DatepickerConfig, value: string): Date | null {\n const dateCandidate: string | null = getDateCandidate(config, value);\n\n if (!dateCandidate) return null;\n\n const date = toDate(Date.parse(dateCandidate));\n\n return isValid(date) ? date : null;\n}\n","import { Directive, EventEmitter, HostListener, inject, Output } from '@angular/core';\nimport { ReadonlyController, WithTabIndex } from '@odx/angular';\nimport { InputControlDirective } from '@odx/angular/cdk/custom-form-control';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { IConfig, NgxMaskPipe, provideNgxMask } from 'ngx-mask';\nimport { distinctUntilChanged, fromEvent, map, tap } from 'rxjs';\nimport { injectDatepickerConfig } from '../datepicker.config';\nimport { getDatepickerInputFormat, getDatepickerInputMask, getDatepickerInputValueAsDate } from '../utils';\n\n@CSSComponent('datepicker__control')\n@Directive({\n standalone: true,\n selector: 'input[odxDatepickerControl]',\n host: {\n '[attr.readonly]': 'readonlyController?.readonly || null',\n '[attr.placeholder]': 'placeholder',\n },\n providers: [ReadonlyController.connect(), provideNgxMask(), NgxMaskPipe],\n hostDirectives: [WithTabIndex],\n})\nexport class DatepickerInputControlDirective extends InputControlDirective {\n private readonly maskConfig: Partial<IConfig> = { validation: false, leadZeroDateTime: true };\n\n protected readonly readonlyController = ReadonlyController.inject();\n protected readonly config = injectDatepickerConfig();\n protected readonly inputMask = getDatepickerInputMask(this.config);\n protected readonly ngxMaskPipe = inject(NgxMaskPipe);\n\n @Output()\n public focused = new EventEmitter<boolean>();\n\n public override valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(\n distinctUntilChanged(),\n tap(() => this.applyMask()),\n map(() => this.nativeElementValue),\n );\n\n public applyMask(): void {\n this.nativeElementValue = this.ngxMaskPipe.transform(this.nativeElementValue, this.inputMask, this.maskConfig);\n }\n\n public get valueAsDate(): Date | null {\n return getDatepickerInputValueAsDate(this.config, this.nativeElementValue);\n }\n\n public get placeholder(): string {\n return getDatepickerInputFormat(this.config).toUpperCase();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.focused.emit(true);\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.focused.emit(false);\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { detectControllerChanges } from '@odx/angular';\nimport { CustomFormControl } from '@odx/angular/cdk/custom-form-control';\nimport { ActionGroupComponent } from '@odx/angular/components/action-group';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { CalendarComponent, DateFilter } from '@odx/angular/components/calendar';\nimport { DropdownDirective, DropdownModule } from '@odx/angular/components/dropdown';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { Position, deferFn, injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { format, startOfDay } from 'date-fns';\nimport { injectDatepickerConfig } from './datepicker.config';\nimport { DatepickerInputControlDirective } from './directives';\nimport { getDatepickerInputFormat } from './utils';\n\n@CSSComponent('datepicker')\n@Component({\n selector: 'odx-datepicker',\n standalone: true,\n imports: [A11yModule, ActionGroupComponent, ButtonComponent, CalendarComponent, DropdownModule, IconComponent],\n templateUrl: './datepicker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class DatepickerComponent extends CustomFormControl<Date | null> implements AfterViewInit {\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n protected readonly config = injectDatepickerConfig();\n\n public readonly element = injectElement();\n\n public get isOpen(): boolean {\n return !!this.dropdown.isOpen;\n }\n\n @Input()\n public filterFn: DateFilter | null = null;\n\n @Input()\n public minDate: Date | null = null;\n\n @Input()\n public maxDate: Date | null = null;\n\n @Input()\n public dropdownPosition: Position = 'bottom';\n\n @Output()\n public selectedChange = new EventEmitter<Date>();\n\n @ViewChild(DropdownDirective)\n public dropdown!: DropdownDirective;\n\n @ViewChild('dropdownTrigger', { read: ElementRef, static: true })\n public dropdownTriggerElement!: ElementRef<HTMLElement>;\n\n @ContentChild(DatepickerInputControlDirective)\n public dateField?: DatepickerInputControlDirective;\n\n constructor() {\n super(null);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.handleDateFieldChanges();\n this.handleDateFieldFocus();\n\n deferFn(() => {\n if (!this.value) return;\n this.updateValue(startOfDay(this.value));\n this.updateDateField(this.value);\n });\n }\n\n public selectDate(value: Date | null): void {\n if (!value) return;\n\n this.updateValue(value);\n this.updateDateField(value);\n\n this.selectedChange.emit(value);\n\n this.dropdown.close();\n }\n\n protected handleDateFieldChanges(): void {\n this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => this.updateValue(this.dateField?.valueAsDate ?? null));\n }\n\n protected handleDateFieldFocus(): void {\n this.dateField?.focused.pipe(this.takeUntilDestroyed()).subscribe((isFocused) => {\n if (!isFocused) {\n this.onTouched();\n }\n if (this.isOpen) {\n this.dropdown.close();\n }\n });\n }\n\n @HostListener('keydown.alt.ArrowDown', ['$event'])\n protected openDatepicker(event: KeyboardEvent) {\n event.stopPropagation();\n\n if (this.isReadonly || this.isDisabled) return;\n\n this.dropdown.open(event);\n }\n\n private updateDateField(date: Date): void {\n if (!this.dateField) return;\n\n const dateFormat = getDatepickerInputFormat(this.config);\n this.dateField.nativeElementValue = format(date, dateFormat);\n }\n}\n","<ng-content select=\"input[odxDatepickerControl]\"></ng-content>\n\n<odx-action-group class=\"odx-no-margin\">\n <button\n #dropdownTrigger\n class=\"odx-datepicker__trigger\"\n odxButton\n size=\"small\"\n variant=\"ghost\"\n [odxDropdown]=\"calendarOverlay\"\n [odxDropdownOptions]=\"{ position: dropdownPosition }\"\n [odxDropdownTriggerElement]=\"dropdownTriggerElement.nativeElement\"\n [odxDropdownHost]=\"null\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n (odxDropdownBeforeClose)=\"onTouched()\"\n >\n <odx-icon name=\"calendar\"></odx-icon>\n </button>\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n ></odx-calendar>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DatepickerComponent } from './datepicker.component';\nimport { DatepickerInputControlDirective } from './directives';\n\nconst modules = [DatepickerComponent, DatepickerInputControlDirective];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class DatepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
@@ -3,18 +3,13 @@ import { Injectable, Directive, inject, TemplateRef, Input, Component, ViewEncap
3
3
  import { Controller, DisabledController, ReadonlyController, CoreModule } from '@odx/angular';
4
4
  import { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';
5
5
  import { __decorate, __metadata } from 'tslib';
6
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
7
  import { Validators, NgControl, FormControl } from '@angular/forms';
7
8
  import { CSSComponent, CSSModifier } from '@odx/angular/internal';
8
- import { createConfigTokens, getUniqueId, isTemplateRef, untilDestroyed, injectElement, reactiveAttributeBinding, booleanToOptionalAttributeString, reactiveClassBinding } from '@odx/angular/utils';
9
- import { BehaviorSubject, shareReplay, map, switchMap, merge, of, distinctUntilChanged, tap, EMPTY, startWith, combineLatest, fromEvent, share, NEVER } from 'rxjs';
9
+ import { getUniqueId, createConfigTokens, isTemplateRef, injectElement, reactiveAttributeBinding, booleanToOptionalAttributeString, reactiveClassBinding } from '@odx/angular/utils';
10
+ import { BehaviorSubject, shareReplay, map, switchMap, merge, of, distinctUntilChanged, tap, EMPTY, startWith, combineLatest, fromEvent, share, Subject } from 'rxjs';
10
11
  import * as i1 from '@angular/common';
11
12
 
12
- const { FormFieldDefaultConfig, FormFieldConfig, injectFormFieldConfig, provideFormFieldConfig } = createConfigTokens('FormField', '@odx/angular/components/form-field', {
13
- errors: {},
14
- ignoreErrors: [],
15
- updateOn: ['blur'],
16
- });
17
-
18
13
  class FormFieldService extends Controller {
19
14
  constructor() {
20
15
  super(...arguments);
@@ -62,6 +57,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
62
57
  type: Injectable
63
58
  }] });
64
59
 
60
+ const { FormFieldDefaultConfig, FormFieldConfig, injectFormFieldConfig, provideFormFieldConfig } = createConfigTokens('FormField', '@odx/angular/components/form-field', {
61
+ errors: {},
62
+ ignoreErrors: [],
63
+ updateOn: ['blur'],
64
+ });
65
+
65
66
  const DEFAULT_CUSTOM_FORM_FIELD_ERROR = '@odx/angular/form-field/default-error';
66
67
  const DEFAULT_ERROR_RESOLVER = () => '';
67
68
  class FormFieldErrorService {
@@ -115,13 +116,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
115
116
 
116
117
  let FormDirective = class FormDirective {
117
118
  constructor() {
118
- this.takeUntilDestroyed = untilDestroyed();
119
119
  this.element = injectElement();
120
- this.submit$ = fromEvent(this.element.nativeElement, 'submit').pipe(this.takeUntilDestroyed(), share());
121
- this.reset$ = fromEvent(this.element.nativeElement, 'reset').pipe(this.takeUntilDestroyed(), share());
120
+ this.submit$ = fromEvent(this.element.nativeElement, 'submit').pipe(takeUntilDestroyed(), share());
121
+ this.reset$ = fromEvent(this.element.nativeElement, 'reset').pipe(takeUntilDestroyed(), share());
122
122
  }
123
123
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
124
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FormDirective, isStandalone: true, selector: "form[odxForm]", ngImport: i0 }); }
124
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FormDirective, isStandalone: true, selector: "form[odxForm]", exportAs: ["odxForm"], ngImport: i0 }); }
125
125
  };
126
126
  FormDirective = __decorate([
127
127
  CSSComponent('form')
@@ -131,19 +131,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
131
131
  args: [{
132
132
  standalone: true,
133
133
  selector: 'form[odxForm]',
134
+ exportAs: 'odxForm',
134
135
  }]
135
136
  }] });
136
137
 
137
138
  let FormFieldControlDirective = class FormFieldControlDirective {
138
139
  constructor() {
139
- this.config = injectFormFieldConfig();
140
140
  this.ngControl = inject(NgControl, { optional: true, self: true });
141
141
  this.form = inject(FormDirective, { optional: true, skipSelf: true });
142
- this.onFormReset$ = this.form?.reset$ ?? EMPTY;
142
+ this.forceValidation$$ = new Subject();
143
143
  this.onFormSubmit$ = this.form?.submit$ ?? EMPTY;
144
144
  this.formFieldService = inject(FormFieldService);
145
145
  this.formFieldErrorService = inject(FormFieldErrorService);
146
- this.takeUntilDestroyed = untilDestroyed();
146
+ this.takeUntilDestroyed = takeUntilDestroyed();
147
147
  this.element = injectElement();
148
148
  reactiveAttributeBinding(this.formFieldService.controlId$, 'id');
149
149
  reactiveAttributeBinding(this.formFieldService.controlHintId$, 'aria-describedby');
@@ -159,27 +159,28 @@ let FormFieldControlDirective = class FormFieldControlDirective {
159
159
  this.formFieldService.registerControl(control ?? new FormControl(), this.element);
160
160
  if (!control)
161
161
  return;
162
- const controlChanges$ = merge(this.registerOnBlur(control), this.registerOnChange(control), this.registerOnSubmit(control));
163
- const changes$ = merge(this.onFormReset$.pipe(tap(() => this.formFieldErrorService?.setError(null))), controlChanges$.pipe(tap(() => this.formFieldErrorService?.setError(control.errors))));
164
- changes$.pipe(this.takeUntilDestroyed()).subscribe();
162
+ this.patchControl(control);
163
+ const controlChanges$ = merge(this.registerOnStatusChange(control), this.registerOnBlur(control));
164
+ controlChanges$.pipe(this.takeUntilDestroyed).subscribe(() => {
165
+ this.formFieldErrorService.setError(control.touched ? control.errors : null);
166
+ });
167
+ this.onFormSubmit$.pipe(this.takeUntilDestroyed).subscribe(() => control.markAsTouched({ onlySelf: true }));
165
168
  }
166
169
  ngOnDestroy() {
167
170
  this.formFieldService.removeControl();
168
171
  }
169
- registerOnBlur({ valueChanges }) {
170
- if (this.config.updateOn.includes('blur')) {
171
- return fromEvent(this.element.nativeElement, 'focusout').pipe(switchMap(() => valueChanges.pipe(startWith(true))));
172
- }
173
- return EMPTY;
172
+ registerOnBlur({ status, statusChanges }) {
173
+ return fromEvent(this.element.nativeElement, 'focusout', { once: true }).pipe(switchMap(() => statusChanges.pipe(startWith(status))));
174
174
  }
175
- registerOnChange({ valueChanges }) {
176
- if (this.config.updateOn.includes('change')) {
177
- return valueChanges;
178
- }
179
- return EMPTY;
175
+ registerOnStatusChange({ statusChanges }) {
176
+ return merge(statusChanges, this.forceValidation$$);
180
177
  }
181
- registerOnSubmit({ statusChanges, valueChanges }) {
182
- return merge(this.onFormSubmit$, this.onFormReset$).pipe(switchMap(({ type }) => (type === 'submit' ? merge(statusChanges, valueChanges).pipe(startWith(true)) : NEVER)));
178
+ patchControl(control) {
179
+ const originalMarkAsTouched = control.markAsTouched;
180
+ control.markAsTouched = (...args) => {
181
+ originalMarkAsTouched.apply(control, args);
182
+ this.forceValidation$$.next();
183
+ };
183
184
  }
184
185
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
185
186
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldControlDirective, isStandalone: true, selector: "[odxFormFieldControl]", exportAs: ["odxFormFieldControl"], ngImport: i0 }); }
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-components-form-field.mjs","sources":["../../../../libs/angular/components/form-field/src/lib/form-field.config.ts","../../../../libs/angular/components/form-field/src/lib/form-field.service.ts","../../../../libs/angular/components/form-field/src/lib/services/form-field-error.service.ts","../../../../libs/angular/components/form-field/src/lib/directives/form.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-control.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-error.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-hint.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-label.directive.ts","../../../../libs/angular/components/form-field/src/lib/components/form-field-info/form-field-info.component.ts","../../../../libs/angular/components/form-field/src/lib/components/form-field-info/form-field-info.component.html","../../../../libs/angular/components/form-field/src/lib/components/form-group/form-group.component.ts","../../../../libs/angular/components/form-field/src/lib/components/form-group/form-group.component.html","../../../../libs/angular/components/form-field/src/lib/models/form-field-variant.ts","../../../../libs/angular/components/form-field/src/lib/form-field.component.ts","../../../../libs/angular/components/form-field/src/lib/form-field.component.html","../../../../libs/angular/components/form-field/src/lib/form-field.module.ts","../../../../libs/angular/components/form-field/src/odx-angular-components-form-field.ts"],"sourcesContent":["import { createConfigTokens } from '@odx/angular/utils';\nimport { FormFieldErrorResolvers } from './models';\n\nexport interface FormFieldConfig {\n /**\n * Object of error resolvers used to resolve error messages globally\n * @default {}\n */\n errors: FormFieldErrorResolvers;\n /**\n * Detect form field control changes on `blur` and/or `change`\n * @default ['blur']\n */\n updateOn: Array<'blur' | 'change'>;\n ignoreErrors: string[];\n}\n\nexport const { FormFieldDefaultConfig, FormFieldConfig, injectFormFieldConfig, provideFormFieldConfig } = createConfigTokens(\n 'FormField',\n '@odx/angular/components/form-field',\n {\n errors: {},\n ignoreErrors: [],\n updateOn: ['blur'],\n } as FormFieldConfig\n);\n","import { ElementRef, Injectable, OnDestroy } from '@angular/core';\nimport { AbstractControl, Validators } from '@angular/forms';\nimport { Controller, DisabledController, ReadonlyController } from '@odx/angular';\nimport { getUniqueId } from '@odx/angular/utils';\nimport { BehaviorSubject, distinctUntilChanged, EMPTY, map, merge, Observable, of, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\ninterface FieldControl {\n control: AbstractControl;\n nativeElement: HTMLElement;\n}\n\n@Injectable()\nexport class FormFieldService extends Controller implements OnDestroy {\n private readonly disabledController = DisabledController.inject();\n private readonly readonlyController = ReadonlyController.inject();\n private readonly control$$ = new BehaviorSubject<FieldControl | null>(null);\n\n public readonly control$ = this.control$$.pipe(shareReplay({ refCount: true }));\n public readonly controlId$ = this.control$.pipe(\n map((control) => (control ? control.nativeElement.id || getUniqueId('odx-form-field') : null)),\n shareReplay({ refCount: true })\n );\n public readonly controlHintId$ = this.controlId$.pipe(\n map((id) => (id ? `${id}-hint` : null)),\n shareReplay({ refCount: true })\n );\n public readonly controlErrorId$ = this.controlId$.pipe(\n map((id) => (id ? `${id}-error` : null)),\n shareReplay({ refCount: true })\n );\n public readonly isDisabled$ = this.control$.pipe(\n switchMap((control) => (control ? merge(this.updateControlDisabledState(control), this.getControlDisabledState(control)) : of(false))),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n public readonly isRequired$ = this.control$.pipe(\n map((control) => (control ? control.nativeElement.hasAttribute('required') || control.control.hasValidator(Validators.required) : false)),\n shareReplay({ refCount: true })\n );\n public readonly isReadonly$ = this.control$.pipe(\n switchMap((control) => (control && this.readonlyController ? this.readonlyController.isReadonly$ : of(false)))\n );\n\n public override ngOnDestroy(): void {\n this.control$$.complete();\n super.ngOnDestroy();\n }\n\n public registerControl(control: AbstractControl, { nativeElement }: ElementRef<HTMLElement>): void {\n this.control$$.next({ control, nativeElement });\n }\n\n public removeControl(): void {\n this.control$$.next(null);\n }\n\n private updateControlDisabledState({ control }: FieldControl): Observable<boolean> {\n if (this.disabledController) {\n return this.disabledController.isDisabled$.pipe(\n tap((state) => {\n if (state) {\n control.disable();\n } else {\n control.enable();\n }\n })\n );\n }\n return EMPTY;\n }\n\n private getControlDisabledState({ control }: FieldControl): Observable<boolean> {\n return control.statusChanges.pipe(\n startWith(control.status),\n map((status) => status === 'DISABLED'),\n distinctUntilChanged()\n );\n }\n}\n","import { Injectable, OnDestroy, TemplateRef } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { isTemplateRef } from '@odx/angular/utils';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { injectFormFieldConfig } from '../form-field.config';\nimport { FormFieldError } from '../models';\n\nconst DEFAULT_CUSTOM_FORM_FIELD_ERROR = '@odx/angular/form-field/default-error';\nconst DEFAULT_ERROR_RESOLVER = () => '';\n\ninterface NgFormFieldError {\n key: string;\n context: unknown;\n}\n\ntype CustomFormFieldErrors = Record<string, TemplateRef<unknown>>;\n\n@Injectable()\nexport class FormFieldErrorService implements OnDestroy {\n private readonly config = injectFormFieldConfig();\n private readonly fieldError$$ = new BehaviorSubject<NgFormFieldError | null>(null);\n private readonly customErrors$$ = new BehaviorSubject<CustomFormFieldErrors>({});\n\n public readonly error$ = combineLatest([this.fieldError$$, this.customErrors$$]).pipe(\n map(([error, customErrors]) => this.resolveError(error, customErrors)),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n public readonly hasError$ = this.error$.pipe(map((error) => error !== null));\n\n public get hasError(): boolean {\n return this.fieldError$$.getValue() !== null;\n }\n\n public ngOnDestroy(): void {\n this.fieldError$$.next(null);\n this.customErrors$$.next({});\n this.fieldError$$.complete();\n this.customErrors$$.complete();\n }\n\n public setError(errors?: ValidationErrors | null): void {\n this.fieldError$$.next(this.getFirstError(errors ?? {}));\n }\n\n public registerCustomError(key: string | undefined, template: TemplateRef<unknown>): void {\n this.customErrors$$.next({ ...this.customErrors$$.getValue(), [key || DEFAULT_CUSTOM_FORM_FIELD_ERROR]: template });\n }\n\n private getFirstError(errors: ValidationErrors): NgFormFieldError | null {\n const [key, context] = Object.entries(errors ?? {}).find(([errorKey]) => !this.config.ignoreErrors.includes(errorKey)) ?? [];\n\n return key ? { key, context } : null;\n }\n\n private resolveError(error: NgFormFieldError | null, customErrors: CustomFormFieldErrors): FormFieldError | null {\n if (!error) return null;\n const { key, context } = error;\n const message = customErrors[key] ?? customErrors[DEFAULT_CUSTOM_FORM_FIELD_ERROR];\n if (isTemplateRef(message)) {\n return {\n key,\n message,\n context: { $implicit: context },\n };\n }\n\n const getMessage = this.config.errors[key] ?? DEFAULT_ERROR_RESOLVER;\n return { key, message: getMessage(context) };\n }\n}\n","import { Directive } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { fromEvent, share } from 'rxjs';\n\n@CSSComponent('form')\n@Directive({\n standalone: true,\n selector: 'form[odxForm]',\n})\nexport class FormDirective {\n private readonly takeUntilDestroyed = untilDestroyed();\n\n public readonly element = injectElement<HTMLFormElement>();\n public readonly submit$ = fromEvent<Event>(this.element.nativeElement, 'submit').pipe(this.takeUntilDestroyed(), share());\n public readonly reset$ = fromEvent<Event>(this.element.nativeElement, 'reset').pipe(this.takeUntilDestroyed(), share());\n}\n","import { Directive, inject, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, NgControl } from '@angular/forms';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { booleanToOptionalAttributeString, injectElement, reactiveAttributeBinding, untilDestroyed } from '@odx/angular/utils';\nimport { EMPTY, fromEvent, map, merge, NEVER, Observable, of, startWith, switchMap, tap } from 'rxjs';\nimport { injectFormFieldConfig } from '../form-field.config';\nimport { FormFieldService } from '../form-field.service';\nimport { FormFieldErrorService } from '../services';\nimport { FormDirective } from './form.directive';\n\n@CSSComponent('form-field-control')\n@Directive({\n standalone: true,\n selector: '[odxFormFieldControl]',\n exportAs: 'odxFormFieldControl',\n})\nexport class FormFieldControlDirective implements OnInit, OnDestroy {\n private readonly config = injectFormFieldConfig();\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly form = inject(FormDirective, { optional: true, skipSelf: true });\n private readonly onFormReset$ = this.form?.reset$ ?? EMPTY;\n private readonly onFormSubmit$ = this.form?.submit$ ?? EMPTY;\n private readonly formFieldService = inject(FormFieldService);\n private readonly formFieldErrorService = inject(FormFieldErrorService);\n private readonly takeUntilDestroyed = untilDestroyed();\n public readonly element = injectElement();\n\n constructor() {\n reactiveAttributeBinding(this.formFieldService.controlId$, 'id');\n reactiveAttributeBinding(this.formFieldService.controlHintId$, 'aria-describedby');\n reactiveAttributeBinding(this.formFieldService.isReadonly$, 'readonly');\n reactiveAttributeBinding(this.formFieldService.isDisabled$.pipe(map(booleanToOptionalAttributeString)), 'aria-disabled');\n reactiveAttributeBinding(this.formFieldService.isReadonly$.pipe(map(booleanToOptionalAttributeString)), 'aria-readonly');\n reactiveAttributeBinding(this.formFieldService.isRequired$.pipe(map(booleanToOptionalAttributeString)), 'aria-required');\n reactiveAttributeBinding(this.formFieldErrorService.hasError$.pipe(map(booleanToOptionalAttributeString)), 'aria-invalid');\n reactiveAttributeBinding(\n this.formFieldErrorService.hasError$.pipe(switchMap((hasError) => (hasError ? this.formFieldService.controlErrorId$ : of(null)))),\n 'aria-errormessage'\n );\n }\n\n public ngOnInit() {\n const control = this.ngControl?.control;\n this.formFieldService.registerControl(control ?? new FormControl(), this.element);\n if (!control) return;\n\n const controlChanges$ = merge(this.registerOnBlur(control), this.registerOnChange(control), this.registerOnSubmit(control));\n const changes$ = merge(\n this.onFormReset$.pipe(tap(() => this.formFieldErrorService?.setError(null))),\n controlChanges$.pipe(tap(() => this.formFieldErrorService?.setError(control.errors)))\n );\n changes$.pipe(this.takeUntilDestroyed()).subscribe();\n }\n\n public ngOnDestroy(): void {\n this.formFieldService.removeControl();\n }\n\n private registerOnBlur({ valueChanges }: AbstractControl): Observable<unknown> {\n if (this.config.updateOn.includes('blur')) {\n return fromEvent(this.element.nativeElement, 'focusout').pipe(switchMap(() => valueChanges.pipe(startWith(true))));\n }\n return EMPTY;\n }\n\n private registerOnChange({ valueChanges }: AbstractControl): Observable<unknown> {\n if (this.config.updateOn.includes('change')) {\n return valueChanges;\n }\n return EMPTY;\n }\n\n private registerOnSubmit({ statusChanges, valueChanges }: AbstractControl): Observable<unknown> {\n return merge(this.onFormSubmit$, this.onFormReset$).pipe(\n switchMap(({ type }) => (type === 'submit' ? merge(statusChanges, valueChanges).pipe(startWith(true)) : NEVER))\n );\n }\n}\n","import { Directive, inject, Input, OnInit, TemplateRef } from '@angular/core';\nimport { FormFieldErrorService } from '../services';\n\n@Directive({\n standalone: true,\n selector: '[odxFormFieldError]',\n})\nexport class FormFieldErrorDirective implements OnInit {\n private readonly formFieldErrorService = inject(FormFieldErrorService, { skipSelf: true });\n private readonly template = inject(TemplateRef, { self: true });\n\n @Input('odxFormFieldError')\n public key?: string;\n\n public ngOnInit() {\n this.formFieldErrorService.registerCustomError(this.key, this.template);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { reactiveAttributeBinding } from '@odx/angular/utils';\nimport { FormFieldService } from '../form-field.service';\n\n@Directive({\n standalone: true,\n selector: 'odx-form-field-hint',\n host: {\n '[class.odx-form-field__hint]': 'true',\n },\n})\nexport class FormFieldHintDirective {\n protected readonly formFieldService = inject(FormFieldService, { skipSelf: true });\n\n constructor() {\n reactiveAttributeBinding(inject(FormFieldService).controlHintId$, 'id');\n }\n}\n","import { Directive } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n@CSSComponent('form-field-label')\n@Directive({\n standalone: true,\n selector: 'odx-form-field-label',\n})\nexport class FormFieldLabelDirective {\n public readonly element = injectElement();\n}\n","import { Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { FormFieldHintDirective } from '../../directives';\nimport { FormFieldService } from '../../form-field.service';\nimport { FormFieldError } from '../../models';\n\n@Component({\n standalone: true,\n selector: 'odx-form-field-info',\n templateUrl: './form-field-info.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [CoreModule, DynamicViewDirective, FormFieldHintDirective],\n host: {\n '[class.odx-form-field__info]': 'true',\n },\n})\nexport class FormFieldInfoComponent {\n protected readonly formFieldService = inject(FormFieldService);\n\n @Input()\n public error: FormFieldError | null = null;\n}\n","<span class=\"odx-form-field-error\" [attr.id]=\"formFieldService.controlErrorId$ | async\" *ngIf=\"error; else hint\">\n <ng-template [odxDynamicView]=\"error.message\" [odxDynamicViewContext]=\"error.context\"></ng-template>\n</span>\n<ng-template #hint>\n <ng-content></ng-content>\n</ng-template>\n","import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, QueryList, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { combineLatest, map, Observable, startWith, switchMap } from 'rxjs';\nimport { FormFieldService } from '../../form-field.service';\nimport { FormFieldError } from '../../models';\nimport { FormFieldErrorService } from '../../services';\nimport { FormFieldInfoComponent } from '../form-field-info/form-field-info.component';\n\n@CSSComponent('form-group')\n@Component({\n standalone: true,\n selector: 'odx-form-group',\n templateUrl: './form-group.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CoreModule, FormFieldInfoComponent],\n providers: [FormFieldService],\n})\nexport class FormGroupComponent implements AfterContentInit {\n public readonly element = injectElement();\n public error$: Observable<FormFieldError | null> | null = null;\n\n @ContentChildren(FormFieldErrorService, { descendants: false })\n public formFieldErrorServices!: QueryList<FormFieldErrorService>;\n\n public ngAfterContentInit() {\n this.error$ = this.formFieldErrorServices.changes.pipe(\n startWith<QueryList<FormFieldErrorService>>(this.formFieldErrorServices),\n switchMap((services) => combineLatest(services.map((service) => service.error$))),\n map((errors) => errors.find((error) => error !== null) ?? null)\n );\n }\n}\n","<div class=\"odx-form-group__content\" odxLayout=\"grid\">\n <ng-content select=\"odx-form-field\"> </ng-content>\n</div>\n<odx-form-field-info [error]=\"error$ | async\">\n <ng-content select=\"odx-form-field-hint\"></ng-content>\n</odx-form-field-info>\n","export type FormFieldVariant = (typeof FormFieldVariant)[keyof typeof FormFieldVariant];\n\nexport const FormFieldVariant = {\n FULL: 'full',\n SIMPLE: 'simple',\n HORIZONTAL: 'horizontal',\n} as const;\n","import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule, DisabledController, ReadonlyController } from '@odx/angular';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, reactiveClassBinding } from '@odx/angular/utils';\nimport { BehaviorSubject, combineLatest, map } from 'rxjs';\nimport { FormFieldInfoComponent, FormGroupComponent } from './components';\nimport { FormFieldLabelDirective } from './directives';\nimport { FormFieldService } from './form-field.service';\nimport { FormFieldVariant } from './models';\nimport { FormFieldErrorService } from './services';\n\n@CSSComponent('form-field')\n@Component({\n standalone: true,\n selector: 'odx-form-field',\n imports: [CoreModule, FormFieldInfoComponent, FormFieldLabelDirective],\n templateUrl: './form-field.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [FormFieldService, FormFieldErrorService, DisabledController.connect(), ReadonlyController.connect()],\n})\nexport class FormFieldComponent {\n protected readonly hasWarning$$ = new BehaviorSubject(false);\n\n protected readonly formGroup = inject(FormGroupComponent, { optional: true, host: true });\n protected readonly formFieldService = inject(FormFieldService, { self: true });\n protected readonly formFieldErrorService = inject(FormFieldErrorService, { self: true });\n public readonly element = injectElement();\n\n @ContentChild(FormFieldLabelDirective)\n public labelDirective?: FormFieldLabelDirective;\n\n @Input()\n public label?: string | null = null;\n\n @Input({ transform: booleanAttribute })\n public set hasWarning(value: boolean) {\n this.hasWarning$$.next(value);\n }\n public get hasWarning(): boolean {\n return this.hasWarning$$.getValue();\n }\n\n @CSSModifier()\n @Input()\n public variant: FormFieldVariant | null = FormFieldVariant.FULL;\n\n public get hasLabel(): boolean {\n return !!(this.labelDirective || this.label);\n }\n\n constructor() {\n const hasWarning$ = combineLatest([this.formFieldErrorService.error$, this.hasWarning$$]).pipe(map(([hasError, hasWarning]) => hasError && hasWarning));\n reactiveClassBinding(this.formFieldService.isRequired$, 'odx-form-field--required');\n reactiveClassBinding(this.formFieldService.isDisabled$, 'is-disabled');\n reactiveClassBinding(this.formFieldService.isReadonly$, 'is-readonly');\n reactiveClassBinding(this.formFieldErrorService.hasError$, 'has-error');\n reactiveClassBinding(hasWarning$, 'has-warning');\n }\n}\n","<label class=\"odx-form-field__label\" [attr.for]=\"formFieldService.controlId$ | async\" [attr.aria-owns]=\"formFieldService.controlId$ | async\" *ngIf=\"hasLabel\">\n <ng-container *ngIf=\"label; else labelTemplate\">\n <odx-form-field-label>{{ label }}</odx-form-field-label>\n <span class=\"odx-form-field__label-is-required\" *ngIf=\"formFieldService.isRequired$ | async\">*</span>\n </ng-container>\n <ng-template #labelTemplate>\n <ng-content select=\"odx-form-field-label\"></ng-content>\n <span class=\"odx-form-field__label-is-required\" *ngIf=\"formFieldService.isRequired$ | async\">*</span>\n </ng-template>\n</label>\n<div class=\"odx-form-field__inner\">\n <div class=\"odx-form-field__control\">\n <div class=\"odx-form-field__prefix\">\n <ng-content select=\"[odxFormFieldPrefix]\"></ng-content>\n </div>\n <ng-content></ng-content>\n <div class=\"odx-form-field__suffix\">\n <ng-content select=\"[odxFormFieldSuffix]\"></ng-content>\n </div>\n </div>\n <odx-form-field-info [error]=\"formFieldErrorService.error$ | async\" *ngIf=\"!formGroup\">\n <ng-content select=\"odx-form-field-hint\"></ng-content>\n </odx-form-field-info>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { FormGroupComponent } from './components';\nimport { FormDirective, FormFieldControlDirective, FormFieldErrorDirective, FormFieldHintDirective, FormFieldLabelDirective } from './directives';\nimport { FormFieldComponent } from './form-field.component';\n\nconst modules = [\n FormFieldComponent,\n FormGroupComponent,\n FormDirective,\n FormFieldControlDirective,\n FormFieldErrorDirective,\n FormFieldHintDirective,\n FormFieldLabelDirective,\n];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class FormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-components-form-field.mjs","sources":["../../../../libs/angular/components/form-field/src/lib/form-field.service.ts","../../../../libs/angular/components/form-field/src/lib/form-field.config.ts","../../../../libs/angular/components/form-field/src/lib/services/form-field-error.service.ts","../../../../libs/angular/components/form-field/src/lib/directives/form.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-control.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-error.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-hint.directive.ts","../../../../libs/angular/components/form-field/src/lib/directives/form-field-label.directive.ts","../../../../libs/angular/components/form-field/src/lib/components/form-field-info/form-field-info.component.ts","../../../../libs/angular/components/form-field/src/lib/components/form-field-info/form-field-info.component.html","../../../../libs/angular/components/form-field/src/lib/components/form-group/form-group.component.ts","../../../../libs/angular/components/form-field/src/lib/components/form-group/form-group.component.html","../../../../libs/angular/components/form-field/src/lib/models/form-field-variant.ts","../../../../libs/angular/components/form-field/src/lib/form-field.component.ts","../../../../libs/angular/components/form-field/src/lib/form-field.component.html","../../../../libs/angular/components/form-field/src/lib/form-field.module.ts","../../../../libs/angular/components/form-field/src/odx-angular-components-form-field.ts"],"sourcesContent":["import { ElementRef, Injectable, OnDestroy } from '@angular/core';\nimport { AbstractControl, Validators } from '@angular/forms';\nimport { Controller, DisabledController, ReadonlyController } from '@odx/angular';\nimport { getUniqueId } from '@odx/angular/utils';\nimport { BehaviorSubject, distinctUntilChanged, EMPTY, map, merge, Observable, of, shareReplay, startWith, switchMap, tap } from 'rxjs';\n\ninterface FieldControl {\n control: AbstractControl;\n nativeElement: HTMLElement;\n}\n\n@Injectable()\nexport class FormFieldService extends Controller implements OnDestroy {\n private readonly disabledController = DisabledController.inject();\n private readonly readonlyController = ReadonlyController.inject();\n private readonly control$$ = new BehaviorSubject<FieldControl | null>(null);\n\n public readonly control$ = this.control$$.pipe(shareReplay({ refCount: true }));\n public readonly controlId$ = this.control$.pipe(\n map((control) => (control ? control.nativeElement.id || getUniqueId('odx-form-field') : null)),\n shareReplay({ refCount: true })\n );\n public readonly controlHintId$ = this.controlId$.pipe(\n map((id) => (id ? `${id}-hint` : null)),\n shareReplay({ refCount: true })\n );\n public readonly controlErrorId$ = this.controlId$.pipe(\n map((id) => (id ? `${id}-error` : null)),\n shareReplay({ refCount: true })\n );\n public readonly isDisabled$ = this.control$.pipe(\n switchMap((control) => (control ? merge(this.updateControlDisabledState(control), this.getControlDisabledState(control)) : of(false))),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n public readonly isRequired$ = this.control$.pipe(\n map((control) => (control ? control.nativeElement.hasAttribute('required') || control.control.hasValidator(Validators.required) : false)),\n shareReplay({ refCount: true })\n );\n public readonly isReadonly$ = this.control$.pipe(\n switchMap((control) => (control && this.readonlyController ? this.readonlyController.isReadonly$ : of(false)))\n );\n\n public override ngOnDestroy(): void {\n this.control$$.complete();\n super.ngOnDestroy();\n }\n\n public registerControl(control: AbstractControl, { nativeElement }: ElementRef<HTMLElement>): void {\n this.control$$.next({ control, nativeElement });\n }\n\n public removeControl(): void {\n this.control$$.next(null);\n }\n\n private updateControlDisabledState({ control }: FieldControl): Observable<boolean> {\n if (this.disabledController) {\n return this.disabledController.isDisabled$.pipe(\n tap((state) => {\n if (state) {\n control.disable();\n } else {\n control.enable();\n }\n })\n );\n }\n return EMPTY;\n }\n\n private getControlDisabledState({ control }: FieldControl): Observable<boolean> {\n return control.statusChanges.pipe(\n startWith(control.status),\n map((status) => status === 'DISABLED'),\n distinctUntilChanged()\n );\n }\n}\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { FormFieldErrorResolvers } from './models';\n\nexport interface FormFieldConfig {\n /**\n * Object of error resolvers used to resolve error messages globally\n * @default {}\n */\n errors: FormFieldErrorResolvers;\n /**\n * Detect form field control changes on `blur` and/or `change`\n * @deprecated Does not have any effect since version 3.2.2\n * @default ['blur']\n */\n updateOn: Array<'blur' | 'change'>;\n ignoreErrors: string[];\n}\n\nexport const { FormFieldDefaultConfig, FormFieldConfig, injectFormFieldConfig, provideFormFieldConfig } = createConfigTokens(\n 'FormField',\n '@odx/angular/components/form-field',\n {\n errors: {},\n ignoreErrors: [],\n updateOn: ['blur'],\n } as FormFieldConfig,\n);\n","import { Injectable, OnDestroy, TemplateRef } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { isTemplateRef } from '@odx/angular/utils';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { injectFormFieldConfig } from '../form-field.config';\nimport { FormFieldError } from '../models';\n\nconst DEFAULT_CUSTOM_FORM_FIELD_ERROR = '@odx/angular/form-field/default-error';\nconst DEFAULT_ERROR_RESOLVER = () => '';\n\ninterface NgFormFieldError {\n key: string;\n context: unknown;\n}\n\ntype CustomFormFieldErrors = Record<string, TemplateRef<unknown>>;\n\n@Injectable()\nexport class FormFieldErrorService implements OnDestroy {\n private readonly config = injectFormFieldConfig();\n private readonly fieldError$$ = new BehaviorSubject<NgFormFieldError | null>(null);\n private readonly customErrors$$ = new BehaviorSubject<CustomFormFieldErrors>({});\n\n public readonly error$ = combineLatest([this.fieldError$$, this.customErrors$$]).pipe(\n map(([error, customErrors]) => this.resolveError(error, customErrors)),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n public readonly hasError$ = this.error$.pipe(map((error) => error !== null));\n\n public get hasError(): boolean {\n return this.fieldError$$.getValue() !== null;\n }\n\n public ngOnDestroy(): void {\n this.fieldError$$.next(null);\n this.customErrors$$.next({});\n this.fieldError$$.complete();\n this.customErrors$$.complete();\n }\n\n public setError(errors?: ValidationErrors | null): void {\n this.fieldError$$.next(this.getFirstError(errors ?? {}));\n }\n\n public registerCustomError(key: string | undefined, template: TemplateRef<unknown>): void {\n this.customErrors$$.next({ ...this.customErrors$$.getValue(), [key || DEFAULT_CUSTOM_FORM_FIELD_ERROR]: template });\n }\n\n private getFirstError(errors: ValidationErrors): NgFormFieldError | null {\n const [key, context] = Object.entries(errors ?? {}).find(([errorKey]) => !this.config.ignoreErrors.includes(errorKey)) ?? [];\n\n return key ? { key, context } : null;\n }\n\n private resolveError(error: NgFormFieldError | null, customErrors: CustomFormFieldErrors): FormFieldError | null {\n if (!error) return null;\n const { key, context } = error;\n const message = customErrors[key] ?? customErrors[DEFAULT_CUSTOM_FORM_FIELD_ERROR];\n if (isTemplateRef(message)) {\n return {\n key,\n message,\n context: { $implicit: context },\n };\n }\n\n const getMessage = this.config.errors[key] ?? DEFAULT_ERROR_RESOLVER;\n return { key, message: getMessage(context) };\n }\n}\n","import { Directive } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { fromEvent, share } from 'rxjs';\n\n@CSSComponent('form')\n@Directive({\n standalone: true,\n selector: 'form[odxForm]',\n exportAs: 'odxForm',\n})\nexport class FormDirective {\n public readonly element = injectElement<HTMLFormElement>();\n public readonly submit$ = fromEvent<Event>(this.element.nativeElement, 'submit').pipe(takeUntilDestroyed(), share());\n public readonly reset$ = fromEvent<Event>(this.element.nativeElement, 'reset').pipe(takeUntilDestroyed(), share());\n}\n","import { Directive, inject, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormControl, NgControl } from '@angular/forms';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { booleanToOptionalAttributeString, injectElement, reactiveAttributeBinding } from '@odx/angular/utils';\nimport { EMPTY, fromEvent, map, merge, Observable, of, startWith, Subject, switchMap } from 'rxjs';\nimport { FormFieldService } from '../form-field.service';\nimport { FormFieldErrorService } from '../services';\nimport { FormDirective } from './form.directive';\n\n@CSSComponent('form-field-control')\n@Directive({\n standalone: true,\n selector: '[odxFormFieldControl]',\n exportAs: 'odxFormFieldControl',\n})\nexport class FormFieldControlDirective implements OnInit, OnDestroy {\n private readonly ngControl = inject(NgControl, { optional: true, self: true });\n private readonly form = inject(FormDirective, { optional: true, skipSelf: true });\n private readonly forceValidation$$ = new Subject<void>();\n private readonly onFormSubmit$ = this.form?.submit$ ?? EMPTY;\n private readonly formFieldService = inject(FormFieldService);\n private readonly formFieldErrorService = inject(FormFieldErrorService);\n private readonly takeUntilDestroyed = takeUntilDestroyed();\n public readonly element = injectElement();\n\n constructor() {\n reactiveAttributeBinding(this.formFieldService.controlId$, 'id');\n reactiveAttributeBinding(this.formFieldService.controlHintId$, 'aria-describedby');\n reactiveAttributeBinding(this.formFieldService.isReadonly$, 'readonly');\n reactiveAttributeBinding(this.formFieldService.isDisabled$.pipe(map(booleanToOptionalAttributeString)), 'aria-disabled');\n reactiveAttributeBinding(this.formFieldService.isReadonly$.pipe(map(booleanToOptionalAttributeString)), 'aria-readonly');\n reactiveAttributeBinding(this.formFieldService.isRequired$.pipe(map(booleanToOptionalAttributeString)), 'aria-required');\n reactiveAttributeBinding(this.formFieldErrorService.hasError$.pipe(map(booleanToOptionalAttributeString)), 'aria-invalid');\n reactiveAttributeBinding(\n this.formFieldErrorService.hasError$.pipe(switchMap((hasError) => (hasError ? this.formFieldService.controlErrorId$ : of(null)))),\n 'aria-errormessage',\n );\n }\n\n public ngOnInit() {\n const control = this.ngControl?.control;\n this.formFieldService.registerControl(control ?? new FormControl(), this.element);\n if (!control) return;\n this.patchControl(control);\n\n const controlChanges$ = merge(this.registerOnStatusChange(control), this.registerOnBlur(control));\n controlChanges$.pipe(this.takeUntilDestroyed).subscribe(() => {\n this.formFieldErrorService.setError(control.touched ? control.errors : null);\n });\n this.onFormSubmit$.pipe(this.takeUntilDestroyed).subscribe(() => control.markAsTouched({ onlySelf: true }));\n }\n\n public ngOnDestroy(): void {\n this.formFieldService.removeControl();\n }\n\n private registerOnBlur({ status, statusChanges }: AbstractControl): Observable<unknown> {\n return fromEvent(this.element.nativeElement, 'focusout', { once: true }).pipe(switchMap(() => statusChanges.pipe(startWith(status))));\n }\n\n private registerOnStatusChange({ statusChanges }: AbstractControl): Observable<unknown> {\n return merge(statusChanges, this.forceValidation$$);\n }\n\n private patchControl(control: AbstractControl): void {\n const originalMarkAsTouched = control.markAsTouched;\n control.markAsTouched = (...args) => {\n originalMarkAsTouched.apply(control, args);\n this.forceValidation$$.next();\n };\n }\n}\n","import { Directive, inject, Input, OnInit, TemplateRef } from '@angular/core';\nimport { FormFieldErrorService } from '../services';\n\n@Directive({\n standalone: true,\n selector: '[odxFormFieldError]',\n})\nexport class FormFieldErrorDirective implements OnInit {\n private readonly formFieldErrorService = inject(FormFieldErrorService, { skipSelf: true });\n private readonly template = inject(TemplateRef, { self: true });\n\n @Input('odxFormFieldError')\n public key?: string;\n\n public ngOnInit() {\n this.formFieldErrorService.registerCustomError(this.key, this.template);\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { reactiveAttributeBinding } from '@odx/angular/utils';\nimport { FormFieldService } from '../form-field.service';\n\n@Directive({\n standalone: true,\n selector: 'odx-form-field-hint',\n host: {\n '[class.odx-form-field__hint]': 'true',\n },\n})\nexport class FormFieldHintDirective {\n protected readonly formFieldService = inject(FormFieldService, { skipSelf: true });\n\n constructor() {\n reactiveAttributeBinding(inject(FormFieldService).controlHintId$, 'id');\n }\n}\n","import { Directive } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n@CSSComponent('form-field-label')\n@Directive({\n standalone: true,\n selector: 'odx-form-field-label',\n})\nexport class FormFieldLabelDirective {\n public readonly element = injectElement();\n}\n","import { Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DynamicViewDirective } from '@odx/angular/cdk/dynamic-view';\nimport { FormFieldHintDirective } from '../../directives';\nimport { FormFieldService } from '../../form-field.service';\nimport { FormFieldError } from '../../models';\n\n@Component({\n standalone: true,\n selector: 'odx-form-field-info',\n templateUrl: './form-field-info.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [CoreModule, DynamicViewDirective, FormFieldHintDirective],\n host: {\n '[class.odx-form-field__info]': 'true',\n },\n})\nexport class FormFieldInfoComponent {\n protected readonly formFieldService = inject(FormFieldService);\n\n @Input()\n public error: FormFieldError | null = null;\n}\n","<span class=\"odx-form-field-error\" [attr.id]=\"formFieldService.controlErrorId$ | async\" *ngIf=\"error; else hint\">\n <ng-template [odxDynamicView]=\"error.message\" [odxDynamicViewContext]=\"error.context\"></ng-template>\n</span>\n<ng-template #hint>\n <ng-content></ng-content>\n</ng-template>\n","import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, QueryList, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { combineLatest, map, Observable, startWith, switchMap } from 'rxjs';\nimport { FormFieldService } from '../../form-field.service';\nimport { FormFieldError } from '../../models';\nimport { FormFieldErrorService } from '../../services';\nimport { FormFieldInfoComponent } from '../form-field-info/form-field-info.component';\n\n@CSSComponent('form-group')\n@Component({\n standalone: true,\n selector: 'odx-form-group',\n templateUrl: './form-group.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CoreModule, FormFieldInfoComponent],\n providers: [FormFieldService],\n})\nexport class FormGroupComponent implements AfterContentInit {\n public readonly element = injectElement();\n public error$: Observable<FormFieldError | null> | null = null;\n\n @ContentChildren(FormFieldErrorService, { descendants: false })\n public formFieldErrorServices!: QueryList<FormFieldErrorService>;\n\n public ngAfterContentInit() {\n this.error$ = this.formFieldErrorServices.changes.pipe(\n startWith<QueryList<FormFieldErrorService>>(this.formFieldErrorServices),\n switchMap((services) => combineLatest(services.map((service) => service.error$))),\n map((errors) => errors.find((error) => error !== null) ?? null)\n );\n }\n}\n","<div class=\"odx-form-group__content\" odxLayout=\"grid\">\n <ng-content select=\"odx-form-field\"> </ng-content>\n</div>\n<odx-form-field-info [error]=\"error$ | async\">\n <ng-content select=\"odx-form-field-hint\"></ng-content>\n</odx-form-field-info>\n","export type FormFieldVariant = (typeof FormFieldVariant)[keyof typeof FormFieldVariant];\n\nexport const FormFieldVariant = {\n FULL: 'full',\n SIMPLE: 'simple',\n HORIZONTAL: 'horizontal',\n} as const;\n","import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule, DisabledController, ReadonlyController } from '@odx/angular';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, reactiveClassBinding } from '@odx/angular/utils';\nimport { BehaviorSubject, combineLatest, map } from 'rxjs';\nimport { FormFieldInfoComponent, FormGroupComponent } from './components';\nimport { FormFieldLabelDirective } from './directives';\nimport { FormFieldService } from './form-field.service';\nimport { FormFieldVariant } from './models';\nimport { FormFieldErrorService } from './services';\n\n@CSSComponent('form-field')\n@Component({\n standalone: true,\n selector: 'odx-form-field',\n imports: [CoreModule, FormFieldInfoComponent, FormFieldLabelDirective],\n templateUrl: './form-field.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [FormFieldService, FormFieldErrorService, DisabledController.connect(), ReadonlyController.connect()],\n})\nexport class FormFieldComponent {\n protected readonly hasWarning$$ = new BehaviorSubject(false);\n\n protected readonly formGroup = inject(FormGroupComponent, { optional: true, host: true });\n protected readonly formFieldService = inject(FormFieldService, { self: true });\n protected readonly formFieldErrorService = inject(FormFieldErrorService, { self: true });\n public readonly element = injectElement();\n\n @ContentChild(FormFieldLabelDirective)\n public labelDirective?: FormFieldLabelDirective;\n\n @Input()\n public label?: string | null = null;\n\n @Input({ transform: booleanAttribute })\n public set hasWarning(value: boolean) {\n this.hasWarning$$.next(value);\n }\n public get hasWarning(): boolean {\n return this.hasWarning$$.getValue();\n }\n\n @CSSModifier()\n @Input()\n public variant: FormFieldVariant | null = FormFieldVariant.FULL;\n\n public get hasLabel(): boolean {\n return !!(this.labelDirective || this.label);\n }\n\n constructor() {\n const hasWarning$ = combineLatest([this.formFieldErrorService.error$, this.hasWarning$$]).pipe(map(([hasError, hasWarning]) => hasError && hasWarning));\n reactiveClassBinding(this.formFieldService.isRequired$, 'odx-form-field--required');\n reactiveClassBinding(this.formFieldService.isDisabled$, 'is-disabled');\n reactiveClassBinding(this.formFieldService.isReadonly$, 'is-readonly');\n reactiveClassBinding(this.formFieldErrorService.hasError$, 'has-error');\n reactiveClassBinding(hasWarning$, 'has-warning');\n }\n}\n","<label class=\"odx-form-field__label\" [attr.for]=\"formFieldService.controlId$ | async\" [attr.aria-owns]=\"formFieldService.controlId$ | async\" *ngIf=\"hasLabel\">\n <ng-container *ngIf=\"label; else labelTemplate\">\n <odx-form-field-label>{{ label }}</odx-form-field-label>\n <span class=\"odx-form-field__label-is-required\" *ngIf=\"formFieldService.isRequired$ | async\">*</span>\n </ng-container>\n <ng-template #labelTemplate>\n <ng-content select=\"odx-form-field-label\"></ng-content>\n <span class=\"odx-form-field__label-is-required\" *ngIf=\"formFieldService.isRequired$ | async\">*</span>\n </ng-template>\n</label>\n<div class=\"odx-form-field__inner\">\n <div class=\"odx-form-field__control\">\n <div class=\"odx-form-field__prefix\">\n <ng-content select=\"[odxFormFieldPrefix]\"></ng-content>\n </div>\n <ng-content></ng-content>\n <div class=\"odx-form-field__suffix\">\n <ng-content select=\"[odxFormFieldSuffix]\"></ng-content>\n </div>\n </div>\n <odx-form-field-info [error]=\"formFieldErrorService.error$ | async\" *ngIf=\"!formGroup\">\n <ng-content select=\"odx-form-field-hint\"></ng-content>\n </odx-form-field-info>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { FormGroupComponent } from './components';\nimport { FormDirective, FormFieldControlDirective, FormFieldErrorDirective, FormFieldHintDirective, FormFieldLabelDirective } from './directives';\nimport { FormFieldComponent } from './form-field.component';\n\nconst modules = [\n FormFieldComponent,\n FormGroupComponent,\n FormDirective,\n FormFieldControlDirective,\n FormFieldErrorDirective,\n FormFieldHintDirective,\n FormFieldLabelDirective,\n];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class FormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odx/angular",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "author": "Drägerwerk AG & Co.KGaA",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "peerDependencies": {
@@ -259,18 +259,18 @@
259
259
  "esm": "./esm2022/components/content-box/odx-angular-components-content-box.mjs",
260
260
  "default": "./fesm2022/odx-angular-components-content-box.mjs"
261
261
  },
262
- "./components/dropdown": {
263
- "types": "./components/dropdown/index.d.ts",
264
- "esm2022": "./esm2022/components/dropdown/odx-angular-components-dropdown.mjs",
265
- "esm": "./esm2022/components/dropdown/odx-angular-components-dropdown.mjs",
266
- "default": "./fesm2022/odx-angular-components-dropdown.mjs"
267
- },
268
262
  "./components/datepicker": {
269
263
  "types": "./components/datepicker/index.d.ts",
270
264
  "esm2022": "./esm2022/components/datepicker/odx-angular-components-datepicker.mjs",
271
265
  "esm": "./esm2022/components/datepicker/odx-angular-components-datepicker.mjs",
272
266
  "default": "./fesm2022/odx-angular-components-datepicker.mjs"
273
267
  },
268
+ "./components/dropdown": {
269
+ "types": "./components/dropdown/index.d.ts",
270
+ "esm2022": "./esm2022/components/dropdown/odx-angular-components-dropdown.mjs",
271
+ "esm": "./esm2022/components/dropdown/odx-angular-components-dropdown.mjs",
272
+ "default": "./fesm2022/odx-angular-components-dropdown.mjs"
273
+ },
274
274
  "./components/form-field": {
275
275
  "types": "./components/form-field/index.d.ts",
276
276
  "esm2022": "./esm2022/components/form-field/odx-angular-components-form-field.mjs",