@anglr/datetime 5.0.0-beta.20221018103539 → 5.0.0-beta.20221018111751

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 (18) hide show
  1. package/es2015/src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.js +42 -7
  2. package/es2015/src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.js.map +1 -1
  3. package/es2015/src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.js +2 -1
  4. package/es2015/src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.js.map +1 -1
  5. package/es2015/src/services/dateValueProvider/dateValueProvider.service.js +2 -1
  6. package/es2015/src/services/dateValueProvider/dateValueProvider.service.js.map +1 -1
  7. package/es2020/src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.js +42 -7
  8. package/es2020/src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.js.map +1 -1
  9. package/es2020/src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.js +2 -1
  10. package/es2020/src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.js.map +1 -1
  11. package/es2020/src/services/dateValueProvider/dateValueProvider.service.js +2 -1
  12. package/es2020/src/services/dateValueProvider/dateValueProvider.service.js.map +1 -1
  13. package/package.json +1 -1
  14. package/src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.d.ts +8 -2
  15. package/src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.d.ts.map +1 -1
  16. package/src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.d.ts.map +1 -1
  17. package/src/services/dateValueProvider/dateValueProvider.service.d.ts.map +1 -1
  18. package/version.bak +1 -1
@@ -1,19 +1,22 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Directive, ElementRef, EventEmitter, forwardRef, Inject } from '@angular/core';
3
- import { BindThis } from '@jscrpt/common';
3
+ import { BindThis, isBlank } from '@jscrpt/common';
4
4
  import { DATE_API, DATE_TIME_INPUT, FORMAT_PROVIDER } from '../../../../misc/tokens';
5
5
  import { formatDateTime, parseDateTime } from '../../../../misc/utils';
6
+ import { DateValueProvider } from '../../../../services';
6
7
  import { DateTimeBase } from '../dateTimeBase';
7
8
  import * as i0 from "@angular/core";
9
+ import * as i1 from "../../../../services";
8
10
  //TODO: range is unimplemented
9
11
  /**
10
12
  * Directive that is used for setting up date time input
11
13
  */
12
14
  export class DateTimeInputDirective extends DateTimeBase {
13
15
  //######################### constructors #########################
14
- constructor(element, dateApi, formatProvider) {
16
+ constructor(element, dateApi, formatProvider, valueProvider) {
15
17
  super(dateApi, formatProvider);
16
18
  this.element = element;
19
+ this.valueProvider = valueProvider;
17
20
  /**
18
21
  * @inheritdoc
19
22
  */
@@ -44,9 +47,9 @@ export class DateTimeInputDirective extends DateTimeBase {
44
47
  }
45
48
  set value(value) {
46
49
  var _a;
47
- this.ɵValue = value;
48
50
  //accepts all available formats
49
- this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);
51
+ this.setInternalValue(value);
52
+ this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);
50
53
  //not range value
51
54
  if (!Array.isArray(this.internalValue)) {
52
55
  this.rawValue = (_a = this.internalValue) === null || _a === void 0 ? void 0 : _a.format(this.customFormat);
@@ -74,6 +77,38 @@ export class DateTimeInputDirective extends DateTimeBase {
74
77
  this.element.nativeElement.removeEventListener('blur', this.handleBlur);
75
78
  }
76
79
  //######################### protected methods #########################
80
+ /**
81
+ * Sets internal value and fix lowest time difference
82
+ * @param value - Value to be set
83
+ */
84
+ setInternalValue(value) {
85
+ this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);
86
+ if (isBlank(this.internalValue)) {
87
+ return;
88
+ }
89
+ //ranged value
90
+ if (Array.isArray(this.internalValue)) {
91
+ const [from, to] = this.internalValue;
92
+ if (from) {
93
+ const val = this.valueProvider.getValue(from.value, this.customFormat).from;
94
+ if (val) {
95
+ this.internalValue[0] = this.dateApi.getValue(val, this.customFormat);
96
+ }
97
+ }
98
+ if (to) {
99
+ const val = this.valueProvider.getValue(to.value, this.customFormat).to;
100
+ if (val) {
101
+ this.internalValue[1] = this.dateApi.getValue(val, this.customFormat);
102
+ }
103
+ }
104
+ }
105
+ else {
106
+ const val = this.valueProvider.getValue(this.internalValue.value, this.customFormat).from;
107
+ if (val) {
108
+ this.internalValue = this.dateApi.getValue(val, this.customFormat);
109
+ }
110
+ }
111
+ }
77
112
  /**
78
113
  * Handles input event on input
79
114
  */
@@ -84,7 +119,7 @@ export class DateTimeInputDirective extends DateTimeBase {
84
119
  this.valueChange.next();
85
120
  return;
86
121
  }
87
- this.internalValue = parseDateTime(this.rawValue, this.dateApi, this.valueFormat, this.customFormat);
122
+ this.setInternalValue(this.rawValue);
88
123
  this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);
89
124
  this.valueChange.next();
90
125
  }
@@ -103,7 +138,7 @@ export class DateTimeInputDirective extends DateTimeBase {
103
138
  this.blur.emit(event);
104
139
  }
105
140
  }
106
- DateTimeInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: DateTimeInputDirective, deps: [{ token: i0.ElementRef }, { token: DATE_API }, { token: FORMAT_PROVIDER }], target: i0.ɵɵFactoryTarget.Directive });
141
+ DateTimeInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: DateTimeInputDirective, deps: [{ token: i0.ElementRef }, { token: DATE_API }, { token: FORMAT_PROVIDER }, { token: i1.DateValueProvider }], target: i0.ɵɵFactoryTarget.Directive });
107
142
  DateTimeInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.6", type: DateTimeInputDirective, selector: "input[dateTime][dateTimeInput]", providers: [
108
143
  {
109
144
  provide: DATE_TIME_INPUT,
@@ -146,5 +181,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImpor
146
181
  }] }, { type: undefined, decorators: [{
147
182
  type: Inject,
148
183
  args: [FORMAT_PROVIDER]
149
- }] }]; }, propDecorators: { handleInput: [], handleFocus: [], handleBlur: [] } });
184
+ }] }, { type: i1.DateValueProvider }]; }, propDecorators: { handleInput: [], handleFocus: [], handleBlur: [] } });
150
185
  //# sourceMappingURL=dateTimeInput.directive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dateTimeInput.directive.js","sourceRoot":"","sources":["../../../../../../src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {Directive, ElementRef, EventEmitter, ExistingProvider, forwardRef, Inject, OnDestroy} from '@angular/core';\nimport {BindThis} from '@jscrpt/common';\n\nimport {DateTimeInput, FormatProvider} from '../../../../interfaces';\nimport {DATE_API, DATE_TIME_INPUT, FORMAT_PROVIDER} from '../../../../misc/tokens';\nimport {DateTimeInputOutputValue, DateTimeObjectValue} from '../../../../misc/types';\nimport {formatDateTime, parseDateTime} from '../../../../misc/utils';\nimport {DateApi} from '../../../../services';\nimport {DateTimeBase} from '../dateTimeBase';\n\n//TODO: range is unimplemented\n\n/**\n * Directive that is used for setting up date time input\n */\n@Directive(\n{\n selector: 'input[dateTime][dateTimeInput]',\n providers:\n [\n <ExistingProvider>\n {\n provide: DATE_TIME_INPUT,\n useExisting: forwardRef(() => DateTimeInputDirective),\n },\n ],\n exportAs: 'dateTime',\n})\nexport class DateTimeInputDirective<TDate = unknown> extends DateTimeBase<TDate> implements DateTimeInput, OnDestroy\n{\n //######################### protected properties #########################\n\n /**\n * Internal representation of current date time value\n */\n protected internalValue: DateTimeObjectValue<TDate>|undefined|null;\n\n //######################### public properties - implementation of DateTimeInput #########################\n\n /**\n * @inheritdoc\n */\n public get rawValue(): string|undefined|null\n {\n return this.element.nativeElement.value;\n }\n public set rawValue(value: string|undefined|null)\n {\n this.element.nativeElement.value = value ?? '';\n }\n\n /**\n * @inheritdoc\n */\n public override get value(): DateTimeInputOutputValue<TDate>|undefined|null\n {\n return this.ɵValue;\n }\n public override set value(value: DateTimeInputOutputValue<TDate>|undefined|null)\n {\n this.ɵValue = value;\n\n //accepts all available formats\n this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);\n \n //not range value\n if(!Array.isArray(this.internalValue))\n {\n this.rawValue = this.internalValue?.format(this.customFormat);\n }\n else\n {\n //TODO: add support for ranges\n }\n }\n\n /**\n * @inheritdoc\n */\n public get disabled(): boolean\n {\n return this.element.nativeElement.disabled;\n }\n public set disabled(value: boolean)\n {\n this.element.nativeElement.disabled = value;\n }\n\n /**\n * @inheritdoc\n */\n public focus: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n /**\n * @inheritdoc\n */\n public blur: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n //######################### constructors #########################\n constructor(protected element: ElementRef<HTMLInputElement>,\n @Inject(DATE_API) dateApi: DateApi<TDate>,\n @Inject(FORMAT_PROVIDER) formatProvider: FormatProvider,)\n {\n super(dateApi, formatProvider);\n\n this.element.nativeElement.addEventListener('input', this.handleInput);\n this.element.nativeElement.addEventListener('focus', this.handleFocus);\n this.element.nativeElement.addEventListener('blur', this.handleBlur);\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.element.nativeElement.removeEventListener('input', this.handleInput);\n this.element.nativeElement.removeEventListener('focus', this.handleFocus);\n this.element.nativeElement.removeEventListener('blur', this.handleBlur);\n }\n\n //######################### protected methods #########################\n\n /**\n * Handles input event on input\n */\n @BindThis\n protected handleInput(): void\n {\n if(!this.rawValue)\n {\n this.internalValue = null;\n this.ɵValue = null;\n\n this.valueChange.next();\n\n return;\n }\n\n this.internalValue = parseDateTime(this.rawValue, this.dateApi, this.valueFormat, this.customFormat);\n this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);\n\n this.valueChange.next();\n }\n\n /**\n * Handles focus event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleFocus(event: FocusEvent): void\n {\n this.focus.emit(event);\n }\n\n /**\n * Handles blur event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleBlur(event: FocusEvent): void\n {\n this.blur.emit(event);\n }\n}"]}
1
+ {"version":3,"file":"dateTimeInput.directive.js","sourceRoot":"","sources":["../../../../../../src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAE,YAAY,EAAoB,UAAU,EAAE,MAAM,EAAY,MAAM,eAAe,CAAC;AACnH,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAC,cAAc,EAAE,aAAa,EAAC,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAU,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;;;AAE7C,8BAA8B;AAE9B;;GAEG;AAcH,MAAM,OAAO,sBAAwC,SAAQ,YAAmB;IAqE5E,kEAAkE;IAClE,YAAsB,OAAqC,EAC7B,OAAuB,EAChB,cAA8B,EAC7C,aAAuC;QAEzD,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QALb,YAAO,GAAP,OAAO,CAA8B;QAGrC,kBAAa,GAAb,aAAa,CAA0B;QAd7D;;WAEG;QACI,UAAK,GAA6B,IAAI,YAAY,EAAc,CAAC;QAExE;;WAEG;QACI,SAAI,GAA6B,IAAI,YAAY,EAAc,CAAC;QAUnE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,CAAC;IAvED,yGAAyG;IAEzG;;OAEG;IACH,IAAW,QAAQ;QAEf,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5C,CAAC;IACD,IAAW,QAAQ,CAAC,KAA4B;QAE5C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,IAAoB,KAAK;QAErB,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,IAAoB,KAAK,CAAC,KAAqD;;QAE3E,+BAA+B;QAC/B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtF,iBAAiB;QACjB,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EACrC;YACI,IAAI,CAAC,QAAQ,GAAG,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACjE;aAED;YACI,8BAA8B;SACjC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QAEf,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;IAC/C,CAAC;IACD,IAAW,QAAQ,CAAC,KAAc;QAE9B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;IAChD,CAAC;IAyBD,kGAAkG;IAElG;;OAEG;IACI,WAAW;QAEd,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5E,CAAC;IAED,uEAAuE;IAEvE;;;OAGG;IACO,gBAAgB,CAAC,KAAqD;QAE5E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEjF,IAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAC9B;YACI,OAAO;SACV;QAED,cAAc;QACd,IAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EACpC;YACI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAEtC,IAAG,IAAI,EACP;gBACI,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;gBAE5E,IAAG,GAAG,EACN;oBACI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;iBACzE;aACJ;YAED,IAAG,EAAE,EACL;gBACI,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gBAExE,IAAG,GAAG,EACN;oBACI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;iBACzE;aACJ;SACJ;aAED;YACI,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;YAE1F,IAAG,GAAG,EACN;gBACI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aACtE;SACJ;IACL,CAAC;IAED;;OAEG;IAEO,WAAW;QAEjB,IAAG,CAAC,IAAI,CAAC,QAAQ,EACjB;YACI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YAEnB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAExB,OAAO;SACV;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtF,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IAEO,WAAW,CAAC,KAAiB;QAEnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IAEO,UAAU,CAAC,KAAiB;QAElC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;;mHAzLQ,sBAAsB,4CAuEX,QAAQ,aACR,eAAe;uGAxE1B,sBAAsB,yDAT/B;QAEI;YACI,OAAO,EAAE,eAAe;YACxB,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;SACxD;KACJ;;IAuJA,QAAQ;;;;yDAiBR;;IAMA,QAAQ;;qCACoB,UAAU;;yDAGtC;;IAMA,QAAQ;;qCACmB,UAAU;;wDAGrC;2FAzLQ,sBAAsB;kBAblC,SAAS;mBACV;oBACI,QAAQ,EAAE,gCAAgC;oBAC1C,SAAS,EACT;wBAEI;4BACI,OAAO,EAAE,eAAe;4BACxB,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,uBAAuB,CAAC;yBACxD;qBACJ;oBACD,QAAQ,EAAE,UAAU;iBACvB;;0BAwEgB,MAAM;2BAAC,QAAQ;;0BACf,MAAM;2BAAC,eAAe;4EA6EzB,WAAW,MAuBX,WAAW,MAUX,UAAU","sourcesContent":["import {Directive, ElementRef, EventEmitter, ExistingProvider, forwardRef, Inject, OnDestroy} from '@angular/core';\nimport {BindThis, isBlank} from '@jscrpt/common';\n\nimport {DateTimeInput, FormatProvider} from '../../../../interfaces';\nimport {DATE_API, DATE_TIME_INPUT, FORMAT_PROVIDER} from '../../../../misc/tokens';\nimport {DateTimeInputOutputValue, DateTimeObjectValue} from '../../../../misc/types';\nimport {formatDateTime, parseDateTime} from '../../../../misc/utils';\nimport {DateApi, DateValueProvider} from '../../../../services';\nimport {DateTimeBase} from '../dateTimeBase';\n\n//TODO: range is unimplemented\n\n/**\n * Directive that is used for setting up date time input\n */\n@Directive(\n{\n selector: 'input[dateTime][dateTimeInput]',\n providers:\n [\n <ExistingProvider>\n {\n provide: DATE_TIME_INPUT,\n useExisting: forwardRef(() => DateTimeInputDirective),\n },\n ],\n exportAs: 'dateTime',\n})\nexport class DateTimeInputDirective<TDate = unknown> extends DateTimeBase<TDate> implements DateTimeInput, OnDestroy\n{\n //######################### protected properties #########################\n\n /**\n * Internal representation of current date time value\n */\n protected internalValue: DateTimeObjectValue<TDate>|undefined|null;\n\n //######################### public properties - implementation of DateTimeInput #########################\n\n /**\n * @inheritdoc\n */\n public get rawValue(): string|undefined|null\n {\n return this.element.nativeElement.value;\n }\n public set rawValue(value: string|undefined|null)\n {\n this.element.nativeElement.value = value ?? '';\n }\n\n /**\n * @inheritdoc\n */\n public override get value(): DateTimeInputOutputValue<TDate>|undefined|null\n {\n return this.ɵValue;\n }\n public override set value(value: DateTimeInputOutputValue<TDate>|undefined|null)\n {\n //accepts all available formats\n this.setInternalValue(value);\n this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);\n \n //not range value\n if(!Array.isArray(this.internalValue))\n {\n this.rawValue = this.internalValue?.format(this.customFormat);\n }\n else\n {\n //TODO: add support for ranges\n }\n }\n\n /**\n * @inheritdoc\n */\n public get disabled(): boolean\n {\n return this.element.nativeElement.disabled;\n }\n public set disabled(value: boolean)\n {\n this.element.nativeElement.disabled = value;\n }\n\n /**\n * @inheritdoc\n */\n public focus: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n /**\n * @inheritdoc\n */\n public blur: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n //######################### constructors #########################\n constructor(protected element: ElementRef<HTMLInputElement>,\n @Inject(DATE_API) dateApi: DateApi<TDate>,\n @Inject(FORMAT_PROVIDER) formatProvider: FormatProvider,\n protected valueProvider: DateValueProvider<TDate>,)\n {\n super(dateApi, formatProvider);\n\n this.element.nativeElement.addEventListener('input', this.handleInput);\n this.element.nativeElement.addEventListener('focus', this.handleFocus);\n this.element.nativeElement.addEventListener('blur', this.handleBlur);\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.element.nativeElement.removeEventListener('input', this.handleInput);\n this.element.nativeElement.removeEventListener('focus', this.handleFocus);\n this.element.nativeElement.removeEventListener('blur', this.handleBlur);\n }\n\n //######################### protected methods #########################\n\n /**\n * Sets internal value and fix lowest time difference\n * @param value - Value to be set\n */\n protected setInternalValue(value: DateTimeInputOutputValue<TDate>|undefined|null): void\n {\n this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);\n\n if(isBlank(this.internalValue))\n {\n return;\n }\n\n //ranged value\n if(Array.isArray(this.internalValue))\n {\n const [from, to] = this.internalValue;\n\n if(from)\n {\n const val = this.valueProvider.getValue(from.value, this.customFormat).from;\n\n if(val)\n {\n this.internalValue[0] = this.dateApi.getValue(val, this.customFormat);\n }\n }\n\n if(to)\n {\n const val = this.valueProvider.getValue(to.value, this.customFormat).to;\n\n if(val)\n {\n this.internalValue[1] = this.dateApi.getValue(val, this.customFormat);\n }\n }\n }\n else\n {\n const val = this.valueProvider.getValue(this.internalValue.value, this.customFormat).from;\n\n if(val)\n {\n this.internalValue = this.dateApi.getValue(val, this.customFormat);\n }\n }\n }\n\n /**\n * Handles input event on input\n */\n @BindThis\n protected handleInput(): void\n {\n if(!this.rawValue)\n {\n this.internalValue = null;\n this.ɵValue = null;\n\n this.valueChange.next();\n\n return;\n }\n\n this.setInternalValue(this.rawValue);\n this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);\n\n this.valueChange.next();\n }\n\n /**\n * Handles focus event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleFocus(event: FocusEvent): void\n {\n this.focus.emit(event);\n }\n\n /**\n * Handles blur event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleBlur(event: FocusEvent): void\n {\n this.blur.emit(event);\n }\n}"]}
@@ -25,7 +25,7 @@ export class DateTimeRelativeParser {
25
25
  */
26
26
  parse(value) {
27
27
  var _a;
28
- const regex = /([+-])\s*(\d+)\s*([hmdwMy])/;
28
+ const regex = /([+-])\s*(\d+)\s*([hHmdwMy])/;
29
29
  let matches = null;
30
30
  //relative date provided
31
31
  if (isString(value) && (matches = regex.exec(value))) {
@@ -40,6 +40,7 @@ export class DateTimeRelativeParser {
40
40
  operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();
41
41
  break;
42
42
  }
43
+ case 'H':
43
44
  case 'h':
44
45
  {
45
46
  operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();
@@ -1 +1 @@
1
- {"version":3,"file":"dateTimeRelativeParser.service.js","sourceRoot":"","sources":["../../../../src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AACnD,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;;AAG3C;;GAEG;AAEH,MAAM,OAAO,sBAAsB;IAS/B,iEAAiE;IACjE,YAAsB,SAAmB;QAAnB,cAAS,GAAT,SAAS,CAAU;IAEzC,CAAC;IAED,oEAAoE;IAEpE;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,KAAsB;;QAE/B,MAAM,KAAK,GAAG,6BAA6B,CAAC;QAC5C,IAAI,OAAO,GAA2B,IAAI,CAAC;QAE3C,wBAAwB;QACxB,IAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACnD;YACI,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,MAAA,IAAI,CAAC,QAAQ,mCAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAEhC,QAAO,MAAM,EACb;gBACI,KAAK,GAAG;oBACR;wBACI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;wBAExG,MAAM;qBACT;gBACD,KAAK,GAAG;oBACR;wBACI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;wBAEhG,MAAM;qBACT;gBACD,KAAK,GAAG;oBACR;wBACI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;wBAE5F,MAAM;qBACT;gBACD,KAAK,GAAG;oBACR;wBACI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;wBAE9F,MAAM;qBACT;gBACD,KAAK,GAAG;oBACR;wBACI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;wBAEhG,MAAM;qBACT;gBACD,KAAK,GAAG;oBACR;wBACI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;wBAE9F,MAAM;qBACT;aACJ;YAED,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;SACrB;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;;mHAtFQ,sBAAsB;uHAAtB,sBAAsB,cADV,MAAM;2FAClB,sBAAsB;kBADlC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC","sourcesContent":["import {Injectable, Injector} from '@angular/core';\nimport {isString} from '@jscrpt/common';\n\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi, DateApiObject, DateValue} from '../dateApi/dateApi.interface';\n\n/**\n * Service used for parsing relative date time strings\n */\n@Injectable({providedIn: 'root'})\nexport class DateTimeRelativeParser<TDate = any>\n{\n //######################### protected fields #########################\n \n /**\n * Date api for handling\n */\n protected _dateApi?: DateApi<TDate, DateApiObject>;\n\n //######################### constructor #########################\n constructor(protected _injector: Injector)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Tries to parse relative value and returns parsed TDate, otherwise returns input value\n * @param value - Value to be parsed\n * \n * @summary\n * m - for minutes\n * h - for hours\n * d - for days\n * w - for weeks\n * M - for months\n * y - for years\n */\n public parse(value: TDate|DateValue): TDate|DateValue\n {\n const regex = /([+-])\\s*(\\d+)\\s*([hmdwMy])/;\n let matches: RegExpExecArray | null = null;\n\n //relative date provided\n if(isString(value) && (matches = regex.exec(value)))\n {\n const operation = matches[1];\n const amount = matches[2];\n const period = matches[3];\n this._dateApi = this._dateApi ?? this._injector.get(DATE_API);\n const now = this._dateApi.now();\n\n switch(period)\n {\n case 'm':\n {\n operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();\n\n break;\n }\n case 'h':\n {\n operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();\n\n break;\n }\n case 'd':\n {\n operation == '+' ? now.addDays(+amount).endOfDay() : now.subtractDays(+amount).startOfDay();\n\n break;\n }\n case 'w':\n {\n operation == '+' ? now.addWeeks(+amount).endOfDay() : now.subtractWeeks(+amount).startOfDay();\n\n break;\n }\n case 'M':\n {\n operation == '+' ? now.addMonths(+amount).endOfDay() : now.subtractMonths(+amount).startOfDay();\n\n break;\n }\n case 'y':\n {\n operation == '+' ? now.addYears(+amount).endOfDay() : now.subtractYears(+amount).startOfDay();\n\n break;\n }\n }\n\n value = now.value;\n }\n\n return value;\n }\n}"]}
1
+ {"version":3,"file":"dateTimeRelativeParser.service.js","sourceRoot":"","sources":["../../../../src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable, Injector} from '@angular/core';\nimport {isString} from '@jscrpt/common';\n\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi, DateApiObject, DateValue} from '../dateApi/dateApi.interface';\n\n/**\n * Service used for parsing relative date time strings\n */\n@Injectable({providedIn: 'root'})\nexport class DateTimeRelativeParser<TDate = any>\n{\n //######################### protected fields #########################\n \n /**\n * Date api for handling\n */\n protected _dateApi?: DateApi<TDate, DateApiObject>;\n\n //######################### constructor #########################\n constructor(protected _injector: Injector)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Tries to parse relative value and returns parsed TDate, otherwise returns input value\n * @param value - Value to be parsed\n * \n * @summary\n * m - for minutes\n * h - for hours\n * d - for days\n * w - for weeks\n * M - for months\n * y - for years\n */\n public parse(value: TDate|DateValue): TDate|DateValue\n {\n const regex = /([+-])\\s*(\\d+)\\s*([hHmdwMy])/;\n let matches: RegExpExecArray | null = null;\n\n //relative date provided\n if(isString(value) && (matches = regex.exec(value)))\n {\n const operation = matches[1];\n const amount = matches[2];\n const period = matches[3];\n this._dateApi = this._dateApi ?? this._injector.get(DATE_API);\n const now = this._dateApi.now();\n\n switch(period)\n {\n case 'm':\n {\n operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();\n\n break;\n }\n case 'H':\n case 'h':\n {\n operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();\n\n break;\n }\n case 'd':\n {\n operation == '+' ? now.addDays(+amount).endOfDay() : now.subtractDays(+amount).startOfDay();\n\n break;\n }\n case 'w':\n {\n operation == '+' ? now.addWeeks(+amount).endOfDay() : now.subtractWeeks(+amount).startOfDay();\n\n break;\n }\n case 'M':\n {\n operation == '+' ? now.addMonths(+amount).endOfDay() : now.subtractMonths(+amount).startOfDay();\n\n break;\n }\n case 'y':\n {\n operation == '+' ? now.addYears(+amount).endOfDay() : now.subtractYears(+amount).startOfDay();\n\n break;\n }\n }\n\n value = now.value;\n }\n\n return value;\n }\n}"]}
@@ -1,6 +1,7 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
2
  import { DATE_API } from '../../misc/tokens';
3
3
  import * as i0 from "@angular/core";
4
+ //TODO: change to unknown when legacy stuff is removed
4
5
  /**
5
6
  * Class used for obtaining DateTimeValue for various formats
6
7
  */
@@ -26,7 +27,7 @@ export class DateValueProvider {
26
27
  end = val.endOfMinute().value;
27
28
  }
28
29
  //hour
29
- else if (fullFormat.indexOf('H') >= 0) {
30
+ else if (fullFormat.indexOf('H') >= 0 || fullFormat.indexOf('h') >= 0) {
30
31
  start = val.startOfHour().value;
31
32
  end = val.endOfHour().value;
32
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dateValueProvider.service.js","sourceRoot":"","sources":["../../../../src/services/dateValueProvider/dateValueProvider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;;AAG3C;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAE1B,iEAAiE;IACjE,YAAwC,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAEhE,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,QAAQ,CAAC,KAAY,EAAE,MAAc;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,GAAU,KAAK,CAAC;QACzB,IAAI,GAAG,GAAU,KAAK,CAAC;QAEvB,QAAQ;QACR,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAC/B;YACI,KAAK,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;SACjC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,KAAK;aACA,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;SAC9B;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,OAAO;aACF,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC;YACjC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;SAChC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QAED,OAAO;YACH,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,GAAG;SACV,CAAC;IACN,CAAC;;8GA9DQ,iBAAiB,kBAGN,QAAQ;kHAHnB,iBAAiB,cADL,MAAM;2FAClB,iBAAiB;kBAD7B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAIf,MAAM;2BAAC,QAAQ","sourcesContent":["import {Inject, Injectable} from '@angular/core';\n\nimport {DateTimeValue} from '../../interfaces/dateTime/datetime.interface';\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi} from '../dateApi/dateApi.interface';\n\n/**\n * Class used for obtaining DateTimeValue for various formats\n */\n@Injectable({providedIn: 'root'})\nexport class DateValueProvider<TDate = any>\n{\n //######################### constructor #########################\n constructor(@Inject(DATE_API) protected _dateApi: DateApi<TDate>)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Gets DateTimeValue from single value based on format\n * @param value - Current value to be converted to ranged value\n * @param format - Format that is requested to be displayed, it tells what range should be created\n */\n public getValue(value: TDate, format: string): DateTimeValue<TDate>\n {\n const val = this._dateApi.getValue(value, format);\n const fullFormat = this._dateApi.getFormat(format);\n let start: TDate = value;\n let end: TDate = value;\n\n //minute\n if(fullFormat.indexOf('m') >= 0)\n {\n start = val.startOfMinute().value;\n end = val.endOfMinute().value;\n }\n //hour\n else if(fullFormat.indexOf('H') >= 0)\n {\n start = val.startOfHour().value;\n end = val.endOfHour().value;\n }\n //day\n else if(fullFormat.indexOf('d') >= 0)\n {\n start = val.startOfDay().value;\n end = val.endOfDay().value;\n }\n //week\n else if(fullFormat.indexOf('w') >= 0)\n {\n start = val.startOfWeek().value;\n end = val.endOfWeek().value;\n }\n //month\n else if(fullFormat.indexOf('M') >= 0)\n {\n start = val.startOfMonth().value;\n end = val.endOfMonth().value;\n }\n //year\n else if(fullFormat.indexOf('Y') >= 0 || fullFormat.indexOf('y') >= 0)\n {\n start = val.startOfYear().value;\n end = val.endOfYear().value;\n }\n\n return {\n from: start,\n to: end\n };\n }\n}"]}
1
+ {"version":3,"file":"dateValueProvider.service.js","sourceRoot":"","sources":["../../../../src/services/dateValueProvider/dateValueProvider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;;AAG3C,sDAAsD;AAEtD;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAE1B,iEAAiE;IACjE,YAAwC,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAEhE,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,QAAQ,CAAC,KAAY,EAAE,MAAc;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,GAAU,KAAK,CAAC;QACzB,IAAI,GAAG,GAAU,KAAK,CAAC;QAEvB,QAAQ;QACR,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAC/B;YACI,KAAK,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;SACjC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,KAAK;aACA,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;SAC9B;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,OAAO;aACF,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC;YACjC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;SAChC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QAED,OAAO;YACH,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,GAAG;SACV,CAAC;IACN,CAAC;;8GA9DQ,iBAAiB,kBAGN,QAAQ;kHAHnB,iBAAiB,cADL,MAAM;2FAClB,iBAAiB;kBAD7B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAIf,MAAM;2BAAC,QAAQ","sourcesContent":["import {Inject, Injectable} from '@angular/core';\n\nimport {DateTimeValue} from '../../interfaces/dateTime/datetime.interface';\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi} from '../dateApi/dateApi.interface';\n\n//TODO: change to unknown when legacy stuff is removed\n\n/**\n * Class used for obtaining DateTimeValue for various formats\n */\n@Injectable({providedIn: 'root'})\nexport class DateValueProvider<TDate = any>\n{\n //######################### constructor #########################\n constructor(@Inject(DATE_API) protected _dateApi: DateApi<TDate>)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Gets DateTimeValue from single value based on format\n * @param value - Current value to be converted to ranged value\n * @param format - Format that is requested to be displayed, it tells what range should be created\n */\n public getValue(value: TDate, format: string): DateTimeValue<TDate>\n {\n const val = this._dateApi.getValue(value, format);\n const fullFormat = this._dateApi.getFormat(format);\n let start: TDate = value;\n let end: TDate = value;\n\n //minute\n if(fullFormat.indexOf('m') >= 0)\n {\n start = val.startOfMinute().value;\n end = val.endOfMinute().value;\n }\n //hour\n else if(fullFormat.indexOf('H') >= 0 || fullFormat.indexOf('h') >= 0)\n {\n start = val.startOfHour().value;\n end = val.endOfHour().value;\n }\n //day\n else if(fullFormat.indexOf('d') >= 0)\n {\n start = val.startOfDay().value;\n end = val.endOfDay().value;\n }\n //week\n else if(fullFormat.indexOf('w') >= 0)\n {\n start = val.startOfWeek().value;\n end = val.endOfWeek().value;\n }\n //month\n else if(fullFormat.indexOf('M') >= 0)\n {\n start = val.startOfMonth().value;\n end = val.endOfMonth().value;\n }\n //year\n else if(fullFormat.indexOf('Y') >= 0 || fullFormat.indexOf('y') >= 0)\n {\n start = val.startOfYear().value;\n end = val.endOfYear().value;\n }\n\n return {\n from: start,\n to: end\n };\n }\n}"]}
@@ -1,19 +1,22 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Directive, ElementRef, EventEmitter, forwardRef, Inject } from '@angular/core';
3
- import { BindThis } from '@jscrpt/common';
3
+ import { BindThis, isBlank } from '@jscrpt/common';
4
4
  import { DATE_API, DATE_TIME_INPUT, FORMAT_PROVIDER } from '../../../../misc/tokens';
5
5
  import { formatDateTime, parseDateTime } from '../../../../misc/utils';
6
+ import { DateValueProvider } from '../../../../services';
6
7
  import { DateTimeBase } from '../dateTimeBase';
7
8
  import * as i0 from "@angular/core";
9
+ import * as i1 from "../../../../services";
8
10
  //TODO: range is unimplemented
9
11
  /**
10
12
  * Directive that is used for setting up date time input
11
13
  */
12
14
  export class DateTimeInputDirective extends DateTimeBase {
13
15
  //######################### constructors #########################
14
- constructor(element, dateApi, formatProvider) {
16
+ constructor(element, dateApi, formatProvider, valueProvider) {
15
17
  super(dateApi, formatProvider);
16
18
  this.element = element;
19
+ this.valueProvider = valueProvider;
17
20
  /**
18
21
  * @inheritdoc
19
22
  */
@@ -43,9 +46,9 @@ export class DateTimeInputDirective extends DateTimeBase {
43
46
  return this.ɵValue;
44
47
  }
45
48
  set value(value) {
46
- this.ɵValue = value;
47
49
  //accepts all available formats
48
- this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);
50
+ this.setInternalValue(value);
51
+ this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);
49
52
  //not range value
50
53
  if (!Array.isArray(this.internalValue)) {
51
54
  this.rawValue = this.internalValue?.format(this.customFormat);
@@ -73,6 +76,38 @@ export class DateTimeInputDirective extends DateTimeBase {
73
76
  this.element.nativeElement.removeEventListener('blur', this.handleBlur);
74
77
  }
75
78
  //######################### protected methods #########################
79
+ /**
80
+ * Sets internal value and fix lowest time difference
81
+ * @param value - Value to be set
82
+ */
83
+ setInternalValue(value) {
84
+ this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);
85
+ if (isBlank(this.internalValue)) {
86
+ return;
87
+ }
88
+ //ranged value
89
+ if (Array.isArray(this.internalValue)) {
90
+ const [from, to] = this.internalValue;
91
+ if (from) {
92
+ const val = this.valueProvider.getValue(from.value, this.customFormat).from;
93
+ if (val) {
94
+ this.internalValue[0] = this.dateApi.getValue(val, this.customFormat);
95
+ }
96
+ }
97
+ if (to) {
98
+ const val = this.valueProvider.getValue(to.value, this.customFormat).to;
99
+ if (val) {
100
+ this.internalValue[1] = this.dateApi.getValue(val, this.customFormat);
101
+ }
102
+ }
103
+ }
104
+ else {
105
+ const val = this.valueProvider.getValue(this.internalValue.value, this.customFormat).from;
106
+ if (val) {
107
+ this.internalValue = this.dateApi.getValue(val, this.customFormat);
108
+ }
109
+ }
110
+ }
76
111
  /**
77
112
  * Handles input event on input
78
113
  */
@@ -83,7 +118,7 @@ export class DateTimeInputDirective extends DateTimeBase {
83
118
  this.valueChange.next();
84
119
  return;
85
120
  }
86
- this.internalValue = parseDateTime(this.rawValue, this.dateApi, this.valueFormat, this.customFormat);
121
+ this.setInternalValue(this.rawValue);
87
122
  this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);
88
123
  this.valueChange.next();
89
124
  }
@@ -102,7 +137,7 @@ export class DateTimeInputDirective extends DateTimeBase {
102
137
  this.blur.emit(event);
103
138
  }
104
139
  }
105
- DateTimeInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: DateTimeInputDirective, deps: [{ token: i0.ElementRef }, { token: DATE_API }, { token: FORMAT_PROVIDER }], target: i0.ɵɵFactoryTarget.Directive });
140
+ DateTimeInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.6", ngImport: i0, type: DateTimeInputDirective, deps: [{ token: i0.ElementRef }, { token: DATE_API }, { token: FORMAT_PROVIDER }, { token: i1.DateValueProvider }], target: i0.ɵɵFactoryTarget.Directive });
106
141
  DateTimeInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.6", type: DateTimeInputDirective, selector: "input[dateTime][dateTimeInput]", providers: [
107
142
  {
108
143
  provide: DATE_TIME_INPUT,
@@ -145,5 +180,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.6", ngImpor
145
180
  }] }, { type: undefined, decorators: [{
146
181
  type: Inject,
147
182
  args: [FORMAT_PROVIDER]
148
- }] }]; }, propDecorators: { handleInput: [], handleFocus: [], handleBlur: [] } });
183
+ }] }, { type: i1.DateValueProvider }]; }, propDecorators: { handleInput: [], handleFocus: [], handleBlur: [] } });
149
184
  //# sourceMappingURL=dateTimeInput.directive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dateTimeInput.directive.js","sourceRoot":"","sources":["../../../../../../src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {Directive, ElementRef, EventEmitter, ExistingProvider, forwardRef, Inject, OnDestroy} from '@angular/core';\nimport {BindThis} from '@jscrpt/common';\n\nimport {DateTimeInput, FormatProvider} from '../../../../interfaces';\nimport {DATE_API, DATE_TIME_INPUT, FORMAT_PROVIDER} from '../../../../misc/tokens';\nimport {DateTimeInputOutputValue, DateTimeObjectValue} from '../../../../misc/types';\nimport {formatDateTime, parseDateTime} from '../../../../misc/utils';\nimport {DateApi} from '../../../../services';\nimport {DateTimeBase} from '../dateTimeBase';\n\n//TODO: range is unimplemented\n\n/**\n * Directive that is used for setting up date time input\n */\n@Directive(\n{\n selector: 'input[dateTime][dateTimeInput]',\n providers:\n [\n <ExistingProvider>\n {\n provide: DATE_TIME_INPUT,\n useExisting: forwardRef(() => DateTimeInputDirective),\n },\n ],\n exportAs: 'dateTime',\n})\nexport class DateTimeInputDirective<TDate = unknown> extends DateTimeBase<TDate> implements DateTimeInput, OnDestroy\n{\n //######################### protected properties #########################\n\n /**\n * Internal representation of current date time value\n */\n protected internalValue: DateTimeObjectValue<TDate>|undefined|null;\n\n //######################### public properties - implementation of DateTimeInput #########################\n\n /**\n * @inheritdoc\n */\n public get rawValue(): string|undefined|null\n {\n return this.element.nativeElement.value;\n }\n public set rawValue(value: string|undefined|null)\n {\n this.element.nativeElement.value = value ?? '';\n }\n\n /**\n * @inheritdoc\n */\n public override get value(): DateTimeInputOutputValue<TDate>|undefined|null\n {\n return this.ɵValue;\n }\n public override set value(value: DateTimeInputOutputValue<TDate>|undefined|null)\n {\n this.ɵValue = value;\n\n //accepts all available formats\n this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);\n \n //not range value\n if(!Array.isArray(this.internalValue))\n {\n this.rawValue = this.internalValue?.format(this.customFormat);\n }\n else\n {\n //TODO: add support for ranges\n }\n }\n\n /**\n * @inheritdoc\n */\n public get disabled(): boolean\n {\n return this.element.nativeElement.disabled;\n }\n public set disabled(value: boolean)\n {\n this.element.nativeElement.disabled = value;\n }\n\n /**\n * @inheritdoc\n */\n public focus: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n /**\n * @inheritdoc\n */\n public blur: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n //######################### constructors #########################\n constructor(protected element: ElementRef<HTMLInputElement>,\n @Inject(DATE_API) dateApi: DateApi<TDate>,\n @Inject(FORMAT_PROVIDER) formatProvider: FormatProvider,)\n {\n super(dateApi, formatProvider);\n\n this.element.nativeElement.addEventListener('input', this.handleInput);\n this.element.nativeElement.addEventListener('focus', this.handleFocus);\n this.element.nativeElement.addEventListener('blur', this.handleBlur);\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.element.nativeElement.removeEventListener('input', this.handleInput);\n this.element.nativeElement.removeEventListener('focus', this.handleFocus);\n this.element.nativeElement.removeEventListener('blur', this.handleBlur);\n }\n\n //######################### protected methods #########################\n\n /**\n * Handles input event on input\n */\n @BindThis\n protected handleInput(): void\n {\n if(!this.rawValue)\n {\n this.internalValue = null;\n this.ɵValue = null;\n\n this.valueChange.next();\n\n return;\n }\n\n this.internalValue = parseDateTime(this.rawValue, this.dateApi, this.valueFormat, this.customFormat);\n this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);\n\n this.valueChange.next();\n }\n\n /**\n * Handles focus event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleFocus(event: FocusEvent): void\n {\n this.focus.emit(event);\n }\n\n /**\n * Handles blur event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleBlur(event: FocusEvent): void\n {\n this.blur.emit(event);\n }\n}"]}
1
+ {"version":3,"file":"dateTimeInput.directive.js","sourceRoot":"","sources":["../../../../../../src/modules/dateTime/directives/dateTimeInput/dateTimeInput.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {Directive, ElementRef, EventEmitter, ExistingProvider, forwardRef, Inject, OnDestroy} from '@angular/core';\nimport {BindThis, isBlank} from '@jscrpt/common';\n\nimport {DateTimeInput, FormatProvider} from '../../../../interfaces';\nimport {DATE_API, DATE_TIME_INPUT, FORMAT_PROVIDER} from '../../../../misc/tokens';\nimport {DateTimeInputOutputValue, DateTimeObjectValue} from '../../../../misc/types';\nimport {formatDateTime, parseDateTime} from '../../../../misc/utils';\nimport {DateApi, DateValueProvider} from '../../../../services';\nimport {DateTimeBase} from '../dateTimeBase';\n\n//TODO: range is unimplemented\n\n/**\n * Directive that is used for setting up date time input\n */\n@Directive(\n{\n selector: 'input[dateTime][dateTimeInput]',\n providers:\n [\n <ExistingProvider>\n {\n provide: DATE_TIME_INPUT,\n useExisting: forwardRef(() => DateTimeInputDirective),\n },\n ],\n exportAs: 'dateTime',\n})\nexport class DateTimeInputDirective<TDate = unknown> extends DateTimeBase<TDate> implements DateTimeInput, OnDestroy\n{\n //######################### protected properties #########################\n\n /**\n * Internal representation of current date time value\n */\n protected internalValue: DateTimeObjectValue<TDate>|undefined|null;\n\n //######################### public properties - implementation of DateTimeInput #########################\n\n /**\n * @inheritdoc\n */\n public get rawValue(): string|undefined|null\n {\n return this.element.nativeElement.value;\n }\n public set rawValue(value: string|undefined|null)\n {\n this.element.nativeElement.value = value ?? '';\n }\n\n /**\n * @inheritdoc\n */\n public override get value(): DateTimeInputOutputValue<TDate>|undefined|null\n {\n return this.ɵValue;\n }\n public override set value(value: DateTimeInputOutputValue<TDate>|undefined|null)\n {\n //accepts all available formats\n this.setInternalValue(value);\n this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);\n \n //not range value\n if(!Array.isArray(this.internalValue))\n {\n this.rawValue = this.internalValue?.format(this.customFormat);\n }\n else\n {\n //TODO: add support for ranges\n }\n }\n\n /**\n * @inheritdoc\n */\n public get disabled(): boolean\n {\n return this.element.nativeElement.disabled;\n }\n public set disabled(value: boolean)\n {\n this.element.nativeElement.disabled = value;\n }\n\n /**\n * @inheritdoc\n */\n public focus: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n /**\n * @inheritdoc\n */\n public blur: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n //######################### constructors #########################\n constructor(protected element: ElementRef<HTMLInputElement>,\n @Inject(DATE_API) dateApi: DateApi<TDate>,\n @Inject(FORMAT_PROVIDER) formatProvider: FormatProvider,\n protected valueProvider: DateValueProvider<TDate>,)\n {\n super(dateApi, formatProvider);\n\n this.element.nativeElement.addEventListener('input', this.handleInput);\n this.element.nativeElement.addEventListener('focus', this.handleFocus);\n this.element.nativeElement.addEventListener('blur', this.handleBlur);\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n \n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.element.nativeElement.removeEventListener('input', this.handleInput);\n this.element.nativeElement.removeEventListener('focus', this.handleFocus);\n this.element.nativeElement.removeEventListener('blur', this.handleBlur);\n }\n\n //######################### protected methods #########################\n\n /**\n * Sets internal value and fix lowest time difference\n * @param value - Value to be set\n */\n protected setInternalValue(value: DateTimeInputOutputValue<TDate>|undefined|null): void\n {\n this.internalValue = parseDateTime(value, this.dateApi, null, this.customFormat);\n\n if(isBlank(this.internalValue))\n {\n return;\n }\n\n //ranged value\n if(Array.isArray(this.internalValue))\n {\n const [from, to] = this.internalValue;\n\n if(from)\n {\n const val = this.valueProvider.getValue(from.value, this.customFormat).from;\n\n if(val)\n {\n this.internalValue[0] = this.dateApi.getValue(val, this.customFormat);\n }\n }\n\n if(to)\n {\n const val = this.valueProvider.getValue(to.value, this.customFormat).to;\n\n if(val)\n {\n this.internalValue[1] = this.dateApi.getValue(val, this.customFormat);\n }\n }\n }\n else\n {\n const val = this.valueProvider.getValue(this.internalValue.value, this.customFormat).from;\n\n if(val)\n {\n this.internalValue = this.dateApi.getValue(val, this.customFormat);\n }\n }\n }\n\n /**\n * Handles input event on input\n */\n @BindThis\n protected handleInput(): void\n {\n if(!this.rawValue)\n {\n this.internalValue = null;\n this.ɵValue = null;\n\n this.valueChange.next();\n\n return;\n }\n\n this.setInternalValue(this.rawValue);\n this.ɵValue = formatDateTime(this.internalValue, this.valueFormat, this.customFormat);\n\n this.valueChange.next();\n }\n\n /**\n * Handles focus event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleFocus(event: FocusEvent): void\n {\n this.focus.emit(event);\n }\n\n /**\n * Handles blur event on input\n * @param event - Event that occured\n */\n @BindThis\n protected handleBlur(event: FocusEvent): void\n {\n this.blur.emit(event);\n }\n}"]}
@@ -24,7 +24,7 @@ export class DateTimeRelativeParser {
24
24
  * y - for years
25
25
  */
26
26
  parse(value) {
27
- const regex = /([+-])\s*(\d+)\s*([hmdwMy])/;
27
+ const regex = /([+-])\s*(\d+)\s*([hHmdwMy])/;
28
28
  let matches = null;
29
29
  //relative date provided
30
30
  if (isString(value) && (matches = regex.exec(value))) {
@@ -39,6 +39,7 @@ export class DateTimeRelativeParser {
39
39
  operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();
40
40
  break;
41
41
  }
42
+ case 'H':
42
43
  case 'h':
43
44
  {
44
45
  operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();
@@ -1 +1 @@
1
- {"version":3,"file":"dateTimeRelativeParser.service.js","sourceRoot":"","sources":["../../../../src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable, Injector} from '@angular/core';\nimport {isString} from '@jscrpt/common';\n\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi, DateApiObject, DateValue} from '../dateApi/dateApi.interface';\n\n/**\n * Service used for parsing relative date time strings\n */\n@Injectable({providedIn: 'root'})\nexport class DateTimeRelativeParser<TDate = any>\n{\n //######################### protected fields #########################\n \n /**\n * Date api for handling\n */\n protected _dateApi?: DateApi<TDate, DateApiObject>;\n\n //######################### constructor #########################\n constructor(protected _injector: Injector)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Tries to parse relative value and returns parsed TDate, otherwise returns input value\n * @param value - Value to be parsed\n * \n * @summary\n * m - for minutes\n * h - for hours\n * d - for days\n * w - for weeks\n * M - for months\n * y - for years\n */\n public parse(value: TDate|DateValue): TDate|DateValue\n {\n const regex = /([+-])\\s*(\\d+)\\s*([hmdwMy])/;\n let matches: RegExpExecArray | null = null;\n\n //relative date provided\n if(isString(value) && (matches = regex.exec(value)))\n {\n const operation = matches[1];\n const amount = matches[2];\n const period = matches[3];\n this._dateApi = this._dateApi ?? this._injector.get(DATE_API);\n const now = this._dateApi.now();\n\n switch(period)\n {\n case 'm':\n {\n operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();\n\n break;\n }\n case 'h':\n {\n operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();\n\n break;\n }\n case 'd':\n {\n operation == '+' ? now.addDays(+amount).endOfDay() : now.subtractDays(+amount).startOfDay();\n\n break;\n }\n case 'w':\n {\n operation == '+' ? now.addWeeks(+amount).endOfDay() : now.subtractWeeks(+amount).startOfDay();\n\n break;\n }\n case 'M':\n {\n operation == '+' ? now.addMonths(+amount).endOfDay() : now.subtractMonths(+amount).startOfDay();\n\n break;\n }\n case 'y':\n {\n operation == '+' ? now.addYears(+amount).endOfDay() : now.subtractYears(+amount).startOfDay();\n\n break;\n }\n }\n\n value = now.value;\n }\n\n return value;\n }\n}"]}
1
+ {"version":3,"file":"dateTimeRelativeParser.service.js","sourceRoot":"","sources":["../../../../src/services/dateTimeRelativeParser/dateTimeRelativeParser.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable, Injector} from '@angular/core';\nimport {isString} from '@jscrpt/common';\n\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi, DateApiObject, DateValue} from '../dateApi/dateApi.interface';\n\n/**\n * Service used for parsing relative date time strings\n */\n@Injectable({providedIn: 'root'})\nexport class DateTimeRelativeParser<TDate = any>\n{\n //######################### protected fields #########################\n \n /**\n * Date api for handling\n */\n protected _dateApi?: DateApi<TDate, DateApiObject>;\n\n //######################### constructor #########################\n constructor(protected _injector: Injector)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Tries to parse relative value and returns parsed TDate, otherwise returns input value\n * @param value - Value to be parsed\n * \n * @summary\n * m - for minutes\n * h - for hours\n * d - for days\n * w - for weeks\n * M - for months\n * y - for years\n */\n public parse(value: TDate|DateValue): TDate|DateValue\n {\n const regex = /([+-])\\s*(\\d+)\\s*([hHmdwMy])/;\n let matches: RegExpExecArray | null = null;\n\n //relative date provided\n if(isString(value) && (matches = regex.exec(value)))\n {\n const operation = matches[1];\n const amount = matches[2];\n const period = matches[3];\n this._dateApi = this._dateApi ?? this._injector.get(DATE_API);\n const now = this._dateApi.now();\n\n switch(period)\n {\n case 'm':\n {\n operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();\n\n break;\n }\n case 'H':\n case 'h':\n {\n operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();\n\n break;\n }\n case 'd':\n {\n operation == '+' ? now.addDays(+amount).endOfDay() : now.subtractDays(+amount).startOfDay();\n\n break;\n }\n case 'w':\n {\n operation == '+' ? now.addWeeks(+amount).endOfDay() : now.subtractWeeks(+amount).startOfDay();\n\n break;\n }\n case 'M':\n {\n operation == '+' ? now.addMonths(+amount).endOfDay() : now.subtractMonths(+amount).startOfDay();\n\n break;\n }\n case 'y':\n {\n operation == '+' ? now.addYears(+amount).endOfDay() : now.subtractYears(+amount).startOfDay();\n\n break;\n }\n }\n\n value = now.value;\n }\n\n return value;\n }\n}"]}
@@ -1,6 +1,7 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
2
  import { DATE_API } from '../../misc/tokens';
3
3
  import * as i0 from "@angular/core";
4
+ //TODO: change to unknown when legacy stuff is removed
4
5
  /**
5
6
  * Class used for obtaining DateTimeValue for various formats
6
7
  */
@@ -26,7 +27,7 @@ export class DateValueProvider {
26
27
  end = val.endOfMinute().value;
27
28
  }
28
29
  //hour
29
- else if (fullFormat.indexOf('H') >= 0) {
30
+ else if (fullFormat.indexOf('H') >= 0 || fullFormat.indexOf('h') >= 0) {
30
31
  start = val.startOfHour().value;
31
32
  end = val.endOfHour().value;
32
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dateValueProvider.service.js","sourceRoot":"","sources":["../../../../src/services/dateValueProvider/dateValueProvider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;;AAG3C;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAE1B,iEAAiE;IACjE,YAAwC,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAEhE,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,QAAQ,CAAC,KAAY,EAAE,MAAc;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,GAAU,KAAK,CAAC;QACzB,IAAI,GAAG,GAAU,KAAK,CAAC;QAEvB,QAAQ;QACR,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAC/B;YACI,KAAK,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;SACjC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,KAAK;aACA,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;SAC9B;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,OAAO;aACF,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC;YACjC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;SAChC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QAED,OAAO;YACH,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,GAAG;SACV,CAAC;IACN,CAAC;;8GA9DQ,iBAAiB,kBAGN,QAAQ;kHAHnB,iBAAiB,cADL,MAAM;2FAClB,iBAAiB;kBAD7B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAIf,MAAM;2BAAC,QAAQ","sourcesContent":["import {Inject, Injectable} from '@angular/core';\n\nimport {DateTimeValue} from '../../interfaces/dateTime/datetime.interface';\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi} from '../dateApi/dateApi.interface';\n\n/**\n * Class used for obtaining DateTimeValue for various formats\n */\n@Injectable({providedIn: 'root'})\nexport class DateValueProvider<TDate = any>\n{\n //######################### constructor #########################\n constructor(@Inject(DATE_API) protected _dateApi: DateApi<TDate>)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Gets DateTimeValue from single value based on format\n * @param value - Current value to be converted to ranged value\n * @param format - Format that is requested to be displayed, it tells what range should be created\n */\n public getValue(value: TDate, format: string): DateTimeValue<TDate>\n {\n const val = this._dateApi.getValue(value, format);\n const fullFormat = this._dateApi.getFormat(format);\n let start: TDate = value;\n let end: TDate = value;\n\n //minute\n if(fullFormat.indexOf('m') >= 0)\n {\n start = val.startOfMinute().value;\n end = val.endOfMinute().value;\n }\n //hour\n else if(fullFormat.indexOf('H') >= 0)\n {\n start = val.startOfHour().value;\n end = val.endOfHour().value;\n }\n //day\n else if(fullFormat.indexOf('d') >= 0)\n {\n start = val.startOfDay().value;\n end = val.endOfDay().value;\n }\n //week\n else if(fullFormat.indexOf('w') >= 0)\n {\n start = val.startOfWeek().value;\n end = val.endOfWeek().value;\n }\n //month\n else if(fullFormat.indexOf('M') >= 0)\n {\n start = val.startOfMonth().value;\n end = val.endOfMonth().value;\n }\n //year\n else if(fullFormat.indexOf('Y') >= 0 || fullFormat.indexOf('y') >= 0)\n {\n start = val.startOfYear().value;\n end = val.endOfYear().value;\n }\n\n return {\n from: start,\n to: end\n };\n }\n}"]}
1
+ {"version":3,"file":"dateValueProvider.service.js","sourceRoot":"","sources":["../../../../src/services/dateValueProvider/dateValueProvider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;;AAG3C,sDAAsD;AAEtD;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAE1B,iEAAiE;IACjE,YAAwC,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAEhE,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,QAAQ,CAAC,KAAY,EAAE,MAAc;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,GAAU,KAAK,CAAC;QACzB,IAAI,GAAG,GAAU,KAAK,CAAC;QAEvB,QAAQ;QACR,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAC/B;YACI,KAAK,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;SACjC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,KAAK;aACA,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;SAC9B;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,OAAO;aACF,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC;YACjC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;SAChC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QAED,OAAO;YACH,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,GAAG;SACV,CAAC;IACN,CAAC;;8GA9DQ,iBAAiB,kBAGN,QAAQ;kHAHnB,iBAAiB,cADL,MAAM;2FAClB,iBAAiB;kBAD7B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAIf,MAAM;2BAAC,QAAQ","sourcesContent":["import {Inject, Injectable} from '@angular/core';\n\nimport {DateTimeValue} from '../../interfaces/dateTime/datetime.interface';\nimport {DATE_API} from '../../misc/tokens';\nimport {DateApi} from '../dateApi/dateApi.interface';\n\n//TODO: change to unknown when legacy stuff is removed\n\n/**\n * Class used for obtaining DateTimeValue for various formats\n */\n@Injectable({providedIn: 'root'})\nexport class DateValueProvider<TDate = any>\n{\n //######################### constructor #########################\n constructor(@Inject(DATE_API) protected _dateApi: DateApi<TDate>)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Gets DateTimeValue from single value based on format\n * @param value - Current value to be converted to ranged value\n * @param format - Format that is requested to be displayed, it tells what range should be created\n */\n public getValue(value: TDate, format: string): DateTimeValue<TDate>\n {\n const val = this._dateApi.getValue(value, format);\n const fullFormat = this._dateApi.getFormat(format);\n let start: TDate = value;\n let end: TDate = value;\n\n //minute\n if(fullFormat.indexOf('m') >= 0)\n {\n start = val.startOfMinute().value;\n end = val.endOfMinute().value;\n }\n //hour\n else if(fullFormat.indexOf('H') >= 0 || fullFormat.indexOf('h') >= 0)\n {\n start = val.startOfHour().value;\n end = val.endOfHour().value;\n }\n //day\n else if(fullFormat.indexOf('d') >= 0)\n {\n start = val.startOfDay().value;\n end = val.endOfDay().value;\n }\n //week\n else if(fullFormat.indexOf('w') >= 0)\n {\n start = val.startOfWeek().value;\n end = val.endOfWeek().value;\n }\n //month\n else if(fullFormat.indexOf('M') >= 0)\n {\n start = val.startOfMonth().value;\n end = val.endOfMonth().value;\n }\n //year\n else if(fullFormat.indexOf('Y') >= 0 || fullFormat.indexOf('y') >= 0)\n {\n start = val.startOfYear().value;\n end = val.endOfYear().value;\n }\n\n return {\n from: start,\n to: end\n };\n }\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anglr/datetime",
3
- "version": "5.0.0-beta.20221018103539",
3
+ "version": "5.0.0-beta.20221018111751",
4
4
  "description": "Angular library for datetime manipulation components",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -1,7 +1,7 @@
1
1
  import { ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
2
  import { DateTimeInput, FormatProvider } from '../../../../interfaces';
3
3
  import { DateTimeInputOutputValue, DateTimeObjectValue } from '../../../../misc/types';
4
- import { DateApi } from '../../../../services';
4
+ import { DateApi, DateValueProvider } from '../../../../services';
5
5
  import { DateTimeBase } from '../dateTimeBase';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
@@ -9,6 +9,7 @@ import * as i0 from "@angular/core";
9
9
  */
10
10
  export declare class DateTimeInputDirective<TDate = unknown> extends DateTimeBase<TDate> implements DateTimeInput, OnDestroy {
11
11
  protected element: ElementRef<HTMLInputElement>;
12
+ protected valueProvider: DateValueProvider<TDate>;
12
13
  /**
13
14
  * Internal representation of current date time value
14
15
  */
@@ -36,11 +37,16 @@ export declare class DateTimeInputDirective<TDate = unknown> extends DateTimeBas
36
37
  * @inheritdoc
37
38
  */
38
39
  blur: EventEmitter<FocusEvent>;
39
- constructor(element: ElementRef<HTMLInputElement>, dateApi: DateApi<TDate>, formatProvider: FormatProvider);
40
+ constructor(element: ElementRef<HTMLInputElement>, dateApi: DateApi<TDate>, formatProvider: FormatProvider, valueProvider: DateValueProvider<TDate>);
40
41
  /**
41
42
  * Called when component is destroyed
42
43
  */
43
44
  ngOnDestroy(): void;
45
+ /**
46
+ * Sets internal value and fix lowest time difference
47
+ * @param value - Value to be set
48
+ */
49
+ protected setInternalValue(value: DateTimeInputOutputValue<TDate> | undefined | null): void;
44
50
  /**
45
51
  * Handles input event on input
46
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"dateTimeInput.directive.d.ts","sourceRoot":"","sources":["dateTimeInput.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,UAAU,EAAE,YAAY,EAAwC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGnH,OAAO,EAAC,aAAa,EAAE,cAAc,EAAC,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAC,wBAAwB,EAAE,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAErF,OAAO,EAAC,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;;AAI7C;;GAEG;AACH,qBAaa,sBAAsB,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC,KAAK,CAAE,YAAW,aAAa,EAAE,SAAS;IAuEpG,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC;IAnE3D;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAC,SAAS,GAAC,IAAI,CAAC;IAInE;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,GAAC,SAAS,GAAC,IAAI,CAG3C;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAC,SAAS,GAAC,IAAI,EAG/C;IAED;;OAEG;IACH,IAAoB,KAAK,IAAI,wBAAwB,CAAC,KAAK,CAAC,GAAC,SAAS,GAAC,IAAI,CAG1E;IACD,IAAoB,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,GAAC,SAAS,GAAC,IAAI,EAgB9E;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAG7B;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAGjC;IAED;;OAEG;IACI,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,CAAkC;IAExE;;OAEG;IACI,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAkC;gBAGjD,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAC7B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAChB,cAAc,EAAE,cAAc;IAWnE;;OAEG;IACI,WAAW,IAAI,IAAI;IAS1B;;OAEG;IAEH,SAAS,CAAC,WAAW,IAAI,IAAI;IAkB7B;;;OAGG;IAEH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAK9C;;;OAGG;IAEH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;yCArIpC,sBAAsB;2CAAtB,sBAAsB;CAyIlC"}
1
+ {"version":3,"file":"dateTimeInput.directive.d.ts","sourceRoot":"","sources":["dateTimeInput.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,UAAU,EAAE,YAAY,EAAwC,SAAS,EAAC,MAAM,eAAe,CAAC;AAGnH,OAAO,EAAC,aAAa,EAAE,cAAc,EAAC,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAC,wBAAwB,EAAE,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAErF,OAAO,EAAC,OAAO,EAAE,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;;AAI7C;;GAEG;AACH,qBAaa,sBAAsB,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,YAAY,CAAC,KAAK,CAAE,YAAW,aAAa,EAAE,SAAS;IAsEpG,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC;IAG/C,SAAS,CAAC,aAAa,EAAE,iBAAiB,CAAC,KAAK,CAAC;IArE7D;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAC,SAAS,GAAC,IAAI,CAAC;IAInE;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,GAAC,SAAS,GAAC,IAAI,CAG3C;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAC,SAAS,GAAC,IAAI,EAG/C;IAED;;OAEG;IACH,IAAoB,KAAK,IAAI,wBAAwB,CAAC,KAAK,CAAC,GAAC,SAAS,GAAC,IAAI,CAG1E;IACD,IAAoB,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,GAAC,SAAS,GAAC,IAAI,EAe9E;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAG7B;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAGjC;IAED;;OAEG;IACI,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,CAAkC;IAExE;;OAEG;IACI,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAkC;gBAGjD,OAAO,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAC7B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAChB,cAAc,EAAE,cAAc,EAC7C,aAAa,EAAE,iBAAiB,CAAC,KAAK,CAAC;IAW7D;;OAEG;IACI,WAAW,IAAI,IAAI;IAS1B;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,GAAC,SAAS,GAAC,IAAI,GAAG,IAAI;IA6CvF;;OAEG;IAEH,SAAS,CAAC,WAAW,IAAI,IAAI;IAkB7B;;;OAGG;IAEH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAK9C;;;OAGG;IAEH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;yCAtLpC,sBAAsB;2CAAtB,sBAAsB;CA0LlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dateTimeRelativeParser.service.d.ts","sourceRoot":"","sources":["dateTimeRelativeParser.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAC,MAAM,eAAe,CAAC;AAInD,OAAO,EAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,8BAA8B,CAAC;;AAE/E;;GAEG;AACH,qBACa,sBAAsB,CAAC,KAAK,GAAG,GAAG;IAU/B,SAAS,CAAC,SAAS,EAAE,QAAQ;IANzC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAG7B,SAAS,EAAE,QAAQ;IAMzC;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,KAAK,EAAE,KAAK,GAAC,SAAS,GAAG,KAAK,GAAC,SAAS;yCA5B5C,sBAAsB;6CAAtB,sBAAsB;CAuFlC"}
1
+ {"version":3,"file":"dateTimeRelativeParser.service.d.ts","sourceRoot":"","sources":["dateTimeRelativeParser.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAC,MAAM,eAAe,CAAC;AAInD,OAAO,EAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,8BAA8B,CAAC;;AAE/E;;GAEG;AACH,qBACa,sBAAsB,CAAC,KAAK,GAAG,GAAG;IAU/B,SAAS,CAAC,SAAS,EAAE,QAAQ;IANzC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAG7B,SAAS,EAAE,QAAQ;IAMzC;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,KAAK,EAAE,KAAK,GAAC,SAAS,GAAG,KAAK,GAAC,SAAS;yCA5B5C,sBAAsB;6CAAtB,sBAAsB;CAwFlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dateValueProvider.service.d.ts","sourceRoot":"","sources":["dateValueProvider.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,8CAA8C,CAAC;AAE3E,OAAO,EAAC,OAAO,EAAC,MAAM,8BAA8B,CAAC;;AAErD;;GAEG;AACH,qBACa,iBAAiB,CAAC,KAAK,GAAG,GAAG;IAGR,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;gBAAxB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;IAMhE;;;;OAIG;IACI,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;yCAd1D,iBAAiB;6CAAjB,iBAAiB;CA+D7B"}
1
+ {"version":3,"file":"dateValueProvider.service.d.ts","sourceRoot":"","sources":["dateValueProvider.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,8CAA8C,CAAC;AAE3E,OAAO,EAAC,OAAO,EAAC,MAAM,8BAA8B,CAAC;;AAIrD;;GAEG;AACH,qBACa,iBAAiB,CAAC,KAAK,GAAG,GAAG;IAGR,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;gBAAxB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;IAMhE;;;;OAIG;IACI,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;yCAd1D,iBAAiB;6CAAjB,iBAAiB;CA+D7B"}
package/version.bak CHANGED
@@ -1 +1 @@
1
- 5.0.0-beta.20221018103539
1
+ 5.0.0-beta.20221018111751