@vuu-ui/vuu-ui-controls 0.13.24 → 0.13.25
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/cjs/index.js +4 -0
- package/cjs/index.js.map +1 -1
- package/cjs/time-input/MaskedInput.js +387 -0
- package/cjs/time-input/MaskedInput.js.map +1 -0
- package/cjs/time-input/TimeInput.css.js +6 -0
- package/cjs/time-input/TimeInput.css.js.map +1 -0
- package/cjs/time-input/TimeInput.js +46 -0
- package/cjs/time-input/TimeInput.js.map +1 -0
- package/cjs/time-input/useTimeInput.js +92 -0
- package/cjs/time-input/useTimeInput.js.map +1 -0
- package/cjs/vuu-time-picker/VuuTimePicker.css.js +6 -0
- package/cjs/vuu-time-picker/VuuTimePicker.css.js.map +1 -0
- package/cjs/vuu-time-picker/VuuTimePicker.js +33 -0
- package/cjs/vuu-time-picker/VuuTimePicker.js.map +1 -0
- package/cjs/vuu-typeahead-input/VuuTypeaheadInput.js +4 -2
- package/cjs/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -1
- package/esm/time-input/MaskedInput.js +385 -0
- package/esm/time-input/MaskedInput.js.map +1 -0
- package/esm/time-input/TimeInput.css.js +4 -0
- package/esm/time-input/TimeInput.css.js.map +1 -0
- package/esm/time-input/TimeInput.js +44 -0
- package/esm/time-input/TimeInput.js.map +1 -0
- package/esm/time-input/useTimeInput.js +90 -0
- package/esm/time-input/useTimeInput.js.map +1 -0
- package/esm/vuu-time-picker/VuuTimePicker.css.js +4 -0
- package/esm/vuu-time-picker/VuuTimePicker.css.js.map +1 -0
- package/esm/vuu-time-picker/VuuTimePicker.js +31 -0
- package/esm/vuu-time-picker/VuuTimePicker.js.map +1 -0
- package/esm/vuu-typeahead-input/VuuTypeaheadInput.js +4 -2
- package/esm/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
- package/package.json +10 -10
- package/types/index.d.ts +2 -0
- package/types/time-input/MaskedInput.d.ts +36 -0
- package/types/time-input/TimeInput.d.ts +5 -0
- package/types/time-input/useTimeInput.d.ts +19 -0
- package/types/vuu-time-picker/TimeRangePicker.d.ts +0 -0
- package/types/vuu-time-picker/VuuTimePicker.d.ts +6 -0
- package/types/vuu-typeahead-input/VuuTypeaheadInput.d.ts +3 -2
package/cjs/index.js
CHANGED
|
@@ -43,6 +43,7 @@ var TabNextAction = require('./tabs-next/TabNextAction.js');
|
|
|
43
43
|
var Tabstrip = require('./tabstrip/Tabstrip.js');
|
|
44
44
|
var Tab = require('./tabstrip/Tab.js');
|
|
45
45
|
var tabstripDomUtils = require('./tabstrip/tabstrip-dom-utils.js');
|
|
46
|
+
var TimeInput = require('./time-input/TimeInput.js');
|
|
46
47
|
var Toolbar = require('./toolbar/Toolbar.js');
|
|
47
48
|
var escapeRegExp = require('./utils/escapeRegExp.js');
|
|
48
49
|
var isOverflowElement = require('./utils/isOverflowElement.js');
|
|
@@ -53,6 +54,7 @@ var VuuInput = require('./vuu-input/VuuInput.js');
|
|
|
53
54
|
var VuuTypeaheadInput = require('./vuu-typeahead-input/VuuTypeaheadInput.js');
|
|
54
55
|
var ContextPanelProvider = require('./context-panel-provider/ContextPanelProvider.js');
|
|
55
56
|
var SortableList = require('./sortable-list/SortableList.js');
|
|
57
|
+
var VuuTimePicker = require('./vuu-time-picker/VuuTimePicker.js');
|
|
56
58
|
|
|
57
59
|
|
|
58
60
|
|
|
@@ -143,6 +145,7 @@ exports.Tabstrip = Tabstrip.Tabstrip;
|
|
|
143
145
|
exports.Tab = Tab.Tab;
|
|
144
146
|
exports.getIndexOfEditedItem = tabstripDomUtils.getIndexOfEditedItem;
|
|
145
147
|
exports.getIndexOfSelectedTab = tabstripDomUtils.getIndexOfSelectedTab;
|
|
148
|
+
exports.TimeInput = TimeInput.TimeInput;
|
|
146
149
|
exports.Toolbar = Toolbar.Toolbar;
|
|
147
150
|
exports.escapeRegExp = escapeRegExp.escapeRegExp;
|
|
148
151
|
exports.isOverflowElement = isOverflowElement.isOverflowElement;
|
|
@@ -156,4 +159,5 @@ exports.useContextPanel = ContextPanelProvider.useContextPanel;
|
|
|
156
159
|
exports.useHideContextPanel = ContextPanelProvider.useHideContextPanel;
|
|
157
160
|
exports.SortableList = SortableList.SortableList;
|
|
158
161
|
exports.SortableOption = SortableList.SortableOption;
|
|
162
|
+
exports.VuuTimePicker = VuuTimePicker.VuuTimePicker;
|
|
159
163
|
//# sourceMappingURL=index.js.map
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __typeError = (msg) => {
|
|
5
|
+
throw TypeError(msg);
|
|
6
|
+
};
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
9
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
10
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
11
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
12
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
13
|
+
var _input, _pattern, _selectionStart, _selectionEnd, _showTemplateWhileEditing, _value, _unitSelected, _halfUnitSelected;
|
|
14
|
+
const incrementTime = (value, unit) => {
|
|
15
|
+
if (value === "hh" || value == "mm" || value === "ss") {
|
|
16
|
+
return "00";
|
|
17
|
+
} else if (/\d\d/.test(value)) {
|
|
18
|
+
const num = parseInt(value);
|
|
19
|
+
if (unit === "hours" && num < 23) {
|
|
20
|
+
return `${num + 1}`.padStart(2, "0").slice(-2);
|
|
21
|
+
} else if (unit === "hours" && num === 23) {
|
|
22
|
+
return "00";
|
|
23
|
+
} else if (num < 59) {
|
|
24
|
+
return `${num + 1}`.padStart(2, "0").slice(-2);
|
|
25
|
+
} else if (num === 59) {
|
|
26
|
+
return "00";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
};
|
|
31
|
+
const decrementTime = (value, unit) => {
|
|
32
|
+
if (value === "hh" || value == "mm" || value === "ss") {
|
|
33
|
+
return "00";
|
|
34
|
+
} else if (/\d\d/.test(value)) {
|
|
35
|
+
const num = parseInt(value);
|
|
36
|
+
if (unit === "hours" && num > 0) {
|
|
37
|
+
return `${num - 1}`.padStart(2, "0").slice(-2);
|
|
38
|
+
} else if (unit === "hours" && num === 0) {
|
|
39
|
+
return "23";
|
|
40
|
+
} else if (num > 0) {
|
|
41
|
+
return `${num - 1}`.padStart(2, "0").slice(-2);
|
|
42
|
+
} else if (num === 0) {
|
|
43
|
+
return "59";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
};
|
|
48
|
+
class MaskedInput {
|
|
49
|
+
constructor(value = "", inputEl = null, showTemplateWhileEditing = true) {
|
|
50
|
+
__privateAdd(this, _input);
|
|
51
|
+
__privateAdd(this, _pattern, "hh:mm:ss");
|
|
52
|
+
__privateAdd(this, _selectionStart, -1);
|
|
53
|
+
__privateAdd(this, _selectionEnd, -1);
|
|
54
|
+
__privateAdd(this, _showTemplateWhileEditing, true);
|
|
55
|
+
__privateAdd(this, _value);
|
|
56
|
+
__privateAdd(this, _unitSelected);
|
|
57
|
+
__privateAdd(this, _halfUnitSelected);
|
|
58
|
+
__publicField(this, "focus", () => {
|
|
59
|
+
if (__privateGet(this, _input)) {
|
|
60
|
+
if (this.value === "") {
|
|
61
|
+
if (__privateGet(this, _showTemplateWhileEditing)) {
|
|
62
|
+
this.value = __privateGet(this, _input).value = __privateGet(this, _pattern);
|
|
63
|
+
} else {
|
|
64
|
+
this.value = __privateGet(this, _input).value = "00:00:00";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
requestAnimationFrame(() => {
|
|
68
|
+
this.select("hours");
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
if (__privateGet(this, _input)?.selectionStart !== 0) {
|
|
71
|
+
this.select("hours");
|
|
72
|
+
}
|
|
73
|
+
}, 200);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
__publicField(this, "blur", () => {
|
|
78
|
+
if (__privateGet(this, _input) && __privateGet(this, _input).value === __privateGet(this, _pattern)) {
|
|
79
|
+
this.value = __privateGet(this, _input).value = "";
|
|
80
|
+
} else {
|
|
81
|
+
this.removeSelection();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
__privateSet(this, _input, inputEl);
|
|
85
|
+
__privateSet(this, _showTemplateWhileEditing, showTemplateWhileEditing);
|
|
86
|
+
__privateSet(this, _value, value);
|
|
87
|
+
}
|
|
88
|
+
set input(el) {
|
|
89
|
+
__privateSet(this, _input, el);
|
|
90
|
+
}
|
|
91
|
+
get cursorPos() {
|
|
92
|
+
return this.selectionStart;
|
|
93
|
+
}
|
|
94
|
+
set cursorPos(value) {
|
|
95
|
+
this.selectionStart = value;
|
|
96
|
+
this.selectionEnd = value;
|
|
97
|
+
if (__privateGet(this, _input)) {
|
|
98
|
+
__privateGet(this, _input).setSelectionRange(value, value);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
get selectionStart() {
|
|
102
|
+
return __privateGet(this, _selectionStart);
|
|
103
|
+
}
|
|
104
|
+
set selectionStart(value) {
|
|
105
|
+
__privateSet(this, _selectionStart, value);
|
|
106
|
+
}
|
|
107
|
+
get selectionEnd() {
|
|
108
|
+
return __privateGet(this, _selectionEnd);
|
|
109
|
+
}
|
|
110
|
+
set selectionEnd(value) {
|
|
111
|
+
__privateSet(this, _selectionEnd, value);
|
|
112
|
+
}
|
|
113
|
+
get hours() {
|
|
114
|
+
return __privateGet(this, _value).slice(0, 2);
|
|
115
|
+
}
|
|
116
|
+
set hours(value) {
|
|
117
|
+
if (__privateGet(this, _input)) {
|
|
118
|
+
__privateSet(this, _value, `${value}:${this.minutes}:${this.seconds}`);
|
|
119
|
+
__privateGet(this, _input).value = __privateGet(this, _value);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
get minutes() {
|
|
123
|
+
return __privateGet(this, _value).slice(3, 5);
|
|
124
|
+
}
|
|
125
|
+
set minutes(value) {
|
|
126
|
+
if (__privateGet(this, _input)) {
|
|
127
|
+
__privateSet(this, _value, `${this.hours}:${value}:${this.seconds}`);
|
|
128
|
+
__privateGet(this, _input).value = __privateGet(this, _value);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
get seconds() {
|
|
132
|
+
return __privateGet(this, _value).slice(6, 8);
|
|
133
|
+
}
|
|
134
|
+
set seconds(value) {
|
|
135
|
+
if (__privateGet(this, _input)) {
|
|
136
|
+
__privateSet(this, _value, `${this.hours}:${this.minutes}:${value}`);
|
|
137
|
+
__privateGet(this, _input).value = __privateGet(this, _value);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
get value() {
|
|
141
|
+
return __privateGet(this, _value);
|
|
142
|
+
}
|
|
143
|
+
set value(value) {
|
|
144
|
+
__privateSet(this, _value, value);
|
|
145
|
+
}
|
|
146
|
+
get selection() {
|
|
147
|
+
const { selectionStart, selectionEnd } = this;
|
|
148
|
+
if (selectionStart === -1 || selectionEnd === -1) {
|
|
149
|
+
return "";
|
|
150
|
+
} else if (selectionStart === selectionEnd) {
|
|
151
|
+
return "";
|
|
152
|
+
} else {
|
|
153
|
+
return this.value;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
clear(unit) {
|
|
157
|
+
if (__privateGet(this, _input)) {
|
|
158
|
+
const { value } = this;
|
|
159
|
+
const pattern = __privateGet(this, _showTemplateWhileEditing) ? __privateGet(this, _pattern) : "00:00:00";
|
|
160
|
+
if (unit === "hours") {
|
|
161
|
+
this.value = pattern.slice(0, 2).concat(value.slice(2));
|
|
162
|
+
} else if (unit === "minutes") {
|
|
163
|
+
this.value = value.slice(0, 3).concat(pattern.slice(3, 5)).concat(value.slice(5));
|
|
164
|
+
} else if (unit === "seconds") {
|
|
165
|
+
this.value = value.slice(0, 6).concat(pattern.slice(6));
|
|
166
|
+
}
|
|
167
|
+
__privateGet(this, _input).value = this.value;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
select(unit, halfUnit = false) {
|
|
171
|
+
if (__privateGet(this, _input)) {
|
|
172
|
+
const offset = halfUnit ? 1 : 0;
|
|
173
|
+
if (unit === "hours") {
|
|
174
|
+
this.selectionStart = __privateGet(this, _input).selectionStart = 0 + offset;
|
|
175
|
+
this.selectionEnd = __privateGet(this, _input).selectionEnd = 2;
|
|
176
|
+
} else if (unit === "minutes") {
|
|
177
|
+
this.selectionStart = __privateGet(this, _input).selectionStart = 3 + offset;
|
|
178
|
+
this.selectionEnd = __privateGet(this, _input).selectionEnd = 5;
|
|
179
|
+
} else if (unit === "seconds") {
|
|
180
|
+
this.selectionStart = __privateGet(this, _input).selectionStart = 6 + offset;
|
|
181
|
+
this.selectionEnd = __privateGet(this, _input).selectionEnd = 8;
|
|
182
|
+
}
|
|
183
|
+
__privateGet(this, _input).setSelectionRange(this.selectionStart, this.selectionEnd);
|
|
184
|
+
if (halfUnit) {
|
|
185
|
+
__privateSet(this, _halfUnitSelected, unit);
|
|
186
|
+
__privateSet(this, _unitSelected, void 0);
|
|
187
|
+
} else {
|
|
188
|
+
__privateSet(this, _halfUnitSelected, void 0);
|
|
189
|
+
__privateSet(this, _unitSelected, unit);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
removeSelection() {
|
|
194
|
+
__privateSet(this, _selectionStart, this.selectionEnd = 8);
|
|
195
|
+
__privateSet(this, _unitSelected, void 0);
|
|
196
|
+
__privateSet(this, _halfUnitSelected, void 0);
|
|
197
|
+
}
|
|
198
|
+
moveFocus(direction) {
|
|
199
|
+
if (direction === "right") {
|
|
200
|
+
if (__privateGet(this, _unitSelected) === "hours" || __privateGet(this, _halfUnitSelected) === "hours") {
|
|
201
|
+
this.select("minutes");
|
|
202
|
+
} else if (__privateGet(this, _unitSelected) === "minutes" || __privateGet(this, _halfUnitSelected) === "minutes") {
|
|
203
|
+
this.select("seconds");
|
|
204
|
+
}
|
|
205
|
+
} else {
|
|
206
|
+
if (__privateGet(this, _unitSelected) === "seconds" || __privateGet(this, _halfUnitSelected) === "seconds") {
|
|
207
|
+
this.select("minutes");
|
|
208
|
+
} else if (__privateGet(this, _unitSelected) === "minutes" || __privateGet(this, _halfUnitSelected) === "minutes") {
|
|
209
|
+
this.select("hours");
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
incrementValue() {
|
|
214
|
+
const { cursorPos } = this;
|
|
215
|
+
if (__privateGet(this, _input)) {
|
|
216
|
+
if (cursorPos >= 0 && cursorPos <= 2) {
|
|
217
|
+
const value = this.hours;
|
|
218
|
+
const nextValue = incrementTime(value, "hours");
|
|
219
|
+
if (nextValue !== value) {
|
|
220
|
+
this.hours = nextValue;
|
|
221
|
+
this.select("hours");
|
|
222
|
+
}
|
|
223
|
+
} else if (cursorPos >= 3 && cursorPos < 6) {
|
|
224
|
+
const value = this.minutes;
|
|
225
|
+
const nextValue = incrementTime(value, "hours");
|
|
226
|
+
if (nextValue !== value) {
|
|
227
|
+
this.minutes = nextValue;
|
|
228
|
+
this.select("minutes");
|
|
229
|
+
}
|
|
230
|
+
} else if (cursorPos >= 5 && cursorPos <= 8) {
|
|
231
|
+
const value = this.seconds;
|
|
232
|
+
const nextValue = incrementTime(value, "seconds");
|
|
233
|
+
if (nextValue !== value) {
|
|
234
|
+
this.seconds = nextValue;
|
|
235
|
+
this.select("seconds");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
decrementValue() {
|
|
241
|
+
const { cursorPos } = this;
|
|
242
|
+
if (__privateGet(this, _input)) {
|
|
243
|
+
if (__privateGet(this, _unitSelected) === "hours") {
|
|
244
|
+
const value = this.hours;
|
|
245
|
+
const nextValue = decrementTime(value, "hours");
|
|
246
|
+
if (nextValue !== value) {
|
|
247
|
+
this.hours = nextValue;
|
|
248
|
+
this.select("hours");
|
|
249
|
+
}
|
|
250
|
+
} else if (__privateGet(this, _unitSelected)) {
|
|
251
|
+
const value = this[__privateGet(this, _unitSelected)];
|
|
252
|
+
const nextValue = decrementTime(value, __privateGet(this, _unitSelected));
|
|
253
|
+
if (nextValue !== value) {
|
|
254
|
+
this[__privateGet(this, _unitSelected)] = nextValue;
|
|
255
|
+
this.select(__privateGet(this, _unitSelected));
|
|
256
|
+
}
|
|
257
|
+
} else {
|
|
258
|
+
if (cursorPos >= 0 && cursorPos <= 2) {
|
|
259
|
+
const value = this.hours;
|
|
260
|
+
const nextValue = decrementTime(value, "hours");
|
|
261
|
+
if (nextValue !== value) {
|
|
262
|
+
this.hours = nextValue;
|
|
263
|
+
this.select("hours");
|
|
264
|
+
}
|
|
265
|
+
} else if (cursorPos >= 3 && cursorPos < 6) {
|
|
266
|
+
const value = this.minutes;
|
|
267
|
+
const nextValue = decrementTime(value, "hours");
|
|
268
|
+
if (nextValue !== value) {
|
|
269
|
+
this.minutes = nextValue;
|
|
270
|
+
this.select("minutes");
|
|
271
|
+
}
|
|
272
|
+
} else if (cursorPos >= 5 && cursorPos <= 8) {
|
|
273
|
+
const value = this.seconds;
|
|
274
|
+
const nextValue = decrementTime(value, "seconds");
|
|
275
|
+
if (nextValue !== value) {
|
|
276
|
+
this.seconds = nextValue;
|
|
277
|
+
this.select("seconds");
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
backspace() {
|
|
284
|
+
if (__privateGet(this, _input)) {
|
|
285
|
+
const { cursorPos, value } = this;
|
|
286
|
+
const pattern = __privateGet(this, _showTemplateWhileEditing) ? __privateGet(this, _pattern) : "00:00:00";
|
|
287
|
+
if (__privateGet(this, _unitSelected) === "seconds") {
|
|
288
|
+
this.clear("seconds");
|
|
289
|
+
this.select("minutes");
|
|
290
|
+
} else if (__privateGet(this, _unitSelected) === "minutes") {
|
|
291
|
+
this.clear("minutes");
|
|
292
|
+
this.select("hours");
|
|
293
|
+
} else if (__privateGet(this, _unitSelected) === "hours") {
|
|
294
|
+
this.clear("hours");
|
|
295
|
+
this.select("hours");
|
|
296
|
+
} else {
|
|
297
|
+
console.log("NEVER HAPPENS");
|
|
298
|
+
if (cursorPos > 0) {
|
|
299
|
+
const offset = this.selectionStart === 6 || this.selectionStart === 3 ? 2 : 1;
|
|
300
|
+
this.value = value.slice(0, cursorPos - offset).concat(pattern.slice(cursorPos - offset, cursorPos)).concat(value.slice(cursorPos));
|
|
301
|
+
this.selectionStart -= offset;
|
|
302
|
+
this.selectionEnd -= offset;
|
|
303
|
+
__privateGet(this, _input).value = this.value;
|
|
304
|
+
requestAnimationFrame(() => {
|
|
305
|
+
__privateGet(this, _input)?.setSelectionRange(
|
|
306
|
+
__privateGet(this, _selectionStart),
|
|
307
|
+
this.selectionEnd
|
|
308
|
+
);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
update(key) {
|
|
315
|
+
if (__privateGet(this, _input)) {
|
|
316
|
+
const { cursorPos } = this;
|
|
317
|
+
if (cursorPos < 8) {
|
|
318
|
+
this.value = this.value.split("").toSpliced(cursorPos, 1, key).join("");
|
|
319
|
+
__privateGet(this, _input).value = this.value;
|
|
320
|
+
if (__privateGet(this, _unitSelected)) {
|
|
321
|
+
this.select(__privateGet(this, _unitSelected), true);
|
|
322
|
+
} else if (__privateGet(this, _halfUnitSelected) === "hours") {
|
|
323
|
+
this.select("minutes");
|
|
324
|
+
} else if (__privateGet(this, _halfUnitSelected) === "minutes") {
|
|
325
|
+
this.select("seconds");
|
|
326
|
+
} else if (__privateGet(this, _halfUnitSelected) === "seconds") {
|
|
327
|
+
this.select("seconds");
|
|
328
|
+
} else {
|
|
329
|
+
console.log("NEVER HAPPENS");
|
|
330
|
+
if (this.selectionStart === 1 || this.selectionStart === 4) {
|
|
331
|
+
this.selectionStart += 2;
|
|
332
|
+
this.selectionEnd += 2;
|
|
333
|
+
} else {
|
|
334
|
+
this.selectionStart += 1;
|
|
335
|
+
this.selectionEnd += 1;
|
|
336
|
+
}
|
|
337
|
+
requestAnimationFrame(() => {
|
|
338
|
+
__privateGet(this, _input)?.setSelectionRange(
|
|
339
|
+
__privateGet(this, _selectionStart),
|
|
340
|
+
this.selectionEnd
|
|
341
|
+
);
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
getUnitAtCursorPos(cursorPos) {
|
|
348
|
+
if (cursorPos < 3) {
|
|
349
|
+
return "hours";
|
|
350
|
+
} else if (cursorPos < 6) {
|
|
351
|
+
return "minutes";
|
|
352
|
+
} else {
|
|
353
|
+
return "seconds";
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
click() {
|
|
357
|
+
if (__privateGet(this, _input)) {
|
|
358
|
+
const cursorPos = __privateGet(this, _input).selectionStart ?? 0;
|
|
359
|
+
this.select(this.getUnitAtCursorPos(cursorPos));
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
doubleClick() {
|
|
363
|
+
if (__privateGet(this, _input)) {
|
|
364
|
+
const { selectionStart, selectionEnd } = __privateGet(this, _input);
|
|
365
|
+
if (selectionStart === null || selectionEnd === null) ; else {
|
|
366
|
+
if (selectionStart < 3) {
|
|
367
|
+
this.select("hours");
|
|
368
|
+
} else if (selectionStart < 6) {
|
|
369
|
+
this.select("minutes");
|
|
370
|
+
} else if (selectionStart <= 8) {
|
|
371
|
+
this.select("seconds");
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
_input = new WeakMap();
|
|
378
|
+
_pattern = new WeakMap();
|
|
379
|
+
_selectionStart = new WeakMap();
|
|
380
|
+
_selectionEnd = new WeakMap();
|
|
381
|
+
_showTemplateWhileEditing = new WeakMap();
|
|
382
|
+
_value = new WeakMap();
|
|
383
|
+
_unitSelected = new WeakMap();
|
|
384
|
+
_halfUnitSelected = new WeakMap();
|
|
385
|
+
|
|
386
|
+
exports.MaskedInput = MaskedInput;
|
|
387
|
+
//# sourceMappingURL=MaskedInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaskedInput.js","sources":["../../../../packages/vuu-ui-controls/src/time-input/MaskedInput.ts"],"sourcesContent":["type TimeUnit = \"hours\" | \"minutes\" | \"seconds\";\nexport type Digit = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\";\n\nconst incrementTime = (value: string, unit: TimeUnit) => {\n if (value === \"hh\" || value == \"mm\" || value === \"ss\") {\n return \"00\";\n } else if (/\\d\\d/.test(value)) {\n const num = parseInt(value);\n if (unit === \"hours\" && num < 23) {\n return `${num + 1}`.padStart(2, \"0\").slice(-2);\n } else if (unit === \"hours\" && num === 23) {\n return \"00\";\n } else if (num < 59) {\n return `${num + 1}`.padStart(2, \"0\").slice(-2);\n } else if (num === 59) {\n return \"00\";\n }\n }\n return value;\n};\n\nconst decrementTime = (value: string, unit: TimeUnit) => {\n if (value === \"hh\" || value == \"mm\" || value === \"ss\") {\n return \"00\";\n } else if (/\\d\\d/.test(value)) {\n const num = parseInt(value);\n if (unit === \"hours\" && num > 0) {\n return `${num - 1}`.padStart(2, \"0\").slice(-2);\n } else if (unit === \"hours\" && num === 0) {\n return \"23\";\n } else if (num > 0) {\n return `${num - 1}`.padStart(2, \"0\").slice(-2);\n } else if (num === 0) {\n return \"59\";\n }\n }\n return value;\n};\n\nexport class MaskedInput {\n #input: HTMLInputElement | null;\n #pattern = \"hh:mm:ss\";\n #selectionStart = -1;\n #selectionEnd = -1;\n #showTemplateWhileEditing = true;\n #value;\n #unitSelected?: TimeUnit;\n #halfUnitSelected?: TimeUnit;\n\n constructor(\n value = \"\",\n inputEl: HTMLInputElement | null = null,\n showTemplateWhileEditing = true,\n ) {\n this.#input = inputEl;\n this.#showTemplateWhileEditing = showTemplateWhileEditing;\n this.#value = value;\n }\n\n set input(el: HTMLInputElement) {\n this.#input = el;\n }\n\n get cursorPos() {\n return this.selectionStart;\n }\n set cursorPos(value: number) {\n this.selectionStart = value;\n this.selectionEnd = value;\n if (this.#input) {\n this.#input.setSelectionRange(value, value);\n }\n }\n\n get selectionStart() {\n return this.#selectionStart;\n }\n set selectionStart(value: number) {\n this.#selectionStart = value;\n }\n\n get selectionEnd() {\n return this.#selectionEnd;\n }\n set selectionEnd(value: number) {\n this.#selectionEnd = value;\n }\n\n get hours() {\n return this.#value.slice(0, 2);\n }\n\n set hours(value: string) {\n if (this.#input) {\n this.#value = `${value}:${this.minutes}:${this.seconds}`;\n this.#input.value = this.#value;\n }\n }\n\n get minutes() {\n return this.#value.slice(3, 5);\n }\n\n set minutes(value: string) {\n if (this.#input) {\n this.#value = `${this.hours}:${value}:${this.seconds}`;\n this.#input.value = this.#value;\n }\n }\n\n get seconds() {\n return this.#value.slice(6, 8);\n }\n\n set seconds(value: string) {\n if (this.#input) {\n this.#value = `${this.hours}:${this.minutes}:${value}`;\n this.#input.value = this.#value;\n }\n }\n\n get value() {\n return this.#value;\n }\n\n set value(value: string) {\n this.#value = value;\n }\n\n get selection() {\n const { selectionStart, selectionEnd } = this;\n if (selectionStart === -1 || selectionEnd === -1) {\n return \"\";\n } else if (selectionStart === selectionEnd) {\n return \"\";\n } else {\n return this.value;\n }\n }\n\n clear(unit: TimeUnit) {\n if (this.#input) {\n const { value } = this;\n const pattern = this.#showTemplateWhileEditing\n ? this.#pattern\n : \"00:00:00\";\n\n if (unit === \"hours\") {\n this.value = pattern.slice(0, 2).concat(value.slice(2));\n } else if (unit === \"minutes\") {\n this.value = value\n .slice(0, 3)\n .concat(pattern.slice(3, 5))\n .concat(value.slice(5));\n } else if (unit === \"seconds\") {\n this.value = value.slice(0, 6).concat(pattern.slice(6));\n }\n this.#input.value = this.value;\n }\n }\n\n select(unit: TimeUnit, halfUnit = false) {\n if (this.#input) {\n const offset = halfUnit ? 1 : 0;\n if (unit === \"hours\") {\n this.selectionStart = this.#input.selectionStart = 0 + offset;\n this.selectionEnd = this.#input.selectionEnd = 2;\n } else if (unit === \"minutes\") {\n this.selectionStart = this.#input.selectionStart = 3 + offset;\n this.selectionEnd = this.#input.selectionEnd = 5;\n } else if (unit === \"seconds\") {\n this.selectionStart = this.#input.selectionStart = 6 + offset;\n this.selectionEnd = this.#input.selectionEnd = 8;\n }\n this.#input.setSelectionRange(this.selectionStart, this.selectionEnd);\n if (halfUnit) {\n this.#halfUnitSelected = unit;\n this.#unitSelected = undefined;\n } else {\n this.#halfUnitSelected = undefined;\n this.#unitSelected = unit;\n }\n }\n }\n\n removeSelection() {\n this.#selectionStart = this.selectionEnd = 8;\n this.#unitSelected = undefined;\n this.#halfUnitSelected = undefined;\n }\n\n moveFocus(direction: \"left\" | \"right\") {\n if (direction === \"right\") {\n if (\n this.#unitSelected === \"hours\" ||\n this.#halfUnitSelected === \"hours\"\n ) {\n this.select(\"minutes\");\n } else if (\n this.#unitSelected === \"minutes\" ||\n this.#halfUnitSelected === \"minutes\"\n ) {\n this.select(\"seconds\");\n }\n } else {\n if (\n this.#unitSelected === \"seconds\" ||\n this.#halfUnitSelected === \"seconds\"\n ) {\n this.select(\"minutes\");\n } else if (\n this.#unitSelected === \"minutes\" ||\n this.#halfUnitSelected === \"minutes\"\n ) {\n this.select(\"hours\");\n }\n }\n }\n\n incrementValue() {\n const { cursorPos } = this;\n if (this.#input) {\n if (cursorPos >= 0 && cursorPos <= 2) {\n const value = this.hours;\n const nextValue = incrementTime(value, \"hours\");\n if (nextValue !== value) {\n this.hours = nextValue;\n this.select(\"hours\");\n }\n } else if (cursorPos >= 3 && cursorPos < 6) {\n const value = this.minutes;\n const nextValue = incrementTime(value, \"hours\");\n if (nextValue !== value) {\n this.minutes = nextValue;\n this.select(\"minutes\");\n }\n } else if (cursorPos >= 5 && cursorPos <= 8) {\n const value = this.seconds;\n const nextValue = incrementTime(value, \"seconds\");\n if (nextValue !== value) {\n this.seconds = nextValue;\n this.select(\"seconds\");\n }\n }\n }\n }\n\n decrementValue() {\n const { cursorPos } = this;\n if (this.#input) {\n if (this.#unitSelected === \"hours\") {\n const value = this.hours;\n const nextValue = decrementTime(value, \"hours\");\n if (nextValue !== value) {\n this.hours = nextValue;\n this.select(\"hours\");\n }\n } else if (this.#unitSelected) {\n const value = this[this.#unitSelected];\n const nextValue = decrementTime(value, this.#unitSelected);\n if (nextValue !== value) {\n this[this.#unitSelected] = nextValue;\n this.select(this.#unitSelected);\n }\n } else {\n if (cursorPos >= 0 && cursorPos <= 2) {\n const value = this.hours;\n const nextValue = decrementTime(value, \"hours\");\n if (nextValue !== value) {\n this.hours = nextValue;\n this.select(\"hours\");\n }\n } else if (cursorPos >= 3 && cursorPos < 6) {\n const value = this.minutes;\n const nextValue = decrementTime(value, \"hours\");\n if (nextValue !== value) {\n this.minutes = nextValue;\n this.select(\"minutes\");\n }\n } else if (cursorPos >= 5 && cursorPos <= 8) {\n const value = this.seconds;\n const nextValue = decrementTime(value, \"seconds\");\n if (nextValue !== value) {\n this.seconds = nextValue;\n this.select(\"seconds\");\n }\n }\n }\n }\n }\n\n backspace() {\n if (this.#input) {\n const { cursorPos, value } = this;\n const pattern = this.#showTemplateWhileEditing\n ? this.#pattern\n : \"00:00:00\";\n\n if (this.#unitSelected === \"seconds\") {\n this.clear(\"seconds\");\n this.select(\"minutes\");\n } else if (this.#unitSelected === \"minutes\") {\n this.clear(\"minutes\");\n this.select(\"hours\");\n } else if (this.#unitSelected === \"hours\") {\n this.clear(\"hours\");\n this.select(\"hours\");\n } else {\n console.log(\"NEVER HAPPENS\");\n if (cursorPos > 0) {\n // console.log(`Backspace val = ${this.#value} cursorPos ${cursorPos}`);\n const offset =\n this.selectionStart === 6 || this.selectionStart === 3 ? 2 : 1;\n this.value = value\n .slice(0, cursorPos - offset)\n .concat(pattern.slice(cursorPos - offset, cursorPos))\n .concat(value.slice(cursorPos));\n this.selectionStart -= offset;\n this.selectionEnd -= offset;\n this.#input.value = this.value;\n\n requestAnimationFrame(() => {\n this.#input?.setSelectionRange(\n this.#selectionStart,\n this.selectionEnd,\n );\n });\n }\n }\n }\n }\n\n update(key: Digit) {\n if (this.#input) {\n const { cursorPos } = this;\n if (cursorPos < 8) {\n this.value = this.value.split(\"\").toSpliced(cursorPos, 1, key).join(\"\");\n this.#input.value = this.value;\n if (this.#unitSelected) {\n this.select(this.#unitSelected, true);\n } else if (this.#halfUnitSelected === \"hours\") {\n this.select(\"minutes\");\n } else if (this.#halfUnitSelected === \"minutes\") {\n this.select(\"seconds\");\n } else if (this.#halfUnitSelected === \"seconds\") {\n this.select(\"seconds\");\n } else {\n console.log(\"NEVER HAPPENS\");\n if (this.selectionStart === 1 || this.selectionStart === 4) {\n this.selectionStart += 2;\n this.selectionEnd += 2;\n } else {\n this.selectionStart += 1;\n this.selectionEnd += 1;\n }\n requestAnimationFrame(() => {\n this.#input?.setSelectionRange(\n this.#selectionStart,\n this.selectionEnd,\n );\n });\n }\n }\n }\n }\n\n getUnitAtCursorPos(cursorPos: number): TimeUnit {\n if (cursorPos < 3) {\n return \"hours\";\n } else if (cursorPos < 6) {\n return \"minutes\";\n } else {\n return \"seconds\";\n }\n }\n\n click() {\n if (this.#input) {\n const cursorPos = this.#input.selectionStart ?? 0;\n this.select(this.getUnitAtCursorPos(cursorPos));\n }\n }\n doubleClick() {\n if (this.#input) {\n // if (this.value !== this.#pattern) {\n const { selectionStart, selectionEnd } = this.#input;\n if (selectionStart === null || selectionEnd === null) {\n // do nothing\n // } else if (selectionStart === selectionEnd) {\n } else {\n if (selectionStart < 3) {\n this.select(\"hours\");\n } else if (selectionStart < 6) {\n this.select(\"minutes\");\n } else if (selectionStart <= 8) {\n this.select(\"seconds\");\n }\n }\n }\n // }\n }\n\n focus = () => {\n if (this.#input) {\n if (this.value === \"\") {\n if (this.#showTemplateWhileEditing) {\n this.value = this.#input.value = this.#pattern;\n } else {\n this.value = this.#input.value = \"00:00:00\";\n }\n }\n requestAnimationFrame(() => {\n this.select(\"hours\");\n setTimeout(() => {\n if (this.#input?.selectionStart !== 0) {\n this.select(\"hours\");\n }\n }, 200);\n });\n }\n };\n\n blur = () => {\n if (this.#input && this.#input.value === this.#pattern) {\n this.value = this.#input.value = \"\";\n } else {\n this.removeSelection();\n }\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeInput.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var styles = require('@salt-ds/styles');
|
|
5
|
+
var window = require('@salt-ds/window');
|
|
6
|
+
var cx = require('clsx');
|
|
7
|
+
var useTimeInput = require('./useTimeInput.js');
|
|
8
|
+
var TimeInput$1 = require('./TimeInput.css.js');
|
|
9
|
+
|
|
10
|
+
const zeroTime = "00:00:00";
|
|
11
|
+
const TimeInput = ({
|
|
12
|
+
className,
|
|
13
|
+
date,
|
|
14
|
+
defaultValue = zeroTime,
|
|
15
|
+
onCommit,
|
|
16
|
+
placeholder = "hh:mm:ss",
|
|
17
|
+
showTemplateWhileEditing
|
|
18
|
+
}) => {
|
|
19
|
+
const targetWindow = window.useWindow();
|
|
20
|
+
styles.useComponentCssInjection({
|
|
21
|
+
testId: "vuu-time-input",
|
|
22
|
+
css: TimeInput$1,
|
|
23
|
+
window: targetWindow
|
|
24
|
+
});
|
|
25
|
+
const { inputRef, eventHandlers } = useTimeInput.useTimeInput({
|
|
26
|
+
date,
|
|
27
|
+
defaultValue,
|
|
28
|
+
onCommit,
|
|
29
|
+
showTemplateWhileEditing
|
|
30
|
+
});
|
|
31
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
32
|
+
"input",
|
|
33
|
+
{
|
|
34
|
+
...eventHandlers,
|
|
35
|
+
"aria-placeholder": placeholder,
|
|
36
|
+
className: cx("TimeInput", className),
|
|
37
|
+
defaultValue,
|
|
38
|
+
placeholder,
|
|
39
|
+
ref: inputRef,
|
|
40
|
+
spellCheck: "false"
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.TimeInput = TimeInput;
|
|
46
|
+
//# sourceMappingURL=TimeInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeInput.js","sources":["../../../../packages/vuu-ui-controls/src/time-input/TimeInput.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport { TimeInputHookProps, useTimeInput } from \"./useTimeInput\";\n\nimport timeInputCss from \"./TimeInput.css\";\nimport { TimeString } from \"@vuu-ui/vuu-utils\";\n\nconst zeroTime: TimeString = \"00:00:00\";\n\nexport interface TimeInputProps\n extends TimeInputHookProps,\n Omit<HTMLAttributes<HTMLInputElement>, \"defaultValue\">,\n Partial<Pick<HTMLInputElement, \"placeholder\">> {}\n\nexport const TimeInput = ({\n className,\n date,\n defaultValue = zeroTime,\n onCommit,\n placeholder = \"hh:mm:ss\",\n showTemplateWhileEditing,\n}: TimeInputProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-time-input\",\n css: timeInputCss,\n window: targetWindow,\n });\n\n const { inputRef, eventHandlers } = useTimeInput({\n date,\n defaultValue,\n onCommit,\n showTemplateWhileEditing,\n });\n\n return (\n <input\n {...eventHandlers}\n aria-placeholder={placeholder}\n className={cx(\"TimeInput\", className)}\n defaultValue={defaultValue}\n placeholder={placeholder}\n ref={inputRef}\n spellCheck=\"false\"\n />\n );\n};\n"],"names":["useWindow","useComponentCssInjection","timeInputCss","useTimeInput","jsx"],"mappings":";;;;;;;;;AASA,MAAM,QAAuB,GAAA,UAAA;AAOtB,MAAM,YAAY,CAAC;AAAA,EACxB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAe,GAAA,QAAA;AAAA,EACf,QAAA;AAAA,EACA,WAAc,GAAA,UAAA;AAAA,EACd;AACF,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,WAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,QAAA,EAAU,aAAc,EAAA,GAAIC,yBAAa,CAAA;AAAA,IAC/C,IAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA;AAAA,MACJ,kBAAkB,EAAA,WAAA;AAAA,MAClB,SAAA,EAAW,EAAG,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA,MACpC,YAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAK,EAAA,QAAA;AAAA,MACL,UAAW,EAAA;AAAA;AAAA,GACb;AAEJ;;;;"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var MaskedInput = require('./MaskedInput.js');
|
|
5
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
6
|
+
|
|
7
|
+
const isDigit = (char) => char.length === 1 && /[0-9]/.test(char);
|
|
8
|
+
const useTimeInput = ({
|
|
9
|
+
defaultValue,
|
|
10
|
+
onCommit,
|
|
11
|
+
showTemplateWhileEditing = true
|
|
12
|
+
}) => {
|
|
13
|
+
const maskedInput = React.useMemo(
|
|
14
|
+
() => new MaskedInput.MaskedInput(defaultValue, null, showTemplateWhileEditing),
|
|
15
|
+
[defaultValue, showTemplateWhileEditing]
|
|
16
|
+
);
|
|
17
|
+
const setInputEl = React.useCallback(
|
|
18
|
+
(el) => {
|
|
19
|
+
if (el) {
|
|
20
|
+
maskedInput.input = el;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
[maskedInput]
|
|
24
|
+
);
|
|
25
|
+
const back = React.useRef(false);
|
|
26
|
+
const commitValue = React.useCallback(
|
|
27
|
+
(evt, value) => {
|
|
28
|
+
if (vuuUtils.stringIsValidTime(value)) {
|
|
29
|
+
onCommit(evt, vuuUtils.Time(value).asDate(), "text-input");
|
|
30
|
+
} else if (value === "hh:mm:ss") {
|
|
31
|
+
console.log("no value set");
|
|
32
|
+
} else {
|
|
33
|
+
console.log(`value is not valid`);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
[onCommit]
|
|
37
|
+
);
|
|
38
|
+
const handleKeyDown = React.useCallback(
|
|
39
|
+
(e) => {
|
|
40
|
+
console.log(`handleKeyDown ${e.key} cursorPos ${maskedInput.cursorPos}`);
|
|
41
|
+
if (e.key === "Backspace") {
|
|
42
|
+
maskedInput.backspace();
|
|
43
|
+
back.current = true;
|
|
44
|
+
} else if (isDigit(e.key)) {
|
|
45
|
+
maskedInput.update(e.key);
|
|
46
|
+
} else if (e.key === "ArrowLeft") {
|
|
47
|
+
maskedInput.moveFocus("left");
|
|
48
|
+
} else if (e.key === "ArrowRight") {
|
|
49
|
+
maskedInput.moveFocus("right");
|
|
50
|
+
} else if (e.key === "ArrowUp") {
|
|
51
|
+
maskedInput.incrementValue();
|
|
52
|
+
} else if (e.key === "ArrowDown") {
|
|
53
|
+
maskedInput.decrementValue();
|
|
54
|
+
} else if (e.key === "v" && e.metaKey) {
|
|
55
|
+
return;
|
|
56
|
+
} else if (e.key === "Tab") {
|
|
57
|
+
return;
|
|
58
|
+
} else if (e.key === "Enter") {
|
|
59
|
+
commitValue(e, maskedInput.value);
|
|
60
|
+
}
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
},
|
|
63
|
+
[commitValue, maskedInput]
|
|
64
|
+
);
|
|
65
|
+
const handleClick = React.useCallback(() => {
|
|
66
|
+
maskedInput.click();
|
|
67
|
+
}, [maskedInput]);
|
|
68
|
+
const handleDoubleClick = React.useCallback(() => {
|
|
69
|
+
maskedInput.doubleClick();
|
|
70
|
+
}, [maskedInput]);
|
|
71
|
+
const handlePaste = React.useCallback(
|
|
72
|
+
(e) => {
|
|
73
|
+
console.log(`paste ${e.clipboardData.getData("text")}`);
|
|
74
|
+
},
|
|
75
|
+
[]
|
|
76
|
+
);
|
|
77
|
+
return {
|
|
78
|
+
inputRef: setInputEl,
|
|
79
|
+
eventHandlers: {
|
|
80
|
+
onBlur: maskedInput.blur,
|
|
81
|
+
onClick: handleClick,
|
|
82
|
+
onDoubleClick: handleDoubleClick,
|
|
83
|
+
onFocus: maskedInput.focus,
|
|
84
|
+
onKeyDown: handleKeyDown,
|
|
85
|
+
// onMouseUp: handleMouseUp,
|
|
86
|
+
onPaste: handlePaste
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
exports.useTimeInput = useTimeInput;
|
|
92
|
+
//# sourceMappingURL=useTimeInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTimeInput.js","sources":["../../../../packages/vuu-ui-controls/src/time-input/useTimeInput.ts"],"sourcesContent":["import { CommitHandler, DateStringISO, TimeString } from \"@vuu-ui/vuu-utils\";\nimport {\n ClipboardEventHandler,\n KeyboardEventHandler,\n RefCallback,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { Digit, MaskedInput } from \"./MaskedInput\";\nimport { stringIsValidTime, Time } from \"@vuu-ui/vuu-utils\";\n\nconst isDigit = (char: string): char is Digit =>\n char.length === 1 && /[0-9]/.test(char);\n\nexport interface TimeInputHookProps {\n date?: Date | DateStringISO;\n defaultValue?: TimeString;\n onCommit: CommitHandler<HTMLInputElement, Date>;\n showTemplateWhileEditing?: boolean;\n}\n\nexport const useTimeInput = ({\n defaultValue,\n onCommit,\n showTemplateWhileEditing = true,\n}: TimeInputHookProps) => {\n const maskedInput = useMemo<MaskedInput>(\n () => new MaskedInput(defaultValue, null, showTemplateWhileEditing),\n [defaultValue, showTemplateWhileEditing],\n );\n\n const setInputEl = useCallback<RefCallback<HTMLInputElement>>(\n (el) => {\n if (el) {\n maskedInput.input = el;\n }\n },\n [maskedInput],\n );\n const back = useRef(false);\n\n const commitValue = useCallback<CommitHandler<HTMLInputElement, string>>(\n (evt, value) => {\n if (stringIsValidTime(value)) {\n onCommit(evt, Time(value).asDate(), \"text-input\");\n } else if (value === \"hh:mm:ss\") {\n console.log(\"no value set\");\n // onCommit(evt, Boolean(value), \"text-input\");\n } else {\n console.log(`value is not valid`);\n // onCommit(evt, value, \"text-input\");\n }\n },\n [onCommit],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLInputElement>>(\n (e) => {\n console.log(`handleKeyDown ${e.key} cursorPos ${maskedInput.cursorPos}`);\n if (e.key === \"Backspace\") {\n maskedInput.backspace();\n back.current = true;\n } else if (isDigit(e.key)) {\n maskedInput.update(e.key);\n } else if (e.key === \"ArrowLeft\") {\n maskedInput.moveFocus(\"left\");\n } else if (e.key === \"ArrowRight\") {\n maskedInput.moveFocus(\"right\");\n } else if (e.key === \"ArrowUp\") {\n maskedInput.incrementValue();\n } else if (e.key === \"ArrowDown\") {\n maskedInput.decrementValue();\n } else if (e.key === \"v\" && e.metaKey) {\n // keyboard paste, do not prevent default\n return;\n } else if (e.key === \"Tab\") {\n return;\n } else if (e.key === \"Enter\") {\n commitValue(e, maskedInput.value);\n }\n e.preventDefault();\n },\n [commitValue, maskedInput],\n );\n\n const handleClick = useCallback(() => {\n maskedInput.click();\n }, [maskedInput]);\n\n const handleDoubleClick = useCallback(() => {\n maskedInput.doubleClick();\n }, [maskedInput]);\n\n const handlePaste = useCallback<ClipboardEventHandler<HTMLInputElement>>(\n (e) => {\n console.log(`paste ${e.clipboardData.getData(\"text\")}`);\n },\n [],\n );\n\n // const handleMouseUp = useCallback<MouseEventHandler<HTMLInputElement>>(\n // (e) => {\n // const input = e.target as HTMLInputElement;\n // console.log(\n // `mouseup sytart ${input.selectionStart} end ${input.selectionEnd}`,\n // );\n // if (input.selectionStart === 0 && input.selectionEnd === 8) {\n // console.log(\"full select\");\n // }\n // },\n // [],\n // );\n\n return {\n inputRef: setInputEl,\n eventHandlers: {\n onBlur: maskedInput.blur,\n onClick: handleClick,\n onDoubleClick: handleDoubleClick,\n onFocus: maskedInput.focus,\n onKeyDown: handleKeyDown,\n // onMouseUp: handleMouseUp,\n onPaste: handlePaste,\n },\n };\n};\n"],"names":["useMemo","MaskedInput","useCallback","useRef","stringIsValidTime","Time"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VuuTimePicker.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|