@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.
Files changed (40) hide show
  1. package/cjs/index.js +4 -0
  2. package/cjs/index.js.map +1 -1
  3. package/cjs/time-input/MaskedInput.js +387 -0
  4. package/cjs/time-input/MaskedInput.js.map +1 -0
  5. package/cjs/time-input/TimeInput.css.js +6 -0
  6. package/cjs/time-input/TimeInput.css.js.map +1 -0
  7. package/cjs/time-input/TimeInput.js +46 -0
  8. package/cjs/time-input/TimeInput.js.map +1 -0
  9. package/cjs/time-input/useTimeInput.js +92 -0
  10. package/cjs/time-input/useTimeInput.js.map +1 -0
  11. package/cjs/vuu-time-picker/VuuTimePicker.css.js +6 -0
  12. package/cjs/vuu-time-picker/VuuTimePicker.css.js.map +1 -0
  13. package/cjs/vuu-time-picker/VuuTimePicker.js +33 -0
  14. package/cjs/vuu-time-picker/VuuTimePicker.js.map +1 -0
  15. package/cjs/vuu-typeahead-input/VuuTypeaheadInput.js +4 -2
  16. package/cjs/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
  17. package/esm/index.js +2 -0
  18. package/esm/index.js.map +1 -1
  19. package/esm/time-input/MaskedInput.js +385 -0
  20. package/esm/time-input/MaskedInput.js.map +1 -0
  21. package/esm/time-input/TimeInput.css.js +4 -0
  22. package/esm/time-input/TimeInput.css.js.map +1 -0
  23. package/esm/time-input/TimeInput.js +44 -0
  24. package/esm/time-input/TimeInput.js.map +1 -0
  25. package/esm/time-input/useTimeInput.js +90 -0
  26. package/esm/time-input/useTimeInput.js.map +1 -0
  27. package/esm/vuu-time-picker/VuuTimePicker.css.js +4 -0
  28. package/esm/vuu-time-picker/VuuTimePicker.css.js.map +1 -0
  29. package/esm/vuu-time-picker/VuuTimePicker.js +31 -0
  30. package/esm/vuu-time-picker/VuuTimePicker.js.map +1 -0
  31. package/esm/vuu-typeahead-input/VuuTypeaheadInput.js +4 -2
  32. package/esm/vuu-typeahead-input/VuuTypeaheadInput.js.map +1 -1
  33. package/package.json +10 -10
  34. package/types/index.d.ts +2 -0
  35. package/types/time-input/MaskedInput.d.ts +36 -0
  36. package/types/time-input/TimeInput.d.ts +5 -0
  37. package/types/time-input/useTimeInput.d.ts +19 -0
  38. package/types/vuu-time-picker/TimeRangePicker.d.ts +0 -0
  39. package/types/vuu-time-picker/VuuTimePicker.d.ts +6 -0
  40. 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,6 @@
1
+ 'use strict';
2
+
3
+ var timeInputCss = ".TimeInput {\n font-family: monospace;\n width: 80px;\n\n\n&:focus::-webkit-input-placeholder {\n color: transparent;\n}\n}\n";
4
+
5
+ module.exports = timeInputCss;
6
+ //# sourceMappingURL=TimeInput.css.js.map
@@ -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":";;;;;;AAYA,MAAM,OAAA,GAAU,CAAC,IACf,KAAA,IAAA,CAAK,WAAW,CAAK,IAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AASjC,MAAM,eAAe,CAAC;AAAA,EAC3B,YAAA;AAAA,EACA,QAAA;AAAA,EACA,wBAA2B,GAAA;AAC7B,CAA0B,KAAA;AACxB,EAAA,MAAM,WAAc,GAAAA,aAAA;AAAA,IAClB,MAAM,IAAIC,uBAAY,CAAA,YAAA,EAAc,MAAM,wBAAwB,CAAA;AAAA,IAClE,CAAC,cAAc,wBAAwB;AAAA,GACzC;AAEA,EAAA,MAAM,UAAa,GAAAC,iBAAA;AAAA,IACjB,CAAC,EAAO,KAAA;AACN,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,WAAA,CAAY,KAAQ,GAAA,EAAA;AAAA;AACtB,KACF;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AACA,EAAM,MAAA,IAAA,GAAOC,aAAO,KAAK,CAAA;AAEzB,EAAA,MAAM,WAAc,GAAAD,iBAAA;AAAA,IAClB,CAAC,KAAK,KAAU,KAAA;AACd,MAAI,IAAAE,0BAAA,CAAkB,KAAK,CAAG,EAAA;AAC5B,QAAA,QAAA,CAAS,KAAKC,aAAK,CAAA,KAAK,CAAE,CAAA,MAAA,IAAU,YAAY,CAAA;AAAA,OAClD,MAAA,IAAW,UAAU,UAAY,EAAA;AAC/B,QAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAAA,OAErB,MAAA;AACL,QAAA,OAAA,CAAQ,IAAI,CAAoB,kBAAA,CAAA,CAAA;AAAA;AAElC,KACF;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,aAAgB,GAAAH,iBAAA;AAAA,IACpB,CAAC,CAAM,KAAA;AACL,MAAA,OAAA,CAAQ,IAAI,CAAiB,cAAA,EAAA,CAAA,CAAE,GAAG,CAAc,WAAA,EAAA,WAAA,CAAY,SAAS,CAAE,CAAA,CAAA;AACvE,MAAI,IAAA,CAAA,CAAE,QAAQ,WAAa,EAAA;AACzB,QAAA,WAAA,CAAY,SAAU,EAAA;AACtB,QAAA,IAAA,CAAK,OAAU,GAAA,IAAA;AAAA,OACN,MAAA,IAAA,OAAA,CAAQ,CAAE,CAAA,GAAG,CAAG,EAAA;AACzB,QAAY,WAAA,CAAA,MAAA,CAAO,EAAE,GAAG,CAAA;AAAA,OAC1B,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,WAAa,EAAA;AAChC,QAAA,WAAA,CAAY,UAAU,MAAM,CAAA;AAAA,OAC9B,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,YAAc,EAAA;AACjC,QAAA,WAAA,CAAY,UAAU,OAAO,CAAA;AAAA,OAC/B,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,SAAW,EAAA;AAC9B,QAAA,WAAA,CAAY,cAAe,EAAA;AAAA,OAC7B,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,WAAa,EAAA;AAChC,QAAA,WAAA,CAAY,cAAe,EAAA;AAAA,OAClB,MAAA,IAAA,CAAA,CAAE,GAAQ,KAAA,GAAA,IAAO,EAAE,OAAS,EAAA;AAErC,QAAA;AAAA,OACF,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,KAAO,EAAA;AAC1B,QAAA;AAAA,OACF,MAAA,IAAW,CAAE,CAAA,GAAA,KAAQ,OAAS,EAAA;AAC5B,QAAY,WAAA,CAAA,CAAA,EAAG,YAAY,KAAK,CAAA;AAAA;AAElC,MAAA,CAAA,CAAE,cAAe,EAAA;AAAA,KACnB;AAAA,IACA,CAAC,aAAa,WAAW;AAAA,GAC3B;AAEA,EAAM,MAAA,WAAA,GAAcA,kBAAY,MAAM;AACpC,IAAA,WAAA,CAAY,KAAM,EAAA;AAAA,GACpB,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAM,MAAA,iBAAA,GAAoBA,kBAAY,MAAM;AAC1C,IAAA,WAAA,CAAY,WAAY,EAAA;AAAA,GAC1B,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,WAAc,GAAAA,iBAAA;AAAA,IAClB,CAAC,CAAM,KAAA;AACL,MAAA,OAAA,CAAQ,IAAI,CAAS,MAAA,EAAA,CAAA,CAAE,cAAc,OAAQ,CAAA,MAAM,CAAC,CAAE,CAAA,CAAA;AAAA,KACxD;AAAA,IACA;AAAC,GACH;AAeA,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,UAAA;AAAA,IACV,aAAe,EAAA;AAAA,MACb,QAAQ,WAAY,CAAA,IAAA;AAAA,MACpB,OAAS,EAAA,WAAA;AAAA,MACT,aAAe,EAAA,iBAAA;AAAA,MACf,SAAS,WAAY,CAAA,KAAA;AAAA,MACrB,SAAW,EAAA,aAAA;AAAA;AAAA,MAEX,OAAS,EAAA;AAAA;AACX,GACF;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var timePickerCss = ".vuuTimePicker {\n display: inline-block;\n}";
4
+
5
+ module.exports = timePickerCss;
6
+ //# sourceMappingURL=VuuTimePicker.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VuuTimePicker.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}