@acorex/components 20.9.4 → 20.10.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.
@@ -0,0 +1,3 @@
1
+ # @acorex/components/datetime-text-box
2
+
3
+ Secondary entry point of `@acorex/components`. It can be used by importing from `@acorex/components/datetime-text-box`.
@@ -0,0 +1,142 @@
1
+ import * as polytype from 'polytype';
2
+ import * as _angular_core from '@angular/core';
3
+ import { MXInputBaseValueComponent, MXLookComponent, AXClickEvent } from '@acorex/cdk/common';
4
+ import { AXDateTimePickerType } from '@acorex/components/calendar';
5
+
6
+ declare const AXDateTimeTextBoxComponent_base: polytype.Polytype.ClusteredConstructor<[{
7
+ new (): MXInputBaseValueComponent<Date>;
8
+ ɵfac: _angular_core.ɵɵFactoryDeclaration<MXInputBaseValueComponent<any>, never>;
9
+ ɵprov: _angular_core.ɵɵInjectableDeclaration<MXInputBaseValueComponent<any>>;
10
+ }, typeof MXLookComponent]>;
11
+ /**
12
+ * A date & time editor that works like a text box: the user types digits directly into a
13
+ * masked value (separators come from the active format), navigates between date/time
14
+ * segments with Left/Right arrows and spins segment values with Up/Down arrows.
15
+ *
16
+ * The committed value is a native `Date` (same contract as `ax-datetime-box`), and both
17
+ * `gregorian` and `solar-hijri` calendar systems are supported.
18
+ *
19
+ * @category Components
20
+ */
21
+ declare class AXDateTimeTextBoxComponent extends AXDateTimeTextBoxComponent_base {
22
+ #private;
23
+ private platformService;
24
+ private localeService;
25
+ private calendarService;
26
+ /** @ignore */
27
+ private readonly _editingParts;
28
+ /** @ignore */
29
+ protected _editingText: _angular_core.WritableSignal<string>;
30
+ /** @ignore */
31
+ private _inputChars;
32
+ /** @ignore */
33
+ private _activePart;
34
+ /**
35
+ * Determines which parts are editable: `date`, `time` or `datetime`.
36
+ * The mask format is resolved from the active locale profile for this mode.
37
+ * @defaultValue 'datetime'
38
+ */
39
+ picker: _angular_core.InputSignal<AXDateTimePickerType>;
40
+ /**
41
+ * The calendar system to use (`gregorian` or `solar-hijri`).
42
+ * Falls back to the active locale profile calendar when not provided.
43
+ */
44
+ calendar: _angular_core.InputSignal<string>;
45
+ /**
46
+ * Optional format override (e.g. `yyyy/MM/dd HH:mm:ss`).
47
+ * When omitted, the short format of the active locale profile is used.
48
+ */
49
+ format: _angular_core.InputSignal<string>;
50
+ /**
51
+ * The minimum allowed date value. Applied when the editor loses focus.
52
+ */
53
+ minValue: _angular_core.InputSignal<Date>;
54
+ /**
55
+ * The maximum allowed date value. Applied when the editor loses focus.
56
+ */
57
+ maxValue: _angular_core.InputSignal<Date>;
58
+ /**
59
+ * Emitted when a click event occurs on the editor input.
60
+ * @event
61
+ */
62
+ onClick: _angular_core.OutputEmitterRef<AXClickEvent>;
63
+ /** @ignore */
64
+ classNames: _angular_core.InputSignal<string>;
65
+ protected readonly _calendarSystem: _angular_core.Signal<string>;
66
+ protected readonly _resolvedFormat: _angular_core.Signal<string>;
67
+ /** @ignore */
68
+ private _editingDate;
69
+ /** @ignore */
70
+ private inputRef;
71
+ /** @ignore */
72
+ private get inputElement();
73
+ /**
74
+ * @description check if page is in rtl or ltr
75
+ */
76
+ protected isRtl: _angular_core.WritableSignal<boolean>;
77
+ /** @ignore */
78
+ protected ngOnInit(): void;
79
+ /**
80
+ * Formats a part using the calendar already attached to the AXDateTime.
81
+ * Avoids formatService's string-options path, which always uses the active locale calendar.
82
+ * @ignore
83
+ */
84
+ private _formatPart;
85
+ /** @ignore */
86
+ private _detectParts;
87
+ /** @ignore */
88
+ private _getOrderedParts;
89
+ /** @ignore */
90
+ private _clearInputBuffer;
91
+ /** @ignore */
92
+ private _updateText;
93
+ /**
94
+ * Handles changes to the internal date value, updating editing parts and text representation.
95
+ * @ignore
96
+ */
97
+ internalValueChanged(value?: Date): void;
98
+ /**
99
+ * Normalizes Persian (U+06F0-U+06F9) and Arabic-Indic (U+0660-U+0669) digits to ASCII.
100
+ * @ignore
101
+ */
102
+ private _normalizeDigit;
103
+ /** @ignore */
104
+ protected _handleOnKeydownEvent(e: KeyboardEvent): void;
105
+ /**
106
+ * Applies typed digits to the active part with calendar-aware limits, auto advancing
107
+ * to the next part when the segment is complete or unambiguous.
108
+ * @ignore
109
+ */
110
+ private _handleDigitInput;
111
+ /** @ignore */
112
+ private _applyEditingDate;
113
+ /** @ignore */
114
+ protected _handleKeyUpEvent(): void;
115
+ /** @ignore */
116
+ protected _handleFocusEvent(e: FocusEvent): void;
117
+ /** @ignore */
118
+ protected _handleBlurEvent(e: FocusEvent): void;
119
+ /**
120
+ * Clamps the committed value into the [minValue, maxValue] range.
121
+ * @ignore
122
+ */
123
+ private _clampToRange;
124
+ /** @ignore */
125
+ protected _handleOnInputClickEvent(e: MouseEvent): void;
126
+ /** @ignore */
127
+ private _detectPartAtPosition;
128
+ /** @ignore */
129
+ private _highlightActivePart;
130
+ /** @ignore */
131
+ private _detectValueChanges;
132
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXDateTimeTextBoxComponent, never>;
133
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXDateTimeTextBoxComponent, "ax-datetime-text-box", never, { "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "state": { "alias": "state"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "look": { "alias": "look"; "required": false; }; "picker": { "alias": "picker"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "classNames": { "alias": "class"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "stateChange": "stateChange"; "onValueChanged": "onValueChanged"; "onBlur": "onBlur"; "onFocus": "onFocus"; "readonlyChange": "readonlyChange"; "disabledChange": "disabledChange"; "onKeyDown": "onKeyDown"; "onKeyUp": "onKeyUp"; "onKeyPress": "onKeyPress"; "onClick": "onClick"; }, never, ["ax-prefix", "ax-clear-button", "ax-suffix", "ax-validation-rule"], true, never>;
134
+ }
135
+
136
+ declare class AXDateTimeTextBoxModule {
137
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXDateTimeTextBoxModule, never>;
138
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXDateTimeTextBoxModule, never, [typeof AXDateTimeTextBoxComponent], [typeof AXDateTimeTextBoxComponent]>;
139
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXDateTimeTextBoxModule>;
140
+ }
141
+
142
+ export { AXDateTimeTextBoxComponent, AXDateTimeTextBoxModule };
@@ -0,0 +1,619 @@
1
+ import { MXInputBaseValueComponent, MXLookComponent, AXComponent, AXFocusableComponent, AXValuableComponent, AXClearableComponent } from '@acorex/cdk/common';
2
+ import { AXCalendarService } from '@acorex/core/date-time';
3
+ import { AXLocaleService } from '@acorex/core/locale';
4
+ import { AXPlatform } from '@acorex/core/platform';
5
+ import { getWordBoundsAtPosition } from '@acorex/core/utils';
6
+ import * as i0 from '@angular/core';
7
+ import { inject, signal, input, output, computed, linkedSignal, viewChild, effect, untracked, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
8
+ import * as i1 from '@angular/forms';
9
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
10
+ import { classes } from 'polytype';
11
+ import { map } from 'rxjs';
12
+
13
+ /* eslint-disable @angular-eslint/no-inputs-metadata-property */
14
+ /**
15
+ * A date & time editor that works like a text box: the user types digits directly into a
16
+ * masked value (separators come from the active format), navigates between date/time
17
+ * segments with Left/Right arrows and spins segment values with Up/Down arrows.
18
+ *
19
+ * The committed value is a native `Date` (same contract as `ax-datetime-box`), and both
20
+ * `gregorian` and `solar-hijri` calendar systems are supported.
21
+ *
22
+ * @category Components
23
+ */
24
+ class AXDateTimeTextBoxComponent extends classes((MXInputBaseValueComponent), MXLookComponent) {
25
+ constructor() {
26
+ super(...arguments);
27
+ this.platformService = inject(AXPlatform);
28
+ this.localeService = inject(AXLocaleService);
29
+ this.calendarService = inject(AXCalendarService);
30
+ /** @ignore */
31
+ this._editingParts = {
32
+ year: {
33
+ key: 'year',
34
+ placeholder: 'yyyy',
35
+ placeholders: ['YY', 'yy', 'YYYY', 'yyyy'],
36
+ enabled: false,
37
+ default: 2023,
38
+ typedValue: null,
39
+ realValue: () => this._formatPart(this._editingDate(), this._editingParts.year.placeholder),
40
+ },
41
+ month: {
42
+ key: 'month',
43
+ placeholder: 'MM',
44
+ placeholders: ['MM', 'M'],
45
+ enabled: false,
46
+ default: 1,
47
+ typedValue: null,
48
+ realValue: () => this._formatPart(this._editingDate(), this._editingParts.month.placeholder),
49
+ },
50
+ day: {
51
+ key: 'day',
52
+ placeholder: 'dd',
53
+ placeholders: ['dd', 'DD', 'd'],
54
+ enabled: false,
55
+ default: 1,
56
+ typedValue: null,
57
+ realValue: () => this._formatPart(this._editingDate(), this._editingParts.day.placeholder),
58
+ },
59
+ hour: {
60
+ key: 'hour',
61
+ placeholder: 'HH',
62
+ placeholders: ['HH', 'H', 'hh', 'h'],
63
+ enabled: false,
64
+ default: 0,
65
+ typedValue: null,
66
+ realValue: () => this._formatPart(this._editingDate(), this._editingParts.hour.placeholder),
67
+ },
68
+ minute: {
69
+ key: 'minute',
70
+ placeholder: 'mm',
71
+ placeholders: ['mm', 'm'],
72
+ enabled: false,
73
+ default: 0,
74
+ typedValue: null,
75
+ realValue: () => this._formatPart(this._editingDate(), this._editingParts.minute.placeholder),
76
+ },
77
+ second: {
78
+ key: 'second',
79
+ placeholder: 'ss',
80
+ placeholders: ['ss', 's'],
81
+ enabled: false,
82
+ default: 0,
83
+ typedValue: null,
84
+ realValue: () => this._formatPart(this._editingDate(), this._editingParts.second.placeholder),
85
+ },
86
+ AMPM: {
87
+ key: 'AMPM',
88
+ placeholder: 'a',
89
+ placeholders: ['a', 'A'],
90
+ enabled: false,
91
+ default: 0,
92
+ typedValue: null,
93
+ realValue: () => this._formatPart(this._editingDate(), this._editingParts.AMPM.placeholder),
94
+ },
95
+ };
96
+ /** @ignore */
97
+ this._editingText = signal('', ...(ngDevMode ? [{ debugName: "_editingText" }] : []));
98
+ /** @ignore */
99
+ this._inputChars = [];
100
+ /** @ignore */
101
+ this._activePart = signal(null, ...(ngDevMode ? [{ debugName: "_activePart" }] : []));
102
+ /**
103
+ * Determines which parts are editable: `date`, `time` or `datetime`.
104
+ * The mask format is resolved from the active locale profile for this mode.
105
+ * @defaultValue 'datetime'
106
+ */
107
+ this.picker = input('datetime', ...(ngDevMode ? [{ debugName: "picker" }] : []));
108
+ /**
109
+ * The calendar system to use (`gregorian` or `solar-hijri`).
110
+ * Falls back to the active locale profile calendar when not provided.
111
+ */
112
+ this.calendar = input(null, ...(ngDevMode ? [{ debugName: "calendar" }] : []));
113
+ /**
114
+ * Optional format override (e.g. `yyyy/MM/dd HH:mm:ss`).
115
+ * When omitted, the short format of the active locale profile is used.
116
+ */
117
+ this.format = input(null, ...(ngDevMode ? [{ debugName: "format" }] : []));
118
+ /**
119
+ * The minimum allowed date value. Applied when the editor loses focus.
120
+ */
121
+ this.minValue = input(null, ...(ngDevMode ? [{ debugName: "minValue" }] : []));
122
+ /**
123
+ * The maximum allowed date value. Applied when the editor loses focus.
124
+ */
125
+ this.maxValue = input(null, ...(ngDevMode ? [{ debugName: "maxValue" }] : []));
126
+ /**
127
+ * Emitted when a click event occurs on the editor input.
128
+ * @event
129
+ */
130
+ this.onClick = output();
131
+ /** @ignore */
132
+ this.classNames = input('', ...(ngDevMode ? [{ debugName: "classNames", alias: 'class' }] : [{ alias: 'class' }]));
133
+ this._calendarSystem = computed(() => this.calendar() ?? this.localeService.activeProfile().calendar.system, ...(ngDevMode ? [{ debugName: "_calendarSystem" }] : []));
134
+ this._resolvedFormat = computed(() => this.format() ?? this.localeService.activeProfile().formats[this.picker()]?.short ?? '', ...(ngDevMode ? [{ debugName: "_resolvedFormat" }] : []));
135
+ /** @ignore */
136
+ this._editingDate = linkedSignal(() => this.calendarService.now(this._calendarSystem()), ...(ngDevMode ? [{ debugName: "_editingDate" }] : []));
137
+ /** @ignore */
138
+ this.inputRef = viewChild('input', ...(ngDevMode ? [{ debugName: "inputRef" }] : []));
139
+ /**
140
+ * @description check if page is in rtl or ltr
141
+ */
142
+ this.isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: "isRtl" }] : []));
143
+ /** @ignore */
144
+ this.#formatEffect = effect(() => {
145
+ this._resolvedFormat();
146
+ this._calendarSystem();
147
+ this._detectParts();
148
+ untracked(() => {
149
+ this.internalValueChanged(this.value);
150
+ });
151
+ }, ...(ngDevMode ? [{ debugName: "#formatEffect" }] : []));
152
+ }
153
+ /** @ignore */
154
+ get inputElement() {
155
+ return this.inputRef()?.nativeElement;
156
+ }
157
+ /** @ignore */
158
+ #formatEffect;
159
+ /** @ignore */
160
+ ngOnInit() {
161
+ super.ngOnInit();
162
+ this.platformService.directionChange.pipe(map((i) => i.data === 'rtl')).subscribe((isRtl) => this.isRtl.set(isRtl));
163
+ }
164
+ /**
165
+ * Formats a part using the calendar already attached to the AXDateTime.
166
+ * Avoids formatService's string-options path, which always uses the active locale calendar.
167
+ * @ignore
168
+ */
169
+ _formatPart(date, placeholder) {
170
+ return date.format(placeholder);
171
+ }
172
+ /** @ignore */
173
+ _detectParts() {
174
+ Object.values(this._editingParts).forEach((e) => {
175
+ e.enabled = false;
176
+ });
177
+ const formatParts = this._resolvedFormat().split(/[^a-zA-Z]+/);
178
+ formatParts.forEach((f) => {
179
+ const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));
180
+ if (found) {
181
+ found.enabled = true;
182
+ found.placeholder = f;
183
+ }
184
+ });
185
+ }
186
+ /** @ignore */
187
+ _getOrderedParts() {
188
+ const formatParts = this._resolvedFormat().split(/[^a-zA-Z]+/);
189
+ const result = [];
190
+ formatParts.forEach((f) => {
191
+ const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));
192
+ if (found && found.enabled)
193
+ result.push(found);
194
+ });
195
+ return result;
196
+ }
197
+ /** @ignore */
198
+ _clearInputBuffer() {
199
+ this._inputChars = [];
200
+ }
201
+ /** @ignore */
202
+ _updateText() {
203
+ let text = this._resolvedFormat();
204
+ Object.values(this._editingParts).forEach((part) => {
205
+ if (this._activePart() == part.key) {
206
+ if (part.typedValue)
207
+ text = text.replace(part.placeholder, part.typedValue);
208
+ }
209
+ else {
210
+ if (part.typedValue != part.placeholder && part.typedValue != null) {
211
+ text = text.replace(part.placeholder, part.realValue());
212
+ }
213
+ }
214
+ });
215
+ this._editingText.set(text == this._resolvedFormat() ? '' : text);
216
+ if (this._activePart()) {
217
+ this._highlightActivePart();
218
+ }
219
+ }
220
+ /**
221
+ * Handles changes to the internal date value, updating editing parts and text representation.
222
+ * @ignore
223
+ */
224
+ internalValueChanged(value) {
225
+ if (value && this.calendarService.isValidDate(value)) {
226
+ this._editingDate.set(this.calendarService.create(value, this._calendarSystem()));
227
+ }
228
+ Object.values(this._editingParts).forEach((part) => {
229
+ if (value) {
230
+ if (part.typedValue != part.placeholder)
231
+ part.typedValue = part.realValue();
232
+ }
233
+ else
234
+ part.typedValue = null;
235
+ });
236
+ this._updateText();
237
+ }
238
+ /**
239
+ * Normalizes Persian (U+06F0-U+06F9) and Arabic-Indic (U+0660-U+0669) digits to ASCII.
240
+ * @ignore
241
+ */
242
+ _normalizeDigit(key) {
243
+ if (!key || key.length !== 1)
244
+ return null;
245
+ const code = key.charCodeAt(0);
246
+ if (code >= 0x30 && code <= 0x39)
247
+ return key;
248
+ if (code >= 0x06f0 && code <= 0x06f9)
249
+ return String.fromCharCode(code - 0x06f0 + 0x30);
250
+ if (code >= 0x0660 && code <= 0x0669)
251
+ return String.fromCharCode(code - 0x0660 + 0x30);
252
+ return null;
253
+ }
254
+ /** @ignore */
255
+ _handleOnKeydownEvent(e) {
256
+ const ignore = () => {
257
+ if (e.key === 'Tab' || e.code === 'Space' || e.code === 'Enter') {
258
+ return;
259
+ }
260
+ e.preventDefault();
261
+ e.stopPropagation();
262
+ };
263
+ const input = e.target;
264
+ const orderedParts = this._getOrderedParts();
265
+ const part = this._activePart() ? this._editingParts[this._activePart()] : orderedParts[0];
266
+ const nextPart = part ? orderedParts[orderedParts.indexOf(part) + 1] : null;
267
+ const prevPart = part ? orderedParts[orderedParts.indexOf(part) - 1] : null;
268
+ const goNext = () => {
269
+ this._clearInputBuffer();
270
+ if (nextPart) {
271
+ this._activePart.set(nextPart.key);
272
+ this._highlightActivePart();
273
+ }
274
+ };
275
+ const goPrev = () => {
276
+ this._clearInputBuffer();
277
+ if (prevPart) {
278
+ this._activePart.set(prevPart.key);
279
+ this._highlightActivePart();
280
+ }
281
+ };
282
+ const digit = this._normalizeDigit(e.key);
283
+ /*************** Handle Left and Right **************/
284
+ if (e.code === 'ArrowRight' || e.code === 'ArrowLeft') {
285
+ ignore();
286
+ if (!this._activePart()) {
287
+ this._activePart.set(part?.key ?? null);
288
+ this._highlightActivePart();
289
+ }
290
+ else {
291
+ e.code === 'ArrowRight' ? goNext() : goPrev();
292
+ }
293
+ }
294
+ else if ((e.code === 'ArrowUp' || e.code === 'ArrowDown') && !e.ctrlKey) {
295
+ /*************** Handle Up and Down **************/
296
+ ignore();
297
+ if (this.disabled || this.readonly || !part) {
298
+ return;
299
+ }
300
+ const sign = e.code === 'ArrowUp' ? +1 : -1;
301
+ this._activePart.set(part.key);
302
+ this._clearInputBuffer();
303
+ const unit = part.key === 'AMPM' ? 'hour' : part.key;
304
+ const amount = part.key === 'AMPM' ? sign * 12 : sign;
305
+ const newVal = this._editingDate().add(unit, amount);
306
+ this._editingDate.set(newVal);
307
+ // mark every enabled part as edited, so the whole value gets displayed
308
+ this._getOrderedParts().forEach((p) => {
309
+ p.typedValue = p.realValue();
310
+ });
311
+ this._detectValueChanges();
312
+ }
313
+ else if (e.code == 'Backspace' || e.code == 'Delete') {
314
+ /*************** Handle Backspace / Delete **************/
315
+ if (this.disabled || this.readonly || !part) {
316
+ return;
317
+ }
318
+ if (input.value) {
319
+ ignore();
320
+ this._clearInputBuffer();
321
+ this._activePart.set(part.key);
322
+ this._editingParts[part.key].typedValue = this._editingParts[part.key].placeholder;
323
+ this._updateText();
324
+ goPrev();
325
+ }
326
+ }
327
+ else if (e.code == 'Tab' || e.code == 'Space') {
328
+ /*************** Handle Tab and Space **************/
329
+ if (input.value) {
330
+ if (!e.shiftKey && nextPart) {
331
+ ignore();
332
+ goNext();
333
+ }
334
+ else if (e.shiftKey && prevPart) {
335
+ ignore();
336
+ goPrev();
337
+ }
338
+ }
339
+ }
340
+ else if (digit != null) {
341
+ /*************** Handle Digits **************/
342
+ ignore();
343
+ if (this.disabled || this.readonly || !part) {
344
+ return;
345
+ }
346
+ this._activePart.set(part.key);
347
+ this._handleDigitInput(part, digit, goNext);
348
+ }
349
+ else if (part?.key === 'AMPM' && (e.key?.toLowerCase() === 'a' || e.key?.toLowerCase() === 'p')) {
350
+ /*************** Handle AM/PM letters **************/
351
+ ignore();
352
+ if (this.disabled || this.readonly) {
353
+ return;
354
+ }
355
+ const hour = this._editingDate().hour;
356
+ const wantsPM = e.key.toLowerCase() === 'p';
357
+ if (wantsPM && hour < 12) {
358
+ this._applyEditingDate(this._editingDate().add('hour', 12));
359
+ }
360
+ else if (!wantsPM && hour >= 12) {
361
+ this._applyEditingDate(this._editingDate().add('hour', -12));
362
+ }
363
+ }
364
+ else {
365
+ ignore();
366
+ }
367
+ /*************** Emit Event **************/
368
+ super.emitOnKeydownEvent(e);
369
+ }
370
+ /**
371
+ * Applies typed digits to the active part with calendar-aware limits, auto advancing
372
+ * to the next part when the segment is complete or unambiguous.
373
+ * @ignore
374
+ */
375
+ _handleDigitInput(part, digit, goNext) {
376
+ let next = false;
377
+ const editing = this._editingParts[part.key];
378
+ switch (part.key) {
379
+ case 'year': {
380
+ if (editing.placeholder.length == 2 && this._inputChars.length == 0) {
381
+ // 2-digit year placeholder: prefill the current century of the active calendar
382
+ this._inputChars.push(...this._formatPart(this.calendarService.now(this._calendarSystem()), 'yyyy').substring(0, 2).split(''));
383
+ }
384
+ this._inputChars.push(digit);
385
+ editing.typedValue = ('0000' + this._inputChars.join('')).slice(-4);
386
+ if (this._inputChars.length >= 4) {
387
+ next = true;
388
+ }
389
+ const nv = parseInt(editing.typedValue);
390
+ if (nv > 0) {
391
+ this._applyEditingDate(this._editingDate().set('year', nv));
392
+ }
393
+ break;
394
+ }
395
+ case 'month': {
396
+ if (this._inputChars.length == 0) {
397
+ this._inputChars.push(digit);
398
+ editing.typedValue = `0${digit}`;
399
+ if (parseInt(digit) > 1) {
400
+ next = true;
401
+ }
402
+ }
403
+ else {
404
+ const combined = parseInt(`${this._inputChars[0]}${digit}`);
405
+ editing.typedValue = combined > 12 || combined < 1 ? `0${digit}` : `${combined}`.padStart(2, '0');
406
+ next = true;
407
+ }
408
+ const nv = parseInt(editing.typedValue);
409
+ if (nv > 0) {
410
+ this._applyEditingDate(this._editingDate().set('month', nv));
411
+ }
412
+ break;
413
+ }
414
+ case 'day': {
415
+ const totalDays = this._editingDate().month.totalDays;
416
+ if (this._inputChars.length == 0) {
417
+ this._inputChars.push(digit);
418
+ editing.typedValue = `0${digit}`;
419
+ if (parseInt(digit) > Math.floor(totalDays / 10)) {
420
+ next = true;
421
+ }
422
+ }
423
+ else {
424
+ const combined = parseInt(`${this._inputChars[0]}${digit}`);
425
+ editing.typedValue = combined > totalDays || combined < 1 ? `0${digit}` : `${combined}`.padStart(2, '0');
426
+ next = true;
427
+ }
428
+ const nv = parseInt(editing.typedValue);
429
+ if (nv > 0) {
430
+ this._applyEditingDate(this._editingDate().set('day', nv));
431
+ }
432
+ break;
433
+ }
434
+ case 'hour': {
435
+ if (this._inputChars.length == 0) {
436
+ this._inputChars.push(digit);
437
+ editing.typedValue = `0${digit}`;
438
+ if (parseInt(digit) > 2) {
439
+ next = true;
440
+ }
441
+ }
442
+ else {
443
+ const combined = parseInt(`${this._inputChars[0]}${digit}`);
444
+ editing.typedValue = combined > 23 ? `0${digit}` : `${combined}`.padStart(2, '0');
445
+ next = true;
446
+ }
447
+ this._applyEditingDate(this._editingDate().set('hour', parseInt(editing.typedValue)));
448
+ break;
449
+ }
450
+ case 'minute':
451
+ case 'second': {
452
+ if (this._inputChars.length == 0) {
453
+ this._inputChars.push(digit);
454
+ editing.typedValue = `0${digit}`;
455
+ if (parseInt(digit) > 5) {
456
+ next = true;
457
+ }
458
+ }
459
+ else {
460
+ const combined = parseInt(`${this._inputChars[0]}${digit}`);
461
+ editing.typedValue = combined > 59 ? `0${digit}` : `${combined}`.padStart(2, '0');
462
+ next = true;
463
+ }
464
+ this._applyEditingDate(this._editingDate().set(part.key, parseInt(editing.typedValue)));
465
+ break;
466
+ }
467
+ default:
468
+ return;
469
+ }
470
+ if (next) {
471
+ goNext();
472
+ }
473
+ }
474
+ /** @ignore */
475
+ _applyEditingDate(value) {
476
+ this._editingDate.set(value);
477
+ this._detectValueChanges();
478
+ }
479
+ /** @ignore */
480
+ _handleKeyUpEvent() {
481
+ if (this._activePart()) {
482
+ this._highlightActivePart();
483
+ }
484
+ }
485
+ /** @ignore */
486
+ _handleFocusEvent(e) {
487
+ super.emitOnFocusEvent(e);
488
+ }
489
+ /** @ignore */
490
+ _handleBlurEvent(e) {
491
+ this._activePart.set(null);
492
+ this._clearInputBuffer();
493
+ this._clampToRange();
494
+ super.emitOnBlurEvent(e);
495
+ }
496
+ /**
497
+ * Clamps the committed value into the [minValue, maxValue] range.
498
+ * @ignore
499
+ */
500
+ _clampToRange() {
501
+ const value = this.value;
502
+ if (!value)
503
+ return;
504
+ const min = this.minValue();
505
+ const max = this.maxValue();
506
+ if (min && value.getTime() < min.getTime()) {
507
+ this.commitValue(new Date(min), true);
508
+ }
509
+ else if (max && value.getTime() > max.getTime()) {
510
+ this.commitValue(new Date(max), true);
511
+ }
512
+ }
513
+ /** @ignore */
514
+ _handleOnInputClickEvent(e) {
515
+ setTimeout(() => {
516
+ this._detectPartAtPosition();
517
+ }, 0);
518
+ this.onClick.emit({
519
+ component: this,
520
+ htmlElement: this.getHostElement(),
521
+ nativeEvent: e,
522
+ });
523
+ }
524
+ /** @ignore */
525
+ _detectPartAtPosition() {
526
+ const input = this.inputElement;
527
+ if (!input || !input.value)
528
+ return;
529
+ const sStart = input.selectionEnd || 0;
530
+ const re = /[a-zA-Z0-9]+/gi;
531
+ const valueParts = Array.from(input.value.matchAll(re));
532
+ const orderedParts = this._getOrderedParts();
533
+ const index = valueParts.findIndex((c) => c.index <= sStart && c.index + c[0].length >= sStart);
534
+ if (index < 0 || !orderedParts[index])
535
+ return;
536
+ this._clearInputBuffer();
537
+ this._activePart.set(orderedParts[index].key);
538
+ this._highlightActivePart();
539
+ }
540
+ /** @ignore */
541
+ _highlightActivePart() {
542
+ const input = this.inputElement;
543
+ if (!input || !input.value || !this._activePart())
544
+ return;
545
+ const orderedParts = this._getOrderedParts();
546
+ const index = orderedParts.findIndex((c) => c.key == this._activePart());
547
+ const re = /[a-zA-Z0-9]+/gi;
548
+ const valueParts = Array.from(input.value.matchAll(re));
549
+ const { start, end } = getWordBoundsAtPosition(input.value, valueParts[index]?.index);
550
+ if (input && typeof input.setSelectionRange === 'function') {
551
+ input.setSelectionRange(start, end);
552
+ }
553
+ }
554
+ /** @ignore */
555
+ _detectValueChanges() {
556
+ this.commitValue(this._editingDate().date, true);
557
+ }
558
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeTextBoxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
559
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXDateTimeTextBoxComponent, isStandalone: true, selector: "ax-datetime-text-box", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: false, isRequired: false, transformFunction: null }, picker: { classPropertyName: "picker", publicName: "picker", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: "minValue", publicName: "minValue", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: "maxValue", publicName: "maxValue", isSignal: true, isRequired: false, transformFunction: null }, classNames: { classPropertyName: "classNames", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", stateChange: "stateChange", onValueChanged: "onValueChanged", onBlur: "onBlur", onFocus: "onFocus", readonlyChange: "readonlyChange", disabledChange: "disabledChange", onKeyDown: "onKeyDown", onKeyUp: "onKeyUp", onKeyPress: "onKeyPress", onClick: "onClick" }, host: { listeners: { "keydown": "_handleOnKeydownEvent($event)", "keyup": "_handleKeyUpEvent()" }, properties: { "attr.name": "name" } }, providers: [
560
+ { provide: AXComponent, useExisting: AXDateTimeTextBoxComponent },
561
+ { provide: AXFocusableComponent, useExisting: AXDateTimeTextBoxComponent },
562
+ { provide: AXValuableComponent, useExisting: AXDateTimeTextBoxComponent },
563
+ { provide: AXClearableComponent, useExisting: AXDateTimeTextBoxComponent },
564
+ {
565
+ provide: NG_VALUE_ACCESSOR,
566
+ useExisting: forwardRef(() => AXDateTimeTextBoxComponent),
567
+ multi: true,
568
+ },
569
+ ], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"ax-editor-container {{ classNames() }} ax-{{ look }}\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input\"\n type=\"text\"\n [dir]=\"isRtl() ? 'rtl' : 'ltr'\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n [attr.placeholder]=\"placeholder || _resolvedFormat()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [readonly]=\"true\"\n [tabindex]=\"tabIndex\"\n [ngModel]=\"_editingText()\"\n [style.text-align]=\"isRtl() ? 'end' : 'start'\"\n (mouseup)=\"_handleOnInputClickEvent($event)\"\n (focus)=\"_handleFocusEvent($event)\"\n (blur)=\"_handleBlurEvent($event)\"\n />\n @if (_editingText() && !disabled && !readonly) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n", styles: ["ax-datetime-text-box{width:100%}ax-datetime-text-box .ax-input{cursor:text}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
570
+ }
571
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeTextBoxComponent, decorators: [{
572
+ type: Component,
573
+ args: [{ selector: 'ax-datetime-text-box', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: ['disabled', 'readonly', 'tabIndex', 'placeholder', 'value', 'state', 'name', 'id', 'look'], outputs: [
574
+ 'valueChange',
575
+ 'stateChange',
576
+ 'onValueChanged',
577
+ 'onBlur',
578
+ 'onFocus',
579
+ 'readonlyChange',
580
+ 'disabledChange',
581
+ 'onKeyDown',
582
+ 'onKeyUp',
583
+ 'onKeyPress',
584
+ ], providers: [
585
+ { provide: AXComponent, useExisting: AXDateTimeTextBoxComponent },
586
+ { provide: AXFocusableComponent, useExisting: AXDateTimeTextBoxComponent },
587
+ { provide: AXValuableComponent, useExisting: AXDateTimeTextBoxComponent },
588
+ { provide: AXClearableComponent, useExisting: AXDateTimeTextBoxComponent },
589
+ {
590
+ provide: NG_VALUE_ACCESSOR,
591
+ useExisting: forwardRef(() => AXDateTimeTextBoxComponent),
592
+ multi: true,
593
+ },
594
+ ], imports: [FormsModule], host: {
595
+ '(keydown)': '_handleOnKeydownEvent($event)',
596
+ '(keyup)': '_handleKeyUpEvent()',
597
+ '[attr.name]': 'name',
598
+ }, template: "<div\n class=\"ax-editor-container {{ classNames() }} ax-{{ look }}\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input\"\n type=\"text\"\n [dir]=\"isRtl() ? 'rtl' : 'ltr'\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n [attr.placeholder]=\"placeholder || _resolvedFormat()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [readonly]=\"true\"\n [tabindex]=\"tabIndex\"\n [ngModel]=\"_editingText()\"\n [style.text-align]=\"isRtl() ? 'end' : 'start'\"\n (mouseup)=\"_handleOnInputClickEvent($event)\"\n (focus)=\"_handleFocusEvent($event)\"\n (blur)=\"_handleBlurEvent($event)\"\n />\n @if (_editingText() && !disabled && !readonly) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n", styles: ["ax-datetime-text-box{width:100%}ax-datetime-text-box .ax-input{cursor:text}\n"] }]
599
+ }] });
600
+
601
+ class AXDateTimeTextBoxModule {
602
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeTextBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
603
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeTextBoxModule, imports: [AXDateTimeTextBoxComponent], exports: [AXDateTimeTextBoxComponent] }); }
604
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeTextBoxModule, imports: [AXDateTimeTextBoxComponent] }); }
605
+ }
606
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeTextBoxModule, decorators: [{
607
+ type: NgModule,
608
+ args: [{
609
+ imports: [AXDateTimeTextBoxComponent],
610
+ exports: [AXDateTimeTextBoxComponent],
611
+ }]
612
+ }] });
613
+
614
+ /**
615
+ * Generated bundle index. Do not edit.
616
+ */
617
+
618
+ export { AXDateTimeTextBoxComponent, AXDateTimeTextBoxModule };
619
+ //# sourceMappingURL=acorex-components-datetime-text-box.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-datetime-text-box.mjs","sources":["../tmp-esm2022/datetime-text-box/lib/datetime-text-box.component.js","../tmp-esm2022/datetime-text-box/lib/datetime-text-box.module.js","../tmp-esm2022/datetime-text-box/acorex-components-datetime-text-box.js"],"sourcesContent":["/* eslint-disable @angular-eslint/no-inputs-metadata-property */\nimport { AXClearableComponent, AXComponent, AXFocusableComponent, AXValuableComponent, MXInputBaseValueComponent, MXLookComponent, } from '@acorex/cdk/common';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { getWordBoundsAtPosition } from '@acorex/core/utils';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, effect, forwardRef, inject, input, linkedSignal, output, signal, untracked, viewChild, } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { map } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\n/**\n * A date & time editor that works like a text box: the user types digits directly into a\n * masked value (separators come from the active format), navigates between date/time\n * segments with Left/Right arrows and spins segment values with Up/Down arrows.\n *\n * The committed value is a native `Date` (same contract as `ax-datetime-box`), and both\n * `gregorian` and `solar-hijri` calendar systems are supported.\n *\n * @category Components\n */\nexport class AXDateTimeTextBoxComponent extends classes((MXInputBaseValueComponent), MXLookComponent) {\n constructor() {\n super(...arguments);\n this.platformService = inject(AXPlatform);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n /** @ignore */\n this._editingParts = {\n year: {\n key: 'year',\n placeholder: 'yyyy',\n placeholders: ['YY', 'yy', 'YYYY', 'yyyy'],\n enabled: false,\n default: 2023,\n typedValue: null,\n realValue: () => this._formatPart(this._editingDate(), this._editingParts.year.placeholder),\n },\n month: {\n key: 'month',\n placeholder: 'MM',\n placeholders: ['MM', 'M'],\n enabled: false,\n default: 1,\n typedValue: null,\n realValue: () => this._formatPart(this._editingDate(), this._editingParts.month.placeholder),\n },\n day: {\n key: 'day',\n placeholder: 'dd',\n placeholders: ['dd', 'DD', 'd'],\n enabled: false,\n default: 1,\n typedValue: null,\n realValue: () => this._formatPart(this._editingDate(), this._editingParts.day.placeholder),\n },\n hour: {\n key: 'hour',\n placeholder: 'HH',\n placeholders: ['HH', 'H', 'hh', 'h'],\n enabled: false,\n default: 0,\n typedValue: null,\n realValue: () => this._formatPart(this._editingDate(), this._editingParts.hour.placeholder),\n },\n minute: {\n key: 'minute',\n placeholder: 'mm',\n placeholders: ['mm', 'm'],\n enabled: false,\n default: 0,\n typedValue: null,\n realValue: () => this._formatPart(this._editingDate(), this._editingParts.minute.placeholder),\n },\n second: {\n key: 'second',\n placeholder: 'ss',\n placeholders: ['ss', 's'],\n enabled: false,\n default: 0,\n typedValue: null,\n realValue: () => this._formatPart(this._editingDate(), this._editingParts.second.placeholder),\n },\n AMPM: {\n key: 'AMPM',\n placeholder: 'a',\n placeholders: ['a', 'A'],\n enabled: false,\n default: 0,\n typedValue: null,\n realValue: () => this._formatPart(this._editingDate(), this._editingParts.AMPM.placeholder),\n },\n };\n /** @ignore */\n this._editingText = signal('', ...(ngDevMode ? [{ debugName: \"_editingText\" }] : []));\n /** @ignore */\n this._inputChars = [];\n /** @ignore */\n this._activePart = signal(null, ...(ngDevMode ? [{ debugName: \"_activePart\" }] : []));\n /**\n * Determines which parts are editable: `date`, `time` or `datetime`.\n * The mask format is resolved from the active locale profile for this mode.\n * @defaultValue 'datetime'\n */\n this.picker = input('datetime', ...(ngDevMode ? [{ debugName: \"picker\" }] : []));\n /**\n * The calendar system to use (`gregorian` or `solar-hijri`).\n * Falls back to the active locale profile calendar when not provided.\n */\n this.calendar = input(null, ...(ngDevMode ? [{ debugName: \"calendar\" }] : []));\n /**\n * Optional format override (e.g. `yyyy/MM/dd HH:mm:ss`).\n * When omitted, the short format of the active locale profile is used.\n */\n this.format = input(null, ...(ngDevMode ? [{ debugName: \"format\" }] : []));\n /**\n * The minimum allowed date value. Applied when the editor loses focus.\n */\n this.minValue = input(null, ...(ngDevMode ? [{ debugName: \"minValue\" }] : []));\n /**\n * The maximum allowed date value. Applied when the editor loses focus.\n */\n this.maxValue = input(null, ...(ngDevMode ? [{ debugName: \"maxValue\" }] : []));\n /**\n * Emitted when a click event occurs on the editor input.\n * @event\n */\n this.onClick = output();\n /** @ignore */\n this.classNames = input('', ...(ngDevMode ? [{ debugName: \"classNames\", alias: 'class' }] : [{ alias: 'class' }]));\n this._calendarSystem = computed(() => this.calendar() ?? this.localeService.activeProfile().calendar.system, ...(ngDevMode ? [{ debugName: \"_calendarSystem\" }] : []));\n this._resolvedFormat = computed(() => this.format() ?? this.localeService.activeProfile().formats[this.picker()]?.short ?? '', ...(ngDevMode ? [{ debugName: \"_resolvedFormat\" }] : []));\n /** @ignore */\n this._editingDate = linkedSignal(() => this.calendarService.now(this._calendarSystem()), ...(ngDevMode ? [{ debugName: \"_editingDate\" }] : []));\n /** @ignore */\n this.inputRef = viewChild('input', ...(ngDevMode ? [{ debugName: \"inputRef\" }] : []));\n /**\n * @description check if page is in rtl or ltr\n */\n this.isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: \"isRtl\" }] : []));\n /** @ignore */\n this.#formatEffect = effect(() => {\n this._resolvedFormat();\n this._calendarSystem();\n this._detectParts();\n untracked(() => {\n this.internalValueChanged(this.value);\n });\n }, ...(ngDevMode ? [{ debugName: \"#formatEffect\" }] : []));\n }\n /** @ignore */\n get inputElement() {\n return this.inputRef()?.nativeElement;\n }\n /** @ignore */\n #formatEffect;\n /** @ignore */\n ngOnInit() {\n super.ngOnInit();\n this.platformService.directionChange.pipe(map((i) => i.data === 'rtl')).subscribe((isRtl) => this.isRtl.set(isRtl));\n }\n /**\n * Formats a part using the calendar already attached to the AXDateTime.\n * Avoids formatService's string-options path, which always uses the active locale calendar.\n * @ignore\n */\n _formatPart(date, placeholder) {\n return date.format(placeholder);\n }\n /** @ignore */\n _detectParts() {\n Object.values(this._editingParts).forEach((e) => {\n e.enabled = false;\n });\n const formatParts = this._resolvedFormat().split(/[^a-zA-Z]+/);\n formatParts.forEach((f) => {\n const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));\n if (found) {\n found.enabled = true;\n found.placeholder = f;\n }\n });\n }\n /** @ignore */\n _getOrderedParts() {\n const formatParts = this._resolvedFormat().split(/[^a-zA-Z]+/);\n const result = [];\n formatParts.forEach((f) => {\n const found = Object.values(this._editingParts).find((c) => c.placeholders.some((d) => d == f));\n if (found && found.enabled)\n result.push(found);\n });\n return result;\n }\n /** @ignore */\n _clearInputBuffer() {\n this._inputChars = [];\n }\n /** @ignore */\n _updateText() {\n let text = this._resolvedFormat();\n Object.values(this._editingParts).forEach((part) => {\n if (this._activePart() == part.key) {\n if (part.typedValue)\n text = text.replace(part.placeholder, part.typedValue);\n }\n else {\n if (part.typedValue != part.placeholder && part.typedValue != null) {\n text = text.replace(part.placeholder, part.realValue());\n }\n }\n });\n this._editingText.set(text == this._resolvedFormat() ? '' : text);\n if (this._activePart()) {\n this._highlightActivePart();\n }\n }\n /**\n * Handles changes to the internal date value, updating editing parts and text representation.\n * @ignore\n */\n internalValueChanged(value) {\n if (value && this.calendarService.isValidDate(value)) {\n this._editingDate.set(this.calendarService.create(value, this._calendarSystem()));\n }\n Object.values(this._editingParts).forEach((part) => {\n if (value) {\n if (part.typedValue != part.placeholder)\n part.typedValue = part.realValue();\n }\n else\n part.typedValue = null;\n });\n this._updateText();\n }\n /**\n * Normalizes Persian (U+06F0-U+06F9) and Arabic-Indic (U+0660-U+0669) digits to ASCII.\n * @ignore\n */\n _normalizeDigit(key) {\n if (!key || key.length !== 1)\n return null;\n const code = key.charCodeAt(0);\n if (code >= 0x30 && code <= 0x39)\n return key;\n if (code >= 0x06f0 && code <= 0x06f9)\n return String.fromCharCode(code - 0x06f0 + 0x30);\n if (code >= 0x0660 && code <= 0x0669)\n return String.fromCharCode(code - 0x0660 + 0x30);\n return null;\n }\n /** @ignore */\n _handleOnKeydownEvent(e) {\n const ignore = () => {\n if (e.key === 'Tab' || e.code === 'Space' || e.code === 'Enter') {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n };\n const input = e.target;\n const orderedParts = this._getOrderedParts();\n const part = this._activePart() ? this._editingParts[this._activePart()] : orderedParts[0];\n const nextPart = part ? orderedParts[orderedParts.indexOf(part) + 1] : null;\n const prevPart = part ? orderedParts[orderedParts.indexOf(part) - 1] : null;\n const goNext = () => {\n this._clearInputBuffer();\n if (nextPart) {\n this._activePart.set(nextPart.key);\n this._highlightActivePart();\n }\n };\n const goPrev = () => {\n this._clearInputBuffer();\n if (prevPart) {\n this._activePart.set(prevPart.key);\n this._highlightActivePart();\n }\n };\n const digit = this._normalizeDigit(e.key);\n /*************** Handle Left and Right **************/\n if (e.code === 'ArrowRight' || e.code === 'ArrowLeft') {\n ignore();\n if (!this._activePart()) {\n this._activePart.set(part?.key ?? null);\n this._highlightActivePart();\n }\n else {\n e.code === 'ArrowRight' ? goNext() : goPrev();\n }\n }\n else if ((e.code === 'ArrowUp' || e.code === 'ArrowDown') && !e.ctrlKey) {\n /*************** Handle Up and Down **************/\n ignore();\n if (this.disabled || this.readonly || !part) {\n return;\n }\n const sign = e.code === 'ArrowUp' ? +1 : -1;\n this._activePart.set(part.key);\n this._clearInputBuffer();\n const unit = part.key === 'AMPM' ? 'hour' : part.key;\n const amount = part.key === 'AMPM' ? sign * 12 : sign;\n const newVal = this._editingDate().add(unit, amount);\n this._editingDate.set(newVal);\n // mark every enabled part as edited, so the whole value gets displayed\n this._getOrderedParts().forEach((p) => {\n p.typedValue = p.realValue();\n });\n this._detectValueChanges();\n }\n else if (e.code == 'Backspace' || e.code == 'Delete') {\n /*************** Handle Backspace / Delete **************/\n if (this.disabled || this.readonly || !part) {\n return;\n }\n if (input.value) {\n ignore();\n this._clearInputBuffer();\n this._activePart.set(part.key);\n this._editingParts[part.key].typedValue = this._editingParts[part.key].placeholder;\n this._updateText();\n goPrev();\n }\n }\n else if (e.code == 'Tab' || e.code == 'Space') {\n /*************** Handle Tab and Space **************/\n if (input.value) {\n if (!e.shiftKey && nextPart) {\n ignore();\n goNext();\n }\n else if (e.shiftKey && prevPart) {\n ignore();\n goPrev();\n }\n }\n }\n else if (digit != null) {\n /*************** Handle Digits **************/\n ignore();\n if (this.disabled || this.readonly || !part) {\n return;\n }\n this._activePart.set(part.key);\n this._handleDigitInput(part, digit, goNext);\n }\n else if (part?.key === 'AMPM' && (e.key?.toLowerCase() === 'a' || e.key?.toLowerCase() === 'p')) {\n /*************** Handle AM/PM letters **************/\n ignore();\n if (this.disabled || this.readonly) {\n return;\n }\n const hour = this._editingDate().hour;\n const wantsPM = e.key.toLowerCase() === 'p';\n if (wantsPM && hour < 12) {\n this._applyEditingDate(this._editingDate().add('hour', 12));\n }\n else if (!wantsPM && hour >= 12) {\n this._applyEditingDate(this._editingDate().add('hour', -12));\n }\n }\n else {\n ignore();\n }\n /*************** Emit Event **************/\n super.emitOnKeydownEvent(e);\n }\n /**\n * Applies typed digits to the active part with calendar-aware limits, auto advancing\n * to the next part when the segment is complete or unambiguous.\n * @ignore\n */\n _handleDigitInput(part, digit, goNext) {\n let next = false;\n const editing = this._editingParts[part.key];\n switch (part.key) {\n case 'year': {\n if (editing.placeholder.length == 2 && this._inputChars.length == 0) {\n // 2-digit year placeholder: prefill the current century of the active calendar\n this._inputChars.push(...this._formatPart(this.calendarService.now(this._calendarSystem()), 'yyyy').substring(0, 2).split(''));\n }\n this._inputChars.push(digit);\n editing.typedValue = ('0000' + this._inputChars.join('')).slice(-4);\n if (this._inputChars.length >= 4) {\n next = true;\n }\n const nv = parseInt(editing.typedValue);\n if (nv > 0) {\n this._applyEditingDate(this._editingDate().set('year', nv));\n }\n break;\n }\n case 'month': {\n if (this._inputChars.length == 0) {\n this._inputChars.push(digit);\n editing.typedValue = `0${digit}`;\n if (parseInt(digit) > 1) {\n next = true;\n }\n }\n else {\n const combined = parseInt(`${this._inputChars[0]}${digit}`);\n editing.typedValue = combined > 12 || combined < 1 ? `0${digit}` : `${combined}`.padStart(2, '0');\n next = true;\n }\n const nv = parseInt(editing.typedValue);\n if (nv > 0) {\n this._applyEditingDate(this._editingDate().set('month', nv));\n }\n break;\n }\n case 'day': {\n const totalDays = this._editingDate().month.totalDays;\n if (this._inputChars.length == 0) {\n this._inputChars.push(digit);\n editing.typedValue = `0${digit}`;\n if (parseInt(digit) > Math.floor(totalDays / 10)) {\n next = true;\n }\n }\n else {\n const combined = parseInt(`${this._inputChars[0]}${digit}`);\n editing.typedValue = combined > totalDays || combined < 1 ? `0${digit}` : `${combined}`.padStart(2, '0');\n next = true;\n }\n const nv = parseInt(editing.typedValue);\n if (nv > 0) {\n this._applyEditingDate(this._editingDate().set('day', nv));\n }\n break;\n }\n case 'hour': {\n if (this._inputChars.length == 0) {\n this._inputChars.push(digit);\n editing.typedValue = `0${digit}`;\n if (parseInt(digit) > 2) {\n next = true;\n }\n }\n else {\n const combined = parseInt(`${this._inputChars[0]}${digit}`);\n editing.typedValue = combined > 23 ? `0${digit}` : `${combined}`.padStart(2, '0');\n next = true;\n }\n this._applyEditingDate(this._editingDate().set('hour', parseInt(editing.typedValue)));\n break;\n }\n case 'minute':\n case 'second': {\n if (this._inputChars.length == 0) {\n this._inputChars.push(digit);\n editing.typedValue = `0${digit}`;\n if (parseInt(digit) > 5) {\n next = true;\n }\n }\n else {\n const combined = parseInt(`${this._inputChars[0]}${digit}`);\n editing.typedValue = combined > 59 ? `0${digit}` : `${combined}`.padStart(2, '0');\n next = true;\n }\n this._applyEditingDate(this._editingDate().set(part.key, parseInt(editing.typedValue)));\n break;\n }\n default:\n return;\n }\n if (next) {\n goNext();\n }\n }\n /** @ignore */\n _applyEditingDate(value) {\n this._editingDate.set(value);\n this._detectValueChanges();\n }\n /** @ignore */\n _handleKeyUpEvent() {\n if (this._activePart()) {\n this._highlightActivePart();\n }\n }\n /** @ignore */\n _handleFocusEvent(e) {\n super.emitOnFocusEvent(e);\n }\n /** @ignore */\n _handleBlurEvent(e) {\n this._activePart.set(null);\n this._clearInputBuffer();\n this._clampToRange();\n super.emitOnBlurEvent(e);\n }\n /**\n * Clamps the committed value into the [minValue, maxValue] range.\n * @ignore\n */\n _clampToRange() {\n const value = this.value;\n if (!value)\n return;\n const min = this.minValue();\n const max = this.maxValue();\n if (min && value.getTime() < min.getTime()) {\n this.commitValue(new Date(min), true);\n }\n else if (max && value.getTime() > max.getTime()) {\n this.commitValue(new Date(max), true);\n }\n }\n /** @ignore */\n _handleOnInputClickEvent(e) {\n setTimeout(() => {\n this._detectPartAtPosition();\n }, 0);\n this.onClick.emit({\n component: this,\n htmlElement: this.getHostElement(),\n nativeEvent: e,\n });\n }\n /** @ignore */\n _detectPartAtPosition() {\n const input = this.inputElement;\n if (!input || !input.value)\n return;\n const sStart = input.selectionEnd || 0;\n const re = /[a-zA-Z0-9]+/gi;\n const valueParts = Array.from(input.value.matchAll(re));\n const orderedParts = this._getOrderedParts();\n const index = valueParts.findIndex((c) => c.index <= sStart && c.index + c[0].length >= sStart);\n if (index < 0 || !orderedParts[index])\n return;\n this._clearInputBuffer();\n this._activePart.set(orderedParts[index].key);\n this._highlightActivePart();\n }\n /** @ignore */\n _highlightActivePart() {\n const input = this.inputElement;\n if (!input || !input.value || !this._activePart())\n return;\n const orderedParts = this._getOrderedParts();\n const index = orderedParts.findIndex((c) => c.key == this._activePart());\n const re = /[a-zA-Z0-9]+/gi;\n const valueParts = Array.from(input.value.matchAll(re));\n const { start, end } = getWordBoundsAtPosition(input.value, valueParts[index]?.index);\n if (input && typeof input.setSelectionRange === 'function') {\n input.setSelectionRange(start, end);\n }\n }\n /** @ignore */\n _detectValueChanges() {\n this.commitValue(this._editingDate().date, true);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeTextBoxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXDateTimeTextBoxComponent, isStandalone: true, selector: \"ax-datetime-text-box\", inputs: { disabled: { classPropertyName: \"disabled\", publicName: \"disabled\", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: false, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: \"tabIndex\", publicName: \"tabIndex\", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: \"placeholder\", publicName: \"placeholder\", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: \"value\", publicName: \"value\", isSignal: false, isRequired: false, transformFunction: null }, state: { classPropertyName: \"state\", publicName: \"state\", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: \"name\", publicName: \"name\", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: \"id\", publicName: \"id\", isSignal: false, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: false, isRequired: false, transformFunction: null }, picker: { classPropertyName: \"picker\", publicName: \"picker\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: \"format\", publicName: \"format\", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: \"minValue\", publicName: \"minValue\", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: \"maxValue\", publicName: \"maxValue\", isSignal: true, isRequired: false, transformFunction: null }, classNames: { classPropertyName: \"classNames\", publicName: \"class\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: \"valueChange\", stateChange: \"stateChange\", onValueChanged: \"onValueChanged\", onBlur: \"onBlur\", onFocus: \"onFocus\", readonlyChange: \"readonlyChange\", disabledChange: \"disabledChange\", onKeyDown: \"onKeyDown\", onKeyUp: \"onKeyUp\", onKeyPress: \"onKeyPress\", onClick: \"onClick\" }, host: { listeners: { \"keydown\": \"_handleOnKeydownEvent($event)\", \"keyup\": \"_handleKeyUpEvent()\" }, properties: { \"attr.name\": \"name\" } }, providers: [\n { provide: AXComponent, useExisting: AXDateTimeTextBoxComponent },\n { provide: AXFocusableComponent, useExisting: AXDateTimeTextBoxComponent },\n { provide: AXValuableComponent, useExisting: AXDateTimeTextBoxComponent },\n { provide: AXClearableComponent, useExisting: AXDateTimeTextBoxComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXDateTimeTextBoxComponent),\n multi: true,\n },\n ], viewQueries: [{ propertyName: \"inputRef\", first: true, predicate: [\"input\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div\\n class=\\\"ax-editor-container {{ classNames() }} ax-{{ look }}\\\"\\n [class.ax-state-disabled]=\\\"disabled\\\"\\n [class.ax-state-readonly]=\\\"readonly\\\"\\n>\\n <ng-content select=\\\"ax-prefix\\\"> </ng-content>\\n <input\\n #input\\n [name]=\\\"name\\\"\\n [id]=\\\"id\\\"\\n class=\\\"ax-input\\\"\\n type=\\\"text\\\"\\n [dir]=\\\"isRtl() ? 'rtl' : 'ltr'\\\"\\n autocomplete=\\\"off\\\"\\n autocorrect=\\\"off\\\"\\n autocapitalize=\\\"off\\\"\\n spellcheck=\\\"false\\\"\\n [attr.placeholder]=\\\"placeholder || _resolvedFormat()\\\"\\n [class.ax-state-disabled]=\\\"disabled\\\"\\n [class.ax-state-readonly]=\\\"readonly\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"true\\\"\\n [tabindex]=\\\"tabIndex\\\"\\n [ngModel]=\\\"_editingText()\\\"\\n [style.text-align]=\\\"isRtl() ? 'end' : 'start'\\\"\\n (mouseup)=\\\"_handleOnInputClickEvent($event)\\\"\\n (focus)=\\\"_handleFocusEvent($event)\\\"\\n (blur)=\\\"_handleBlurEvent($event)\\\"\\n />\\n @if (_editingText() && !disabled && !readonly) {\\n <ng-content select=\\\"ax-clear-button\\\"></ng-content>\\n }\\n <ng-content select=\\\"ax-suffix\\\"> </ng-content>\\n</div>\\n<ng-content select=\\\"ax-validation-rule\\\"> </ng-content>\\n<div class=\\\"ax-error-container\\\"></div>\\n\", styles: [\"ax-datetime-text-box{width:100%}ax-datetime-text-box .ax-input{cursor:text}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeTextBoxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-datetime-text-box', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: ['disabled', 'readonly', 'tabIndex', 'placeholder', 'value', 'state', 'name', 'id', 'look'], outputs: [\n 'valueChange',\n 'stateChange',\n 'onValueChanged',\n 'onBlur',\n 'onFocus',\n 'readonlyChange',\n 'disabledChange',\n 'onKeyDown',\n 'onKeyUp',\n 'onKeyPress',\n ], providers: [\n { provide: AXComponent, useExisting: AXDateTimeTextBoxComponent },\n { provide: AXFocusableComponent, useExisting: AXDateTimeTextBoxComponent },\n { provide: AXValuableComponent, useExisting: AXDateTimeTextBoxComponent },\n { provide: AXClearableComponent, useExisting: AXDateTimeTextBoxComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXDateTimeTextBoxComponent),\n multi: true,\n },\n ], imports: [FormsModule], host: {\n '(keydown)': '_handleOnKeydownEvent($event)',\n '(keyup)': '_handleKeyUpEvent()',\n '[attr.name]': 'name',\n }, template: \"<div\\n class=\\\"ax-editor-container {{ classNames() }} ax-{{ look }}\\\"\\n [class.ax-state-disabled]=\\\"disabled\\\"\\n [class.ax-state-readonly]=\\\"readonly\\\"\\n>\\n <ng-content select=\\\"ax-prefix\\\"> </ng-content>\\n <input\\n #input\\n [name]=\\\"name\\\"\\n [id]=\\\"id\\\"\\n class=\\\"ax-input\\\"\\n type=\\\"text\\\"\\n [dir]=\\\"isRtl() ? 'rtl' : 'ltr'\\\"\\n autocomplete=\\\"off\\\"\\n autocorrect=\\\"off\\\"\\n autocapitalize=\\\"off\\\"\\n spellcheck=\\\"false\\\"\\n [attr.placeholder]=\\\"placeholder || _resolvedFormat()\\\"\\n [class.ax-state-disabled]=\\\"disabled\\\"\\n [class.ax-state-readonly]=\\\"readonly\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"true\\\"\\n [tabindex]=\\\"tabIndex\\\"\\n [ngModel]=\\\"_editingText()\\\"\\n [style.text-align]=\\\"isRtl() ? 'end' : 'start'\\\"\\n (mouseup)=\\\"_handleOnInputClickEvent($event)\\\"\\n (focus)=\\\"_handleFocusEvent($event)\\\"\\n (blur)=\\\"_handleBlurEvent($event)\\\"\\n />\\n @if (_editingText() && !disabled && !readonly) {\\n <ng-content select=\\\"ax-clear-button\\\"></ng-content>\\n }\\n <ng-content select=\\\"ax-suffix\\\"> </ng-content>\\n</div>\\n<ng-content select=\\\"ax-validation-rule\\\"> </ng-content>\\n<div class=\\\"ax-error-container\\\"></div>\\n\", styles: [\"ax-datetime-text-box{width:100%}ax-datetime-text-box .ax-input{cursor:text}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtdGV4dC1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9kYXRldGltZS10ZXh0LWJveC9zcmMvbGliL2RhdGV0aW1lLXRleHQtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZGF0ZXRpbWUtdGV4dC1ib3gvc3JjL2xpYi9kYXRldGltZS10ZXh0LWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRUFBZ0U7QUFDaEUsT0FBTyxFQUNMLG9CQUFvQixFQUVwQixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBeUQsTUFBTSx3QkFBd0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7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QUNRLENBQUMsV0FBVyxDQUFDLFFBQ2hCO3dCQUNKLFdBQVcsRUFBRSwrQkFBK0I7d0JBQzVDLFNBQVMsRUFBRSxxQkFBcUI7d0JBQ2hDLGFBQWEsRUFBRSxNQUFNO3FCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dHMtbWV0YWRhdGEtcHJvcGVydHkgKi9cbmltcG9ydCB7XG4gIEFYQ2xlYXJhYmxlQ29tcG9uZW50LFxuICBBWENsaWNrRXZlbnQsXG4gIEFYQ29tcG9uZW50LFxuICBBWEZvY3VzYWJsZUNvbXBvbmVudCxcbiAgQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgTVhJbnB1dEJhc2VWYWx1ZUNvbXBvbmVudCxcbiAgTVhMb29rQ29tcG9uZW50LFxufSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEYXRlVGltZVBpY2tlclR5cGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYRGF0ZVRpbWVQYXJ0LCBBWERhdGVUaW1lUGFydHMsIFRpbWVVbml0IH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWExvY2FsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvbG9jYWxlJztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHsgZ2V0V29yZEJvdW5kc0F0UG9zaXRpb24gfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIGxpbmtlZFNpZ25hbCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNsYXNzZXMgfSBmcm9tICdwb2x5dHlwZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIGRhdGUgJiB0aW1lIGVkaXRvciB0aGF0IHdvcmtzIGxpa2UgYSB0ZXh0IGJveDogdGhlIHVzZXIgdHlwZXMgZGlnaXRzIGRpcmVjdGx5IGludG8gYVxuICogbWFza2VkIHZhbHVlIChzZXBhcmF0b3JzIGNvbWUgZnJvbSB0aGUgYWN0aXZlIGZvcm1hdCksIG5hdmlnYXRlcyBiZXR3ZWVuIGRhdGUvdGltZVxuICogc2VnbWVudHMgd2l0aCBMZWZ0L1JpZ2h0IGFycm93cyBhbmQgc3BpbnMgc2VnbWVudCB2YWx1ZXMgd2l0aCBVcC9Eb3duIGFycm93cy5cbiAqXG4gKiBUaGUgY29tbWl0dGVkIHZhbHVlIGlzIGEgbmF0aXZlIGBEYXRlYCAoc2FtZSBjb250cmFjdCBhcyBgYXgtZGF0ZXRpbWUtYm94YCksIGFuZCBib3RoXG4gKiBgZ3JlZ29yaWFuYCBhbmQgYHNvbGFyLWhpanJpYCBjYWxlbmRhciBzeXN0ZW1zIGFyZSBzdXBwb3J0ZWQuXG4gKlxuICogQGNhdGVnb3J5IENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtZGF0ZXRpbWUtdGV4dC1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXRpbWUtdGV4dC1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0ZXRpbWUtdGV4dC1ib3guY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW5wdXRzOiBbJ2Rpc2FibGVkJywgJ3JlYWRvbmx5JywgJ3RhYkluZGV4JywgJ3BsYWNlaG9sZGVyJywgJ3ZhbHVlJywgJ3N0YXRlJywgJ25hbWUnLCAnaWQnLCAnbG9vayddLFxuICBvdXRwdXRzOiBbXG4gICAgJ3ZhbHVlQ2hhbmdlJyxcbiAgICAnc3RhdGVDaGFuZ2UnLFxuICAgICdvblZhbHVlQ2hhbmdlZCcsXG4gICAgJ29uQmx1cicsXG4gICAgJ29uRm9jdXMnLFxuICAgICdyZWFkb25seUNoYW5nZScsXG4gICAgJ2Rpc2FibGVkQ2hhbmdlJyxcbiAgICAnb25LZXlEb3duJyxcbiAgICAnb25LZXlVcCcsXG4gICAgJ29uS2V5UHJlc3MnLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZVRleHRCb3hDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYRm9jdXNhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZVRleHRCb3hDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IEFYVmFsdWFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lVGV4dEJveENvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogQVhDbGVhcmFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lVGV4dEJveENvbXBvbmVudCB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQVhEYXRlVGltZVRleHRCb3hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlXSxcbiAgaG9zdDoge1xuICAgICcoa2V5ZG93biknOiAnX2hhbmRsZU9uS2V5ZG93bkV2ZW50KCRldmVudCknLFxuICAgICcoa2V5dXApJzogJ19oYW5kbGVLZXlVcEV2ZW50KCknLFxuICAgICdbYXR0ci5uYW1lXSc6ICduYW1lJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZVRleHRCb3hDb21wb25lbnQgZXh0ZW5kcyBjbGFzc2VzKE1YSW5wdXRCYXNlVmFsdWVDb21wb25lbnQ8RGF0ZT4sIE1YTG9va0NvbXBvbmVudCkge1xuICBwcml2YXRlIHBsYXRmb3JtU2VydmljZSA9IGluamVjdChBWFBsYXRmb3JtKTtcbiAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEFYTG9jYWxlU2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0aW5nUGFydHM6IEFYRGF0ZVRpbWVQYXJ0cyA9IHtcbiAgICB5ZWFyOiB7XG4gICAgICBrZXk6ICd5ZWFyJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAneXl5eScsXG4gICAgICBwbGFjZWhvbGRlcnM6IFsnWVknLCAneXknLCAnWVlZWScsICd5eXl5J10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDIwMjMsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLl9mb3JtYXRQYXJ0KHRoaXMuX2VkaXRpbmdEYXRlKCksIHRoaXMuX2VkaXRpbmdQYXJ0cy55ZWFyLnBsYWNlaG9sZGVyKSxcbiAgICB9LFxuICAgIG1vbnRoOiB7XG4gICAgICBrZXk6ICdtb250aCcsXG4gICAgICBwbGFjZWhvbGRlcjogJ01NJyxcbiAgICAgIHBsYWNlaG9sZGVyczogWydNTScsICdNJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLl9mb3JtYXRQYXJ0KHRoaXMuX2VkaXRpbmdEYXRlKCksIHRoaXMuX2VkaXRpbmdQYXJ0cy5tb250aC5wbGFjZWhvbGRlciksXG4gICAgfSxcbiAgICBkYXk6IHtcbiAgICAgIGtleTogJ2RheScsXG4gICAgICBwbGFjZWhvbGRlcjogJ2RkJyxcbiAgICAgIHBsYWNlaG9sZGVyczogWydkZCcsICdERCcsICdkJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLl9mb3JtYXRQYXJ0KHRoaXMuX2VkaXRpbmdEYXRlKCksIHRoaXMuX2VkaXRpbmdQYXJ0cy5kYXkucGxhY2Vob2xkZXIpLFxuICAgIH0sXG4gICAgaG91cjoge1xuICAgICAga2V5OiAnaG91cicsXG4gICAgICBwbGFjZWhvbGRlcjogJ0hIJyxcbiAgICAgIHBsYWNlaG9sZGVyczogWydISCcsICdIJywgJ2hoJywgJ2gnXSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuX2Zvcm1hdFBhcnQodGhpcy5fZWRpdGluZ0RhdGUoKSwgdGhpcy5fZWRpdGluZ1BhcnRzLmhvdXIucGxhY2Vob2xkZXIpLFxuICAgIH0sXG4gICAgbWludXRlOiB7XG4gICAgICBrZXk6ICdtaW51dGUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdtbScsXG4gICAgICBwbGFjZWhvbGRlcnM6IFsnbW0nLCAnbSddLFxuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiAwLFxuICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5fZm9ybWF0UGFydCh0aGlzLl9lZGl0aW5nRGF0ZSgpLCB0aGlzLl9lZGl0aW5nUGFydHMubWludXRlLnBsYWNlaG9sZGVyKSxcbiAgICB9LFxuICAgIHNlY29uZDoge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnc3MnLFxuICAgICAgcGxhY2Vob2xkZXJzOiBbJ3NzJywgJ3MnXSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuX2Zvcm1hdFBhcnQodGhpcy5fZWRpdGluZ0RhdGUoKSwgdGhpcy5fZWRpdGluZ1BhcnRzLnNlY29uZC5wbGFjZWhvbGRlciksXG4gICAgfSxcbiAgICBBTVBNOiB7XG4gICAgICBrZXk6ICdBTVBNJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnYScsXG4gICAgICBwbGFjZWhvbGRlcnM6IFsnYScsICdBJ10sXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLl9mb3JtYXRQYXJ0KHRoaXMuX2VkaXRpbmdEYXRlKCksIHRoaXMuX2VkaXRpbmdQYXJ0cy5BTVBNLnBsYWNlaG9sZGVyKSxcbiAgICB9LFxuICB9O1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByb3RlY3RlZCBfZWRpdGluZ1RleHQgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfaW5wdXRDaGFyczogc3RyaW5nW10gPSBbXTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9hY3RpdmVQYXJ0ID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoaWNoIHBhcnRzIGFyZSBlZGl0YWJsZTogYGRhdGVgLCBgdGltZWAgb3IgYGRhdGV0aW1lYC5cbiAgICogVGhlIG1hc2sgZm9ybWF0IGlzIHJlc29sdmVkIGZyb20gdGhlIGFjdGl2ZSBsb2NhbGUgcHJvZmlsZSBmb3IgdGhpcyBtb2RlLlxuICAgKiBAZGVmYXVsdFZhbHVlICdkYXRldGltZSdcbiAgICovXG4gIHBpY2tlciA9IGlucHV0PEFYRGF0ZVRpbWVQaWNrZXJUeXBlPignZGF0ZXRpbWUnKTtcblxuICAvKipcbiAgICogVGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgKGBncmVnb3JpYW5gIG9yIGBzb2xhci1oaWpyaWApLlxuICAgKiBGYWxscyBiYWNrIHRvIHRoZSBhY3RpdmUgbG9jYWxlIHByb2ZpbGUgY2FsZW5kYXIgd2hlbiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmb3JtYXQgb3ZlcnJpZGUgKGUuZy4gYHl5eXkvTU0vZGQgSEg6bW06c3NgKS5cbiAgICogV2hlbiBvbWl0dGVkLCB0aGUgc2hvcnQgZm9ybWF0IG9mIHRoZSBhY3RpdmUgbG9jYWxlIHByb2ZpbGUgaXMgdXNlZC5cbiAgICovXG4gIGZvcm1hdCA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBhbGxvd2VkIGRhdGUgdmFsdWUuIEFwcGxpZWQgd2hlbiB0aGUgZWRpdG9yIGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgbWluVmFsdWUgPSBpbnB1dDxEYXRlIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZSB2YWx1ZS4gQXBwbGllZCB3aGVuIHRoZSBlZGl0b3IgbG9zZXMgZm9jdXMuXG4gICAqL1xuICBtYXhWYWx1ZSA9IGlucHV0PERhdGUgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgY2xpY2sgZXZlbnQgb2NjdXJzIG9uIHRoZSBlZGl0b3IgaW5wdXQuXG4gICAqIEBldmVudFxuICAgKi9cbiAgb25DbGljayA9IG91dHB1dDxBWENsaWNrRXZlbnQ+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgY2xhc3NOYW1lcyA9IGlucHV0KCcnLCB7IGFsaWFzOiAnY2xhc3MnIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfY2FsZW5kYXJTeXN0ZW0gPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmNhbGVuZGFyKCkgPz8gdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0sXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9yZXNvbHZlZEZvcm1hdCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZm9ybWF0KCkgPz8gdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5mb3JtYXRzW3RoaXMucGlja2VyKCldPy5zaG9ydCA/PyAnJyxcbiAgKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9lZGl0aW5nRGF0ZSA9IGxpbmtlZFNpZ25hbDxBWERhdGVUaW1lPigoKSA9PiB0aGlzLmNhbGVuZGFyU2VydmljZS5ub3codGhpcy5fY2FsZW5kYXJTeXN0ZW0oKSkpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgaW5wdXRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2lucHV0Jyk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlucHV0UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGNoZWNrIGlmIHBhZ2UgaXMgaW4gcnRsIG9yIGx0clxuICAgKi9cbiAgcHJvdGVjdGVkIGlzUnRsID0gc2lnbmFsKHRoaXMucGxhdGZvcm1TZXJ2aWNlLmlzUnRsKCkpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gICNmb3JtYXRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMuX3Jlc29sdmVkRm9ybWF0KCk7XG4gICAgdGhpcy5fY2FsZW5kYXJTeXN0ZW0oKTtcbiAgICB0aGlzLl9kZXRlY3RQYXJ0cygpO1xuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0aGlzLmludGVybmFsVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLnBsYXRmb3JtU2VydmljZS5kaXJlY3Rpb25DaGFuZ2UucGlwZShtYXAoKGkpID0+IGkuZGF0YSA9PT0gJ3J0bCcpKS5zdWJzY3JpYmUoKGlzUnRsKSA9PiB0aGlzLmlzUnRsLnNldChpc1J0bCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBwYXJ0IHVzaW5nIHRoZSBjYWxlbmRhciBhbHJlYWR5IGF0dGFjaGVkIHRvIHRoZSBBWERhdGVUaW1lLlxuICAgKiBBdm9pZHMgZm9ybWF0U2VydmljZSdzIHN0cmluZy1vcHRpb25zIHBhdGgsIHdoaWNoIGFsd2F5cyB1c2VzIHRoZSBhY3RpdmUgbG9jYWxlIGNhbGVuZGFyLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9mb3JtYXRQYXJ0KGRhdGU6IEFYRGF0ZVRpbWUsIHBsYWNlaG9sZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRlLmZvcm1hdChwbGFjZWhvbGRlcik7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9kZXRlY3RQYXJ0cygpIHtcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgZS5lbmFibGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybWF0UGFydHMgPSB0aGlzLl9yZXNvbHZlZEZvcm1hdCgpLnNwbGl0KC9bXmEtekEtWl0rLyk7XG4gICAgZm9ybWF0UGFydHMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZmluZCgoYykgPT4gYy5wbGFjZWhvbGRlcnMuc29tZSgoZCkgPT4gZCA9PSBmKSk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZm91bmQuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIGZvdW5kLnBsYWNlaG9sZGVyID0gZjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2dldE9yZGVyZWRQYXJ0cygpOiBBWERhdGVUaW1lUGFydFtdIHtcbiAgICBjb25zdCBmb3JtYXRQYXJ0cyA9IHRoaXMuX3Jlc29sdmVkRm9ybWF0KCkuc3BsaXQoL1teYS16QS1aXSsvKTtcbiAgICBjb25zdCByZXN1bHQ6IEFYRGF0ZVRpbWVQYXJ0W10gPSBbXTtcbiAgICBmb3JtYXRQYXJ0cy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5maW5kKChjKSA9PiBjLnBsYWNlaG9sZGVycy5zb21lKChkKSA9PiBkID09IGYpKTtcbiAgICAgIGlmIChmb3VuZCAmJiBmb3VuZC5lbmFibGVkKSByZXN1bHQucHVzaChmb3VuZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2NsZWFySW5wdXRCdWZmZXIoKSB7XG4gICAgdGhpcy5faW5wdXRDaGFycyA9IFtdO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlVGV4dCgpIHtcbiAgICBsZXQgdGV4dCA9IHRoaXMuX3Jlc29sdmVkRm9ybWF0KCk7XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hY3RpdmVQYXJ0KCkgPT0gcGFydC5rZXkpIHtcbiAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSkgdGV4dCA9IHRleHQucmVwbGFjZShwYXJ0LnBsYWNlaG9sZGVyLCBwYXJ0LnR5cGVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSAhPSBwYXJ0LnBsYWNlaG9sZGVyICYmIHBhcnQudHlwZWRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShwYXJ0LnBsYWNlaG9sZGVyLCBwYXJ0LnJlYWxWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2VkaXRpbmdUZXh0LnNldCh0ZXh0ID09IHRoaXMuX3Jlc29sdmVkRm9ybWF0KCkgPyAnJyA6IHRleHQpO1xuICAgIGlmICh0aGlzLl9hY3RpdmVQYXJ0KCkpIHtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIHRvIHRoZSBpbnRlcm5hbCBkYXRlIHZhbHVlLCB1cGRhdGluZyBlZGl0aW5nIHBhcnRzIGFuZCB0ZXh0IHJlcHJlc2VudGF0aW9uLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvdmVycmlkZSBpbnRlcm5hbFZhbHVlQ2hhbmdlZCh2YWx1ZT86IERhdGUpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5jYWxlbmRhclNlcnZpY2UuaXNWYWxpZERhdGUodmFsdWUpKSB7XG4gICAgICB0aGlzLl9lZGl0aW5nRGF0ZS5zZXQodGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHZhbHVlLCB0aGlzLl9jYWxlbmRhclN5c3RlbSgpKSk7XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSAhPSBwYXJ0LnBsYWNlaG9sZGVyKSBwYXJ0LnR5cGVkVmFsdWUgPSBwYXJ0LnJlYWxWYWx1ZSgpO1xuICAgICAgfSBlbHNlIHBhcnQudHlwZWRWYWx1ZSA9IG51bGw7XG4gICAgfSk7XG4gICAgdGhpcy5fdXBkYXRlVGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgUGVyc2lhbiAoVSswNkYwLVUrMDZGOSkgYW5kIEFyYWJpYy1JbmRpYyAoVSswNjYwLVUrMDY2OSkgZGlnaXRzIHRvIEFTQ0lJLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9ub3JtYWxpemVEaWdpdChrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICgha2V5IHx8IGtleS5sZW5ndGggIT09IDEpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNvZGUgPSBrZXkuY2hhckNvZGVBdCgwKTtcbiAgICBpZiAoY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOSkgcmV0dXJuIGtleTtcbiAgICBpZiAoY29kZSA+PSAweDA2ZjAgJiYgY29kZSA8PSAweDA2ZjkpIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUgLSAweDA2ZjAgKyAweDMwKTtcbiAgICBpZiAoY29kZSA+PSAweDA2NjAgJiYgY29kZSA8PSAweDA2NjkpIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUgLSAweDA2NjAgKyAweDMwKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByb3RlY3RlZCBfaGFuZGxlT25LZXlkb3duRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlnbm9yZSA9ICgpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ1RhYicgfHwgZS5jb2RlID09PSAnU3BhY2UnIHx8IGUuY29kZSA9PT0gJ0VudGVyJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3Qgb3JkZXJlZFBhcnRzID0gdGhpcy5fZ2V0T3JkZXJlZFBhcnRzKCk7XG4gICAgY29uc3QgcGFydCA9IHRoaXMuX2FjdGl2ZVBhcnQoKSA/IHRoaXMuX2VkaXRpbmdQYXJ0c1t0aGlzLl9hY3RpdmVQYXJ0KCldIDogb3JkZXJlZFBhcnRzWzBdO1xuICAgIGNvbnN0IG5leHRQYXJ0ID0gcGFydCA/IG9yZGVyZWRQYXJ0c1tvcmRlcmVkUGFydHMuaW5kZXhPZihwYXJ0KSArIDFdIDogbnVsbDtcbiAgICBjb25zdCBwcmV2UGFydCA9IHBhcnQgPyBvcmRlcmVkUGFydHNbb3JkZXJlZFBhcnRzLmluZGV4T2YocGFydCkgLSAxXSA6IG51bGw7XG5cbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICBpZiAobmV4dFBhcnQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlUGFydC5zZXQobmV4dFBhcnQua2V5KTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZ29QcmV2ID0gKCkgPT4ge1xuICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgaWYgKHByZXZQYXJ0KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVBhcnQuc2V0KHByZXZQYXJ0LmtleSk7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZGlnaXQgPSB0aGlzLl9ub3JtYWxpemVEaWdpdChlLmtleSk7XG5cbiAgICAvKioqKioqKioqKioqKioqICBIYW5kbGUgTGVmdCBhbmQgUmlnaHQgICoqKioqKioqKioqKioqL1xuICAgIGlmIChlLmNvZGUgPT09ICdBcnJvd1JpZ2h0JyB8fCBlLmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBpZ25vcmUoKTtcbiAgICAgIGlmICghdGhpcy5fYWN0aXZlUGFydCgpKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVBhcnQuc2V0KHBhcnQ/LmtleSA/PyBudWxsKTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZS5jb2RlID09PSAnQXJyb3dSaWdodCcgPyBnb05leHQoKSA6IGdvUHJldigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKGUuY29kZSA9PT0gJ0Fycm93VXAnIHx8IGUuY29kZSA9PT0gJ0Fycm93RG93bicpICYmICFlLmN0cmxLZXkpIHtcbiAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBVcCBhbmQgRG93biAgKioqKioqKioqKioqKiovXG4gICAgICBpZ25vcmUoKTtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgIXBhcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lnbiA9IGUuY29kZSA9PT0gJ0Fycm93VXAnID8gKzEgOiAtMTtcbiAgICAgIHRoaXMuX2FjdGl2ZVBhcnQuc2V0KHBhcnQua2V5KTtcbiAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgIGNvbnN0IHVuaXQ6IFRpbWVVbml0ID0gcGFydC5rZXkgPT09ICdBTVBNJyA/ICdob3VyJyA6IChwYXJ0LmtleSBhcyBUaW1lVW5pdCk7XG4gICAgICBjb25zdCBhbW91bnQgPSBwYXJ0LmtleSA9PT0gJ0FNUE0nID8gc2lnbiAqIDEyIDogc2lnbjtcbiAgICAgIGNvbnN0IG5ld1ZhbDogQVhEYXRlVGltZSA9IHRoaXMuX2VkaXRpbmdEYXRlKCkuYWRkKHVuaXQsIGFtb3VudCk7XG4gICAgICB0aGlzLl9lZGl0aW5nRGF0ZS5zZXQobmV3VmFsKTtcbiAgICAgIC8vIG1hcmsgZXZlcnkgZW5hYmxlZCBwYXJ0IGFzIGVkaXRlZCwgc28gdGhlIHdob2xlIHZhbHVlIGdldHMgZGlzcGxheWVkXG4gICAgICB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIHAudHlwZWRWYWx1ZSA9IHAucmVhbFZhbHVlKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAoZS5jb2RlID09ICdCYWNrc3BhY2UnIHx8IGUuY29kZSA9PSAnRGVsZXRlJykge1xuICAgICAgLyoqKioqKioqKioqKioqKiAgSGFuZGxlIEJhY2tzcGFjZSAvIERlbGV0ZSAgKioqKioqKioqKioqKiovXG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8ICFwYXJ0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dC52YWx1ZSkge1xuICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgICB0aGlzLl9hY3RpdmVQYXJ0LnNldChwYXJ0LmtleSk7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0udHlwZWRWYWx1ZSA9IHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0ucGxhY2Vob2xkZXI7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRleHQoKTtcbiAgICAgICAgZ29QcmV2KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmNvZGUgPT0gJ1RhYicgfHwgZS5jb2RlID09ICdTcGFjZScpIHtcbiAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBUYWIgYW5kIFNwYWNlICAqKioqKioqKioqKioqKi9cbiAgICAgIGlmIChpbnB1dC52YWx1ZSkge1xuICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgbmV4dFBhcnQpIHtcbiAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICBnb05leHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIHByZXZQYXJ0KSB7XG4gICAgICAgICAgaWdub3JlKCk7XG4gICAgICAgICAgZ29QcmV2KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZ2l0ICE9IG51bGwpIHtcbiAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBEaWdpdHMgICoqKioqKioqKioqKioqL1xuICAgICAgaWdub3JlKCk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8ICFwYXJ0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2FjdGl2ZVBhcnQuc2V0KHBhcnQua2V5KTtcbiAgICAgIHRoaXMuX2hhbmRsZURpZ2l0SW5wdXQocGFydCwgZGlnaXQsIGdvTmV4dCk7XG4gICAgfSBlbHNlIGlmIChwYXJ0Py5rZXkgPT09ICdBTVBNJyAmJiAoZS5rZXk/LnRvTG93ZXJDYXNlKCkgPT09ICdhJyB8fCBlLmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ3AnKSkge1xuICAgICAgLyoqKioqKioqKioqKioqKiAgSGFuZGxlIEFNL1BNIGxldHRlcnMgICoqKioqKioqKioqKioqL1xuICAgICAgaWdub3JlKCk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhvdXIgPSB0aGlzLl9lZGl0aW5nRGF0ZSgpLmhvdXI7XG4gICAgICBjb25zdCB3YW50c1BNID0gZS5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3AnO1xuICAgICAgaWYgKHdhbnRzUE0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgIHRoaXMuX2FwcGx5RWRpdGluZ0RhdGUodGhpcy5fZWRpdGluZ0RhdGUoKS5hZGQoJ2hvdXInLCAxMikpO1xuICAgICAgfSBlbHNlIGlmICghd2FudHNQTSAmJiBob3VyID49IDEyKSB7XG4gICAgICAgIHRoaXMuX2FwcGx5RWRpdGluZ0RhdGUodGhpcy5fZWRpdGluZ0RhdGUoKS5hZGQoJ2hvdXInLCAtMTIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWdub3JlKCk7XG4gICAgfVxuICAgIC8qKioqKioqKioqKioqKiogIEVtaXQgRXZlbnQgICoqKioqKioqKioqKioqL1xuICAgIHN1cGVyLmVtaXRPbktleWRvd25FdmVudChlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHR5cGVkIGRpZ2l0cyB0byB0aGUgYWN0aXZlIHBhcnQgd2l0aCBjYWxlbmRhci1hd2FyZSBsaW1pdHMsIGF1dG8gYWR2YW5jaW5nXG4gICAqIHRvIHRoZSBuZXh0IHBhcnQgd2hlbiB0aGUgc2VnbWVudCBpcyBjb21wbGV0ZSBvciB1bmFtYmlndW91cy5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlRGlnaXRJbnB1dChwYXJ0OiBBWERhdGVUaW1lUGFydCwgZGlnaXQ6IHN0cmluZywgZ29OZXh0OiAoKSA9PiB2b2lkKSB7XG4gICAgbGV0IG5leHQgPSBmYWxzZTtcbiAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XTtcblxuICAgIHN3aXRjaCAocGFydC5rZXkpIHtcbiAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgIGlmIChlZGl0aW5nLnBsYWNlaG9sZGVyLmxlbmd0aCA9PSAyICYmIHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAvLyAyLWRpZ2l0IHllYXIgcGxhY2Vob2xkZXI6IHByZWZpbGwgdGhlIGN1cnJlbnQgY2VudHVyeSBvZiB0aGUgYWN0aXZlIGNhbGVuZGFyXG4gICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKFxuICAgICAgICAgICAgLi4udGhpcy5fZm9ybWF0UGFydCh0aGlzLmNhbGVuZGFyU2VydmljZS5ub3codGhpcy5fY2FsZW5kYXJTeXN0ZW0oKSksICd5eXl5Jykuc3Vic3RyaW5nKDAsIDIpLnNwbGl0KCcnKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChkaWdpdCk7XG4gICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9ICgnMDAwMCcgKyB0aGlzLl9pbnB1dENoYXJzLmpvaW4oJycpKS5zbGljZSgtNCk7XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnYgPSBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpO1xuICAgICAgICBpZiAobnYgPiAwKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlFZGl0aW5nRGF0ZSh0aGlzLl9lZGl0aW5nRGF0ZSgpLnNldCgneWVhcicsIG52KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goZGlnaXQpO1xuICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtkaWdpdH1gO1xuICAgICAgICAgIGlmIChwYXJzZUludChkaWdpdCkgPiAxKSB7XG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tYmluZWQgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZGlnaXR9YCk7XG4gICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gY29tYmluZWQgPiAxMiB8fCBjb21iaW5lZCA8IDEgPyBgMCR7ZGlnaXR9YCA6IGAke2NvbWJpbmVkfWAucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudiA9IHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSk7XG4gICAgICAgIGlmIChudiA+IDApIHtcbiAgICAgICAgICB0aGlzLl9hcHBseUVkaXRpbmdEYXRlKHRoaXMuX2VkaXRpbmdEYXRlKCkuc2V0KCdtb250aCcsIG52KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdkYXknOiB7XG4gICAgICAgIGNvbnN0IHRvdGFsRGF5cyA9IHRoaXMuX2VkaXRpbmdEYXRlKCkubW9udGgudG90YWxEYXlzO1xuICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChkaWdpdCk7XG4gICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2RpZ2l0fWA7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGRpZ2l0KSA+IE1hdGguZmxvb3IodG90YWxEYXlzIC8gMTApKSB7XG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tYmluZWQgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZGlnaXR9YCk7XG4gICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gY29tYmluZWQgPiB0b3RhbERheXMgfHwgY29tYmluZWQgPCAxID8gYDAke2RpZ2l0fWAgOiBgJHtjb21iaW5lZH1gLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnYgPSBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpO1xuICAgICAgICBpZiAobnYgPiAwKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlFZGl0aW5nRGF0ZSh0aGlzLl9lZGl0aW5nRGF0ZSgpLnNldCgnZGF5JywgbnYpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2hvdXInOiB7XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGRpZ2l0KTtcbiAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZGlnaXR9YDtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZGlnaXQpID4gMikge1xuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gcGFyc2VJbnQoYCR7dGhpcy5faW5wdXRDaGFyc1swXX0ke2RpZ2l0fWApO1xuICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGNvbWJpbmVkID4gMjMgPyBgMCR7ZGlnaXR9YCA6IGAke2NvbWJpbmVkfWAucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBseUVkaXRpbmdEYXRlKHRoaXMuX2VkaXRpbmdEYXRlKCkuc2V0KCdob3VyJywgcGFyc2VJbnQoZWRpdGluZy50eXBlZFZhbHVlKSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICBjYXNlICdzZWNvbmQnOiB7XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGRpZ2l0KTtcbiAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZGlnaXR9YDtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZGlnaXQpID4gNSkge1xuICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gcGFyc2VJbnQoYCR7dGhpcy5faW5wdXRDaGFyc1swXX0ke2RpZ2l0fWApO1xuICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGNvbWJpbmVkID4gNTkgPyBgMCR7ZGlnaXR9YCA6IGAke2NvbWJpbmVkfWAucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBseUVkaXRpbmdEYXRlKHRoaXMuX2VkaXRpbmdEYXRlKCkuc2V0KHBhcnQua2V5IGFzIFRpbWVVbml0LCBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmV4dCkge1xuICAgICAgZ29OZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfYXBwbHlFZGl0aW5nRGF0ZSh2YWx1ZTogQVhEYXRlVGltZSkge1xuICAgIHRoaXMuX2VkaXRpbmdEYXRlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcm90ZWN0ZWQgX2hhbmRsZUtleVVwRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVBhcnQoKSkge1xuICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByb3RlY3RlZCBfaGFuZGxlRm9jdXNFdmVudChlOiBGb2N1c0V2ZW50KSB7XG4gICAgc3VwZXIuZW1pdE9uRm9jdXNFdmVudChlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByb3RlY3RlZCBfaGFuZGxlQmx1ckV2ZW50KGU6IEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLl9hY3RpdmVQYXJ0LnNldChudWxsKTtcbiAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgdGhpcy5fY2xhbXBUb1JhbmdlKCk7XG4gICAgc3VwZXIuZW1pdE9uQmx1ckV2ZW50KGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYW1wcyB0aGUgY29tbWl0dGVkIHZhbHVlIGludG8gdGhlIFttaW5WYWx1ZSwgbWF4VmFsdWVdIHJhbmdlLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9jbGFtcFRvUmFuZ2UoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pblZhbHVlKCk7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIGlmIChtaW4gJiYgdmFsdWUuZ2V0VGltZSgpIDwgbWluLmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5jb21taXRWYWx1ZShuZXcgRGF0ZShtaW4pLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKG1heCAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtYXguZ2V0VGltZSgpKSB7XG4gICAgICB0aGlzLmNvbW1pdFZhbHVlKG5ldyBEYXRlKG1heCksIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHByb3RlY3RlZCBfaGFuZGxlT25JbnB1dENsaWNrRXZlbnQoZTogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fZGV0ZWN0UGFydEF0UG9zaXRpb24oKTtcbiAgICB9LCAwKTtcbiAgICB0aGlzLm9uQ2xpY2suZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBodG1sRWxlbWVudDogdGhpcy5nZXRIb3N0RWxlbWVudCgpLFxuICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9kZXRlY3RQYXJ0QXRQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbGVtZW50O1xuICAgIGlmICghaW5wdXQgfHwgIWlucHV0LnZhbHVlKSByZXR1cm47XG4gICAgY29uc3Qgc1N0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uRW5kIHx8IDA7XG4gICAgY29uc3QgcmUgPSAvW2EtekEtWjAtOV0rL2dpO1xuICAgIGNvbnN0IHZhbHVlUGFydHMgPSBBcnJheS5mcm9tKGlucHV0LnZhbHVlLm1hdGNoQWxsKHJlKSk7XG4gICAgY29uc3Qgb3JkZXJlZFBhcnRzID0gdGhpcy5fZ2V0T3JkZXJlZFBhcnRzKCk7XG4gICAgY29uc3QgaW5kZXggPSB2YWx1ZVBhcnRzLmZpbmRJbmRleCgoYykgPT4gYy5pbmRleCA8PSBzU3RhcnQgJiYgYy5pbmRleCArIGNbMF0ubGVuZ3RoID49IHNTdGFydCk7XG4gICAgaWYgKGluZGV4IDwgMCB8fCAhb3JkZXJlZFBhcnRzW2luZGV4XSkgcmV0dXJuO1xuICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICB0aGlzLl9hY3RpdmVQYXJ0LnNldChvcmRlcmVkUGFydHNbaW5kZXhdLmtleSk7XG4gICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0QWN0aXZlUGFydCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbGVtZW50O1xuICAgIGlmICghaW5wdXQgfHwgIWlucHV0LnZhbHVlIHx8ICF0aGlzLl9hY3RpdmVQYXJ0KCkpIHJldHVybjtcbiAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICBjb25zdCBpbmRleCA9IG9yZGVyZWRQYXJ0cy5maW5kSW5kZXgoKGMpID0+IGMua2V5ID09IHRoaXMuX2FjdGl2ZVBhcnQoKSk7XG4gICAgY29uc3QgcmUgPSAvW2EtekEtWjAtOV0rL2dpO1xuICAgIGNvbnN0IHZhbHVlUGFydHMgPSBBcnJheS5mcm9tKGlucHV0LnZhbHVlLm1hdGNoQWxsKHJlKSk7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRXb3JkQm91bmRzQXRQb3NpdGlvbihpbnB1dC52YWx1ZSwgdmFsdWVQYXJ0c1tpbmRleF0/LmluZGV4KTtcbiAgICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNldFNlbGVjdGlvblJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9kZXRlY3RWYWx1ZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5jb21taXRWYWx1ZSh0aGlzLl9lZGl0aW5nRGF0ZSgpLmRhdGUsIHRydWUpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYXgtZWRpdG9yLWNvbnRhaW5lciB7eyBjbGFzc05hbWVzKCkgfX0gYXgte3sgbG9vayB9fVwiXG4gIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seVwiXG4+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXByZWZpeFwiPiA8L25nLWNvbnRlbnQ+XG4gIDxpbnB1dFxuICAgICNpbnB1dFxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtpZF09XCJpZFwiXG4gICAgY2xhc3M9XCJheC1pbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIFtkaXJdPVwiaXNSdGwoKSA/ICdydGwnIDogJ2x0cidcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IF9yZXNvbHZlZEZvcm1hdCgpXCJcbiAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgW3RhYmluZGV4XT1cInRhYkluZGV4XCJcbiAgICBbbmdNb2RlbF09XCJfZWRpdGluZ1RleHQoKVwiXG4gICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiaXNSdGwoKSA/ICdlbmQnIDogJ3N0YXJ0J1wiXG4gICAgKG1vdXNldXApPVwiX2hhbmRsZU9uSW5wdXRDbGlja0V2ZW50KCRldmVudClcIlxuICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNFdmVudCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJfaGFuZGxlQmx1ckV2ZW50KCRldmVudClcIlxuICAvPlxuICBAaWYgKF9lZGl0aW5nVGV4dCgpICYmICFkaXNhYmxlZCAmJiAhcmVhZG9ubHkpIHtcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1jbGVhci1idXR0b25cIj48L25nLWNvbnRlbnQ+XG4gIH1cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtc3VmZml4XCI+IDwvbmctY29udGVudD5cbjwvZGl2PlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtdmFsaWRhdGlvbi1ydWxlXCI+IDwvbmctY29udGVudD5cbjxkaXYgY2xhc3M9XCJheC1lcnJvci1jb250YWluZXJcIj48L2Rpdj5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXDateTimeTextBoxComponent } from './datetime-text-box.component';\nimport * as i0 from \"@angular/core\";\nexport class AXDateTimeTextBoxModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeTextBoxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeTextBoxModule, imports: [AXDateTimeTextBoxComponent], exports: [AXDateTimeTextBoxComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeTextBoxModule, imports: [AXDateTimeTextBoxComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeTextBoxModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [AXDateTimeTextBoxComponent],\n exports: [AXDateTimeTextBoxComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtdGV4dC1ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9kYXRldGltZS10ZXh0LWJveC9zcmMvbGliL2RhdGV0aW1lLXRleHQtYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQU0zRSxNQUFNLE9BQU8sdUJBQXVCOzhHQUF2Qix1QkFBdUI7K0dBQXZCLHVCQUF1QixZQUh4QiwwQkFBMEIsYUFDMUIsMEJBQTBCOytHQUV6Qix1QkFBdUIsWUFIeEIsMEJBQTBCOzsyRkFHekIsdUJBQXVCO2tCQUpuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhEYXRlVGltZVRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuL2RhdGV0aW1lLXRleHQtYm94LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtBWERhdGVUaW1lVGV4dEJveENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtBWERhdGVUaW1lVGV4dEJveENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVUZXh0Qm94TW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtZGF0ZXRpbWUtdGV4dC1ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2RhdGV0aW1lLXRleHQtYm94L3NyYy9hY29yZXgtY29tcG9uZW50cy1kYXRldGltZS10ZXh0LWJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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AE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "20.9.4",
3
+ "version": "20.10.0",
4
4
  "peerDependencies": {
5
- "@acorex/core": "20.9.4",
6
- "@acorex/cdk": "20.9.4",
5
+ "@acorex/core": "20.10.0",
6
+ "@acorex/cdk": "20.10.0",
7
7
  "polytype": ">=0.17.0",
8
8
  "angular-imask": ">=7.6.1",
9
9
  "imask": ">=7.6.1",
@@ -177,6 +177,10 @@
177
177
  "types": "./datetime-picker/index.d.ts",
178
178
  "default": "./fesm2022/acorex-components-datetime-picker.mjs"
179
179
  },
180
+ "./datetime-text-box": {
181
+ "types": "./datetime-text-box/index.d.ts",
182
+ "default": "./fesm2022/acorex-components-datetime-text-box.mjs"
183
+ },
180
184
  "./decorators": {
181
185
  "types": "./decorators/index.d.ts",
182
186
  "default": "./fesm2022/acorex-components-decorators.mjs"
@@ -381,6 +385,14 @@
381
385
  "types": "./scheduler/index.d.ts",
382
386
  "default": "./fesm2022/acorex-components-scheduler.mjs"
383
387
  },
388
+ "./scheduler-picker": {
389
+ "types": "./scheduler-picker/index.d.ts",
390
+ "default": "./fesm2022/acorex-components-scheduler-picker.mjs"
391
+ },
392
+ "./scss": {
393
+ "types": "./scss/index.d.ts",
394
+ "default": "./fesm2022/acorex-components-scss.mjs"
395
+ },
384
396
  "./search-box": {
385
397
  "types": "./search-box/index.d.ts",
386
398
  "default": "./fesm2022/acorex-components-search-box.mjs"
@@ -405,18 +417,10 @@
405
417
  "types": "./skeleton/index.d.ts",
406
418
  "default": "./fesm2022/acorex-components-skeleton.mjs"
407
419
  },
408
- "./scss": {
409
- "types": "./scss/index.d.ts",
410
- "default": "./fesm2022/acorex-components-scss.mjs"
411
- },
412
420
  "./slider": {
413
421
  "types": "./slider/index.d.ts",
414
422
  "default": "./fesm2022/acorex-components-slider.mjs"
415
423
  },
416
- "./scheduler-picker": {
417
- "types": "./scheduler-picker/index.d.ts",
418
- "default": "./fesm2022/acorex-components-scheduler-picker.mjs"
419
- },
420
424
  "./sliding-item": {
421
425
  "types": "./sliding-item/index.d.ts",
422
426
  "default": "./fesm2022/acorex-components-sliding-item.mjs"
@@ -425,6 +429,10 @@
425
429
  "types": "./step-wizard/index.d.ts",
426
430
  "default": "./fesm2022/acorex-components-step-wizard.mjs"
427
431
  },
432
+ "./switch": {
433
+ "types": "./switch/index.d.ts",
434
+ "default": "./fesm2022/acorex-components-switch.mjs"
435
+ },
428
436
  "./tabs": {
429
437
  "types": "./tabs/index.d.ts",
430
438
  "default": "./fesm2022/acorex-components-tabs.mjs"
@@ -433,9 +441,9 @@
433
441
  "types": "./tag/index.d.ts",
434
442
  "default": "./fesm2022/acorex-components-tag.mjs"
435
443
  },
436
- "./switch": {
437
- "types": "./switch/index.d.ts",
438
- "default": "./fesm2022/acorex-components-switch.mjs"
444
+ "./tag-box": {
445
+ "types": "./tag-box/index.d.ts",
446
+ "default": "./fesm2022/acorex-components-tag-box.mjs"
439
447
  },
440
448
  "./text-area": {
441
449
  "types": "./text-area/index.d.ts",
@@ -445,10 +453,6 @@
445
453
  "types": "./text-box/index.d.ts",
446
454
  "default": "./fesm2022/acorex-components-text-box.mjs"
447
455
  },
448
- "./tag-box": {
449
- "types": "./tag-box/index.d.ts",
450
- "default": "./fesm2022/acorex-components-tag-box.mjs"
451
- },
452
456
  "./time-duration": {
453
457
  "types": "./time-duration/index.d.ts",
454
458
  "default": "./fesm2022/acorex-components-time-duration.mjs"
@@ -461,6 +465,10 @@
461
465
  "types": "./toast/index.d.ts",
462
466
  "default": "./fesm2022/acorex-components-toast.mjs"
463
467
  },
468
+ "./toolbar": {
469
+ "types": "./toolbar/index.d.ts",
470
+ "default": "./fesm2022/acorex-components-toolbar.mjs"
471
+ },
464
472
  "./tooltip": {
465
473
  "types": "./tooltip/index.d.ts",
466
474
  "default": "./fesm2022/acorex-components-tooltip.mjs"
@@ -473,10 +481,6 @@
473
481
  "types": "./tree-view-legacy/index.d.ts",
474
482
  "default": "./fesm2022/acorex-components-tree-view-legacy.mjs"
475
483
  },
476
- "./toolbar": {
477
- "types": "./toolbar/index.d.ts",
478
- "default": "./fesm2022/acorex-components-toolbar.mjs"
479
- },
480
484
  "./uploader": {
481
485
  "types": "./uploader/index.d.ts",
482
486
  "default": "./fesm2022/acorex-components-uploader.mjs"