@porscheinformatik/clr-addons 15.0.0 → 15.2.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.
Files changed (64) hide show
  1. package/clr-addons.module.d.ts +2 -1
  2. package/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.d.ts +2 -0
  3. package/datagrid/datagrid-state-persistence/index.d.ts +1 -0
  4. package/datagrid/datagrid-state-persistence/state-persistence-key.directive.d.ts +13 -4
  5. package/datagrid/datagrid-state-persistence/state-persistence-options.interface.d.ts +8 -0
  6. package/daterangepicker/daterange.constants.d.ts +21 -0
  7. package/daterangepicker/daterangepicker.module.d.ts +17 -0
  8. package/daterangepicker/directives/abstract-container.component.d.ts +53 -0
  9. package/daterangepicker/directives/datepicker/datepicker.component.d.ts +65 -0
  10. package/daterangepicker/directives/daterangepicker/daterangepicker.directive.d.ts +127 -0
  11. package/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.d.ts +118 -0
  12. package/daterangepicker/directives/if-daterange-error.directive.d.ts +40 -0
  13. package/daterangepicker/index.d.ts +13 -0
  14. package/daterangepicker/interfaces/daterange-preset.interface.d.ts +8 -0
  15. package/daterangepicker/interfaces/daterange.interface.d.ts +12 -0
  16. package/daterangepicker/models/day.model.d.ts +80 -0
  17. package/daterangepicker/models/popover-positions.model.d.ts +20 -0
  18. package/daterangepicker/providers/daterange-control-state.service.d.ts +42 -0
  19. package/daterangepicker/providers/daterange-parsing.service.d.ts +66 -0
  20. package/daterangepicker/providers/daterange.service.d.ts +38 -0
  21. package/daterangepicker/providers/opened-datepickers-tracker.service.d.ts +20 -0
  22. package/daterangepicker/validators/daterange-max.validator.d.ts +32 -0
  23. package/daterangepicker/validators/daterange-min.validator.d.ts +32 -0
  24. package/daterangepicker/validators/daterange-order.validator.d.ts +29 -0
  25. package/daterangepicker/validators/daterange-required.validator.d.ts +29 -0
  26. package/esm2020/clr-addons.module.mjs +8 -4
  27. package/esm2020/datagrid/datagrid-state-persistence/column-hidden-state-persistence.directive.mjs +3 -2
  28. package/esm2020/datagrid/datagrid-state-persistence/datagrid-state-persistence-model.interface.mjs +1 -1
  29. package/esm2020/datagrid/datagrid-state-persistence/index.mjs +2 -1
  30. package/esm2020/datagrid/datagrid-state-persistence/state-persistence-key.directive.mjs +58 -12
  31. package/esm2020/datagrid/datagrid-state-persistence/state-persistence-options.interface.mjs +2 -0
  32. package/esm2020/daterangepicker/daterange.constants.mjs +27 -0
  33. package/esm2020/daterangepicker/daterangepicker.module.mjs +58 -0
  34. package/esm2020/daterangepicker/directives/abstract-container.component.mjs +104 -0
  35. package/esm2020/daterangepicker/directives/datepicker/datepicker.component.mjs +97 -0
  36. package/esm2020/daterangepicker/directives/daterangepicker/daterangepicker.directive.mjs +256 -0
  37. package/esm2020/daterangepicker/directives/daterangepicker-container/daterangepicker-container.component.mjs +251 -0
  38. package/esm2020/daterangepicker/directives/if-daterange-error.directive.mjs +94 -0
  39. package/esm2020/daterangepicker/index.mjs +14 -0
  40. package/esm2020/daterangepicker/interfaces/daterange-preset.interface.mjs +2 -0
  41. package/esm2020/daterangepicker/interfaces/daterange.interface.mjs +2 -0
  42. package/esm2020/daterangepicker/models/day.model.mjs +99 -0
  43. package/esm2020/daterangepicker/models/popover-positions.model.mjs +66 -0
  44. package/esm2020/daterangepicker/providers/daterange-control-state.service.mjs +62 -0
  45. package/esm2020/daterangepicker/providers/daterange-parsing.service.mjs +206 -0
  46. package/esm2020/daterangepicker/providers/daterange.service.mjs +54 -0
  47. package/esm2020/daterangepicker/providers/opened-datepickers-tracker.service.mjs +36 -0
  48. package/esm2020/daterangepicker/validators/daterange-max.validator.mjs +85 -0
  49. package/esm2020/daterangepicker/validators/daterange-min.validator.mjs +85 -0
  50. package/esm2020/daterangepicker/validators/daterange-order.validator.mjs +75 -0
  51. package/esm2020/daterangepicker/validators/daterange-required.validator.mjs +71 -0
  52. package/esm2020/index.mjs +3 -2
  53. package/esm2020/searchfield/search-field.mjs +7 -5
  54. package/fesm2015/clr-addons.mjs +1977 -270
  55. package/fesm2015/clr-addons.mjs.map +1 -1
  56. package/fesm2020/clr-addons.mjs +1858 -177
  57. package/fesm2020/clr-addons.mjs.map +1 -1
  58. package/index.d.ts +1 -0
  59. package/package.json +3 -3
  60. package/searchfield/search-field.d.ts +2 -2
  61. package/styles/clr-addons-phs.css +0 -13
  62. package/styles/clr-addons-phs.css.map +1 -1
  63. package/styles/clr-addons-phs.min.css +1 -1
  64. package/styles/clr-addons-phs.min.css.map +1 -1
@@ -0,0 +1,94 @@
1
+ import { Directive, Input, Optional, TemplateRef, ViewContainerRef } from '@angular/core';
2
+ import { DaterangeControlStateService } from '../providers/daterange-control-state.service';
3
+ import { ClrDaterangepickerContainerComponent } from './daterangepicker-container/daterangepicker-container.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../providers/daterange-control-state.service";
6
+ import * as i2 from "./daterangepicker-container/daterangepicker-container.component";
7
+ /**
8
+ * Directive for multiple error messages.
9
+ * It works the same as Clarity `ClrIfError`, but for customized `ClrDaterangepickerContainerComponent`.
10
+ * Using Clarity `ClrIfError` requires the container to have service implemented that are not publicly exported.
11
+ *
12
+ * @see https://clarity.design/documentation/forms (section "Multiple error messages").
13
+ *
14
+ * Altered version from https://github.com/vmware-clarity/ng-clarity/blob/138a6dd95fdc4ffb67b054391c44ce5fa3c44660/projects/angular/src/forms/common/if-control-state/if-error.ts
15
+ */
16
+ export class ClrIfDaterangeErrorDirective {
17
+ constructor(template, container, daterangeControlStateService, daterangepickerContainerComponent) {
18
+ this.template = template;
19
+ this.container = container;
20
+ this.daterangeControlStateService = daterangeControlStateService;
21
+ this.daterangepickerContainerComponent = daterangepickerContainerComponent;
22
+ /** Flag to remember if content is displayed. */
23
+ this.displayedContent = false;
24
+ /** List of subscriptions to later destroy. */
25
+ this.subscriptions = [];
26
+ // This directive only works inside `clr-daterangepicker-container`.
27
+ if (this.daterangeControlStateService == null || this.daterangepickerContainerComponent == null) {
28
+ throw new Error('`ClrIfDaterangeErrorDirective` can only be used within `ClrDaterangepickerContainerComponent`');
29
+ }
30
+ // Listen to status changes to toggle error visibility.
31
+ this.subscriptions.push(this.daterangeControlStateService.statusChange.subscribe((_status) => {
32
+ this.handleState();
33
+ }));
34
+ }
35
+ ngOnDestroy() {
36
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
37
+ }
38
+ /**
39
+ * Handle error depending on states.
40
+ */
41
+ handleState() {
42
+ if (!this.daterangeControlStateService.invalid) {
43
+ // If control is not invalid, hide all errors.
44
+ this.toggleErrorVisibility(false);
45
+ }
46
+ else if (this.clrIfDaterangeError) {
47
+ // Display error only if error input is list of errors.
48
+ const hasError = this.clrIfDaterangeError in this.daterangeControlStateService.errors;
49
+ this.toggleErrorVisibility(hasError);
50
+ }
51
+ else {
52
+ // Display error.
53
+ this.toggleErrorVisibility(true);
54
+ }
55
+ }
56
+ /**
57
+ * Display/hide error.
58
+ * @param displayError - Wether to show/hide error.
59
+ */
60
+ toggleErrorVisibility(displayError) {
61
+ if (displayError) {
62
+ const error = this.daterangeControlStateService.errors[this.clrIfDaterangeError];
63
+ if (this.displayedContent === false) {
64
+ this.embeddedViewRef = this.container.createEmbeddedView(this.template, {
65
+ error,
66
+ });
67
+ this.displayedContent = true;
68
+ }
69
+ else if (this.embeddedViewRef && this.embeddedViewRef.context) {
70
+ // If view is already rendered, update the error object to keep it in sync.
71
+ this.embeddedViewRef.context.error = error;
72
+ }
73
+ }
74
+ else {
75
+ this.container.clear();
76
+ this.displayedContent = false;
77
+ }
78
+ }
79
+ }
80
+ ClrIfDaterangeErrorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrIfDaterangeErrorDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.DaterangeControlStateService, optional: true }, { token: i2.ClrDaterangepickerContainerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
81
+ ClrIfDaterangeErrorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ClrIfDaterangeErrorDirective, selector: "[clrIfDaterangeError]", inputs: { clrIfDaterangeError: "clrIfDaterangeError" }, ngImport: i0 });
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ClrIfDaterangeErrorDirective, decorators: [{
83
+ type: Directive,
84
+ args: [{
85
+ selector: '[clrIfDaterangeError]',
86
+ }]
87
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.DaterangeControlStateService, decorators: [{
88
+ type: Optional
89
+ }] }, { type: i2.ClrDaterangepickerContainerComponent, decorators: [{
90
+ type: Optional
91
+ }] }]; }, propDecorators: { clrIfDaterangeError: [{
92
+ type: Input
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWYtZGF0ZXJhbmdlLWVycm9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGVyYW5nZXBpY2tlci9kaXJlY3RpdmVzL2lmLWRhdGVyYW5nZS1lcnJvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUIsS0FBSyxFQUFhLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFNUYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0saUVBQWlFLENBQUM7Ozs7QUFFdkg7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBY3ZDLFlBQ21CLFFBQTBCLEVBQzFCLFNBQTJCLEVBQ2YsNEJBQTBELEVBRXRFLGlDQUF1RTtRQUp2RSxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUNmLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFFdEUsc0NBQWlDLEdBQWpDLGlDQUFpQyxDQUFzQztRQVgxRixnREFBZ0Q7UUFDdEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLDhDQUE4QztRQUN0QyxrQkFBYSxHQUF3QixFQUFFLENBQUM7UUFTOUMsb0VBQW9FO1FBQ3BFLElBQUksSUFBSSxDQUFDLDRCQUE0QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsaUNBQWlDLElBQUksSUFBSSxFQUFFO1lBQy9GLE1BQU0sSUFBSSxLQUFLLENBQUMsK0ZBQStGLENBQUMsQ0FBQztTQUNsSDtRQUVELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDNUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUU7WUFDOUMsOENBQThDO1lBQzlDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ25DLHVEQUF1RDtZQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQztZQUN0RixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEM7YUFBTTtZQUNMLGlCQUFpQjtZQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0sscUJBQXFCLENBQUMsWUFBcUI7UUFDakQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNqRixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUN0RSxLQUFLO2lCQUNOLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2FBQzlCO2lCQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRTtnQkFDL0QsMkVBQTJFO2dCQUMzRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2FBQzVDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztTQUMvQjtJQUNILENBQUM7O3lIQTNFVSw0QkFBNEI7NkdBQTVCLDRCQUE0QjsyRkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7aUJBQ2xDOzswQkFrQkksUUFBUTs7MEJBQ1IsUUFBUTs0Q0FmSixtQkFBbUI7c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVtYmVkZGVkVmlld1JlZiwgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGVyYW5nZUNvbnRyb2xTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9wcm92aWRlcnMvZGF0ZXJhbmdlLWNvbnRyb2wtc3RhdGUuc2VydmljZSc7XG5cbmltcG9ydCB7IENsckRhdGVyYW5nZXBpY2tlckNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lci9kYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcy5cbiAqIEl0IHdvcmtzIHRoZSBzYW1lIGFzIENsYXJpdHkgYENscklmRXJyb3JgLCBidXQgZm9yIGN1c3RvbWl6ZWQgYENsckRhdGVyYW5nZXBpY2tlckNvbnRhaW5lckNvbXBvbmVudGAuXG4gKiBVc2luZyBDbGFyaXR5IGBDbHJJZkVycm9yYCByZXF1aXJlcyB0aGUgY29udGFpbmVyIHRvIGhhdmUgc2VydmljZSBpbXBsZW1lbnRlZCB0aGF0IGFyZSBub3QgcHVibGljbHkgZXhwb3J0ZWQuXG4gKlxuICogQHNlZSBodHRwczovL2NsYXJpdHkuZGVzaWduL2RvY3VtZW50YXRpb24vZm9ybXMgKHNlY3Rpb24gXCJNdWx0aXBsZSBlcnJvciBtZXNzYWdlc1wiKS5cbiAqXG4gKiBBbHRlcmVkIHZlcnNpb24gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdm13YXJlLWNsYXJpdHkvbmctY2xhcml0eS9ibG9iLzEzOGE2ZGQ5NWZkYzRmZmI2N2IwNTQzOTFjNDRjZTVmYTNjNDQ2NjAvcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvY29tbW9uL2lmLWNvbnRyb2wtc3RhdGUvaWYtZXJyb3IudHNcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NscklmRGF0ZXJhbmdlRXJyb3JdJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2xySWZEYXRlcmFuZ2VFcnJvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBFcnJvciBuYW1lLiAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgY2xySWZEYXRlcmFuZ2VFcnJvcjogc3RyaW5nO1xuXG4gIC8qKiBSZW5kZXJlZCB2aWV3LiAqL1xuICBwcml2YXRlIGVtYmVkZGVkVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT47XG5cbiAgLyoqIEZsYWcgdG8gcmVtZW1iZXIgaWYgY29udGVudCBpcyBkaXNwbGF5ZWQuICovXG4gIHByb3RlY3RlZCBkaXNwbGF5ZWRDb250ZW50ID0gZmFsc2U7XG5cbiAgLyoqIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucyB0byBsYXRlciBkZXN0cm95LiAqL1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRhdGVyYW5nZUNvbnRyb2xTdGF0ZVNlcnZpY2U6IERhdGVyYW5nZUNvbnRyb2xTdGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVyYW5nZXBpY2tlckNvbnRhaW5lckNvbXBvbmVudDogQ2xyRGF0ZXJhbmdlcGlja2VyQ29udGFpbmVyQ29tcG9uZW50XG4gICkge1xuICAgIC8vIFRoaXMgZGlyZWN0aXZlIG9ubHkgd29ya3MgaW5zaWRlIGBjbHItZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcmAuXG4gICAgaWYgKHRoaXMuZGF0ZXJhbmdlQ29udHJvbFN0YXRlU2VydmljZSA9PSBudWxsIHx8IHRoaXMuZGF0ZXJhbmdlcGlja2VyQ29udGFpbmVyQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYENscklmRGF0ZXJhbmdlRXJyb3JEaXJlY3RpdmVgIGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGBDbHJEYXRlcmFuZ2VwaWNrZXJDb250YWluZXJDb21wb25lbnRgJyk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIHRvIHN0YXR1cyBjaGFuZ2VzIHRvIHRvZ2dsZSBlcnJvciB2aXNpYmlsaXR5LlxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5kYXRlcmFuZ2VDb250cm9sU3RhdGVTZXJ2aWNlLnN0YXR1c0NoYW5nZS5zdWJzY3JpYmUoKF9zdGF0dXM6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVTdGF0ZSgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGVycm9yIGRlcGVuZGluZyBvbiBzdGF0ZXMuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVN0YXRlKCkge1xuICAgIGlmICghdGhpcy5kYXRlcmFuZ2VDb250cm9sU3RhdGVTZXJ2aWNlLmludmFsaWQpIHtcbiAgICAgIC8vIElmIGNvbnRyb2wgaXMgbm90IGludmFsaWQsIGhpZGUgYWxsIGVycm9ycy5cbiAgICAgIHRoaXMudG9nZ2xlRXJyb3JWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2xySWZEYXRlcmFuZ2VFcnJvcikge1xuICAgICAgLy8gRGlzcGxheSBlcnJvciBvbmx5IGlmIGVycm9yIGlucHV0IGlzIGxpc3Qgb2YgZXJyb3JzLlxuICAgICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmNscklmRGF0ZXJhbmdlRXJyb3IgaW4gdGhpcy5kYXRlcmFuZ2VDb250cm9sU3RhdGVTZXJ2aWNlLmVycm9ycztcbiAgICAgIHRoaXMudG9nZ2xlRXJyb3JWaXNpYmlsaXR5KGhhc0Vycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGlzcGxheSBlcnJvci5cbiAgICAgIHRoaXMudG9nZ2xlRXJyb3JWaXNpYmlsaXR5KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5L2hpZGUgZXJyb3IuXG4gICAqIEBwYXJhbSBkaXNwbGF5RXJyb3IgLSBXZXRoZXIgdG8gc2hvdy9oaWRlIGVycm9yLlxuICAgKi9cbiAgcHJpdmF0ZSB0b2dnbGVFcnJvclZpc2liaWxpdHkoZGlzcGxheUVycm9yOiBib29sZWFuKSB7XG4gICAgaWYgKGRpc3BsYXlFcnJvcikge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmRhdGVyYW5nZUNvbnRyb2xTdGF0ZVNlcnZpY2UuZXJyb3JzW3RoaXMuY2xySWZEYXRlcmFuZ2VFcnJvcl07XG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb250ZW50ID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmVtYmVkZGVkVmlld1JlZiA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlLCB7XG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbnRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmVtYmVkZGVkVmlld1JlZiAmJiB0aGlzLmVtYmVkZGVkVmlld1JlZi5jb250ZXh0KSB7XG4gICAgICAgIC8vIElmIHZpZXcgaXMgYWxyZWFkeSByZW5kZXJlZCwgdXBkYXRlIHRoZSBlcnJvciBvYmplY3QgdG8ga2VlcCBpdCBpbiBzeW5jLlxuICAgICAgICB0aGlzLmVtYmVkZGVkVmlld1JlZi5jb250ZXh0LmVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLmNsZWFyKCk7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbnRlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,14 @@
1
+ export * from './daterange.constants';
2
+ export * from './daterangepicker.module';
3
+ export * from './directives/daterangepicker-container/daterangepicker-container.component';
4
+ export * from './directives/daterangepicker/daterangepicker.directive';
5
+ export * from './directives/if-daterange-error.directive';
6
+ export * from './interfaces/daterange-preset.interface';
7
+ export * from './interfaces/daterange.interface';
8
+ export * from './models/day.model';
9
+ export * from './models/popover-positions.model';
10
+ export * from './validators/daterange-max.validator';
11
+ export * from './validators/daterange-min.validator';
12
+ export * from './validators/daterange-order.validator';
13
+ export * from './validators/daterange-required.validator';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRlcmFuZ2VwaWNrZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEVBQTRFLENBQUM7QUFDM0YsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0ZXJhbmdlLmNvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGVyYW5nZXBpY2tlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2RhdGVyYW5nZXBpY2tlci1jb250YWluZXIvZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2RhdGVyYW5nZXBpY2tlci9kYXRlcmFuZ2VwaWNrZXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9pZi1kYXRlcmFuZ2UtZXJyb3IuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9kYXRlcmFuZ2UtcHJlc2V0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvZGF0ZXJhbmdlLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9kYXkubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvcG9wb3Zlci1wb3NpdGlvbnMubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3JzL2RhdGVyYW5nZS1tYXgudmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdG9ycy9kYXRlcmFuZ2UtbWluLnZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMvZGF0ZXJhbmdlLW9yZGVyLnZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMvZGF0ZXJhbmdlLXJlcXVpcmVkLnZhbGlkYXRvcic7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLXByZXNldC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRlcmFuZ2VwaWNrZXIvaW50ZXJmYWNlcy9kYXRlcmFuZ2UtcHJlc2V0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZXJhbmdlIH0gZnJvbSAnLi9kYXRlcmFuZ2UuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBEYXRlcmFuZ2UgcHJlc2V0IGZvciBkYXRlcmFuZ2VwaWNrZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZXJhbmdlUHJlc2V0IHtcbiAgdGV4dDogc3RyaW5nO1xuICByYW5nZSgpOiBEYXRlcmFuZ2U7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGVyYW5nZXBpY2tlci9pbnRlcmZhY2VzL2RhdGVyYW5nZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE51bGxhYmxlRGF5TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZGF5Lm1vZGVsJztcblxuLyoqXG4gKiBEYXRlcmFuZ2UgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGVyYW5nZSB7XG4gIGZyb206IE51bGxhYmxlRGF5TW9kZWw7XG4gIHRvOiBOdWxsYWJsZURheU1vZGVsO1xufVxuXG4vKipcbiAqIERhdGVyYW5nZS5cbiAqL1xuZXhwb3J0IHR5cGUgTnVsbGFibGVEYXRlcmFuZ2UgPSBEYXRlcmFuZ2UgfCB1bmRlZmluZWQgfCBudWxsO1xuIl19
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Day model.
3
+ * Takes care of keeping records of full days, without the times & timezone issues.
4
+ */
5
+ export class DayModel {
6
+ constructor(...args) {
7
+ if (args[0] instanceof Date) {
8
+ const date = args[0];
9
+ this.year = date.getFullYear();
10
+ this.month = date.getMonth();
11
+ this.date = date.getDate();
12
+ }
13
+ else if (typeof args[0] === 'string') {
14
+ const [year, month, day] = args[0].split('-').map(n => parseInt(n, 10));
15
+ this.year = year;
16
+ this.month = month - 1;
17
+ this.date = day;
18
+ }
19
+ else {
20
+ this.year = args[0];
21
+ this.month = args[1];
22
+ this.date = args[2];
23
+ }
24
+ }
25
+ /**
26
+ * Checks if the passed value is equal to current day model.
27
+ * @param value - Day model.
28
+ * @returns Wether value is equal to current day model.
29
+ */
30
+ isEqual(value) {
31
+ if (value) {
32
+ return this.year === value.year && this.month === value.month && this.date === value.date;
33
+ }
34
+ return false;
35
+ }
36
+ /**
37
+ * Increment day model with date value.
38
+ * @param value - Incremental date value.
39
+ * @returns Updated day model with incremented date value.
40
+ */
41
+ incrementBy(value) {
42
+ // Creating new Javascript Date object to increment because
43
+ // it will automatically take care of switching to next or previous
44
+ // months & years without we having to worry about it.
45
+ const date = new Date(this.year, this.month, this.date + value);
46
+ this.year = date.getFullYear();
47
+ this.month = date.getMonth();
48
+ this.date = date.getDate();
49
+ return this;
50
+ }
51
+ /**
52
+ * Checks if current day model is after value.
53
+ * @param value - Day model.
54
+ * @returns Wether current day model is after value.
55
+ */
56
+ isAfter(value) {
57
+ return this.toDate() > value.toDate();
58
+ }
59
+ /**
60
+ * Checks if current day model is before value.
61
+ * @param value - Day model.
62
+ * @returns Wether current day model is before value.
63
+ */
64
+ isBefore(value) {
65
+ return this.toDate() < value.toDate();
66
+ }
67
+ /**
68
+ * Clones the current day model.
69
+ * @returns Cloned day model.
70
+ */
71
+ clone() {
72
+ return new DayModel(this.year, this.month, this.date);
73
+ }
74
+ /**
75
+ * Convert to Javascript Date object.
76
+ * @returns Javascript Date object.
77
+ */
78
+ toDate() {
79
+ return new Date(this.year, this.month, this.date);
80
+ }
81
+ /**
82
+ * To HTML5 date spec string.
83
+ * See https://clarity.design/documentation/datepicker
84
+ * @returns Date as HTML5 spec string.
85
+ */
86
+ toHTML5SpecDateString() {
87
+ // The clarity date picker uses the format 'YYYY-MM-DD'.
88
+ return `${this.year}-${this.pad(this.month + 1)}-${this.pad(this.date)}`;
89
+ }
90
+ /**
91
+ * String padding with zeros.
92
+ * @param num - Number to pad.
93
+ * @returns Padded string.
94
+ */
95
+ pad(num) {
96
+ return num < 10 ? `0${num}` : `${num}`;
97
+ }
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0ZXJhbmdlcGlja2VyL21vZGVscy9kYXkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUEyQm5CLFlBQW1CLEdBQUcsSUFBbUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxHQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjthQUFNLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUNqQjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFXLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFXLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxLQUFlO1FBQzVCLElBQUksS0FBSyxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQztTQUMzRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsS0FBYTtRQUM5QiwyREFBMkQ7UUFDM0QsbUVBQW1FO1FBQ25FLHNEQUFzRDtRQUN0RCxNQUFNLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLEtBQWU7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLEtBQWU7UUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNO1FBQ1gsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0kscUJBQXFCO1FBQzFCLHdEQUF3RDtRQUN4RCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEdBQUcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERheSBtb2RlbC5cbiAqIFRha2VzIGNhcmUgb2Yga2VlcGluZyByZWNvcmRzIG9mIGZ1bGwgZGF5cywgd2l0aG91dCB0aGUgdGltZXMgJiB0aW1lem9uZSBpc3N1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXlNb2RlbCB7XG4gIC8qKiBZZWFyLiAqL1xuICBwcml2YXRlIHllYXIhOiBudW1iZXI7XG5cbiAgLyoqIE1vbnRoLCB6ZXJvLWluZGV4ZWQuICovXG4gIHByaXZhdGUgbW9udGghOiBudW1iZXI7XG5cbiAgLyoqIERhdGUgb2YgdGhlIG1vbnRoLiAqL1xuICBwcml2YXRlIGRhdGUhOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZGF5IG1vZGVsLlxuICAgKiBAcGFyYW0geWVhciAtIFRoZSBmdWxsIHllYXIuXG4gICAqIEBwYXJhbSBtb250aCAtIFRoZSBtb250aCBhcyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDExIChKYW51YXJ5IHRvIERlY2VtYmVyKS5cbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSBhcyBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDMxLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF0ZTogbnVtYmVyKTtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZGF5IG1vZGVsLlxuICAgKiBAcGFyYW0gZGF0ZSAtIEphdmFzY3JpcHQgRGF0ZSBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZGF0ZTogRGF0ZSk7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGRheSBtb2RlbC5cbiAgICogQHBhcmFtIGRhdGUgLSBEYXRlIHN0cmluZyBpbiBgeXl5eS1tbS1kZGAgZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGU6IHN0cmluZyk7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvciguLi5hcmdzOiBBcnJheTxudW1iZXIgfCBEYXRlIHwgc3RyaW5nPikge1xuICAgIGlmIChhcmdzWzBdIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29uc3QgZGF0ZTogRGF0ZSA9IGFyZ3NbMF07XG4gICAgICB0aGlzLnllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB0aGlzLm1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgICAgdGhpcy5kYXRlID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGFyZ3NbMF0uc3BsaXQoJy0nKS5tYXAobiA9PiBwYXJzZUludChuLCAxMCkpO1xuICAgICAgdGhpcy55ZWFyID0geWVhcjtcbiAgICAgIHRoaXMubW9udGggPSBtb250aCAtIDE7XG4gICAgICB0aGlzLmRhdGUgPSBkYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMueWVhciA9IGFyZ3NbMF07XG4gICAgICB0aGlzLm1vbnRoID0gYXJnc1sxXSBhcyBudW1iZXI7XG4gICAgICB0aGlzLmRhdGUgPSBhcmdzWzJdIGFzIG51bWJlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgZXF1YWwgdG8gY3VycmVudCBkYXkgbW9kZWwuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIERheSBtb2RlbC5cbiAgICogQHJldHVybnMgV2V0aGVyIHZhbHVlIGlzIGVxdWFsIHRvIGN1cnJlbnQgZGF5IG1vZGVsLlxuICAgKi9cbiAgcHVibGljIGlzRXF1YWwodmFsdWU6IERheU1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyID09PSB2YWx1ZS55ZWFyICYmIHRoaXMubW9udGggPT09IHZhbHVlLm1vbnRoICYmIHRoaXMuZGF0ZSA9PT0gdmFsdWUuZGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluY3JlbWVudCBkYXkgbW9kZWwgd2l0aCBkYXRlIHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBJbmNyZW1lbnRhbCBkYXRlIHZhbHVlLlxuICAgKiBAcmV0dXJucyBVcGRhdGVkIGRheSBtb2RlbCB3aXRoIGluY3JlbWVudGVkIGRhdGUgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgaW5jcmVtZW50QnkodmFsdWU6IG51bWJlcik6IERheU1vZGVsIHtcbiAgICAvLyBDcmVhdGluZyBuZXcgSmF2YXNjcmlwdCBEYXRlIG9iamVjdCB0byBpbmNyZW1lbnQgYmVjYXVzZVxuICAgIC8vIGl0IHdpbGwgYXV0b21hdGljYWxseSB0YWtlIGNhcmUgb2Ygc3dpdGNoaW5nIHRvIG5leHQgb3IgcHJldmlvdXNcbiAgICAvLyBtb250aHMgJiB5ZWFycyB3aXRob3V0IHdlIGhhdmluZyB0byB3b3JyeSBhYm91dCBpdC5cbiAgICBjb25zdCBkYXRlOiBEYXRlID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRhdGUgKyB2YWx1ZSk7XG4gICAgdGhpcy55ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIHRoaXMubW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgdGhpcy5kYXRlID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGN1cnJlbnQgZGF5IG1vZGVsIGlzIGFmdGVyIHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBEYXkgbW9kZWwuXG4gICAqIEByZXR1cm5zIFdldGhlciBjdXJyZW50IGRheSBtb2RlbCBpcyBhZnRlciB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBpc0FmdGVyKHZhbHVlOiBEYXlNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpID4gdmFsdWUudG9EYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGN1cnJlbnQgZGF5IG1vZGVsIGlzIGJlZm9yZSB2YWx1ZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gRGF5IG1vZGVsLlxuICAgKiBAcmV0dXJucyBXZXRoZXIgY3VycmVudCBkYXkgbW9kZWwgaXMgYmVmb3JlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGlzQmVmb3JlKHZhbHVlOiBEYXlNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpIDwgdmFsdWUudG9EYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvbmVzIHRoZSBjdXJyZW50IGRheSBtb2RlbC5cbiAgICogQHJldHVybnMgQ2xvbmVkIGRheSBtb2RlbC5cbiAgICovXG4gIHB1YmxpYyBjbG9uZSgpOiBEYXlNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBEYXlNb2RlbCh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBKYXZhc2NyaXB0IERhdGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBKYXZhc2NyaXB0IERhdGUgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHRvRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIEhUTUw1IGRhdGUgc3BlYyBzdHJpbmcuXG4gICAqIFNlZSBodHRwczovL2NsYXJpdHkuZGVzaWduL2RvY3VtZW50YXRpb24vZGF0ZXBpY2tlclxuICAgKiBAcmV0dXJucyBEYXRlIGFzIEhUTUw1IHNwZWMgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIHRvSFRNTDVTcGVjRGF0ZVN0cmluZygpOiBzdHJpbmcge1xuICAgIC8vIFRoZSBjbGFyaXR5IGRhdGUgcGlja2VyIHVzZXMgdGhlIGZvcm1hdCAnWVlZWS1NTS1ERCcuXG4gICAgcmV0dXJuIGAke3RoaXMueWVhcn0tJHt0aGlzLnBhZCh0aGlzLm1vbnRoICsgMSl9LSR7dGhpcy5wYWQodGhpcy5kYXRlKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmluZyBwYWRkaW5nIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSBudW0gLSBOdW1iZXIgdG8gcGFkLlxuICAgKiBAcmV0dXJucyBQYWRkZWQgc3RyaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBwYWQobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBudW0gPCAxMCA/IGAwJHtudW19YCA6IGAke251bX1gO1xuICB9XG59XG5cbi8qKlxuICogRGF5IG1vZGVsLlxuICogVGFrZXMgY2FyZSBvZiBrZWVwaW5nIHJlY29yZHMgb2YgZnVsbCBkYXlzLCB3aXRob3V0IHRoZSB0aW1lcyAmIHRpbWV6b25lIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IHR5cGUgTnVsbGFibGVEYXlNb2RlbCA9IERheU1vZGVsIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiJdfQ==
@@ -0,0 +1,66 @@
1
+ import { ClrAlignment, ClrAxis, ClrSide } from '@clr/angular';
2
+ /**
3
+ * Popover positions.
4
+ * https://github.com/vmware-clarity/ng-clarity/blob/f1a668086bf88bcf5ef1cd36b0d150e45e88def7/projects/angular/src/utils/popover/enums/positions.enum.ts
5
+ */
6
+ export class PopoverPositions {
7
+ }
8
+ PopoverPositions.options = [
9
+ 'bottom-left',
10
+ 'bottom-right',
11
+ 'left-bottom',
12
+ 'left-top',
13
+ 'right-bottom',
14
+ 'right-top',
15
+ 'top-left',
16
+ 'top-right',
17
+ ];
18
+ PopoverPositions['bottom-left'] = {
19
+ axis: ClrAxis.VERTICAL,
20
+ side: ClrSide.AFTER,
21
+ anchor: ClrAlignment.START,
22
+ content: ClrAlignment.START,
23
+ };
24
+ PopoverPositions['bottom-right'] = {
25
+ axis: ClrAxis.VERTICAL,
26
+ side: ClrSide.AFTER,
27
+ anchor: ClrAlignment.END,
28
+ content: ClrAlignment.END,
29
+ };
30
+ PopoverPositions['left-bottom'] = {
31
+ axis: ClrAxis.HORIZONTAL,
32
+ side: ClrSide.BEFORE,
33
+ anchor: ClrAlignment.START,
34
+ content: ClrAlignment.START,
35
+ };
36
+ PopoverPositions['left-top'] = {
37
+ axis: ClrAxis.HORIZONTAL,
38
+ side: ClrSide.BEFORE,
39
+ anchor: ClrAlignment.CENTER,
40
+ content: ClrAlignment.END,
41
+ };
42
+ PopoverPositions['right-bottom'] = {
43
+ axis: ClrAxis.HORIZONTAL,
44
+ side: ClrSide.AFTER,
45
+ anchor: ClrAlignment.START,
46
+ content: ClrAlignment.START,
47
+ };
48
+ PopoverPositions['right-top'] = {
49
+ axis: ClrAxis.HORIZONTAL,
50
+ side: ClrSide.AFTER,
51
+ anchor: ClrAlignment.CENTER,
52
+ content: ClrAlignment.END,
53
+ };
54
+ PopoverPositions['top-left'] = {
55
+ axis: ClrAxis.VERTICAL,
56
+ side: ClrSide.BEFORE,
57
+ anchor: ClrAlignment.START,
58
+ content: ClrAlignment.START,
59
+ };
60
+ PopoverPositions['top-right'] = {
61
+ axis: ClrAxis.VERTICAL,
62
+ side: ClrSide.BEFORE,
63
+ anchor: ClrAlignment.END,
64
+ content: ClrAlignment.END,
65
+ };
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1wb3NpdGlvbnMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2xyLWFkZG9ucy9kYXRlcmFuZ2VwaWNrZXIvbW9kZWxzL3BvcG92ZXItcG9zaXRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFzQixPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjs7QUFDYix3QkFBTyxHQUFHO0lBQ3RCLGFBQWE7SUFDYixjQUFjO0lBQ2QsYUFBYTtJQUNiLFVBQVU7SUFDVixjQUFjO0lBQ2QsV0FBVztJQUNYLFVBQVU7SUFDVixXQUFXO0NBQ1osQ0FBQztBQUVZLCtCQUFhLEdBQXVCO0lBQ2hELElBQUksRUFBRSxPQUFPLENBQUMsUUFBUTtJQUN0QixJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUs7SUFDbkIsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLO0lBQzFCLE9BQU8sRUFBRSxZQUFZLENBQUMsS0FBSztDQUM1QixDQUFDO0FBRVksZ0NBQWMsR0FBdUI7SUFDakQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRO0lBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztJQUNuQixNQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUc7SUFDeEIsT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHO0NBQzFCLENBQUM7QUFFWSwrQkFBYSxHQUF1QjtJQUNoRCxJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0lBQ3BCLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSztJQUMxQixPQUFPLEVBQUUsWUFBWSxDQUFDLEtBQUs7Q0FDNUIsQ0FBQztBQUVZLDRCQUFVLEdBQXVCO0lBQzdDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtJQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDcEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO0lBQzNCLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRztDQUMxQixDQUFDO0FBRVksZ0NBQWMsR0FBdUI7SUFDakQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0lBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztJQUNuQixNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUs7SUFDMUIsT0FBTyxFQUFFLFlBQVksQ0FBQyxLQUFLO0NBQzVCLENBQUM7QUFFWSw2QkFBVyxHQUF1QjtJQUM5QyxJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7SUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLO0lBQ25CLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTTtJQUMzQixPQUFPLEVBQUUsWUFBWSxDQUFDLEdBQUc7Q0FDMUIsQ0FBQztBQUVZLDRCQUFVLEdBQXVCO0lBQzdDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUTtJQUN0QixJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDcEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLO0lBQzFCLE9BQU8sRUFBRSxZQUFZLENBQUMsS0FBSztDQUM1QixDQUFDO0FBRVksNkJBQVcsR0FBdUI7SUFDOUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRO0lBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTTtJQUNwQixNQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUc7SUFDeEIsT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHO0NBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbHJBbGlnbm1lbnQsIENsckF4aXMsIENsclBvcG92ZXJQb3NpdGlvbiwgQ2xyU2lkZSB9IGZyb20gJ0BjbHIvYW5ndWxhcic7XG5cbi8qKlxuICogUG9wb3ZlciBwb3NpdGlvbnMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdm13YXJlLWNsYXJpdHkvbmctY2xhcml0eS9ibG9iL2YxYTY2ODA4NmJmODhiY2Y1ZWYxY2QzNmIwZDE1MGU0NWU4OGRlZjcvcHJvamVjdHMvYW5ndWxhci9zcmMvdXRpbHMvcG9wb3Zlci9lbnVtcy9wb3NpdGlvbnMuZW51bS50c1xuICovXG5leHBvcnQgY2xhc3MgUG9wb3ZlclBvc2l0aW9ucyB7XG4gIHB1YmxpYyBzdGF0aWMgb3B0aW9ucyA9IFtcbiAgICAnYm90dG9tLWxlZnQnLFxuICAgICdib3R0b20tcmlnaHQnLFxuICAgICdsZWZ0LWJvdHRvbScsXG4gICAgJ2xlZnQtdG9wJyxcbiAgICAncmlnaHQtYm90dG9tJyxcbiAgICAncmlnaHQtdG9wJyxcbiAgICAndG9wLWxlZnQnLFxuICAgICd0b3AtcmlnaHQnLFxuICBdO1xuXG4gIHB1YmxpYyBzdGF0aWMgJ2JvdHRvbS1sZWZ0JzogQ2xyUG9wb3ZlclBvc2l0aW9uID0ge1xuICAgIGF4aXM6IENsckF4aXMuVkVSVElDQUwsXG4gICAgc2lkZTogQ2xyU2lkZS5BRlRFUixcbiAgICBhbmNob3I6IENsckFsaWdubWVudC5TVEFSVCxcbiAgICBjb250ZW50OiBDbHJBbGlnbm1lbnQuU1RBUlQsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyAnYm90dG9tLXJpZ2h0JzogQ2xyUG9wb3ZlclBvc2l0aW9uID0ge1xuICAgIGF4aXM6IENsckF4aXMuVkVSVElDQUwsXG4gICAgc2lkZTogQ2xyU2lkZS5BRlRFUixcbiAgICBhbmNob3I6IENsckFsaWdubWVudC5FTkQsXG4gICAgY29udGVudDogQ2xyQWxpZ25tZW50LkVORCxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljICdsZWZ0LWJvdHRvbSc6IENsclBvcG92ZXJQb3NpdGlvbiA9IHtcbiAgICBheGlzOiBDbHJBeGlzLkhPUklaT05UQUwsXG4gICAgc2lkZTogQ2xyU2lkZS5CRUZPUkUsXG4gICAgYW5jaG9yOiBDbHJBbGlnbm1lbnQuU1RBUlQsXG4gICAgY29udGVudDogQ2xyQWxpZ25tZW50LlNUQVJULFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgJ2xlZnQtdG9wJzogQ2xyUG9wb3ZlclBvc2l0aW9uID0ge1xuICAgIGF4aXM6IENsckF4aXMuSE9SSVpPTlRBTCxcbiAgICBzaWRlOiBDbHJTaWRlLkJFRk9SRSxcbiAgICBhbmNob3I6IENsckFsaWdubWVudC5DRU5URVIsXG4gICAgY29udGVudDogQ2xyQWxpZ25tZW50LkVORCxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljICdyaWdodC1ib3R0b20nOiBDbHJQb3BvdmVyUG9zaXRpb24gPSB7XG4gICAgYXhpczogQ2xyQXhpcy5IT1JJWk9OVEFMLFxuICAgIHNpZGU6IENsclNpZGUuQUZURVIsXG4gICAgYW5jaG9yOiBDbHJBbGlnbm1lbnQuU1RBUlQsXG4gICAgY29udGVudDogQ2xyQWxpZ25tZW50LlNUQVJULFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgJ3JpZ2h0LXRvcCc6IENsclBvcG92ZXJQb3NpdGlvbiA9IHtcbiAgICBheGlzOiBDbHJBeGlzLkhPUklaT05UQUwsXG4gICAgc2lkZTogQ2xyU2lkZS5BRlRFUixcbiAgICBhbmNob3I6IENsckFsaWdubWVudC5DRU5URVIsXG4gICAgY29udGVudDogQ2xyQWxpZ25tZW50LkVORCxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljICd0b3AtbGVmdCc6IENsclBvcG92ZXJQb3NpdGlvbiA9IHtcbiAgICBheGlzOiBDbHJBeGlzLlZFUlRJQ0FMLFxuICAgIHNpZGU6IENsclNpZGUuQkVGT1JFLFxuICAgIGFuY2hvcjogQ2xyQWxpZ25tZW50LlNUQVJULFxuICAgIGNvbnRlbnQ6IENsckFsaWdubWVudC5TVEFSVCxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljICd0b3AtcmlnaHQnOiBDbHJQb3BvdmVyUG9zaXRpb24gPSB7XG4gICAgYXhpczogQ2xyQXhpcy5WRVJUSUNBTCxcbiAgICBzaWRlOiBDbHJTaWRlLkJFRk9SRSxcbiAgICBhbmNob3I6IENsckFsaWdubWVudC5FTkQsXG4gICAgY29udGVudDogQ2xyQWxpZ25tZW50LkVORCxcbiAgfTtcbn1cblxuLyoqXG4gKiBQb3BvdmVyIHBvc2l0aW9uLlxuICovXG5leHBvcnQgdHlwZSBQb3BvdmVyUG9zaXRpb24gPSAodHlwZW9mIFBvcG92ZXJQb3NpdGlvbnMub3B0aW9ucylbbnVtYmVyXTtcbiJdfQ==
@@ -0,0 +1,62 @@
1
+ import { EventEmitter, Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Daterange control state service.
5
+ * Stores data for communication between daterange container and input.
6
+ */
7
+ export class DaterangeControlStateService {
8
+ constructor() {
9
+ /** Disabled control state. */
10
+ this.disabled = false;
11
+ /** Focused. */
12
+ this.focused = false;
13
+ /** List of validation errors. */
14
+ this.errors = null;
15
+ this._invalid = false;
16
+ this._touched = false;
17
+ /**
18
+ * Event triggered when status changes.
19
+ */
20
+ this.statusChange = new EventEmitter();
21
+ }
22
+ /**
23
+ * Control invalid status.
24
+ * @returns Control invalid status.
25
+ */
26
+ get invalid() {
27
+ return this._invalid;
28
+ }
29
+ /**
30
+ * Touched.
31
+ * @returns Touched.
32
+ */
33
+ get touched() {
34
+ return this._touched;
35
+ }
36
+ /**
37
+ * Update status.
38
+ * Only for valid & invalid status changes.
39
+ * And only if there was a real change.
40
+ * Also updates errors list.
41
+ * Emits `statusChange` event.
42
+ * @param control
43
+ */
44
+ updateStatus(control) {
45
+ this._touched = control.touched;
46
+ // We only care about valid & invalid status changes.
47
+ // There is an bug where `ClrDaterangepickerDirective.writeValue` is called twice with same value (`null`).
48
+ // Setting ` && (control.touched || control.dirty)` in next if-statement will hide the errors,
49
+ // but the control will still be invalid with errors (just hidden).
50
+ if (['VALID', 'INVALID'].includes(control.status)) {
51
+ this.errors = control.errors;
52
+ this._invalid = control.invalid;
53
+ this.statusChange.emit(this._invalid);
54
+ }
55
+ }
56
+ }
57
+ DaterangeControlStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeControlStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
58
+ DaterangeControlStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeControlStateService });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeControlStateService, decorators: [{
60
+ type: Injectable
61
+ }] });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLWNvbnRyb2wtc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGVyYW5nZXBpY2tlci9wcm92aWRlcnMvZGF0ZXJhbmdlLWNvbnRyb2wtc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHekQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLDRCQUE0QjtJQUR6QztRQUVFLDhCQUE4QjtRQUN2QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXhCLGVBQWU7UUFDUixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXZCLGlDQUFpQztRQUMxQixXQUFNLEdBQTRCLElBQUksQ0FBQztRQUV0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBU2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUErQnpCOztXQUVHO1FBQ0ksaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0tBQ25EO0lBM0NDOzs7T0FHRztJQUNILElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUdEOzs7T0FHRztJQUNILElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxZQUFZLENBQUMsT0FBd0I7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRWhDLHFEQUFxRDtRQUNyRCwyR0FBMkc7UUFDM0csOEZBQThGO1FBQzlGLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDOzt5SEFoRFUsNEJBQTRCOzZIQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIERhdGVyYW5nZSBjb250cm9sIHN0YXRlIHNlcnZpY2UuXG4gKiBTdG9yZXMgZGF0YSBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGRhdGVyYW5nZSBjb250YWluZXIgYW5kIGlucHV0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0ZXJhbmdlQ29udHJvbFN0YXRlU2VydmljZSB7XG4gIC8qKiBEaXNhYmxlZCBjb250cm9sIHN0YXRlLiAqL1xuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiogRm9jdXNlZC4gKi9cbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcblxuICAvKiogTGlzdCBvZiB2YWxpZGF0aW9uIGVycm9ycy4gKi9cbiAgcHVibGljIGVycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2ludmFsaWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIENvbnRyb2wgaW52YWxpZCBzdGF0dXMuXG4gICAqIEByZXR1cm5zIENvbnRyb2wgaW52YWxpZCBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ludmFsaWQ7XG4gIH1cblxuICBwcml2YXRlIF90b3VjaGVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUb3VjaGVkLlxuICAgKiBAcmV0dXJucyBUb3VjaGVkLlxuICAgKi9cbiAgcHVibGljIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl90b3VjaGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzdGF0dXMuXG4gICAqIE9ubHkgZm9yIHZhbGlkICYgaW52YWxpZCBzdGF0dXMgY2hhbmdlcy5cbiAgICogQW5kIG9ubHkgaWYgdGhlcmUgd2FzIGEgcmVhbCBjaGFuZ2UuXG4gICAqIEFsc28gdXBkYXRlcyBlcnJvcnMgbGlzdC5cbiAgICogRW1pdHMgYHN0YXR1c0NoYW5nZWAgZXZlbnQuXG4gICAqIEBwYXJhbSBjb250cm9sXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlU3RhdHVzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIHRoaXMuX3RvdWNoZWQgPSBjb250cm9sLnRvdWNoZWQ7XG5cbiAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdmFsaWQgJiBpbnZhbGlkIHN0YXR1cyBjaGFuZ2VzLlxuICAgIC8vIFRoZXJlIGlzIGFuIGJ1ZyB3aGVyZSBgQ2xyRGF0ZXJhbmdlcGlja2VyRGlyZWN0aXZlLndyaXRlVmFsdWVgIGlzIGNhbGxlZCB0d2ljZSB3aXRoIHNhbWUgdmFsdWUgKGBudWxsYCkuXG4gICAgLy8gU2V0dGluZyBgICYmIChjb250cm9sLnRvdWNoZWQgfHwgY29udHJvbC5kaXJ0eSlgIGluIG5leHQgaWYtc3RhdGVtZW50IHdpbGwgaGlkZSB0aGUgZXJyb3JzLFxuICAgIC8vIGJ1dCB0aGUgY29udHJvbCB3aWxsIHN0aWxsIGJlIGludmFsaWQgd2l0aCBlcnJvcnMgKGp1c3QgaGlkZGVuKS5cbiAgICBpZiAoWydWQUxJRCcsICdJTlZBTElEJ10uaW5jbHVkZXMoY29udHJvbC5zdGF0dXMpKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgICAgdGhpcy5faW52YWxpZCA9IGNvbnRyb2wuaW52YWxpZDtcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlLmVtaXQodGhpcy5faW52YWxpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IHRyaWdnZXJlZCB3aGVuIHN0YXR1cyBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXR1c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbn1cbiJdfQ==
@@ -0,0 +1,206 @@
1
+ import { FormatWidth, getLocaleDateFormat } from '@angular/common';
2
+ import { Inject, Injectable, LOCALE_ID } from '@angular/core';
3
+ import { BIG_ENDIAN, DELIMITER_REGEX, LITTLE_ENDIAN, LITTLE_ENDIAN_REGEX, MIDDLE_ENDIAN, MIDDLE_ENDIAN_REGEX, SEPARATOR_TEXT_DEFAULT, USER_INPUT_REGEX, } from '../daterange.constants';
4
+ import { DayModel } from '../models/day.model';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Daterange parsing service.
8
+ * Heavy inspired by `date-io.service.ts` from Clarity.
9
+ * https://github.com/vmware-clarity/ng-clarity/blob/a21fe726fe91ae3c929b8f016359afe354bb89c6/projects/angular/src/forms/datepicker/providers/date-io.service.ts
10
+ */
11
+ export class DaterangeParsingService {
12
+ constructor(locale) {
13
+ this.locale = locale;
14
+ this.localeDelimiter = [];
15
+ const localeFormat = getLocaleDateFormat(this.locale, FormatWidth.Short);
16
+ const format = localeFormat.toLocaleLowerCase();
17
+ if (LITTLE_ENDIAN_REGEX.test(format)) {
18
+ this.localeDisplayFormat = LITTLE_ENDIAN;
19
+ }
20
+ else if (MIDDLE_ENDIAN_REGEX.test(format)) {
21
+ this.localeDisplayFormat = MIDDLE_ENDIAN;
22
+ }
23
+ else {
24
+ this.localeDisplayFormat = BIG_ENDIAN;
25
+ }
26
+ // Splitting it by date, month and year, leaves us with the delimiters.
27
+ // E.g. `"dd/MM/y".split(/d+|m+|y+/i)` results in `["", "/", "/", ""]`.
28
+ const delimiters = localeFormat.split(DELIMITER_REGEX);
29
+ this.localeDelimiter = [delimiters[1], delimiters[2]];
30
+ }
31
+ /** Locale format. */
32
+ get localeFormat() {
33
+ return (this.localeDisplayFormat.format[0] +
34
+ this.localeDelimiter[0] +
35
+ this.localeDisplayFormat.format[1] +
36
+ this.localeDelimiter[1] +
37
+ this.localeDisplayFormat.format[2]);
38
+ }
39
+ /**
40
+ * Convert daterange to locale friendly text.
41
+ * @param daterange - Daterange.
42
+ * @param separator - Separator between 'from' and 'to' dates.
43
+ * @returns Friendly daterange text.
44
+ */
45
+ toLocaleString(daterange, separator = SEPARATOR_TEXT_DEFAULT) {
46
+ if (daterange == null) {
47
+ return '';
48
+ }
49
+ const { from, to } = daterange;
50
+ if (from == null || to == null) {
51
+ return '';
52
+ }
53
+ const fromDate = from.toDate();
54
+ const toDate = to.toDate();
55
+ const fromDateStr = this.toLocaleDisplayFormatString(fromDate);
56
+ const toDateStr = this.toLocaleDisplayFormatString(toDate);
57
+ return fromDateStr + separator + toDateStr;
58
+ }
59
+ /**
60
+ * Convert date to locale display format string.
61
+ * @param date - Javascript Date object.
62
+ * @returns Locale display format string.
63
+ */
64
+ toLocaleDisplayFormatString(date) {
65
+ const dateNo = date.getDate();
66
+ const monthNo = date.getMonth() + 1;
67
+ const yearNo = date.getFullYear();
68
+ const dateStr = this.pad(dateNo);
69
+ const monthStr = this.pad(monthNo);
70
+ const delim1 = this.localeDelimiter[0];
71
+ const delim2 = this.localeDelimiter[1];
72
+ if (this.localeDisplayFormat === LITTLE_ENDIAN) {
73
+ return dateStr + delim1 + monthStr + delim2 + yearNo;
74
+ }
75
+ else if (this.localeDisplayFormat === MIDDLE_ENDIAN) {
76
+ return monthStr + delim1 + dateStr + delim2 + yearNo;
77
+ }
78
+ else {
79
+ return yearNo + delim1 + monthStr + delim2 + dateStr;
80
+ }
81
+ }
82
+ /**
83
+ * String padding with zeros.
84
+ * @param num - Number to pad.
85
+ * @returns Padded string.
86
+ */
87
+ pad(num) {
88
+ return num < 10 ? `0${num}` : `${num}`;
89
+ }
90
+ /**
91
+ * Parse daterange string to daterange object.
92
+ * @param daterangeString - Daterange string.
93
+ * @param separator - Separator text.
94
+ * @returns Daterange object.
95
+ */
96
+ parse(daterangeString, separator = SEPARATOR_TEXT_DEFAULT) {
97
+ if (daterangeString == null || daterangeString === '') {
98
+ return null;
99
+ }
100
+ const [fromString, toString] = daterangeString.split(separator);
101
+ const from = this.getDayModelFromDateString(fromString);
102
+ const to = this.getDayModelFromDateString(toString);
103
+ if (from == null && to == null) {
104
+ return null;
105
+ }
106
+ return { from, to };
107
+ }
108
+ /**
109
+ * Get `DayModel` from date string.
110
+ * @param dateString - Date string.
111
+ * @returns DayModel.
112
+ */
113
+ getDayModelFromDateString(dateString) {
114
+ if (dateString == null || dateString === '') {
115
+ return null;
116
+ }
117
+ const dateParts = dateString.match(USER_INPUT_REGEX);
118
+ if (dateParts == null || dateParts.length !== 3) {
119
+ return null;
120
+ }
121
+ const [firstPart, secondPart, thirdPart] = dateParts;
122
+ if (this.localeDisplayFormat === LITTLE_ENDIAN) {
123
+ // secondPart is month && firstPart is date.
124
+ return this.getDayModelFromDateParts(thirdPart, secondPart, firstPart);
125
+ }
126
+ else if (this.localeDisplayFormat === MIDDLE_ENDIAN) {
127
+ // firstPart is month && secondPart is date.
128
+ return this.getDayModelFromDateParts(thirdPart, firstPart, secondPart);
129
+ }
130
+ else {
131
+ // secondPart is month && thirdPart is date.
132
+ return this.getDayModelFromDateParts(firstPart, secondPart, thirdPart);
133
+ }
134
+ }
135
+ /**
136
+ * Get `DayModel` from date string parts.
137
+ * @param yearString - Year string.
138
+ * @param monthString - Month string.
139
+ * @param dateString - Date string.
140
+ * @returns DayModel.
141
+ */
142
+ getDayModelFromDateParts(yearString, monthString, dateString) {
143
+ // Check for valid date part strings.
144
+ let year = parseInt(yearString);
145
+ if (isNaN(year)) {
146
+ return null;
147
+ }
148
+ let month = parseInt(monthString);
149
+ if (isNaN(month)) {
150
+ return null;
151
+ }
152
+ const date = parseInt(dateString);
153
+ if (isNaN(date)) {
154
+ return null;
155
+ }
156
+ // Convert year to 4 digit year.
157
+ year = this.parseToFourDigitYear(year);
158
+ if (year == null) {
159
+ return null;
160
+ }
161
+ // Month is zero-indexed.
162
+ month -= 1;
163
+ // Creating new Javascript Date object, because it will automatically take care of
164
+ // switching to next or previous months & years without we having to worry about it.
165
+ const parsedDate = new Date(year, month, date);
166
+ if (isNaN(parsedDate.getTime())) {
167
+ return null;
168
+ }
169
+ return new DayModel(parsedDate);
170
+ }
171
+ /**
172
+ * Takes in a year and if it is a 2 digit year, returns the corresponding 4 digit year.
173
+ * Window of 80 years before and 20 years after the present year.
174
+ * Credit: https://github.com/globalizejs/globalize/blob/e1b31cd6a4f1cff75b185b68b7a32220aac5196f/src/date/parse.js
175
+ * @param year - Year.
176
+ * @returns Four-digit year.
177
+ */
178
+ parseToFourDigitYear(year) {
179
+ // Impossible years.
180
+ if (year > 9999 || (year > 100 && year < 999) || year < 10) {
181
+ return null;
182
+ }
183
+ if (year > 999) {
184
+ return year;
185
+ }
186
+ const currYear = new Date().getFullYear();
187
+ const century = Math.floor(currYear / 100) * 100;
188
+ let result = year + century;
189
+ if (result > currYear + 20) {
190
+ result = result - 100;
191
+ }
192
+ return result;
193
+ }
194
+ }
195
+ DaterangeParsingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeParsingService, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable });
196
+ DaterangeParsingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeParsingService, providedIn: 'root' });
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: DaterangeParsingService, decorators: [{
198
+ type: Injectable,
199
+ args: [{
200
+ providedIn: 'root',
201
+ }]
202
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
203
+ type: Inject,
204
+ args: [LOCALE_ID]
205
+ }] }]; } });
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlLXBhcnNpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jbHItYWRkb25zL2RhdGVyYW5nZXBpY2tlci9wcm92aWRlcnMvZGF0ZXJhbmdlLXBhcnNpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFDTCxVQUFVLEVBQ1YsZUFBZSxFQUVmLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEdBQ2pCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLFFBQVEsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFakU7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyx1QkFBdUI7SUFlbEMsWUFBdUQsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFickQsb0JBQWUsR0FBa0IsRUFBRSxDQUFDO1FBY2xELE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUFXLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXhELElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUM7U0FDMUM7YUFBTSxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDO1NBQzFDO2FBQU07WUFDTCxJ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QyxDQUFDO1FBQy9DLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxvQkFBb0IsQ0FBQyxJQUFZO1FBQ3ZDLG9CQUFvQjtRQUNwQixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO1lBQzFELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxRQUFRLEdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDekQsSUFBSSxNQUFNLEdBQVcsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQyxJQUFJLE1BQU0sR0FBRyxRQUFRLEdBQUcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7b0hBL01VLHVCQUF1QixrQkFlUCxTQUFTO3dIQWZ6Qix1QkFBdUIsY0FGdEIsTUFBTTsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFnQnFCLE1BQU07MkJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1hdFdpZHRoLCBnZXRMb2NhbGVEYXRlRm9ybWF0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgTE9DQUxFX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEJJR19FTkRJQU4sXG4gIERFTElNSVRFUl9SRUdFWCxcbiAgSW5wdXREYXRlRGlzcGxheUZvcm1hdCxcbiAgTElUVExFX0VORElBTixcbiAgTElUVExFX0VORElBTl9SRUdFWCxcbiAgTUlERExFX0VORElBTixcbiAgTUlERExFX0VORElBTl9SRUdFWCxcbiAgU0VQQVJBVE9SX1RFWFRfREVGQVVMVCxcbiAgVVNFUl9JTlBVVF9SRUdFWCxcbn0gZnJvbSAnLi4vZGF0ZXJhbmdlLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBOdWxsYWJsZURhdGVyYW5nZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGF0ZXJhbmdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXlNb2RlbCwgTnVsbGFibGVEYXlNb2RlbCB9IGZyb20gJy4uL21vZGVscy9kYXkubW9kZWwnO1xuXG4vKipcbiAqIERhdGVyYW5nZSBwYXJzaW5nIHNlcnZpY2UuXG4gKiBIZWF2eSBpbnNwaXJlZCBieSBgZGF0ZS1pby5zZXJ2aWNlLnRzYCBmcm9tIENsYXJpdHkuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdm13YXJlLWNsYXJpdHkvbmctY2xhcml0eS9ibG9iL2EyMWZlNzI2ZmU5MWFlM2M5MjliOGYwMTYzNTlhZmUzNTRiYjg5YzYvcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvZGF0ZXBpY2tlci9wcm92aWRlcnMvZGF0ZS1pby5zZXJ2aWNlLnRzXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcmFuZ2VQYXJzaW5nU2VydmljZSB7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhbGVEaXNwbGF5Rm9ybWF0OiBJbnB1dERhdGVEaXNwbGF5Rm9ybWF0O1xuICBwdWJsaWMgcmVhZG9ubHkgbG9jYWxlRGVsaW1pdGVyOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgLyoqIExvY2FsZSBmb3JtYXQuICovXG4gIHB1YmxpYyBnZXQgbG9jYWxlRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXRbMF0gK1xuICAgICAgdGhpcy5sb2NhbGVEZWxpbWl0ZXJbMF0gK1xuICAgICAgdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdFsxXSArXG4gICAgICB0aGlzLmxvY2FsZURlbGltaXRlclsxXSArXG4gICAgICB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQuZm9ybWF0WzJdXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSByZWFkb25seSBsb2NhbGU6IHN0cmluZykge1xuICAgIGNvbnN0IGxvY2FsZUZvcm1hdCA9IGdldExvY2FsZURhdGVGb3JtYXQodGhpcy5sb2NhbGUsIEZvcm1hdFdpZHRoLlNob3J0KTtcbiAgICBjb25zdCBmb3JtYXQ6IHN0cmluZyA9IGxvY2FsZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKExJVFRMRV9FTkRJQU5fUkVHRVgudGVzdChmb3JtYXQpKSB7XG4gICAgICB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPSBMSVRUTEVfRU5ESUFOO1xuICAgIH0gZWxzZSBpZiAoTUlERExFX0VORElBTl9SRUdFWC50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdCA9IE1JRERMRV9FTkRJQU47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdCA9IEJJR19FTkRJQU47XG4gICAgfVxuXG4gICAgLy8gU3BsaXR0aW5nIGl0IGJ5IGRhdGUsIG1vbnRoIGFuZCB5ZWFyLCBsZWF2ZXMgdXMgd2l0aCB0aGUgZGVsaW1pdGVycy5cbiAgICAvLyBFLmcuIGBcImRkL01NL3lcIi5zcGxpdCgvZCt8bSt8eSsvaSlgIHJlc3VsdHMgaW4gYFtcIlwiLCBcIi9cIiwgXCIvXCIsIFwiXCJdYC5cbiAgICBjb25zdCBkZWxpbWl0ZXJzOiBBcnJheTxzdHJpbmc+ID0gbG9jYWxlRm9ybWF0LnNwbGl0KERFTElNSVRFUl9SRUdFWCk7XG4gICAgdGhpcy5sb2NhbGVEZWxpbWl0ZXIgPSBbZGVsaW1pdGVyc1sxXSwgZGVsaW1pdGVyc1syXV07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBkYXRlcmFuZ2UgdG8gbG9jYWxlIGZyaWVuZGx5IHRleHQuXG4gICAqIEBwYXJhbSBkYXRlcmFuZ2UgLSBEYXRlcmFuZ2UuXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgLSBTZXBhcmF0b3IgYmV0d2VlbiAnZnJvbScgYW5kICd0bycgZGF0ZXMuXG4gICAqIEByZXR1cm5zIEZyaWVuZGx5IGRhdGVyYW5nZSB0ZXh0LlxuICAgKi9cbiAgcHVibGljIHRvTG9jYWxlU3RyaW5nKGRhdGVyYW5nZTogTnVsbGFibGVEYXRlcmFuZ2UsIHNlcGFyYXRvcjogc3RyaW5nID0gU0VQQVJBVE9SX1RFWFRfREVGQVVMVCk6IHN0cmluZyB7XG4gICAgaWYgKGRhdGVyYW5nZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgeyBmcm9tLCB0byB9ID0gZGF0ZXJhbmdlO1xuICAgIGlmIChmcm9tID09IG51bGwgfHwgdG8gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGZyb21EYXRlID0gZnJvbS50b0RhdGUoKTtcbiAgICBjb25zdCB0b0RhdGUgPSB0by50b0RhdGUoKTtcblxuICAgIGNvbnN0IGZyb21EYXRlU3RyID0gdGhpcy50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoZnJvbURhdGUpO1xuICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRoaXMudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKHRvRGF0ZSk7XG5cbiAgICByZXR1cm4gZnJvbURhdGVTdHIgKyBzZXBhcmF0b3IgKyB0b0RhdGVTdHI7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBkYXRlIHRvIGxvY2FsZSBkaXNwbGF5IGZvcm1hdCBzdHJpbmcuXG4gICAqIEBwYXJhbSBkYXRlIC0gSmF2YXNjcmlwdCBEYXRlIG9iamVjdC5cbiAgICogQHJldHVybnMgTG9jYWxlIGRpc3BsYXkgZm9ybWF0IHN0cmluZy5cbiAgICovXG4gIHByaXZhdGUgdG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVObzogbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGhObzogbnVtYmVyID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICBjb25zdCB5ZWFyTm86IG51bWJlciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgIGNvbnN0IGRhdGVTdHI6IHN0cmluZyA9IHRoaXMucGFkKGRhdGVObyk7XG4gICAgY29uc3QgbW9udGhTdHI6IHN0cmluZyA9IHRoaXMucGFkKG1vbnRoTm8pO1xuXG4gICAgY29uc3QgZGVsaW0xID0gdGhpcy5sb2NhbGVEZWxpbWl0ZXJbMF07XG4gICAgY29uc3QgZGVsaW0yID0gdGhpcy5sb2NhbGVEZWxpbWl0ZXJbMV07XG5cbiAgICBpZiAodGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0ID09PSBMSVRUTEVfRU5ESUFOKSB7XG4gICAgICByZXR1cm4gZGF0ZVN0ciArIGRlbGltMSArIG1vbnRoU3RyICsgZGVsaW0yICsgeWVhck5vO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0ID09PSBNSURETEVfRU5ESUFOKSB7XG4gICAgICByZXR1cm4gbW9udGhTdHIgKyBkZWxpbTEgKyBkYXRlU3RyICsgZGVsaW0yICsgeWVhck5vO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geWVhck5vICsgZGVsaW0xICsgbW9udGhTdHIgKyBkZWxpbTIgKyBkYXRlU3RyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJpbmcgcGFkZGluZyB3aXRoIHplcm9zLlxuICAgKiBAcGFyYW0gbnVtIC0gTnVtYmVyIHRvIHBhZC5cbiAgICogQHJldHVybnMgUGFkZGVkIHN0cmluZy5cbiAgICovXG4gIHByaXZhdGUgcGFkKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVtIDwgMTAgPyBgMCR7bnVtfWAgOiBgJHtudW19YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBkYXRlcmFuZ2Ugc3RyaW5nIHRvIGRhdGVyYW5nZSBvYmplY3QuXG4gICAqIEBwYXJhbSBkYXRlcmFuZ2VTdHJpbmcgLSBEYXRlcmFuZ2Ugc3RyaW5nLlxuICAgKiBAcGFyYW0gc2VwYXJhdG9yIC0gU2VwYXJhdG9yIHRleHQuXG4gICAqIEByZXR1cm5zIERhdGVyYW5nZSBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgcGFyc2UoZGF0ZXJhbmdlU3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nID0gU0VQQVJBVE9SX1RFWFRfREVGQVVMVCk6IE51bGxhYmxlRGF0ZXJhbmdlIHtcbiAgICBpZiAoZGF0ZXJhbmdlU3RyaW5nID09IG51bGwgfHwgZGF0ZXJhbmdlU3RyaW5nID09PSAnJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgW2Zyb21TdHJpbmcsIHRvU3RyaW5nXSA9IGRhdGVyYW5nZVN0cmluZy5zcGxpdChzZXBhcmF0b3IpO1xuICAgIGNvbnN0IGZyb20gPSB0aGlzLmdldERheU1vZGVsRnJvbURhdGVTdHJpbmcoZnJvbVN0cmluZyk7XG4gICAgY29uc3QgdG8gPSB0aGlzLmdldERheU1vZGVsRnJvbURhdGVTdHJpbmcodG9TdHJpbmcpO1xuXG4gICAgaWYgKGZyb20gPT0gbnVsbCAmJiB0byA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBmcm9tLCB0byB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBgRGF5TW9kZWxgIGZyb20gZGF0ZSBzdHJpbmcuXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gRGF0ZSBzdHJpbmcuXG4gICAqIEByZXR1cm5zIERheU1vZGVsLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXREYXlNb2RlbEZyb21EYXRlU3RyaW5nKGRhdGVTdHJpbmc6IHN0cmluZyk6IE51bGxhYmxlRGF5TW9kZWwge1xuICAgIGlmIChkYXRlU3RyaW5nID09IG51bGwgfHwgZGF0ZVN0cmluZyA9PT0gJycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVQYXJ0czogUmVnRXhwTWF0Y2hBcnJheSA9IGRhdGVTdHJpbmcubWF0Y2goVVNFUl9JTlBVVF9SRUdFWCk7XG4gICAgaWYgKGRhdGVQYXJ0cyA9PSBudWxsIHx8IGRhdGVQYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdFBhcnQsIHNlY29uZFBhcnQsIHRoaXJkUGFydF0gPSBkYXRlUGFydHM7XG4gICAgaWYgKHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdCA9PT0gTElUVExFX0VORElBTikge1xuICAgICAgLy8gc2Vjb25kUGFydCBpcyBtb250aCAmJiBmaXJzdFBhcnQgaXMgZGF0ZS5cbiAgICAgIHJldHVybiB0aGlzLmdldERheU1vZGVsRnJvbURhdGVQYXJ0cyh0aGlyZFBhcnQsIHNlY29uZFBhcnQsIGZpcnN0UGFydCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPT09IE1JRERMRV9FTkRJQU4pIHtcbiAgICAgIC8vIGZpcnN0UGFydCBpcyBtb250aCAmJiBzZWNvbmRQYXJ0IGlzIGRhdGUuXG4gICAgICByZXR1cm4gdGhpcy5nZXREYXlNb2RlbEZyb21EYXRlUGFydHModGhpcmRQYXJ0LCBmaXJzdFBhcnQsIHNlY29uZFBhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZWNvbmRQYXJ0IGlzIG1vbnRoICYmIHRoaXJkUGFydCBpcyBkYXRlLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF5TW9kZWxGcm9tRGF0ZVBhcnRzKGZpcnN0UGFydCwgc2Vjb25kUGFydCwgdGhpcmRQYXJ0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGBEYXlNb2RlbGAgZnJvbSBkYXRlIHN0cmluZyBwYXJ0cy5cbiAgICogQHBhcmFtIHllYXJTdHJpbmcgLSBZZWFyIHN0cmluZy5cbiAgICogQHBhcmFtIG1vbnRoU3RyaW5nIC0gTW9udGggc3RyaW5nLlxuICAgKiBAcGFyYW0gZGF0ZVN0cmluZyAtIERhdGUgc3RyaW5nLlxuICAgKiBAcmV0dXJucyBEYXlNb2RlbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0RGF5TW9kZWxGcm9tRGF0ZVBhcnRzKHllYXJTdHJpbmc6IHN0cmluZywgbW9udGhTdHJpbmc6IHN0cmluZywgZGF0ZVN0cmluZzogc3RyaW5nKTogTnVsbGFibGVEYXlNb2RlbCB7XG4gICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGRhdGUgcGFydCBzdHJpbmdzLlxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBwYXJzZUludCh5ZWFyU3RyaW5nKTtcbiAgICBpZiAoaXNOYU4oeWVhcikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgbW9udGg6IG51bWJlciA9IHBhcnNlSW50KG1vbnRoU3RyaW5nKTtcbiAgICBpZiAoaXNOYU4obW9udGgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZGF0ZTogbnVtYmVyID0gcGFyc2VJbnQoZGF0ZVN0cmluZyk7XG4gICAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHllYXIgdG8gNCBkaWdpdCB5ZWFyLlxuICAgIHllYXIgPSB0aGlzLnBhcnNlVG9Gb3VyRGlnaXRZZWFyKHllYXIpO1xuICAgIGlmICh5ZWFyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE1vbnRoIGlzIHplcm8taW5kZXhlZC5cbiAgICBtb250aCAtPSAxO1xuXG4gICAgLy8gQ3JlYXRpbmcgbmV3IEphdmFzY3JpcHQgRGF0ZSBvYmplY3QsIGJlY2F1c2UgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHRha2UgY2FyZSBvZlxuICAgIC8vIHN3aXRjaGluZyB0byBuZXh0IG9yIHByZXZpb3VzIG1vbnRocyAmIHllYXJzIHdpdGhvdXQgd2UgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGl0LlxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gICAgaWYgKGlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXlNb2RlbChwYXJzZWREYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBpbiBhIHllYXIgYW5kIGlmIGl0IGlzIGEgMiBkaWdpdCB5ZWFyLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIDQgZGlnaXQgeWVhci5cbiAgICogV2luZG93IG9mIDgwIHllYXJzIGJlZm9yZSBhbmQgMjAgeWVhcnMgYWZ0ZXIgdGhlIHByZXNlbnQgeWVhci5cbiAgICogQ3JlZGl0OiBodHRwczovL2dpdGh1Yi5jb20vZ2xvYmFsaXplanMvZ2xvYmFsaXplL2Jsb2IvZTFiMzFjZDZhNGYxY2ZmNzViMTg1YjY4YjdhMzIyMjBhYWM1MTk2Zi9zcmMvZGF0ZS9wYXJzZS5qc1xuICAgKiBAcGFyYW0geWVhciAtIFllYXIuXG4gICAqIEByZXR1cm5zIEZvdXItZGlnaXQgeWVhci5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VUb0ZvdXJEaWdpdFllYXIoeWVhcjogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgLy8gSW1wb3NzaWJsZSB5ZWFycy5cbiAgICBpZiAoeWVhciA+IDk5OTkgfHwgKHllYXIgPiAxMDAgJiYgeWVhciA8IDk5OSkgfHwgeWVhciA8IDEwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoeWVhciA+IDk5OSkge1xuICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgY29uc3QgY3VyclllYXI6IG51bWJlciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBjZW50dXJ5OiBudW1iZXIgPSBNYXRoLmZsb29yKGN1cnJZZWFyIC8gMTAwKSAqIDEwMDtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSB5ZWFyICsgY2VudHVyeTtcbiAgICBpZiAocmVzdWx0ID4gY3VyclllYXIgKyAyMCkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IC0gMTAwO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=