@odx/angular 12.21.6 → 12.22.0
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 +6 -0
- package/components/datepicker/index.d.ts +2 -0
- package/components/datepicker/lib/datepicker.module.d.ts +4 -2
- package/components/datepicker/lib/validators/filter.validator.d.ts +15 -0
- package/components/datepicker/lib/validators/minmax.validator.d.ts +15 -0
- package/esm2022/components/datepicker/index.mjs +3 -1
- package/esm2022/components/datepicker/lib/datepicker.component.mjs +5 -4
- package/esm2022/components/datepicker/lib/datepicker.module.mjs +5 -3
- package/esm2022/components/datepicker/lib/validators/filter.validator.mjs +49 -0
- package/esm2022/components/datepicker/lib/validators/minmax.validator.mjs +60 -0
- package/fesm2022/odx-angular-components-datepicker.mjs +112 -8
- package/fesm2022/odx-angular-components-datepicker.mjs.map +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import * as i1 from "./datepicker.component";
|
|
3
3
|
import * as i2 from "./directives/datepicker-input-control.directive";
|
|
4
|
-
import * as i3 from "
|
|
4
|
+
import * as i3 from "./validators/minmax.validator";
|
|
5
|
+
import * as i4 from "./validators/filter.validator";
|
|
6
|
+
import * as i5 from "@odx/angular";
|
|
5
7
|
export declare class DatepickerModule {
|
|
6
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerModule, never>;
|
|
7
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<DatepickerModule, never, [typeof i1.DatepickerComponent, typeof i2.DatepickerInputControlDirective], [typeof
|
|
9
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DatepickerModule, never, [typeof i1.DatepickerComponent, typeof i2.DatepickerInputControlDirective, typeof i3.DatepickerMinMaxValidator, typeof i4.DatepickerFilterValidator], [typeof i5.CoreModule, typeof i1.DatepickerComponent, typeof i2.DatepickerInputControlDirective, typeof i3.DatepickerMinMaxValidator, typeof i4.DatepickerFilterValidator]>;
|
|
8
10
|
static ɵinj: i0.ɵɵInjectorDeclaration<DatepickerModule>;
|
|
9
11
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AbstractControl, ValidationErrors, Validator } from '@angular/forms';
|
|
2
|
+
import { DateFilter } from '@odx/angular/components/calendar';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* A validation directive to be used with date picker controls that have filtering capabilities.
|
|
6
|
+
*/
|
|
7
|
+
export declare class DatepickerFilterValidator implements Validator {
|
|
8
|
+
private onChange?;
|
|
9
|
+
filterFn: import("@angular/core").InputSignal<DateFilter | null>;
|
|
10
|
+
constructor();
|
|
11
|
+
registerOnValidatorChange(fn: () => void): void;
|
|
12
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerFilterValidator, never>;
|
|
14
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DatepickerFilterValidator, "odx-datepicker[filterFn]", never, { "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AbstractControl, ValidationErrors, Validator } from '@angular/forms';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* A validation directive to be used with date picker controls that have minimum and maximum date constraints.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DatepickerMinMaxValidator implements Validator {
|
|
7
|
+
private onChange?;
|
|
8
|
+
minDate: import("@angular/core").InputSignal<Date | null>;
|
|
9
|
+
maxDate: import("@angular/core").InputSignal<Date | null>;
|
|
10
|
+
constructor();
|
|
11
|
+
registerOnValidatorChange(fn: () => void): void;
|
|
12
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerMinMaxValidator, never>;
|
|
14
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DatepickerMinMaxValidator, "odx-datepicker[minDate], odx-datepicker[maxDate]", never, { "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -2,4 +2,6 @@ export * from './lib/datepicker.component';
|
|
|
2
2
|
export * from './lib/datepicker.config';
|
|
3
3
|
export * from './lib/datepicker.module';
|
|
4
4
|
export * from './lib/directives';
|
|
5
|
-
|
|
5
|
+
export * from './lib/validators/filter.validator';
|
|
6
|
+
export * from './lib/validators/minmax.validator';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGVwaWNrZXIuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGVwaWNrZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdG9ycy9maWx0ZXIudmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRvcnMvbWlubWF4LnZhbGlkYXRvcic7XG4iXX0=
|
|
@@ -12,6 +12,7 @@ import { IconComponent } from '@odx/angular/components/icon';
|
|
|
12
12
|
import { CSSComponent } from '@odx/angular/internal';
|
|
13
13
|
import { deferFn, injectElement, Position, untilDestroyed } from '@odx/angular/utils';
|
|
14
14
|
import { format, startOfDay } from 'date-fns';
|
|
15
|
+
import { distinctUntilChanged } from 'rxjs';
|
|
15
16
|
import { DatepickerInputControlDirective } from './directives';
|
|
16
17
|
import * as i0 from "@angular/core";
|
|
17
18
|
import * as i1 from "@angular/cdk/a11y";
|
|
@@ -92,7 +93,7 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
|
|
|
92
93
|
* @emits {Date}
|
|
93
94
|
*/
|
|
94
95
|
this.selectedChange = new EventEmitter();
|
|
95
|
-
detectControllerChanges(this).subscribe();
|
|
96
|
+
detectControllerChanges(this).pipe(this.takeUntilDestroyed()).subscribe();
|
|
96
97
|
}
|
|
97
98
|
ngAfterViewInit() {
|
|
98
99
|
this.handleDateFieldChanges();
|
|
@@ -148,10 +149,10 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
|
|
|
148
149
|
}
|
|
149
150
|
handleDateFieldChanges() {
|
|
150
151
|
initNgxMask(this.dateField?.ngxMaskDirective, getDateInputMask(this.config));
|
|
151
|
-
this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => {
|
|
152
|
+
this.dateField?.valueChange$.pipe(distinctUntilChanged(), this.takeUntilDestroyed()).subscribe(() => {
|
|
152
153
|
if (!this.dateField?.valueAsDate)
|
|
153
154
|
return;
|
|
154
|
-
this.updateValue(this.dateField?.valueAsDate
|
|
155
|
+
this.updateValue(this.dateField?.valueAsDate);
|
|
155
156
|
});
|
|
156
157
|
}
|
|
157
158
|
handleDateFieldFocus() {
|
|
@@ -204,4 +205,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
204
205
|
type: HostListener,
|
|
205
206
|
args: ['keydown.alt.ArrowDown', ['$event']]
|
|
206
207
|
}] } });
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZ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QUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0UsQ0FBQzsrR0F2TVUsbUJBQW1CO21HQUFuQixtQkFBbUIsczVCQXlHaEIsK0JBQStCLDBGQWhCbEMsaUJBQWlCLHVJQVFVLFVBQVUsa0VDN0lsRCxvc0NBcUNBLDJDREVZLFVBQVUsMExBQUUsb0JBQW9CLGtGQUFFLGVBQWUseUdBQUUsaUJBQWlCLHFNQUFFLGNBQWMsMmZBQUUsYUFBYTs7QUFLbEcsbUJBQW1CO0lBVC9CLFlBQVksQ0FBQyxZQUFZLENBQUM7O0dBU2QsbUJBQW1CLENBd00vQjs7NEZBeE1ZLG1CQUFtQjtrQkFSL0IsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLENBQUMsbUJBRTdGLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7d0RBdUM5QixRQUFRO3NCQURkLEtBQUs7Z0JBV0MsT0FBTztzQkFEYixLQUFLO2dCQVdDLE9BQU87c0JBRGIsS0FBSztnQkFVQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBaUJDLGNBQWM7c0JBRHBCLE1BQU07Z0JBU0EsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFTckIsc0JBQXNCO3NCQUQ1QixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN6RCxTQUFTO3NCQURmLFlBQVk7dUJBQUMsK0JBQStCO2dCQXlEdEMsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZXRlY3RDb250cm9sbGVyQ2hhbmdlcyB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDdXN0b21Gb3JtQ29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBnZXREYXRlSW5wdXRGb3JtYXQsIGdldERhdGVJbnB1dE1hc2ssIGluaXROZ3hNYXNrLCBpbmplY3REYXRlQ29uZmlnIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9kYXRlLWlucHV0JztcbmltcG9ydCB7IEFjdGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYWN0aW9uLWdyb3VwJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBDYWxlbmRhckNvbXBvbmVudCwgRGF0ZUZpbHRlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2NhbGVuZGFyJztcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aXZlLCBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IENTU0NvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5pbXBvcnQgeyBkZWZlckZuLCBpbmplY3RFbGVtZW50LCBQb3NpdGlvbiwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgZm9ybWF0LCBzdGFydE9mRGF5IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRhdGVwaWNrZXIgY29tcG9uZW50IGZvciBzZWxlY3RpbmcgYSBkYXRlLlxuICogRXh0ZW5kcyB0aGUgYEN1c3RvbUZvcm1Db250cm9sYCBjbGFzcyBhbmQgaW1wbGVtZW50cyB0aGUgYEFmdGVyVmlld0luaXRgIGludGVyZmFjZS5cbiAqXG4gKiBAc2VlIHtDdXN0b21Gb3JtQ29udHJvbH1cbiAqL1xuQENTU0NvbXBvbmVudCgnZGF0ZXBpY2tlcicpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZHgtZGF0ZXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBDYWxlbmRhckNvbXBvbmVudCwgRHJvcGRvd25Nb2R1bGUsIEljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tRm9ybUNvbnRyb2w8RGF0ZSB8IG51bGw+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSBpbmplY3REYXRlQ29uZmlnKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRhdGVwaWNrZXIgaXMgY3VycmVudGx5IG9wZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcHVibGljIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kcm9wZG93bi5pc09wZW47XG4gIH1cblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgY3VycmVudCBkYXRlLlxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZX1cbiAgICovXG4gIHB1YmxpYyB0b2RheSA9IG5ldyBEYXRlKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBkYXRlIHNob3VsZCBiZSBpbmNsdWRlZCBvciBleGNsdWRlZCBpbiB0aGUgZGF0ZXBpY2tlci5cbiAgICogSWYgc2V0IHRvIGBudWxsYCwgbm8gZmlsdGVyaW5nIHdpbGwgYmUgYXBwbGllZC5cbiAgICpcbiAgICogQHR5cGUge0RhdGVGaWx0ZXIgfCBudWxsfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIC8vIEV4Y2x1ZGVzIG1vbmRheXMgZnJvbSB0aGUgZGF0ZXBpY2tlci5cbiAgICogY29uc3QgZmlsdGVyRm46IERhdGVGaWx0ZXIgPSAoZGF0ZSkgPT4gZGF0ZS5nZXREYXkoKSAhPT0gMTtcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyRm46IERhdGVGaWx0ZXIgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlIGZvciB0aGUgZGF0ZXBpY2tlci5cbiAgICogSWYgc2V0IHRvIG51bGwsIHRoZXJlIGlzIG5vIG1pbmltdW0gZGF0ZSByZXN0cmljdGlvbi5cbiAgICpcbiAgICogQHR5cGUge0RhdGUgfCBudWxsfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUgZm9yIHRoZSBkYXRlcGlja2VyLlxuICAgKiBJZiBzZXQgdG8gbnVsbCwgdGhlcmUgaXMgbm8gbWF4aW11bSBkYXRlIHJlc3RyaWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZSB8IG51bGx9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gcmVsYXRpdmUgdG8gdGhlIGlucHV0IGZpZWxkLlxuICAgKlxuICAgKiBAdHlwZSB7UG9zaXRpb259XG4gICAqIEBkZWZhdWx0IFBvc2l0aW9uLkJPVFRPTVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRyb3Bkb3duUG9zaXRpb246IFBvc2l0aW9uID0gJ2JvdHRvbSc7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBzZWxlY3Qgd2lsbCBkaXNwbGF5IGEgcmVzZXQgYnV0dG9uLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBjbGVhcmFibGUgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzZWxlY3RlZCBkYXRlIHdoZW4gaXQgY2hhbmdlcy5cbiAgICpcbiAgICogQGVtaXRzIHtEYXRlfVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAvKipcbiAgICogVGhlIGRyb3Bkb3duIGRpcmVjdGl2ZSB1c2VkIGluIHRoZSBkYXRlcGlja2VyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge0Ryb3Bkb3duRGlyZWN0aXZlfVxuICAgKi9cbiAgQFZpZXdDaGlsZChEcm9wZG93bkRpcmVjdGl2ZSlcbiAgcHVibGljIGRyb3Bkb3duITogRHJvcGRvd25EaXJlY3RpdmU7XG5cbiAgLyoqXG4gICAqIFRoZSBkcm9wZG93biB0cmlnZ2VyIGVsZW1lbnQgdXNlZCBpbiB0aGUgZGF0ZXBpY2tlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtFbGVtZW50UmVmPEhUTUxFbGVtZW50Pn1cbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duVHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBkcm9wZG93blRyaWdnZXJFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGZpZWxkIGlucHV0IGNvbnRyb2wgZGlyZWN0aXZlIHVzZWQgaW4gdGhlIGRhdGVwaWNrZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoRGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSlcbiAgcHVibGljIGRhdGVGaWVsZD86IERhdGVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobnVsbCk7XG4gICAgZGV0ZWN0Q29udHJvbGxlckNoYW5nZXModGhpcykuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlRGF0ZUZpZWxkQ2hhbmdlcygpO1xuICAgIHRoaXMuaGFuZGxlRGF0ZUZpZWxkRm9jdXMoKTtcblxuICAgIGRlZmVyRm4oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlKSByZXR1cm47XG4gICAgICB0aGlzLnVwZGF0ZURhdGVGaWVsZChzdGFydE9mRGF5KHRoaXMudmFsdWUpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtEYXRlIHwgbnVsbH0gdmFsdWUgLSBUaGUgZGF0ZSB2YWx1ZSB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3REYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxWYWx1ZSh2YWx1ZSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodmFsdWUpO1xuXG4gICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgZGF0ZXBpY2tlcidzIHZhbHVlIHRvIG51bGwuXG4gICAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVJbnRlcm5hbFZhbHVlKG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGVsZW1lbnQuXG4gICAqIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICogQHBhcmFtIHtEYXRlIHwgbnVsbH0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVEYXRlRmllbGQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBkYXRlcGlja2VyIGRyb3Bkb3duLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFsdC5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICBwdWJsaWMgb3BlbkRhdGVwaWNrZXIoZXZlbnQ/OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuaXNSZWFkb25seSB8fCB0aGlzLmlzRGlzYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuZHJvcGRvd24ub3BlbihldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlSW50ZXJuYWxWYWx1ZSh2YWx1ZTogRGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZURhdGVGaWVsZCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRGF0ZUZpZWxkQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpbml0Tmd4TWFzayh0aGlzLmRhdGVGaWVsZD8ubmd4TWFza0RpcmVjdGl2ZSwgZ2V0RGF0ZUlucHV0TWFzayh0aGlzLmNvbmZpZykpO1xuICAgIHRoaXMuZGF0ZUZpZWxkPy52YWx1ZUNoYW5nZSQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRhdGVGaWVsZD8udmFsdWVBc0RhdGUpIHJldHVybjtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5kYXRlRmllbGQ/LnZhbHVlQXNEYXRlID8/IG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZURhdGVGaWVsZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZpZWxkPy5mb2N1c2VkLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChpc0ZvY3VzZWQpID0+IHtcbiAgICAgIGlmICghaXNGb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlRmllbGQoZGF0ZTogRGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUZpZWxkKSByZXR1cm47XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0ID0gZ2V0RGF0ZUlucHV0Rm9ybWF0KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRhdGVGaWVsZC5uYXRpdmVFbGVtZW50VmFsdWUgPSBkYXRlID8gZm9ybWF0KGRhdGUsIGRhdGVGb3JtYXQpIDogJyc7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImlucHV0W29keERhdGVwaWNrZXJDb250cm9sXVwiIC8+XG5cbjxvZHgtYWN0aW9uLWdyb3VwIGNsYXNzPVwib2R4LWRhdGVwaWNrZXJfX3RyaWdnZXItd3JhcHBlclwiPlxuICBAaWYgKGNsZWFyYWJsZSgpICYmIHZhbHVlKSB7XG4gICAgPGJ1dHRvbiBvZHhCdXR0b24gY2xhc3M9XCJvZHgtZGF0ZXBpY2tlcl9fY2xlYXJcIiAoY2xpY2spPVwicmVzZXQoKVwiIHNpemU9XCJzbWFsbFwiIGFyaWEtbGFiZWw9XCJSZXNldCB0aW1lXCI+XG4gICAgICA8b2R4LWljb24gbmFtZT1cImNsb3NlXCIgaWNvblNldD1cImNvcmVcIiAvPlxuICAgIDwvYnV0dG9uPlxuICB9XG4gIDxidXR0b25cbiAgICAjZHJvcGRvd25UcmlnZ2VyXG4gICAgb2R4QnV0dG9uXG4gICAgc2l6ZT1cInNtYWxsXCJcbiAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgIGNsYXNzPVwib2R4LWRhdGVwaWNrZXJfX3RyaWdnZXJcIlxuICAgIFtvZHhEcm9wZG93bl09XCJjYWxlbmRhck92ZXJsYXlcIlxuICAgIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwieyBwb3NpdGlvbjogZHJvcGRvd25Qb3NpdGlvbiB9XCJcbiAgICBbb2R4RHJvcGRvd25UcmlnZ2VyRWxlbWVudF09XCJkcm9wZG93blRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIFtvZHhEcm9wZG93bkhvc3RdPVwibnVsbFwiXG4gICAgW29keERyb3Bkb3duUmVmZXJlbmNlRWxlbWVudF09XCJlbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIChvZHhEcm9wZG93bkJlZm9yZUNsb3NlKT1cIm9uVG91Y2hlZCgpXCJcbiAgPlxuICAgIDxvZHgtaWNvbiBuYW1lPVwiY2FsZW5kYXJcIiAvPlxuICA8L2J1dHRvbj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW29keEJ1dHRvbl1cIiBuZ1Byb2plY3RBcz1cIltvZHhCdXR0b25dXCIgLz5cbjwvb2R4LWFjdGlvbi1ncm91cD5cblxuPG5nLXRlbXBsYXRlICNjYWxlbmRhck92ZXJsYXk+XG4gIDxvZHgtY2FsZW5kYXJcbiAgICBbc2VsZWN0ZWREYXRlXT1cInZhbHVlIHx8IHRvZGF5XCJcbiAgICBbZmlsdGVyRm5dPVwiZmlsdGVyRm5cIlxuICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgIGNka1RyYXBGb2N1c1xuICAgIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlXG4gICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJzZWxlY3REYXRlKCRldmVudClcIlxuICAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZ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IHsgQTExeU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRldGVjdENvbnRyb2xsZXJDaGFuZ2VzIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IEN1c3RvbUZvcm1Db250cm9sIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9jdXN0b20tZm9ybS1jb250cm9sJztcbmltcG9ydCB7IGdldERhdGVJbnB1dEZvcm1hdCwgZ2V0RGF0ZUlucHV0TWFzaywgaW5pdE5neE1hc2ssIGluamVjdERhdGVDb25maWcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2RhdGUtaW5wdXQnO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9hY3Rpb24tZ3JvdXAnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50LCBEYXRlRmlsdGVyIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHsgRHJvcGRvd25EaXJlY3RpdmUsIERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGRlZmVyRm4sIGluamVjdEVsZW1lbnQsIFBvc2l0aW9uLCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBmb3JtYXQsIHN0YXJ0T2ZEYXkgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRhdGVwaWNrZXIgY29tcG9uZW50IGZvciBzZWxlY3RpbmcgYSBkYXRlLlxuICogRXh0ZW5kcyB0aGUgYEN1c3RvbUZvcm1Db250cm9sYCBjbGFzcyBhbmQgaW1wbGVtZW50cyB0aGUgYEFmdGVyVmlld0luaXRgIGludGVyZmFjZS5cbiAqXG4gKiBAc2VlIHtDdXN0b21Gb3JtQ29udHJvbH1cbiAqL1xuQENTU0NvbXBvbmVudCgnZGF0ZXBpY2tlcicpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZHgtZGF0ZXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBMTF5TW9kdWxlLCBBY3Rpb25Hcm91cENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50LCBDYWxlbmRhckNvbXBvbmVudCwgRHJvcGRvd25Nb2R1bGUsIEljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tRm9ybUNvbnRyb2w8RGF0ZSB8IG51bGw+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSBpbmplY3REYXRlQ29uZmlnKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIEdldHMgYSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRhdGVwaWNrZXIgaXMgY3VycmVudGx5IG9wZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcHVibGljIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kcm9wZG93bi5pc09wZW47XG4gIH1cblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgY3VycmVudCBkYXRlLlxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZX1cbiAgICovXG4gIHB1YmxpYyB0b2RheSA9IG5ldyBEYXRlKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBkYXRlIHNob3VsZCBiZSBpbmNsdWRlZCBvciBleGNsdWRlZCBpbiB0aGUgZGF0ZXBpY2tlci5cbiAgICogSWYgc2V0IHRvIGBudWxsYCwgbm8gZmlsdGVyaW5nIHdpbGwgYmUgYXBwbGllZC5cbiAgICpcbiAgICogQHR5cGUge0RhdGVGaWx0ZXIgfCBudWxsfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIC8vIEV4Y2x1ZGVzIG1vbmRheXMgZnJvbSB0aGUgZGF0ZXBpY2tlci5cbiAgICogY29uc3QgZmlsdGVyRm46IERhdGVGaWx0ZXIgPSAoZGF0ZSkgPT4gZGF0ZS5nZXREYXkoKSAhPT0gMTtcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmlsdGVyRm46IERhdGVGaWx0ZXIgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlIGZvciB0aGUgZGF0ZXBpY2tlci5cbiAgICogSWYgc2V0IHRvIG51bGwsIHRoZXJlIGlzIG5vIG1pbmltdW0gZGF0ZSByZXN0cmljdGlvbi5cbiAgICpcbiAgICogQHR5cGUge0RhdGUgfCBudWxsfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUgZm9yIHRoZSBkYXRlcGlja2VyLlxuICAgKiBJZiBzZXQgdG8gbnVsbCwgdGhlcmUgaXMgbm8gbWF4aW11bSBkYXRlIHJlc3RyaWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZSB8IG51bGx9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gcmVsYXRpdmUgdG8gdGhlIGlucHV0IGZpZWxkLlxuICAgKlxuICAgKiBAdHlwZSB7UG9zaXRpb259XG4gICAqIEBkZWZhdWx0IFBvc2l0aW9uLkJPVFRPTVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRyb3Bkb3duUG9zaXRpb246IFBvc2l0aW9uID0gJ2JvdHRvbSc7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBzZWxlY3Qgd2lsbCBkaXNwbGF5IGEgcmVzZXQgYnV0dG9uLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBjbGVhcmFibGUgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzZWxlY3RlZCBkYXRlIHdoZW4gaXQgY2hhbmdlcy5cbiAgICpcbiAgICogQGVtaXRzIHtEYXRlfVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAvKipcbiAgICogVGhlIGRyb3Bkb3duIGRpcmVjdGl2ZSB1c2VkIGluIHRoZSBkYXRlcGlja2VyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge0Ryb3Bkb3duRGlyZWN0aXZlfVxuICAgKi9cbiAgQFZpZXdDaGlsZChEcm9wZG93bkRpcmVjdGl2ZSlcbiAgcHVibGljIGRyb3Bkb3duITogRHJvcGRvd25EaXJlY3RpdmU7XG5cbiAgLyoqXG4gICAqIFRoZSBkcm9wZG93biB0cmlnZ2VyIGVsZW1lbnQgdXNlZCBpbiB0aGUgZGF0ZXBpY2tlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtFbGVtZW50UmVmPEhUTUxFbGVtZW50Pn1cbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duVHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBkcm9wZG93blRyaWdnZXJFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGZpZWxkIGlucHV0IGNvbnRyb2wgZGlyZWN0aXZlIHVzZWQgaW4gdGhlIGRhdGVwaWNrZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZSB7RGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoRGF0ZXBpY2tlcklucHV0Q29udHJvbERpcmVjdGl2ZSlcbiAgcHVibGljIGRhdGVGaWVsZD86IERhdGVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobnVsbCk7XG4gICAgZGV0ZWN0Q29udHJvbGxlckNoYW5nZXModGhpcykucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVEYXRlRmllbGRDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVEYXRlRmllbGRGb2N1cygpO1xuXG4gICAgZGVmZXJGbigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMudmFsdWUpIHJldHVybjtcbiAgICAgIHRoaXMudXBkYXRlRGF0ZUZpZWxkKHN0YXJ0T2ZEYXkodGhpcy52YWx1ZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RhdGUgfCBudWxsfSB2YWx1ZSAtIFRoZSBkYXRlIHZhbHVlIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgcHVibGljIHNlbGVjdERhdGUodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy51cGRhdGVJbnRlcm5hbFZhbHVlKHZhbHVlKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG5cbiAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBkYXRlcGlja2VyJ3MgdmFsdWUgdG8gbnVsbC5cbiAgICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUludGVybmFsVmFsdWUobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgZWxlbWVudC5cbiAgICogUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgKiBAcGFyYW0ge0RhdGUgfCBudWxsfSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZURhdGVGaWVsZCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGRhdGVwaWNrZXIgZHJvcGRvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnRcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYWx0LkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvcGVuRGF0ZXBpY2tlcihldmVudD86IEtleWJvYXJkRXZlbnQpIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWRvbmx5IHx8IHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcm9wZG93bi5vcGVuKGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVJbnRlcm5hbFZhbHVlKHZhbHVlOiBEYXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlRGF0ZUZpZWxkKHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVEYXRlRmllbGRDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGluaXROZ3hNYXNrKHRoaXMuZGF0ZUZpZWxkPy5uZ3hNYXNrRGlyZWN0aXZlLCBnZXREYXRlSW5wdXRNYXNrKHRoaXMuY29uZmlnKSk7XG4gICAgdGhpcy5kYXRlRmllbGQ/LnZhbHVlQ2hhbmdlJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGF0ZUZpZWxkPy52YWx1ZUFzRGF0ZSkgcmV0dXJuO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLmRhdGVGaWVsZD8udmFsdWVBc0RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZURhdGVGaWVsZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZUZpZWxkPy5mb2N1c2VkLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChpc0ZvY3VzZWQpID0+IHtcbiAgICAgIGlmICghaXNGb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlRmllbGQoZGF0ZTogRGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUZpZWxkKSByZXR1cm47XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0ID0gZ2V0RGF0ZUlucHV0Rm9ybWF0KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmRhdGVGaWVsZC5uYXRpdmVFbGVtZW50VmFsdWUgPSBkYXRlID8gZm9ybWF0KGRhdGUsIGRhdGVGb3JtYXQpIDogJyc7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cImlucHV0W29keERhdGVwaWNrZXJDb250cm9sXVwiIC8+XG5cbjxvZHgtYWN0aW9uLWdyb3VwIGNsYXNzPVwib2R4LWRhdGVwaWNrZXJfX3RyaWdnZXItd3JhcHBlclwiPlxuICBAaWYgKGNsZWFyYWJsZSgpICYmIHZhbHVlKSB7XG4gICAgPGJ1dHRvbiBvZHhCdXR0b24gY2xhc3M9XCJvZHgtZGF0ZXBpY2tlcl9fY2xlYXJcIiAoY2xpY2spPVwicmVzZXQoKVwiIHNpemU9XCJzbWFsbFwiIGFyaWEtbGFiZWw9XCJSZXNldCB0aW1lXCI+XG4gICAgICA8b2R4LWljb24gbmFtZT1cImNsb3NlXCIgaWNvblNldD1cImNvcmVcIiAvPlxuICAgIDwvYnV0dG9uPlxuICB9XG4gIDxidXR0b25cbiAgICAjZHJvcGRvd25UcmlnZ2VyXG4gICAgb2R4QnV0dG9uXG4gICAgc2l6ZT1cInNtYWxsXCJcbiAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgIGNsYXNzPVwib2R4LWRhdGVwaWNrZXJfX3RyaWdnZXJcIlxuICAgIFtvZHhEcm9wZG93bl09XCJjYWxlbmRhck92ZXJsYXlcIlxuICAgIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwieyBwb3NpdGlvbjogZHJvcGRvd25Qb3NpdGlvbiB9XCJcbiAgICBbb2R4RHJvcGRvd25UcmlnZ2VyRWxlbWVudF09XCJkcm9wZG93blRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIFtvZHhEcm9wZG93bkhvc3RdPVwibnVsbFwiXG4gICAgW29keERyb3Bkb3duUmVmZXJlbmNlRWxlbWVudF09XCJlbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIlxuICAgIChvZHhEcm9wZG93bkJlZm9yZUNsb3NlKT1cIm9uVG91Y2hlZCgpXCJcbiAgPlxuICAgIDxvZHgtaWNvbiBuYW1lPVwiY2FsZW5kYXJcIiAvPlxuICA8L2J1dHRvbj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW29keEJ1dHRvbl1cIiBuZ1Byb2plY3RBcz1cIltvZHhCdXR0b25dXCIgLz5cbjwvb2R4LWFjdGlvbi1ncm91cD5cblxuPG5nLXRlbXBsYXRlICNjYWxlbmRhck92ZXJsYXk+XG4gIDxvZHgtY2FsZW5kYXJcbiAgICBbc2VsZWN0ZWREYXRlXT1cInZhbHVlIHx8IHRvZGF5XCJcbiAgICBbZmlsdGVyRm5dPVwiZmlsdGVyRm5cIlxuICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgIGNka1RyYXBGb2N1c1xuICAgIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlXG4gICAgKHNlbGVjdGVkRGF0ZUNoYW5nZSk9XCJzZWxlY3REYXRlKCRldmVudClcIlxuICAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -2,11 +2,13 @@ import { NgModule } from '@angular/core';
|
|
|
2
2
|
import { CoreModule } from '@odx/angular';
|
|
3
3
|
import { DatepickerComponent } from './datepicker.component';
|
|
4
4
|
import { DatepickerInputControlDirective } from './directives';
|
|
5
|
+
import { DatepickerFilterValidator } from './validators/filter.validator';
|
|
6
|
+
import { DatepickerMinMaxValidator } from './validators/minmax.validator';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
|
-
const modules = [DatepickerComponent, DatepickerInputControlDirective];
|
|
8
|
+
const modules = [DatepickerComponent, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerFilterValidator];
|
|
7
9
|
export class DatepickerModule {
|
|
8
10
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, DatepickerInputControlDirective], exports: [CoreModule, DatepickerComponent, DatepickerInputControlDirective] }); }
|
|
11
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerFilterValidator], exports: [CoreModule, DatepickerComponent, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerFilterValidator] }); }
|
|
10
12
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, CoreModule] }); }
|
|
11
13
|
}
|
|
12
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, decorators: [{
|
|
@@ -16,4 +18,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
16
18
|
exports: [CoreModule, ...modules],
|
|
17
19
|
}]
|
|
18
20
|
}] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFMUUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSwrQkFBK0IsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBTTdILE1BQU0sT0FBTyxnQkFBZ0I7K0dBQWhCLGdCQUFnQjtnSEFBaEIsZ0JBQWdCLFlBTlosbUJBQW1CLEVBQUUsK0JBQStCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLGFBSS9HLFVBQVUsRUFKTCxtQkFBbUIsRUFBRSwrQkFBK0IsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUI7Z0hBTTlHLGdCQUFnQixZQU5aLG1CQUFtQixFQUl4QixVQUFVOzs0RkFFVCxnQkFBZ0I7a0JBSjVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztpQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlcGlja2VySW5wdXRDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IERhdGVwaWNrZXJGaWx0ZXJWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvZmlsdGVyLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBEYXRlcGlja2VyTWluTWF4VmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzL21pbm1heC52YWxpZGF0b3InO1xuXG5jb25zdCBtb2R1bGVzID0gW0RhdGVwaWNrZXJDb21wb25lbnQsIERhdGVwaWNrZXJJbnB1dENvbnRyb2xEaXJlY3RpdmUsIERhdGVwaWNrZXJNaW5NYXhWYWxpZGF0b3IsIERhdGVwaWNrZXJGaWx0ZXJWYWxpZGF0b3JdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBtb2R1bGVzLFxuICBleHBvcnRzOiBbQ29yZU1vZHVsZSwgLi4ubW9kdWxlc10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Directive, effect, forwardRef, input } from '@angular/core';
|
|
2
|
+
import { NG_VALIDATORS } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* A validation directive to be used with date picker controls that have filtering capabilities.
|
|
6
|
+
*/
|
|
7
|
+
export class DatepickerFilterValidator {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.filterFn = input(null);
|
|
10
|
+
effect(() => {
|
|
11
|
+
this.filterFn();
|
|
12
|
+
this.onChange?.();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
registerOnValidatorChange(fn) {
|
|
16
|
+
this.onChange = fn;
|
|
17
|
+
}
|
|
18
|
+
validate(control) {
|
|
19
|
+
const controlValue = control.value;
|
|
20
|
+
const filterFn = this.filterFn();
|
|
21
|
+
if (!controlValue || !filterFn) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return filterFn(controlValue) ? { filter: true } : null;
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerFilterValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
27
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DatepickerFilterValidator, isStandalone: true, selector: "odx-datepicker[filterFn]", inputs: { filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
28
|
+
{
|
|
29
|
+
provide: NG_VALIDATORS,
|
|
30
|
+
useExisting: forwardRef(() => DatepickerFilterValidator),
|
|
31
|
+
multi: true,
|
|
32
|
+
},
|
|
33
|
+
], ngImport: i0 }); }
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerFilterValidator, decorators: [{
|
|
36
|
+
type: Directive,
|
|
37
|
+
args: [{
|
|
38
|
+
standalone: true,
|
|
39
|
+
selector: 'odx-datepicker[filterFn]',
|
|
40
|
+
providers: [
|
|
41
|
+
{
|
|
42
|
+
provide: NG_VALIDATORS,
|
|
43
|
+
useExisting: forwardRef(() => DatepickerFilterValidator),
|
|
44
|
+
multi: true,
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
}]
|
|
48
|
+
}], ctorParameters: () => [] });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2RhdGVwaWNrZXIvc3JjL2xpYi92YWxpZGF0b3JzL2ZpbHRlci52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQW1CLGFBQWEsRUFBK0IsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFN0Y7O0dBRUc7QUFZSCxNQUFNLE9BQU8seUJBQXlCO0lBSXBDO1FBRk8sYUFBUSxHQUFHLEtBQUssQ0FBb0IsSUFBSSxDQUFDLENBQUM7UUFHL0MsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxFQUFjO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxRQUFRLENBQUMsT0FBd0I7UUFDdEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQW9CLENBQUM7UUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDOytHQXhCVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixvTkFSekI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDeEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOzs0RkFFVSx5QkFBeUI7a0JBWHJDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7NEJBQ3hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBlZmZlY3QsIGZvcndhcmRSZWYsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGVGaWx0ZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9jYWxlbmRhcic7XG4vKipcbiAqIEEgdmFsaWRhdGlvbiBkaXJlY3RpdmUgdG8gYmUgdXNlZCB3aXRoIGRhdGUgcGlja2VyIGNvbnRyb2xzIHRoYXQgaGF2ZSBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtZGF0ZXBpY2tlcltmaWx0ZXJGbl0nLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXBpY2tlckZpbHRlclZhbGlkYXRvciksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyRmlsdGVyVmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBvbkNoYW5nZT86ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBmaWx0ZXJGbiA9IGlucHV0PERhdGVGaWx0ZXIgfCBudWxsPihudWxsKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJGbigpO1xuICAgICAgdGhpcy5vbkNoYW5nZT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gY29udHJvbC52YWx1ZSBhcyBEYXRlIHwgbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJGbiA9IHRoaXMuZmlsdGVyRm4oKTtcblxuICAgIGlmICghY29udHJvbFZhbHVlIHx8ICFmaWx0ZXJGbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckZuKGNvbnRyb2xWYWx1ZSkgPyB7IGZpbHRlcjogdHJ1ZSB9IDogbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Directive, effect, forwardRef, input } from '@angular/core';
|
|
2
|
+
import { NG_VALIDATORS } from '@angular/forms';
|
|
3
|
+
import { isAfter, isBefore, startOfDay } from 'date-fns';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* A validation directive to be used with date picker controls that have minimum and maximum date constraints.
|
|
7
|
+
*/
|
|
8
|
+
export class DatepickerMinMaxValidator {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.minDate = input(null);
|
|
11
|
+
this.maxDate = input(null);
|
|
12
|
+
effect(() => {
|
|
13
|
+
this.minDate();
|
|
14
|
+
this.maxDate();
|
|
15
|
+
this.onChange?.();
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
registerOnValidatorChange(fn) {
|
|
19
|
+
this.onChange = fn;
|
|
20
|
+
}
|
|
21
|
+
validate(control) {
|
|
22
|
+
const controlValue = control.value;
|
|
23
|
+
if (!controlValue) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const givenDate = startOfDay(controlValue);
|
|
27
|
+
const min = this.minDate() ? startOfDay(this.minDate()) : null;
|
|
28
|
+
const max = this.maxDate() ? startOfDay(this.maxDate()) : null;
|
|
29
|
+
if (min && isBefore(givenDate, min)) {
|
|
30
|
+
return { minDate: true };
|
|
31
|
+
}
|
|
32
|
+
if (max && isAfter(givenDate, max)) {
|
|
33
|
+
return { maxDate: true };
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerMinMaxValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
38
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DatepickerMinMaxValidator, isStandalone: true, selector: "odx-datepicker[minDate], odx-datepicker[maxDate]", inputs: { minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
39
|
+
{
|
|
40
|
+
provide: NG_VALIDATORS,
|
|
41
|
+
useExisting: forwardRef(() => DatepickerMinMaxValidator),
|
|
42
|
+
multi: true,
|
|
43
|
+
},
|
|
44
|
+
], ngImport: i0 }); }
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerMinMaxValidator, decorators: [{
|
|
47
|
+
type: Directive,
|
|
48
|
+
args: [{
|
|
49
|
+
standalone: true,
|
|
50
|
+
selector: 'odx-datepicker[minDate], odx-datepicker[maxDate]',
|
|
51
|
+
providers: [
|
|
52
|
+
{
|
|
53
|
+
provide: NG_VALIDATORS,
|
|
54
|
+
useExisting: forwardRef(() => DatepickerMinMaxValidator),
|
|
55
|
+
multi: true,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
}]
|
|
59
|
+
}], ctorParameters: () => [] });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlubWF4LnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2RhdGVwaWNrZXIvc3JjL2xpYi92YWxpZGF0b3JzL21pbm1heC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQW1CLGFBQWEsRUFBK0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRXpEOztHQUVHO0FBWUgsTUFBTSxPQUFPLHlCQUF5QjtJQUtwQztRQUhPLFlBQU8sR0FBRyxLQUFLLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDbkMsWUFBTyxHQUFHLEtBQUssQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUd4QyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0seUJBQXlCLENBQUMsRUFBYztRQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFvQixDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQWhDVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qix1V0FSekI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDeEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOzs0RkFFVSx5QkFBeUI7a0JBWHJDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxrREFBa0Q7b0JBQzVELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7NEJBQ3hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBlZmZlY3QsIGZvcndhcmRSZWYsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzQWZ0ZXIsIGlzQmVmb3JlLCBzdGFydE9mRGF5IH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBkaXJlY3RpdmUgdG8gYmUgdXNlZCB3aXRoIGRhdGUgcGlja2VyIGNvbnRyb2xzIHRoYXQgaGF2ZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGRhdGUgY29uc3RyYWludHMuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ29keC1kYXRlcGlja2VyW21pbkRhdGVdLCBvZHgtZGF0ZXBpY2tlclttYXhEYXRlXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlcGlja2VyTWluTWF4VmFsaWRhdG9yKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJNaW5NYXhWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xuICBwcml2YXRlIG9uQ2hhbmdlPzogKCkgPT4gdm9pZDtcbiAgcHVibGljIG1pbkRhdGUgPSBpbnB1dDxEYXRlIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBtYXhEYXRlID0gaW5wdXQ8RGF0ZSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLm1pbkRhdGUoKTtcbiAgICAgIHRoaXMubWF4RGF0ZSgpO1xuICAgICAgdGhpcy5vbkNoYW5nZT8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlID0gY29udHJvbC52YWx1ZSBhcyBEYXRlIHwgbnVsbDtcbiAgICBpZiAoIWNvbnRyb2xWYWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGdpdmVuRGF0ZSA9IHN0YXJ0T2ZEYXkoY29udHJvbFZhbHVlKTtcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbkRhdGUoKSA/IHN0YXJ0T2ZEYXkodGhpcy5taW5EYXRlKCkgYXMgRGF0ZSkgOiBudWxsO1xuICAgIGNvbnN0IG1heCA9IHRoaXMubWF4RGF0ZSgpID8gc3RhcnRPZkRheSh0aGlzLm1heERhdGUoKSBhcyBEYXRlKSA6IG51bGw7XG4gICAgaWYgKG1pbiAmJiBpc0JlZm9yZShnaXZlbkRhdGUsIG1pbikpIHtcbiAgICAgIHJldHVybiB7IG1pbkRhdGU6IHRydWUgfTtcbiAgICB9XG4gICAgaWYgKG1heCAmJiBpc0FmdGVyKGdpdmVuRGF0ZSwgbWF4KSkge1xuICAgICAgcmV0dXJuIHsgbWF4RGF0ZTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -2,7 +2,7 @@ import { __decorate, __metadata } from 'tslib';
|
|
|
2
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
|
-
import { inject, EventEmitter, HostListener, Output, Directive, input, booleanAttribute, ElementRef, ContentChild, ViewChild, Input, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
5
|
+
import { inject, EventEmitter, HostListener, Output, Directive, input, booleanAttribute, ElementRef, ContentChild, ViewChild, Input, ViewEncapsulation, ChangeDetectionStrategy, Component, effect, forwardRef, NgModule } from '@angular/core';
|
|
6
6
|
import * as i1 from '@odx/angular';
|
|
7
7
|
import { ReadonlyController, WithTabIndex, detectControllerChanges, CoreModule } from '@odx/angular';
|
|
8
8
|
import { InputControlDirective, CustomFormControl } from '@odx/angular/cdk/custom-form-control';
|
|
@@ -16,9 +16,11 @@ import { DropdownModule, DropdownDirective } from '@odx/angular/components/dropd
|
|
|
16
16
|
import { IconComponent } from '@odx/angular/components/icon';
|
|
17
17
|
import { CSSComponent } from '@odx/angular/internal';
|
|
18
18
|
import { untilDestroyed, injectElement, deferFn } from '@odx/angular/utils';
|
|
19
|
-
import { startOfDay, format } from 'date-fns';
|
|
19
|
+
import { startOfDay, format, isBefore, isAfter } from 'date-fns';
|
|
20
|
+
import { distinctUntilChanged } from 'rxjs';
|
|
20
21
|
import * as i2 from 'ngx-mask';
|
|
21
22
|
import { NgxMaskDirective, provideNgxMask } from 'ngx-mask';
|
|
23
|
+
import { NG_VALIDATORS } from '@angular/forms';
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* A directive to enhance an input element as part of a datepicker control. It applies date input formatting,
|
|
@@ -171,7 +173,7 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
|
|
|
171
173
|
* @emits {Date}
|
|
172
174
|
*/
|
|
173
175
|
this.selectedChange = new EventEmitter();
|
|
174
|
-
detectControllerChanges(this).subscribe();
|
|
176
|
+
detectControllerChanges(this).pipe(this.takeUntilDestroyed()).subscribe();
|
|
175
177
|
}
|
|
176
178
|
ngAfterViewInit() {
|
|
177
179
|
this.handleDateFieldChanges();
|
|
@@ -227,10 +229,10 @@ let DatepickerComponent = class DatepickerComponent extends CustomFormControl {
|
|
|
227
229
|
}
|
|
228
230
|
handleDateFieldChanges() {
|
|
229
231
|
initNgxMask(this.dateField?.ngxMaskDirective, getDateInputMask(this.config));
|
|
230
|
-
this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => {
|
|
232
|
+
this.dateField?.valueChange$.pipe(distinctUntilChanged(), this.takeUntilDestroyed()).subscribe(() => {
|
|
231
233
|
if (!this.dateField?.valueAsDate)
|
|
232
234
|
return;
|
|
233
|
-
this.updateValue(this.dateField?.valueAsDate
|
|
235
|
+
this.updateValue(this.dateField?.valueAsDate);
|
|
234
236
|
});
|
|
235
237
|
}
|
|
236
238
|
handleDateFieldFocus() {
|
|
@@ -283,10 +285,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
283
285
|
args: ['keydown.alt.ArrowDown', ['$event']]
|
|
284
286
|
}] } });
|
|
285
287
|
|
|
286
|
-
|
|
288
|
+
/**
|
|
289
|
+
* A validation directive to be used with date picker controls that have filtering capabilities.
|
|
290
|
+
*/
|
|
291
|
+
class DatepickerFilterValidator {
|
|
292
|
+
constructor() {
|
|
293
|
+
this.filterFn = input(null);
|
|
294
|
+
effect(() => {
|
|
295
|
+
this.filterFn();
|
|
296
|
+
this.onChange?.();
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
registerOnValidatorChange(fn) {
|
|
300
|
+
this.onChange = fn;
|
|
301
|
+
}
|
|
302
|
+
validate(control) {
|
|
303
|
+
const controlValue = control.value;
|
|
304
|
+
const filterFn = this.filterFn();
|
|
305
|
+
if (!controlValue || !filterFn) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
return filterFn(controlValue) ? { filter: true } : null;
|
|
309
|
+
}
|
|
310
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerFilterValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
311
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DatepickerFilterValidator, isStandalone: true, selector: "odx-datepicker[filterFn]", inputs: { filterFn: { classPropertyName: "filterFn", publicName: "filterFn", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
312
|
+
{
|
|
313
|
+
provide: NG_VALIDATORS,
|
|
314
|
+
useExisting: forwardRef(() => DatepickerFilterValidator),
|
|
315
|
+
multi: true,
|
|
316
|
+
},
|
|
317
|
+
], ngImport: i0 }); }
|
|
318
|
+
}
|
|
319
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerFilterValidator, decorators: [{
|
|
320
|
+
type: Directive,
|
|
321
|
+
args: [{
|
|
322
|
+
standalone: true,
|
|
323
|
+
selector: 'odx-datepicker[filterFn]',
|
|
324
|
+
providers: [
|
|
325
|
+
{
|
|
326
|
+
provide: NG_VALIDATORS,
|
|
327
|
+
useExisting: forwardRef(() => DatepickerFilterValidator),
|
|
328
|
+
multi: true,
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
}]
|
|
332
|
+
}], ctorParameters: () => [] });
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* A validation directive to be used with date picker controls that have minimum and maximum date constraints.
|
|
336
|
+
*/
|
|
337
|
+
class DatepickerMinMaxValidator {
|
|
338
|
+
constructor() {
|
|
339
|
+
this.minDate = input(null);
|
|
340
|
+
this.maxDate = input(null);
|
|
341
|
+
effect(() => {
|
|
342
|
+
this.minDate();
|
|
343
|
+
this.maxDate();
|
|
344
|
+
this.onChange?.();
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
registerOnValidatorChange(fn) {
|
|
348
|
+
this.onChange = fn;
|
|
349
|
+
}
|
|
350
|
+
validate(control) {
|
|
351
|
+
const controlValue = control.value;
|
|
352
|
+
if (!controlValue) {
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
const givenDate = startOfDay(controlValue);
|
|
356
|
+
const min = this.minDate() ? startOfDay(this.minDate()) : null;
|
|
357
|
+
const max = this.maxDate() ? startOfDay(this.maxDate()) : null;
|
|
358
|
+
if (min && isBefore(givenDate, min)) {
|
|
359
|
+
return { minDate: true };
|
|
360
|
+
}
|
|
361
|
+
if (max && isAfter(givenDate, max)) {
|
|
362
|
+
return { maxDate: true };
|
|
363
|
+
}
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerMinMaxValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
367
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: DatepickerMinMaxValidator, isStandalone: true, selector: "odx-datepicker[minDate], odx-datepicker[maxDate]", inputs: { minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
368
|
+
{
|
|
369
|
+
provide: NG_VALIDATORS,
|
|
370
|
+
useExisting: forwardRef(() => DatepickerMinMaxValidator),
|
|
371
|
+
multi: true,
|
|
372
|
+
},
|
|
373
|
+
], ngImport: i0 }); }
|
|
374
|
+
}
|
|
375
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerMinMaxValidator, decorators: [{
|
|
376
|
+
type: Directive,
|
|
377
|
+
args: [{
|
|
378
|
+
standalone: true,
|
|
379
|
+
selector: 'odx-datepicker[minDate], odx-datepicker[maxDate]',
|
|
380
|
+
providers: [
|
|
381
|
+
{
|
|
382
|
+
provide: NG_VALIDATORS,
|
|
383
|
+
useExisting: forwardRef(() => DatepickerMinMaxValidator),
|
|
384
|
+
multi: true,
|
|
385
|
+
},
|
|
386
|
+
],
|
|
387
|
+
}]
|
|
388
|
+
}], ctorParameters: () => [] });
|
|
389
|
+
|
|
390
|
+
const modules = [DatepickerComponent, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerFilterValidator];
|
|
287
391
|
class DatepickerModule {
|
|
288
392
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
289
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, DatepickerInputControlDirective], exports: [CoreModule, DatepickerComponent, DatepickerInputControlDirective] }); }
|
|
393
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerFilterValidator], exports: [CoreModule, DatepickerComponent, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerFilterValidator] }); }
|
|
290
394
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, imports: [DatepickerComponent, CoreModule] }); }
|
|
291
395
|
}
|
|
292
396
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerModule, decorators: [{
|
|
@@ -301,5 +405,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
301
405
|
* Generated bundle index. Do not edit.
|
|
302
406
|
*/
|
|
303
407
|
|
|
304
|
-
export { DatepickerComponent, DatepickerInputControlDirective, DatepickerModule };
|
|
408
|
+
export { DatepickerComponent, DatepickerFilterValidator, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerModule };
|
|
305
409
|
//# sourceMappingURL=odx-angular-components-datepicker.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-datepicker.mjs","sources":["../../../../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":["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 { getDateInputFormat, getDateInputValueAsDate, injectDateConfig } from '@odx/angular/cdk/date-input';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\n\n/**\n * A directive to enhance an input element as part of a datepicker control. It applies date input formatting,\n * mask handling, and emits focus events. This directive integrates with ngx-mask to handle input masking and\n * ensures that the input complies with the date format specified in the datepicker configuration.\n * Extends the `InputControlDirective` to provide input control functionality.\n * Has host directive `WithTabIndex` to manage the tabindex attribute of the input element.\n *\n * @see {InputControlDirective}\n * @see {WithTabIndex}\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({ validation: false, leadZeroDateTime: true })],\n hostDirectives: [WithTabIndex, NgxMaskDirective],\n})\nexport class DatepickerInputControlDirective extends InputControlDirective {\n protected readonly readonlyController = ReadonlyController.inject();\n protected readonly config = injectDateConfig();\n public readonly ngxMaskDirective = inject(NgxMaskDirective);\n\n /**\n * Emits an event when the input field receives focus or loses focus, indicating the focus state.\n *\n * @emits {boolean} - Indicates whether the input field is focused.\n */\n @Output()\n public focused = new EventEmitter<boolean>();\n\n /**\n * Gets the current value of the input field as a `Date` object, based on the date format from the datepicker\n * configuration.\n *\n * @returns {Date | null} - The current value of the input field as a `Date` object, or `null` if the value is invalid.\n */\n public get valueAsDate(): Date | null {\n return getDateInputValueAsDate(this.config, this.nativeElementValue);\n }\n\n /**\n * Computes the placeholder text for the input based on the date format from\n * the datepicker configuration.\n *\n * @returns {string} - The placeholder text, typically the date format in uppercase.\n */\n public get placeholder(): string {\n return getDateInputFormat(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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n input,\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 { getDateInputFormat, getDateInputMask, initNgxMask, injectDateConfig } from '@odx/angular/cdk/date-input';\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 { DatepickerInputControlDirective } from './directives';\n\n/**\n * Represents a datepicker component for selecting a date.\n * Extends the `CustomFormControl` class and implements the `AfterViewInit` interface.\n *\n * @see {CustomFormControl}\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 = injectDateConfig();\n\n public readonly element = injectElement();\n\n /**\n * Gets a value indicating whether the datepicker is currently open.\n *\n * @returns {boolean}\n */\n public get isOpen(): boolean {\n return !!this.dropdown.isOpen;\n }\n\n /**\n * Represents the current date.\n *\n * @type {Date}\n */\n public today = new Date();\n\n /**\n * The filter function used to determine if a date should be included or excluded in the datepicker.\n * If set to `null`, no filtering will be applied.\n *\n * @type {DateFilter | null}\n * @default null\n *\n * @example\n * ```ts\n * // Excludes mondays from the datepicker.\n * const filterFn: DateFilter = (date) => date.getDay() !== 1;\n * ```\n */\n @Input()\n public filterFn: DateFilter | null = null;\n\n /**\n * The minimum selectable date for the datepicker.\n * If set to null, there is no minimum date restriction.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public minDate: Date | null = null;\n\n /**\n * The maximum selectable date for the datepicker.\n * If set to null, there is no maximum date restriction.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public maxDate: Date | null = null;\n\n /**\n * The position of the dropdown relative to the input field.\n *\n * @type {Position}\n * @default Position.BOTTOM\n */\n @Input()\n public dropdownPosition: Position = 'bottom';\n\n /**\n * When set to true, the select will display a reset button.\n *\n * @type {boolean}\n * @default false\n */\n public clearable = input(false, { transform: booleanAttribute });\n\n /**\n * Emits the selected date when it changes.\n *\n * @emits {Date}\n */\n @Output()\n public selectedChange = new EventEmitter<Date>();\n\n /**\n * The dropdown directive used in the datepicker component.\n *\n * @type {DropdownDirective}\n */\n @ViewChild(DropdownDirective)\n public dropdown!: DropdownDirective;\n\n /**\n * The dropdown trigger element used in the datepicker component.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('dropdownTrigger', { read: ElementRef, static: true })\n public dropdownTriggerElement!: ElementRef<HTMLElement>;\n\n /**\n * The date field input control directive used in the datepicker component.\n *\n * @type {DatepickerInputControlDirective | undefined}\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.updateDateField(startOfDay(this.value));\n });\n }\n\n /**\n * Selects a date.\n *\n * @param {Date | null} value - The date value to be selected.\n */\n public selectDate(value: Date | null): void {\n if (!value) return;\n\n this.updateInternalValue(value);\n\n this.selectedChange.emit(value);\n\n this.dropdown.close();\n }\n\n /**\n * Resets the datepicker's value to null.\n */\n public reset(): void {\n this.updateInternalValue(null);\n }\n\n /**\n * @internal\n * Writes a new value to the element.\n * Part of the ControlValueAccessor interface.\n * @param {Date | null} value - The new value.\n */\n public override writeValue(value: Date | null): void {\n super.writeValue(value);\n this.updateDateField(value);\n }\n\n /**\n * Opens the datepicker dropdown.\n *\n * @param {KeyboardEvent} event\n */\n @HostListener('keydown.alt.ArrowDown', ['$event'])\n public openDatepicker(event?: KeyboardEvent) {\n event?.stopPropagation();\n\n if (this.isReadonly || this.isDisabled) return;\n\n this.dropdown.open(event);\n }\n\n protected updateInternalValue(value: Date | null): void {\n this.updateValue(value);\n this.updateDateField(value);\n }\n\n protected handleDateFieldChanges(): void {\n initNgxMask(this.dateField?.ngxMaskDirective, getDateInputMask(this.config));\n this.dateField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n if (!this.dateField?.valueAsDate) return;\n this.updateValue(this.dateField?.valueAsDate ?? null);\n });\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 private updateDateField(date: Date | null): void {\n if (!this.dateField) return;\n\n const dateFormat = getDateInputFormat(this.config);\n this.dateField.nativeElementValue = date ? format(date, dateFormat) : '';\n }\n}\n","<ng-content select=\"input[odxDatepickerControl]\" />\n\n<odx-action-group class=\"odx-datepicker__trigger-wrapper\">\n @if (clearable() && value) {\n <button odxButton class=\"odx-datepicker__clear\" (click)=\"reset()\" size=\"small\" aria-label=\"Reset time\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n odxButton\n size=\"small\"\n variant=\"ghost\"\n class=\"odx-datepicker__trigger\"\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\" />\n </button>\n <ng-content select=\"[odxButton]\" ngProjectAs=\"[odxButton]\" />\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value || today\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n />\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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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-datepicker.mjs","sources":["../../../../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/validators/filter.validator.ts","../../../../libs/angular/components/datepicker/src/lib/validators/minmax.validator.ts","../../../../libs/angular/components/datepicker/src/lib/datepicker.module.ts","../../../../libs/angular/components/datepicker/src/odx-angular-components-datepicker.ts"],"sourcesContent":["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 { getDateInputFormat, getDateInputValueAsDate, injectDateConfig } from '@odx/angular/cdk/date-input';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\n\n/**\n * A directive to enhance an input element as part of a datepicker control. It applies date input formatting,\n * mask handling, and emits focus events. This directive integrates with ngx-mask to handle input masking and\n * ensures that the input complies with the date format specified in the datepicker configuration.\n * Extends the `InputControlDirective` to provide input control functionality.\n * Has host directive `WithTabIndex` to manage the tabindex attribute of the input element.\n *\n * @see {InputControlDirective}\n * @see {WithTabIndex}\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({ validation: false, leadZeroDateTime: true })],\n hostDirectives: [WithTabIndex, NgxMaskDirective],\n})\nexport class DatepickerInputControlDirective extends InputControlDirective {\n protected readonly readonlyController = ReadonlyController.inject();\n protected readonly config = injectDateConfig();\n public readonly ngxMaskDirective = inject(NgxMaskDirective);\n\n /**\n * Emits an event when the input field receives focus or loses focus, indicating the focus state.\n *\n * @emits {boolean} - Indicates whether the input field is focused.\n */\n @Output()\n public focused = new EventEmitter<boolean>();\n\n /**\n * Gets the current value of the input field as a `Date` object, based on the date format from the datepicker\n * configuration.\n *\n * @returns {Date | null} - The current value of the input field as a `Date` object, or `null` if the value is invalid.\n */\n public get valueAsDate(): Date | null {\n return getDateInputValueAsDate(this.config, this.nativeElementValue);\n }\n\n /**\n * Computes the placeholder text for the input based on the date format from\n * the datepicker configuration.\n *\n * @returns {string} - The placeholder text, typically the date format in uppercase.\n */\n public get placeholder(): string {\n return getDateInputFormat(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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n input,\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 { getDateInputFormat, getDateInputMask, initNgxMask, injectDateConfig } from '@odx/angular/cdk/date-input';\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 { distinctUntilChanged } from 'rxjs';\nimport { DatepickerInputControlDirective } from './directives';\n\n/**\n * Represents a datepicker component for selecting a date.\n * Extends the `CustomFormControl` class and implements the `AfterViewInit` interface.\n *\n * @see {CustomFormControl}\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 = injectDateConfig();\n\n public readonly element = injectElement();\n\n /**\n * Gets a value indicating whether the datepicker is currently open.\n *\n * @returns {boolean}\n */\n public get isOpen(): boolean {\n return !!this.dropdown.isOpen;\n }\n\n /**\n * Represents the current date.\n *\n * @type {Date}\n */\n public today = new Date();\n\n /**\n * The filter function used to determine if a date should be included or excluded in the datepicker.\n * If set to `null`, no filtering will be applied.\n *\n * @type {DateFilter | null}\n * @default null\n *\n * @example\n * ```ts\n * // Excludes mondays from the datepicker.\n * const filterFn: DateFilter = (date) => date.getDay() !== 1;\n * ```\n */\n @Input()\n public filterFn: DateFilter | null = null;\n\n /**\n * The minimum selectable date for the datepicker.\n * If set to null, there is no minimum date restriction.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public minDate: Date | null = null;\n\n /**\n * The maximum selectable date for the datepicker.\n * If set to null, there is no maximum date restriction.\n *\n * @type {Date | null}\n * @default null\n */\n @Input()\n public maxDate: Date | null = null;\n\n /**\n * The position of the dropdown relative to the input field.\n *\n * @type {Position}\n * @default Position.BOTTOM\n */\n @Input()\n public dropdownPosition: Position = 'bottom';\n\n /**\n * When set to true, the select will display a reset button.\n *\n * @type {boolean}\n * @default false\n */\n public clearable = input(false, { transform: booleanAttribute });\n\n /**\n * Emits the selected date when it changes.\n *\n * @emits {Date}\n */\n @Output()\n public selectedChange = new EventEmitter<Date>();\n\n /**\n * The dropdown directive used in the datepicker component.\n *\n * @type {DropdownDirective}\n */\n @ViewChild(DropdownDirective)\n public dropdown!: DropdownDirective;\n\n /**\n * The dropdown trigger element used in the datepicker component.\n *\n * @type {ElementRef<HTMLElement>}\n */\n @ViewChild('dropdownTrigger', { read: ElementRef, static: true })\n public dropdownTriggerElement!: ElementRef<HTMLElement>;\n\n /**\n * The date field input control directive used in the datepicker component.\n *\n * @type {DatepickerInputControlDirective | undefined}\n */\n @ContentChild(DatepickerInputControlDirective)\n public dateField?: DatepickerInputControlDirective;\n\n constructor() {\n super(null);\n detectControllerChanges(this).pipe(this.takeUntilDestroyed()).subscribe();\n }\n\n public ngAfterViewInit(): void {\n this.handleDateFieldChanges();\n this.handleDateFieldFocus();\n\n deferFn(() => {\n if (!this.value) return;\n this.updateDateField(startOfDay(this.value));\n });\n }\n\n /**\n * Selects a date.\n *\n * @param {Date | null} value - The date value to be selected.\n */\n public selectDate(value: Date | null): void {\n if (!value) return;\n\n this.updateInternalValue(value);\n\n this.selectedChange.emit(value);\n\n this.dropdown.close();\n }\n\n /**\n * Resets the datepicker's value to null.\n */\n public reset(): void {\n this.updateInternalValue(null);\n }\n\n /**\n * @internal\n * Writes a new value to the element.\n * Part of the ControlValueAccessor interface.\n * @param {Date | null} value - The new value.\n */\n public override writeValue(value: Date | null): void {\n super.writeValue(value);\n this.updateDateField(value);\n }\n\n /**\n * Opens the datepicker dropdown.\n *\n * @param {KeyboardEvent} event\n */\n @HostListener('keydown.alt.ArrowDown', ['$event'])\n public openDatepicker(event?: KeyboardEvent) {\n event?.stopPropagation();\n\n if (this.isReadonly || this.isDisabled) return;\n\n this.dropdown.open(event);\n }\n\n protected updateInternalValue(value: Date | null): void {\n this.updateValue(value);\n this.updateDateField(value);\n }\n\n protected handleDateFieldChanges(): void {\n initNgxMask(this.dateField?.ngxMaskDirective, getDateInputMask(this.config));\n this.dateField?.valueChange$.pipe(distinctUntilChanged(), this.takeUntilDestroyed()).subscribe(() => {\n if (!this.dateField?.valueAsDate) return;\n this.updateValue(this.dateField?.valueAsDate);\n });\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 private updateDateField(date: Date | null): void {\n if (!this.dateField) return;\n\n const dateFormat = getDateInputFormat(this.config);\n this.dateField.nativeElementValue = date ? format(date, dateFormat) : '';\n }\n}\n","<ng-content select=\"input[odxDatepickerControl]\" />\n\n<odx-action-group class=\"odx-datepicker__trigger-wrapper\">\n @if (clearable() && value) {\n <button odxButton class=\"odx-datepicker__clear\" (click)=\"reset()\" size=\"small\" aria-label=\"Reset time\">\n <odx-icon name=\"close\" iconSet=\"core\" />\n </button>\n }\n <button\n #dropdownTrigger\n odxButton\n size=\"small\"\n variant=\"ghost\"\n class=\"odx-datepicker__trigger\"\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\" />\n </button>\n <ng-content select=\"[odxButton]\" ngProjectAs=\"[odxButton]\" />\n</odx-action-group>\n\n<ng-template #calendarOverlay>\n <odx-calendar\n [selectedDate]=\"value || today\"\n [filterFn]=\"filterFn\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n (selectedDateChange)=\"selectDate($event)\"\n />\n</ng-template>\n","import { Directive, effect, forwardRef, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { DateFilter } from '@odx/angular/components/calendar';\n/**\n * A validation directive to be used with date picker controls that have filtering capabilities.\n */\n@Directive({\n standalone: true,\n selector: 'odx-datepicker[filterFn]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatepickerFilterValidator),\n multi: true,\n },\n ],\n})\nexport class DatepickerFilterValidator implements Validator {\n private onChange?: () => void;\n public filterFn = input<DateFilter | null>(null);\n\n constructor() {\n effect(() => {\n this.filterFn();\n this.onChange?.();\n });\n }\n\n public registerOnValidatorChange(fn: () => void) {\n this.onChange = fn;\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const controlValue = control.value as Date | null;\n const filterFn = this.filterFn();\n\n if (!controlValue || !filterFn) {\n return null;\n }\n\n return filterFn(controlValue) ? { filter: true } : null;\n }\n}\n","import { Directive, effect, forwardRef, input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { isAfter, isBefore, startOfDay } from 'date-fns';\n\n/**\n * A validation directive to be used with date picker controls that have minimum and maximum date constraints.\n */\n@Directive({\n standalone: true,\n selector: 'odx-datepicker[minDate], odx-datepicker[maxDate]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatepickerMinMaxValidator),\n multi: true,\n },\n ],\n})\nexport class DatepickerMinMaxValidator implements Validator {\n private onChange?: () => void;\n public minDate = input<Date | null>(null);\n public maxDate = input<Date | null>(null);\n\n constructor() {\n effect(() => {\n this.minDate();\n this.maxDate();\n this.onChange?.();\n });\n }\n\n public registerOnValidatorChange(fn: () => void) {\n this.onChange = fn;\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const controlValue = control.value as Date | null;\n if (!controlValue) {\n return null;\n }\n const givenDate = startOfDay(controlValue);\n const min = this.minDate() ? startOfDay(this.minDate() as Date) : null;\n const max = this.maxDate() ? startOfDay(this.maxDate() as Date) : null;\n if (min && isBefore(givenDate, min)) {\n return { minDate: true };\n }\n if (max && isAfter(givenDate, max)) {\n return { maxDate: true };\n }\n return null;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { DatepickerComponent } from './datepicker.component';\nimport { DatepickerInputControlDirective } from './directives';\nimport { DatepickerFilterValidator } from './validators/filter.validator';\nimport { DatepickerMinMaxValidator } from './validators/minmax.validator';\n\nconst modules = [DatepickerComponent, DatepickerInputControlDirective, DatepickerMinMaxValidator, DatepickerFilterValidator];\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odx/angular",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.22.0",
|
|
4
4
|
"author": "Drägerwerk AG & Co.KGaA",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -184,18 +184,18 @@
|
|
|
184
184
|
"esm": "./esm2022/components/anchor-navigation/odx-angular-components-anchor-navigation.mjs",
|
|
185
185
|
"default": "./fesm2022/odx-angular-components-anchor-navigation.mjs"
|
|
186
186
|
},
|
|
187
|
-
"./components/autocomplete": {
|
|
188
|
-
"types": "./components/autocomplete/index.d.ts",
|
|
189
|
-
"esm2022": "./esm2022/components/autocomplete/odx-angular-components-autocomplete.mjs",
|
|
190
|
-
"esm": "./esm2022/components/autocomplete/odx-angular-components-autocomplete.mjs",
|
|
191
|
-
"default": "./fesm2022/odx-angular-components-autocomplete.mjs"
|
|
192
|
-
},
|
|
193
187
|
"./components/area-header": {
|
|
194
188
|
"types": "./components/area-header/index.d.ts",
|
|
195
189
|
"esm2022": "./esm2022/components/area-header/odx-angular-components-area-header.mjs",
|
|
196
190
|
"esm": "./esm2022/components/area-header/odx-angular-components-area-header.mjs",
|
|
197
191
|
"default": "./fesm2022/odx-angular-components-area-header.mjs"
|
|
198
192
|
},
|
|
193
|
+
"./components/autocomplete": {
|
|
194
|
+
"types": "./components/autocomplete/index.d.ts",
|
|
195
|
+
"esm2022": "./esm2022/components/autocomplete/odx-angular-components-autocomplete.mjs",
|
|
196
|
+
"esm": "./esm2022/components/autocomplete/odx-angular-components-autocomplete.mjs",
|
|
197
|
+
"default": "./fesm2022/odx-angular-components-autocomplete.mjs"
|
|
198
|
+
},
|
|
199
199
|
"./components/avatar": {
|
|
200
200
|
"types": "./components/avatar/index.d.ts",
|
|
201
201
|
"esm2022": "./esm2022/components/avatar/odx-angular-components-avatar.mjs",
|