@acorex/components 20.10.1 → 20.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/datetime-box/index.d.ts +16 -4
- package/datetime-input/index.d.ts +62 -68
- package/fesm2022/acorex-components-datetime-box.mjs +45 -14
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +326 -306
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +11 -1
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-file-viewer.mjs +11 -44
- package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
- package/file-viewer/index.d.ts +15 -52
- package/package.json +19 -23
- package/datetime-text-box/README.md +0 -3
- package/datetime-text-box/index.d.ts +0 -142
- package/fesm2022/acorex-components-datetime-text-box.mjs +0 -619
- package/fesm2022/acorex-components-datetime-text-box.mjs.map +0 -1
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
import { MXInputBaseValueComponent, AXComponent, AXFocusableComponent, AXValuableComponent, AXClearableComponent } from '@acorex/cdk/common';
|
|
2
2
|
import { AXCalendarService } from '@acorex/core/date-time';
|
|
3
|
-
import {
|
|
4
|
-
import { AXLocaleService } from '@acorex/core/locale';
|
|
3
|
+
import { AXLocaleService, AXIRLocaleProfile } from '@acorex/core/locale';
|
|
5
4
|
import { AXPlatform } from '@acorex/core/platform';
|
|
6
5
|
import { getWordBoundsAtPosition } from '@acorex/core/utils';
|
|
7
6
|
import * as i0 from '@angular/core';
|
|
8
|
-
import { inject, signal, input, computed, linkedSignal, viewChild,
|
|
7
|
+
import { InjectionToken, inject, signal, input, output, computed, linkedSignal, viewChild, effect, untracked, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
9
8
|
import * as i1 from '@angular/forms';
|
|
10
9
|
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
11
10
|
import { map } from 'rxjs';
|
|
12
11
|
|
|
12
|
+
const AXDateTimeInputDefaultConfig = {
|
|
13
|
+
allowTyping: false,
|
|
14
|
+
};
|
|
15
|
+
const AX_DATETIME_INPUT_CONFIG = new InjectionToken('AX_DATETIME_INPUT_CONFIG', {
|
|
16
|
+
providedIn: 'root',
|
|
17
|
+
factory: () => AXDateTimeInputDefaultConfig,
|
|
18
|
+
});
|
|
19
|
+
|
|
13
20
|
/**
|
|
14
|
-
* A component for date and time input with
|
|
21
|
+
* A component for date and time input with segment-based typing, keyboard navigation,
|
|
22
|
+
* and calendar-aware formatting (gregorian and solar-hijri).
|
|
15
23
|
*
|
|
16
24
|
* @category Components
|
|
17
25
|
*/
|
|
@@ -19,12 +27,10 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
19
27
|
constructor() {
|
|
20
28
|
super(...arguments);
|
|
21
29
|
this.platformService = inject(AXPlatform);
|
|
22
|
-
this.formatService = inject(AXFormatService);
|
|
23
30
|
this.localeService = inject(AXLocaleService);
|
|
24
31
|
this.calendarService = inject(AXCalendarService);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*/
|
|
32
|
+
this.defaultConfig = inject(AX_DATETIME_INPUT_CONFIG);
|
|
33
|
+
/** @ignore */
|
|
28
34
|
this._editingParts = {
|
|
29
35
|
year: {
|
|
30
36
|
key: 'year',
|
|
@@ -33,7 +39,7 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
33
39
|
enabled: false,
|
|
34
40
|
default: 2023,
|
|
35
41
|
typedValue: null,
|
|
36
|
-
realValue: () => this.
|
|
42
|
+
realValue: () => this._formatPart(this._editingDate(), this._editingParts.year.placeholder),
|
|
37
43
|
},
|
|
38
44
|
month: {
|
|
39
45
|
key: 'month',
|
|
@@ -42,7 +48,7 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
42
48
|
enabled: false,
|
|
43
49
|
default: 1,
|
|
44
50
|
typedValue: null,
|
|
45
|
-
realValue: () => this.
|
|
51
|
+
realValue: () => this._formatPart(this._editingDate(), this._editingParts.month.placeholder),
|
|
46
52
|
},
|
|
47
53
|
day: {
|
|
48
54
|
key: 'day',
|
|
@@ -51,7 +57,7 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
51
57
|
enabled: false,
|
|
52
58
|
default: 1,
|
|
53
59
|
typedValue: null,
|
|
54
|
-
realValue: () => this.
|
|
60
|
+
realValue: () => this._formatPart(this._editingDate(), this._editingParts.day.placeholder),
|
|
55
61
|
},
|
|
56
62
|
hour: {
|
|
57
63
|
key: 'hour',
|
|
@@ -60,7 +66,7 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
60
66
|
enabled: false,
|
|
61
67
|
default: 0,
|
|
62
68
|
typedValue: null,
|
|
63
|
-
realValue: () => this.
|
|
69
|
+
realValue: () => this._formatPart(this._editingDate(), this._editingParts.hour.placeholder),
|
|
64
70
|
},
|
|
65
71
|
minute: {
|
|
66
72
|
key: 'minute',
|
|
@@ -69,7 +75,7 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
69
75
|
enabled: false,
|
|
70
76
|
default: 0,
|
|
71
77
|
typedValue: null,
|
|
72
|
-
realValue: () => this.
|
|
78
|
+
realValue: () => this._formatPart(this._editingDate(), this._editingParts.minute.placeholder),
|
|
73
79
|
},
|
|
74
80
|
second: {
|
|
75
81
|
key: 'second',
|
|
@@ -78,7 +84,7 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
78
84
|
enabled: false,
|
|
79
85
|
default: 0,
|
|
80
86
|
typedValue: null,
|
|
81
|
-
realValue: () => this.
|
|
87
|
+
realValue: () => this._formatPart(this._editingDate(), this._editingParts.second.placeholder),
|
|
82
88
|
},
|
|
83
89
|
AMPM: {
|
|
84
90
|
key: 'AMPM',
|
|
@@ -87,65 +93,84 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
87
93
|
enabled: false,
|
|
88
94
|
default: 0,
|
|
89
95
|
typedValue: null,
|
|
90
|
-
realValue: () => this.
|
|
96
|
+
realValue: () => this._formatPart(this._editingDate(), this._editingParts.AMPM.placeholder),
|
|
91
97
|
},
|
|
92
98
|
};
|
|
93
|
-
/**
|
|
94
|
-
* @ignore
|
|
95
|
-
*/
|
|
99
|
+
/** @ignore */
|
|
96
100
|
this._editingText = signal('', ...(ngDevMode ? [{ debugName: "_editingText" }] : []));
|
|
97
|
-
/**
|
|
98
|
-
* @ignore
|
|
99
|
-
*/
|
|
101
|
+
/** @ignore */
|
|
100
102
|
this._inputChars = [];
|
|
103
|
+
/** @ignore */
|
|
104
|
+
this._activePart = signal(null, ...(ngDevMode ? [{ debugName: "_activePart" }] : []));
|
|
101
105
|
/**
|
|
102
|
-
*
|
|
106
|
+
* When true, the user can type digits and navigate segments with the keyboard.
|
|
107
|
+
* When false, keyboard input is blocked (used by datetime-box picker mode).
|
|
108
|
+
* Defaults to `AX_DATETIME_INPUT_CONFIG.allowTyping` when not set on the instance.
|
|
103
109
|
* @defaultValue false
|
|
104
110
|
*/
|
|
105
|
-
this.allowTyping = input(
|
|
111
|
+
this.allowTyping = input(this.defaultConfig.allowTyping, ...(ngDevMode ? [{ debugName: "allowTyping" }] : []));
|
|
106
112
|
/**
|
|
107
113
|
* @description The calendar type to use for the datetime input.
|
|
108
114
|
*/
|
|
109
115
|
this.calendar = input(null, ...(ngDevMode ? [{ debugName: "calendar" }] : []));
|
|
110
|
-
this._calendarSystem = computed(() => this.calendar() ?? this.localeService.activeProfile().calendar.system, ...(ngDevMode ? [{ debugName: "_calendarSystem" }] : []));
|
|
111
|
-
this._activePart = signal(null, ...(ngDevMode ? [{ debugName: "_activePart" }] : []));
|
|
112
|
-
// TODO: fix this
|
|
113
|
-
// #effect = effect(() => {
|
|
114
|
-
// this._activePart()
|
|
115
|
-
// this._clearInputBuffer();
|
|
116
|
-
// });
|
|
117
|
-
this._editingDate = linkedSignal(() => this.calendarService.now(this._calendarSystem()), ...(ngDevMode ? [{ debugName: "_editingDate" }] : []));
|
|
118
|
-
/**
|
|
119
|
-
* @ignore
|
|
120
|
-
*/
|
|
121
|
-
this.input = viewChild('input', ...(ngDevMode ? [{ debugName: "input" }] : []));
|
|
122
116
|
this.minValue = input(null, ...(ngDevMode ? [{ debugName: "minValue" }] : []));
|
|
123
117
|
this.maxValue = input(null, ...(ngDevMode ? [{ debugName: "maxValue" }] : []));
|
|
124
118
|
/**
|
|
125
|
-
* Emitted when a click event occurs on the datetime
|
|
119
|
+
* Emitted when a click event occurs on the datetime input.
|
|
126
120
|
* @event
|
|
127
121
|
*/
|
|
128
122
|
this.onClick = output();
|
|
129
123
|
this.picker = input('datetime', ...(ngDevMode ? [{ debugName: "picker" }] : []));
|
|
130
|
-
this._resolvedFormat = computed(() => this.format() ?? this.localeService.activeProfile().formats[this.picker()]?.short ?? '', ...(ngDevMode ? [{ debugName: "_resolvedFormat" }] : []));
|
|
131
124
|
/**
|
|
132
125
|
* @deprecated use locale & mode instead
|
|
133
126
|
*/
|
|
134
127
|
this.format = input(...(ngDevMode ? [undefined, { debugName: "format" }] : []));
|
|
135
|
-
this
|
|
128
|
+
this._calendarSystem = computed(() => this.calendar() ?? this.localeService.activeProfile().calendar.system, ...(ngDevMode ? [{ debugName: "_calendarSystem" }] : []));
|
|
129
|
+
this._resolvedFormat = computed(() => {
|
|
130
|
+
if (this.format()) {
|
|
131
|
+
return this.format();
|
|
132
|
+
}
|
|
133
|
+
// Calendar override can differ from the active locale; solar-hijri uses day/month/year.
|
|
134
|
+
const formats = this._calendarSystem() === 'solar-hijri' ? AXIRLocaleProfile.formats : this.localeService.activeProfile().formats;
|
|
135
|
+
return formats[this.picker()]?.short ?? '';
|
|
136
|
+
}, ...(ngDevMode ? [{ debugName: "_resolvedFormat" }] : []));
|
|
137
|
+
/** @ignore */
|
|
138
|
+
this._editingDate = linkedSignal(() => this.calendarService.now(this._calendarSystem()), ...(ngDevMode ? [{ debugName: "_editingDate" }] : []));
|
|
139
|
+
/** @ignore */
|
|
140
|
+
this.inputRef = viewChild('input', ...(ngDevMode ? [{ debugName: "inputRef" }] : []));
|
|
141
|
+
/**
|
|
142
|
+
* @description check if page is in rtl or ltr
|
|
143
|
+
*/
|
|
144
|
+
this.isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: "isRtl" }] : []));
|
|
145
|
+
/** @ignore */
|
|
146
|
+
this.#formatEffect = effect(() => {
|
|
136
147
|
this._resolvedFormat();
|
|
137
148
|
this._calendarSystem();
|
|
138
149
|
this._detectParts();
|
|
139
150
|
untracked(() => {
|
|
140
|
-
this.
|
|
151
|
+
this.internalValueChanged(this.value);
|
|
141
152
|
});
|
|
142
|
-
}, ...(ngDevMode ? [{ debugName: "#
|
|
143
|
-
/**
|
|
144
|
-
* @description check if page is in rtl or ltr
|
|
145
|
-
*/
|
|
146
|
-
this.isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: "isRtl" }] : []));
|
|
153
|
+
}, ...(ngDevMode ? [{ debugName: "#formatEffect" }] : []));
|
|
147
154
|
}
|
|
148
|
-
|
|
155
|
+
/** @ignore */
|
|
156
|
+
get inputElement() {
|
|
157
|
+
return this.inputRef()?.nativeElement;
|
|
158
|
+
}
|
|
159
|
+
/** @ignore */
|
|
160
|
+
#formatEffect;
|
|
161
|
+
/** @ignore */
|
|
162
|
+
ngOnInit() {
|
|
163
|
+
super.ngOnInit();
|
|
164
|
+
this.platformService.directionChange.pipe(map((i) => i.data === 'rtl')).subscribe((isRtl) => this.isRtl.set(isRtl));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Formats a part using the calendar already attached to the AXDateTime.
|
|
168
|
+
* @ignore
|
|
169
|
+
*/
|
|
170
|
+
_formatPart(date, placeholder) {
|
|
171
|
+
return date.format(placeholder);
|
|
172
|
+
}
|
|
173
|
+
/** @ignore */
|
|
149
174
|
_detectParts() {
|
|
150
175
|
Object.values(this._editingParts).forEach((e) => {
|
|
151
176
|
e.enabled = false;
|
|
@@ -159,17 +184,8 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
159
184
|
}
|
|
160
185
|
});
|
|
161
186
|
}
|
|
162
|
-
/**
|
|
163
|
-
* @description listen to direction change to react to it.
|
|
164
|
-
*/
|
|
165
|
-
ngOnInit() {
|
|
166
|
-
this.platformService.directionChange.pipe(map((i) => i.data === 'rtl')).subscribe((isRtl) => this.isRtl.set(isRtl));
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* @ignore
|
|
170
|
-
*/
|
|
187
|
+
/** @ignore */
|
|
171
188
|
_getOrderedParts() {
|
|
172
|
-
// TODO: better spliter format
|
|
173
189
|
const formatParts = this._resolvedFormat().split(/[^a-zA-Z]+/);
|
|
174
190
|
const result = [];
|
|
175
191
|
formatParts.forEach((f) => {
|
|
@@ -179,18 +195,13 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
179
195
|
});
|
|
180
196
|
return result;
|
|
181
197
|
}
|
|
182
|
-
/**
|
|
183
|
-
* @ignore
|
|
184
|
-
*/
|
|
198
|
+
/** @ignore */
|
|
185
199
|
_clearInputBuffer() {
|
|
186
200
|
this._inputChars = [];
|
|
187
201
|
}
|
|
188
|
-
/**
|
|
189
|
-
* @ignore
|
|
190
|
-
*/
|
|
202
|
+
/** @ignore */
|
|
191
203
|
_updateText() {
|
|
192
204
|
let text = this._resolvedFormat();
|
|
193
|
-
//
|
|
194
205
|
Object.values(this._editingParts).forEach((part) => {
|
|
195
206
|
if (this._activePart() == part.key) {
|
|
196
207
|
if (part.typedValue)
|
|
@@ -207,52 +218,50 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
207
218
|
this._highlightActivePart();
|
|
208
219
|
}
|
|
209
220
|
}
|
|
210
|
-
//TODO: fix this
|
|
211
|
-
/**
|
|
212
|
-
* Sets the internal date value, adjusting it based on editing parts.
|
|
213
|
-
* @param value - The date to set. Returns `undefined` if no value is provided.
|
|
214
|
-
* @ignore
|
|
215
|
-
*/
|
|
216
|
-
// override internalSetValue(value?: Date) {
|
|
217
|
-
// console.log('internalSetValue', value);
|
|
218
|
-
// if (value) {
|
|
219
|
-
// let editingDate = this.calendarService.create(value, this._calendarSystem());
|
|
220
|
-
// let applyChanges = false;
|
|
221
|
-
// Object.values(this._editingParts).forEach((part) => {
|
|
222
|
-
// if (!part.enabled) {
|
|
223
|
-
// editingDate = editingDate.set(part.key as TimeUnit, part.default);
|
|
224
|
-
// applyChanges = true;
|
|
225
|
-
// }
|
|
226
|
-
// });
|
|
227
|
-
// if (applyChanges) {
|
|
228
|
-
// return editingDate.date;
|
|
229
|
-
// }
|
|
230
|
-
// }
|
|
231
|
-
// return value;
|
|
232
|
-
// }
|
|
233
221
|
/**
|
|
234
222
|
* Handles changes to the internal date value, updating editing parts and text representation.
|
|
235
|
-
*
|
|
236
|
-
* @param value - The new date value. If not provided, resets editing parts.
|
|
237
223
|
* @ignore
|
|
238
224
|
*/
|
|
239
225
|
internalValueChanged(value) {
|
|
240
226
|
if (value && this.calendarService.isValidDate(value)) {
|
|
241
|
-
this.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
227
|
+
const next = this.calendarService.create(value, this._calendarSystem());
|
|
228
|
+
const sameAsEditing = this._editingDate().date.getTime() === next.date.getTime();
|
|
229
|
+
this._editingDate.set(next);
|
|
230
|
+
// Parent ngModel echo after typing — keep the in-progress segment buffer.
|
|
231
|
+
if (sameAsEditing && this._activePart()) {
|
|
232
|
+
this._updateText();
|
|
233
|
+
return;
|
|
247
234
|
}
|
|
248
|
-
|
|
235
|
+
Object.values(this._editingParts).forEach((part) => {
|
|
236
|
+
part.typedValue = part.enabled ? part.realValue() : null;
|
|
237
|
+
});
|
|
238
|
+
this._clearInputBuffer();
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
Object.values(this._editingParts).forEach((part) => {
|
|
249
242
|
part.typedValue = null;
|
|
250
|
-
|
|
243
|
+
});
|
|
244
|
+
this._clearInputBuffer();
|
|
245
|
+
}
|
|
251
246
|
this._updateText();
|
|
252
247
|
}
|
|
253
248
|
/**
|
|
254
|
-
*
|
|
249
|
+
* Normalizes Persian (U+06F0-U+06F9) and Arabic-Indic (U+0660-U+0669) digits to ASCII.
|
|
250
|
+
* @ignore
|
|
255
251
|
*/
|
|
252
|
+
_normalizeDigit(key) {
|
|
253
|
+
if (!key || key.length !== 1)
|
|
254
|
+
return null;
|
|
255
|
+
const code = key.charCodeAt(0);
|
|
256
|
+
if (code >= 0x30 && code <= 0x39)
|
|
257
|
+
return key;
|
|
258
|
+
if (code >= 0x06f0 && code <= 0x06f9)
|
|
259
|
+
return String.fromCharCode(code - 0x06f0 + 0x30);
|
|
260
|
+
if (code >= 0x0660 && code <= 0x0669)
|
|
261
|
+
return String.fromCharCode(code - 0x0660 + 0x30);
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
/** @ignore */
|
|
256
265
|
_handleOnKeydownEvent(e) {
|
|
257
266
|
const ignore = () => {
|
|
258
267
|
if (e.key === 'Tab' || e.code === 'Space' || e.code === 'Enter') {
|
|
@@ -266,12 +275,10 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
266
275
|
return;
|
|
267
276
|
}
|
|
268
277
|
const input = e.target;
|
|
269
|
-
//
|
|
270
278
|
const orderedParts = this._getOrderedParts();
|
|
271
279
|
const part = this._activePart() ? this._editingParts[this._activePart()] : orderedParts[0];
|
|
272
280
|
const nextPart = part ? orderedParts[orderedParts.indexOf(part) + 1] : null;
|
|
273
281
|
const prevPart = part ? orderedParts[orderedParts.indexOf(part) - 1] : null;
|
|
274
|
-
//
|
|
275
282
|
const goNext = () => {
|
|
276
283
|
this._clearInputBuffer();
|
|
277
284
|
if (nextPart) {
|
|
@@ -286,41 +293,48 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
286
293
|
this._highlightActivePart();
|
|
287
294
|
}
|
|
288
295
|
};
|
|
289
|
-
|
|
296
|
+
const digit = this._normalizeDigit(e.key);
|
|
290
297
|
if (e.code === 'ArrowRight' || e.code === 'ArrowLeft') {
|
|
291
298
|
ignore();
|
|
292
|
-
|
|
299
|
+
if (!this._activePart()) {
|
|
300
|
+
this._activePart.set(part?.key ?? null);
|
|
301
|
+
this._highlightActivePart();
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
e.code === 'ArrowRight' ? goNext() : goPrev();
|
|
305
|
+
}
|
|
293
306
|
}
|
|
294
307
|
else if ((e.code === 'ArrowUp' || e.code === 'ArrowDown') && !e.ctrlKey) {
|
|
295
|
-
|
|
296
|
-
if (this.disabled || this.readonly) {
|
|
297
|
-
ignore();
|
|
308
|
+
ignore();
|
|
309
|
+
if (this.disabled || this.readonly || !part) {
|
|
298
310
|
return;
|
|
299
311
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
312
|
+
const sign = e.code === 'ArrowUp' ? +1 : -1;
|
|
313
|
+
this._activePart.set(part.key);
|
|
314
|
+
this._clearInputBuffer();
|
|
315
|
+
const unit = part.key === 'AMPM' ? 'hour' : part.key;
|
|
316
|
+
const amount = part.key === 'AMPM' ? sign * 12 : sign;
|
|
317
|
+
const newVal = this._editingDate().add(unit, amount);
|
|
318
|
+
this._editingDate.set(newVal);
|
|
319
|
+
this._getOrderedParts().forEach((p) => {
|
|
320
|
+
p.typedValue = p.realValue();
|
|
321
|
+
});
|
|
322
|
+
this._detectValueChanges();
|
|
309
323
|
}
|
|
310
324
|
else if (e.code == 'Backspace' || e.code == 'Delete') {
|
|
311
|
-
|
|
312
|
-
if (this.disabled || this.readonly) {
|
|
325
|
+
if (this.disabled || this.readonly || !part) {
|
|
313
326
|
return;
|
|
314
327
|
}
|
|
315
328
|
if (input.value) {
|
|
316
329
|
ignore();
|
|
330
|
+
this._clearInputBuffer();
|
|
331
|
+
this._activePart.set(part.key);
|
|
317
332
|
this._editingParts[part.key].typedValue = this._editingParts[part.key].placeholder;
|
|
318
|
-
this.
|
|
333
|
+
this._updateText();
|
|
319
334
|
goPrev();
|
|
320
335
|
}
|
|
321
336
|
}
|
|
322
337
|
else if (e.code == 'Tab' || e.code == 'Space') {
|
|
323
|
-
/*************** Handle Backspace **************/
|
|
324
338
|
if (input.value) {
|
|
325
339
|
if (!e.shiftKey && nextPart) {
|
|
326
340
|
ignore();
|
|
@@ -331,192 +345,184 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
331
345
|
goPrev();
|
|
332
346
|
}
|
|
333
347
|
}
|
|
334
|
-
// TODO: FiX type in input
|
|
335
348
|
}
|
|
336
|
-
else if (
|
|
349
|
+
else if (digit != null) {
|
|
350
|
+
ignore();
|
|
351
|
+
if (this.disabled || this.readonly || !part) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
this._activePart.set(part.key);
|
|
355
|
+
this._handleDigitInput(part, digit, goNext);
|
|
356
|
+
}
|
|
357
|
+
else if (part?.key === 'AMPM' && (e.key?.toLowerCase() === 'a' || e.key?.toLowerCase() === 'p')) {
|
|
337
358
|
ignore();
|
|
338
|
-
return;
|
|
339
359
|
if (this.disabled || this.readonly) {
|
|
340
360
|
return;
|
|
341
361
|
}
|
|
342
|
-
|
|
343
|
-
const
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
const nv = parseInt(editing.typedValue);
|
|
365
|
-
//if (nv > 0) {
|
|
366
|
-
const newVal = this._editingDate().set('year', nv);
|
|
367
|
-
this._editingDate.set(newVal);
|
|
368
|
-
this._detectValueChanges();
|
|
369
|
-
//}
|
|
370
|
-
break;
|
|
362
|
+
const hour = this._editingDate().hour;
|
|
363
|
+
const wantsPM = e.key.toLowerCase() === 'p';
|
|
364
|
+
if (wantsPM && hour < 12) {
|
|
365
|
+
this._applyEditingDate(this._editingDate().add('hour', 12));
|
|
366
|
+
}
|
|
367
|
+
else if (!wantsPM && hour >= 12) {
|
|
368
|
+
this._applyEditingDate(this._editingDate().add('hour', -12));
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
ignore();
|
|
373
|
+
}
|
|
374
|
+
super.emitOnKeydownEvent(e);
|
|
375
|
+
}
|
|
376
|
+
/** @ignore */
|
|
377
|
+
_handleDigitInput(part, digit, goNext) {
|
|
378
|
+
let next = false;
|
|
379
|
+
const editing = this._editingParts[part.key];
|
|
380
|
+
switch (part.key) {
|
|
381
|
+
case 'year': {
|
|
382
|
+
if (editing.placeholder.length == 2 && this._inputChars.length == 0) {
|
|
383
|
+
this._inputChars.push(...this._formatPart(this.calendarService.now(this._calendarSystem()), 'yyyy').substring(0, 2).split(''));
|
|
371
384
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
}
|
|
389
|
-
this._clearInputBuffer();
|
|
385
|
+
this._inputChars.push(digit);
|
|
386
|
+
editing.typedValue = ('0000' + this._inputChars.join('')).slice(-4);
|
|
387
|
+
if (this._inputChars.length >= 4) {
|
|
388
|
+
next = true;
|
|
389
|
+
}
|
|
390
|
+
const nv = parseInt(editing.typedValue);
|
|
391
|
+
if (nv > 0) {
|
|
392
|
+
this._applyEditingDate(this._editingDate().set('year', nv));
|
|
393
|
+
}
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
case 'month': {
|
|
397
|
+
if (this._inputChars.length == 0) {
|
|
398
|
+
this._inputChars.push(digit);
|
|
399
|
+
editing.typedValue = `0${digit}`;
|
|
400
|
+
if (parseInt(digit) > 1) {
|
|
390
401
|
next = true;
|
|
391
402
|
}
|
|
392
|
-
editing.typedValue = editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
|
|
393
|
-
const nv = parseInt(editing.typedValue);
|
|
394
|
-
if (nv > 0) {
|
|
395
|
-
const newVal = this._editingDate().set(part.key, nv);
|
|
396
|
-
this._editingDate.set(newVal);
|
|
397
|
-
this._detectValueChanges();
|
|
398
|
-
}
|
|
399
|
-
break;
|
|
400
403
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
this._clearInputBuffer();
|
|
404
|
+
else {
|
|
405
|
+
const combined = parseInt(`${this._inputChars[0]}${digit}`);
|
|
406
|
+
editing.typedValue = combined > 12 || combined < 1 ? `0${digit}` : `${combined}`.padStart(2, '0');
|
|
407
|
+
next = true;
|
|
408
|
+
}
|
|
409
|
+
const nv = parseInt(editing.typedValue);
|
|
410
|
+
if (nv > 0) {
|
|
411
|
+
this._applyEditingDate(this._editingDate().set('month', nv));
|
|
412
|
+
}
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
case 'day': {
|
|
416
|
+
const totalDays = this._editingDate().month.totalDays;
|
|
417
|
+
if (this._inputChars.length == 0) {
|
|
418
|
+
this._inputChars.push(digit);
|
|
419
|
+
editing.typedValue = `0${digit}`;
|
|
420
|
+
if (parseInt(digit) > Math.floor(totalDays / 10)) {
|
|
419
421
|
next = true;
|
|
420
422
|
}
|
|
421
|
-
editing.typedValue = editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
|
|
422
|
-
const nv = parseInt(editing.typedValue);
|
|
423
|
-
if (nv > 0) {
|
|
424
|
-
const newVal = this._editingDate().set(part.key, nv);
|
|
425
|
-
this._editingDate.set(newVal);
|
|
426
|
-
this._detectValueChanges();
|
|
427
|
-
}
|
|
428
|
-
break;
|
|
429
423
|
}
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
424
|
+
else {
|
|
425
|
+
const combined = parseInt(`${this._inputChars[0]}${digit}`);
|
|
426
|
+
editing.typedValue = combined > totalDays || combined < 1 ? `0${digit}` : `${combined}`.padStart(2, '0');
|
|
427
|
+
next = true;
|
|
428
|
+
}
|
|
429
|
+
const nv = parseInt(editing.typedValue);
|
|
430
|
+
if (nv > 0) {
|
|
431
|
+
this._applyEditingDate(this._editingDate().set('day', nv));
|
|
432
|
+
}
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
435
|
+
case 'hour': {
|
|
436
|
+
if (this._inputChars.length == 0) {
|
|
437
|
+
this._inputChars.push(digit);
|
|
438
|
+
editing.typedValue = `0${digit}`;
|
|
439
|
+
if (parseInt(digit) > 2) {
|
|
446
440
|
next = true;
|
|
447
441
|
}
|
|
448
|
-
editing.typedValue = editing.typedValue?.length === 1 ? '0' + editing.typedValue : editing.typedValue;
|
|
449
|
-
const newVal = this._editingDate().set('hour', parseInt(editing.typedValue));
|
|
450
|
-
this._editingDate.set(newVal);
|
|
451
|
-
this._detectValueChanges();
|
|
452
|
-
break;
|
|
453
442
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
editing.typedValue = newStr.toString();
|
|
471
|
-
}
|
|
472
|
-
this._clearInputBuffer();
|
|
443
|
+
else {
|
|
444
|
+
const combined = parseInt(`${this._inputChars[0]}${digit}`);
|
|
445
|
+
editing.typedValue = combined > 23 ? `0${digit}` : `${combined}`.padStart(2, '0');
|
|
446
|
+
next = true;
|
|
447
|
+
}
|
|
448
|
+
this._applyEditingDate(this._editingDate().set('hour', parseInt(editing.typedValue)));
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
case 'minute':
|
|
452
|
+
case 'second': {
|
|
453
|
+
if (this._inputChars.length == 0) {
|
|
454
|
+
this._inputChars.push(digit);
|
|
455
|
+
editing.typedValue = `0${digit}`;
|
|
456
|
+
if (parseInt(digit) > 5) {
|
|
473
457
|
next = true;
|
|
474
458
|
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
const
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
const combined = parseInt(`${this._inputChars[0]}${digit}`);
|
|
462
|
+
editing.typedValue = combined > 59 ? `0${digit}` : `${combined}`.padStart(2, '0');
|
|
463
|
+
next = true;
|
|
464
|
+
}
|
|
465
|
+
this._applyEditingDate(this._editingDate().set(part.key, parseInt(editing.typedValue)));
|
|
466
|
+
break;
|
|
482
467
|
}
|
|
483
|
-
|
|
484
|
-
goNext();
|
|
468
|
+
default:
|
|
485
469
|
return;
|
|
486
|
-
}
|
|
487
470
|
}
|
|
488
|
-
|
|
489
|
-
|
|
471
|
+
if (next) {
|
|
472
|
+
goNext();
|
|
473
|
+
}
|
|
490
474
|
}
|
|
491
|
-
/**
|
|
492
|
-
|
|
493
|
-
|
|
475
|
+
/** @ignore */
|
|
476
|
+
_applyEditingDate(value) {
|
|
477
|
+
this._editingDate.set(value);
|
|
478
|
+
this._detectValueChanges();
|
|
479
|
+
}
|
|
480
|
+
/** @ignore */
|
|
494
481
|
_handleKeyUpEvent() {
|
|
495
482
|
if (this._activePart()) {
|
|
496
483
|
this._highlightActivePart();
|
|
497
484
|
}
|
|
498
485
|
}
|
|
499
|
-
/**
|
|
500
|
-
* @ignore
|
|
501
|
-
*/
|
|
486
|
+
/** @ignore */
|
|
502
487
|
_handleFocusEvent(e) {
|
|
503
|
-
|
|
488
|
+
if (this.allowTyping()) {
|
|
489
|
+
setTimeout(() => this._selectFirstPart(), 0);
|
|
490
|
+
}
|
|
504
491
|
super.emitOnFocusEvent(e);
|
|
505
492
|
}
|
|
506
|
-
/**
|
|
507
|
-
* @ignore
|
|
508
|
-
*/
|
|
493
|
+
/** @ignore */
|
|
509
494
|
_handleBlurEvent(e) {
|
|
495
|
+
this._activePart.set(null);
|
|
496
|
+
this._clearInputBuffer();
|
|
497
|
+
if (this.allowTyping()) {
|
|
498
|
+
this._clampToRange();
|
|
499
|
+
if (!this.value) {
|
|
500
|
+
Object.values(this._editingParts).forEach((part) => {
|
|
501
|
+
part.typedValue = null;
|
|
502
|
+
});
|
|
503
|
+
this._editingText.set('');
|
|
504
|
+
}
|
|
505
|
+
}
|
|
510
506
|
super.emitOnBlurEvent(e);
|
|
511
507
|
}
|
|
512
|
-
/**
|
|
513
|
-
|
|
514
|
-
|
|
508
|
+
/** @ignore */
|
|
509
|
+
_clampToRange() {
|
|
510
|
+
const value = this.value;
|
|
511
|
+
if (!value)
|
|
512
|
+
return;
|
|
513
|
+
const min = this.minValue();
|
|
514
|
+
const max = this.maxValue();
|
|
515
|
+
if (min && value.getTime() < min.getTime()) {
|
|
516
|
+
this.commitValue(new Date(min), true);
|
|
517
|
+
}
|
|
518
|
+
else if (max && value.getTime() > max.getTime()) {
|
|
519
|
+
this.commitValue(new Date(max), true);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
/** @ignore */
|
|
515
523
|
_handleOnInputClickEvent(e) {
|
|
516
524
|
if (this.allowTyping()) {
|
|
517
|
-
setTimeout(() =>
|
|
518
|
-
this._detectPartAtPosition();
|
|
519
|
-
}, 0);
|
|
525
|
+
setTimeout(() => this._selectFirstPart(), 0);
|
|
520
526
|
}
|
|
521
527
|
this.onClick.emit({
|
|
522
528
|
component: this,
|
|
@@ -524,26 +530,39 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
524
530
|
nativeEvent: e,
|
|
525
531
|
});
|
|
526
532
|
}
|
|
527
|
-
/**
|
|
528
|
-
|
|
529
|
-
*/
|
|
530
|
-
_detectPartAtPosition() {
|
|
531
|
-
const input = this.input();
|
|
532
|
-
if (!input || !input.value)
|
|
533
|
-
return;
|
|
534
|
-
const sStart = input.selectionEnd || 0;
|
|
535
|
-
const re = /[a-zA-Z0-9]+/gi;
|
|
536
|
-
const valueParts = Array.from(input.value.matchAll(re));
|
|
533
|
+
/** @ignore */
|
|
534
|
+
_selectFirstPart() {
|
|
537
535
|
const orderedParts = this._getOrderedParts();
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
this.
|
|
536
|
+
if (!orderedParts.length)
|
|
537
|
+
return;
|
|
538
|
+
this._clearInputBuffer();
|
|
539
|
+
this._activePart.set(orderedParts[0].key);
|
|
540
|
+
const wasEmpty = !this._editingText();
|
|
541
|
+
this._ensureEditableText();
|
|
542
|
+
if (wasEmpty) {
|
|
543
|
+
setTimeout(() => this._highlightActivePart(), 0);
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
this._highlightActivePart();
|
|
547
|
+
}
|
|
541
548
|
}
|
|
542
|
-
/**
|
|
543
|
-
|
|
544
|
-
|
|
549
|
+
/** @ignore */
|
|
550
|
+
_ensureEditableText() {
|
|
551
|
+
if (this._editingText())
|
|
552
|
+
return;
|
|
553
|
+
const format = this._resolvedFormat();
|
|
554
|
+
if (!format)
|
|
555
|
+
return;
|
|
556
|
+
Object.values(this._editingParts).forEach((part) => {
|
|
557
|
+
if (part.enabled && part.typedValue == null) {
|
|
558
|
+
part.typedValue = part.placeholder;
|
|
559
|
+
}
|
|
560
|
+
});
|
|
561
|
+
this._editingText.set(format);
|
|
562
|
+
}
|
|
563
|
+
/** @ignore */
|
|
545
564
|
_highlightActivePart() {
|
|
546
|
-
const input = this.
|
|
565
|
+
const input = this.inputElement;
|
|
547
566
|
if (!input || !input.value || !this._activePart())
|
|
548
567
|
return;
|
|
549
568
|
const orderedParts = this._getOrderedParts();
|
|
@@ -555,17 +574,12 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
555
574
|
input.setSelectionRange(start, end);
|
|
556
575
|
}
|
|
557
576
|
}
|
|
558
|
-
/**
|
|
559
|
-
* @ignore
|
|
560
|
-
*/
|
|
577
|
+
/** @ignore */
|
|
561
578
|
_detectValueChanges() {
|
|
562
579
|
this.commitValue(this._editingDate().date, true);
|
|
563
580
|
}
|
|
564
|
-
get __hostName() {
|
|
565
|
-
return this.name;
|
|
566
|
-
}
|
|
567
581
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
568
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.3", type: AXDateTimeInputComponent, isStandalone: true, selector: "ax-datetime-input", 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 }, allowTyping: { classPropertyName: "allowTyping", publicName: "allowTyping", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", 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 }, picker: { classPropertyName: "picker", publicName: "picker", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", stateChange: "stateChange", onValueChanged: "onValueChanged", onBlur: "onBlur", onFocus: "onFocus", readonlyChange: "readonlyChange", disabledChange: "disabledChange", onClick: "onClick" }, host: { listeners: { "keydown": "_handleOnKeydownEvent($event)", "keyup": "_handleKeyUpEvent()" }, properties: { "attr.name": "
|
|
582
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.3", type: AXDateTimeInputComponent, isStandalone: true, selector: "ax-datetime-input", 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 }, allowTyping: { classPropertyName: "allowTyping", publicName: "allowTyping", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", 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 }, picker: { classPropertyName: "picker", publicName: "picker", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", 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: [
|
|
569
583
|
{ provide: AXComponent, useExisting: AXDateTimeInputComponent },
|
|
570
584
|
{ provide: AXFocusableComponent, useExisting: AXDateTimeInputComponent },
|
|
571
585
|
{ provide: AXValuableComponent, useExisting: AXDateTimeInputComponent },
|
|
@@ -575,11 +589,22 @@ class AXDateTimeInputComponent extends MXInputBaseValueComponent {
|
|
|
575
589
|
useExisting: forwardRef(() => AXDateTimeInputComponent),
|
|
576
590
|
multi: true,
|
|
577
591
|
},
|
|
578
|
-
], viewQueries: [{ propertyName: "
|
|
592
|
+
], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<input\n #input\n id=\"input\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n class=\"ax-input\"\n type=\"text\"\n [dir]=\"isRtl() ? 'rtl' : 'ltr'\"\n [attr.placeholder]=\"placeholder || _resolvedFormat()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-select-none]=\"!allowTyping()\"\n [class.ax-state-readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [readonly]=\"true\"\n [ngModel]=\"_editingText()\"\n (mouseup)=\"_handleOnInputClickEvent($event)\"\n (blur)=\"_handleBlurEvent($event)\"\n (focus)=\"_handleFocusEvent($event)\"\n [style.text-align]=\"isRtl() ? 'end' : 'start'\"\n [tabindex]=\"tabIndex\"\n/>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n", styles: [".ax-select-none,.ax-select-none *{-webkit-user-select:none!important;user-select:none!important}\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 }); }
|
|
579
593
|
}
|
|
580
594
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeInputComponent, decorators: [{
|
|
581
595
|
type: Component,
|
|
582
|
-
args: [{ selector: 'ax-datetime-input', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: ['disabled', 'readonly', 'tabIndex', 'placeholder', 'value', 'state', 'name', 'id'], outputs: [
|
|
596
|
+
args: [{ selector: 'ax-datetime-input', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: ['disabled', 'readonly', 'tabIndex', 'placeholder', 'value', 'state', 'name', 'id'], outputs: [
|
|
597
|
+
'valueChange',
|
|
598
|
+
'stateChange',
|
|
599
|
+
'onValueChanged',
|
|
600
|
+
'onBlur',
|
|
601
|
+
'onFocus',
|
|
602
|
+
'readonlyChange',
|
|
603
|
+
'disabledChange',
|
|
604
|
+
'onKeyDown',
|
|
605
|
+
'onKeyUp',
|
|
606
|
+
'onKeyPress',
|
|
607
|
+
], providers: [
|
|
583
608
|
{ provide: AXComponent, useExisting: AXDateTimeInputComponent },
|
|
584
609
|
{ provide: AXFocusableComponent, useExisting: AXDateTimeInputComponent },
|
|
585
610
|
{ provide: AXValuableComponent, useExisting: AXDateTimeInputComponent },
|
|
@@ -589,17 +614,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
589
614
|
useExisting: forwardRef(() => AXDateTimeInputComponent),
|
|
590
615
|
multi: true,
|
|
591
616
|
},
|
|
592
|
-
], imports: [FormsModule],
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
args: ['keyup']
|
|
599
|
-
}], __hostName: [{
|
|
600
|
-
type: HostBinding,
|
|
601
|
-
args: ['attr.name']
|
|
602
|
-
}] } });
|
|
617
|
+
], imports: [FormsModule], host: {
|
|
618
|
+
'(keydown)': '_handleOnKeydownEvent($event)',
|
|
619
|
+
'(keyup)': '_handleKeyUpEvent()',
|
|
620
|
+
'[attr.name]': 'name',
|
|
621
|
+
}, template: "<input\n #input\n id=\"input\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n class=\"ax-input\"\n type=\"text\"\n [dir]=\"isRtl() ? 'rtl' : 'ltr'\"\n [attr.placeholder]=\"placeholder || _resolvedFormat()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-select-none]=\"!allowTyping()\"\n [class.ax-state-readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [readonly]=\"true\"\n [ngModel]=\"_editingText()\"\n (mouseup)=\"_handleOnInputClickEvent($event)\"\n (blur)=\"_handleBlurEvent($event)\"\n (focus)=\"_handleFocusEvent($event)\"\n [style.text-align]=\"isRtl() ? 'end' : 'start'\"\n [tabindex]=\"tabIndex\"\n/>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n", styles: [".ax-select-none,.ax-select-none *{-webkit-user-select:none!important;user-select:none!important}\n"] }]
|
|
622
|
+
}] });
|
|
603
623
|
|
|
604
624
|
class AXDateTimeInputModule {
|
|
605
625
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDateTimeInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -618,5 +638,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImpor
|
|
|
618
638
|
* Generated bundle index. Do not edit.
|
|
619
639
|
*/
|
|
620
640
|
|
|
621
|
-
export { AXDateTimeInputComponent, AXDateTimeInputModule };
|
|
641
|
+
export { AXDateTimeInputComponent, AXDateTimeInputDefaultConfig, AXDateTimeInputModule, AX_DATETIME_INPUT_CONFIG };
|
|
622
642
|
//# sourceMappingURL=acorex-components-datetime-input.mjs.map
|