@skbkontur/react-ui 6.2.1 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/components/Group/Group.js +3 -2
- package/components/Group/Group.js.map +1 -1
- package/components/Input/Input.d.ts +1 -1
- package/components/Input/Input.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +1 -1
- package/components/MenuItem/MenuItem.js.map +1 -1
- package/components/TimePicker/TimeClockIcon.d.ts +3 -0
- package/components/TimePicker/TimeClockIcon.js +11 -0
- package/components/TimePicker/TimeClockIcon.js.map +1 -0
- package/components/TimePicker/TimePicker.d.ts +144 -0
- package/components/TimePicker/TimePicker.js +795 -0
- package/components/TimePicker/TimePicker.js.map +1 -0
- package/components/TimePicker/TimePicker.styles.d.ts +12 -0
- package/components/TimePicker/TimePicker.styles.js +39 -0
- package/components/TimePicker/TimePicker.styles.js.map +1 -0
- package/components/TimePicker/TimePickerItems.d.ts +23 -0
- package/components/TimePicker/TimePickerItems.js +115 -0
- package/components/TimePicker/TimePickerItems.js.map +1 -0
- package/components/TimePicker/TimePickerMobilePopup.d.ts +48 -0
- package/components/TimePicker/TimePickerMobilePopup.js +45 -0
- package/components/TimePicker/TimePickerMobilePopup.js.map +1 -0
- package/components/TimePicker/TimePickerPopup.d.ts +26 -0
- package/components/TimePicker/TimePickerPopup.js +18 -0
- package/components/TimePicker/TimePickerPopup.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.constants.d.ts +31 -0
- package/components/TimePicker/helpers/TimePicker.constants.js +34 -0
- package/components/TimePicker/helpers/TimePicker.constants.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.editing.d.ts +19 -0
- package/components/TimePicker/helpers/TimePicker.editing.js +74 -0
- package/components/TimePicker/helpers/TimePicker.editing.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.layout.d.ts +6 -0
- package/components/TimePicker/helpers/TimePicker.layout.js +49 -0
- package/components/TimePicker/helpers/TimePicker.layout.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.selection.d.ts +5 -0
- package/components/TimePicker/helpers/TimePicker.selection.js +23 -0
- package/components/TimePicker/helpers/TimePicker.selection.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.shared.d.ts +71 -0
- package/components/TimePicker/helpers/TimePicker.shared.js +90 -0
- package/components/TimePicker/helpers/TimePicker.shared.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.value.d.ts +69 -0
- package/components/TimePicker/helpers/TimePicker.value.js +225 -0
- package/components/TimePicker/helpers/TimePicker.value.js.map +1 -0
- package/components/TimePicker/helpers/scrollSelectedItemIntoView.d.ts +6 -0
- package/components/TimePicker/helpers/scrollSelectedItemIntoView.js +26 -0
- package/components/TimePicker/helpers/scrollSelectedItemIntoView.js.map +1 -0
- package/components/TimePicker/helpers/validateTimePicker.d.ts +8 -0
- package/components/TimePicker/helpers/validateTimePicker.js +16 -0
- package/components/TimePicker/helpers/validateTimePicker.js.map +1 -0
- package/components/TimePicker/index.d.ts +4 -0
- package/components/TimePicker/index.js +3 -0
- package/components/TimePicker/index.js.map +1 -0
- package/components/TimePicker/locale/index.d.ts +4 -0
- package/components/TimePicker/locale/index.js +9 -0
- package/components/TimePicker/locale/index.js.map +1 -0
- package/components/TimePicker/locale/locales/en.d.ts +2 -0
- package/components/TimePicker/locale/locales/en.js +7 -0
- package/components/TimePicker/locale/locales/en.js.map +1 -0
- package/components/TimePicker/locale/locales/ru.d.ts +2 -0
- package/components/TimePicker/locale/locales/ru.js +7 -0
- package/components/TimePicker/locale/locales/ru.js.map +1 -0
- package/components/TimePicker/locale/types.d.ts +6 -0
- package/components/TimePicker/locale/types.js +2 -0
- package/components/TimePicker/locale/types.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internal/NativeTimeInput/NativeTimeInput.d.ts +20 -0
- package/internal/NativeTimeInput/NativeTimeInput.js +30 -0
- package/internal/NativeTimeInput/NativeTimeInput.js.map +1 -0
- package/internal/NativeTimeInput/NativeTimeInput.styles.d.ts +3 -0
- package/internal/NativeTimeInput/NativeTimeInput.styles.js +15 -0
- package/internal/NativeTimeInput/NativeTimeInput.styles.js.map +1 -0
- package/internal/NativeTimeInput/NativeTimeInput.utils.d.ts +9 -0
- package/internal/NativeTimeInput/NativeTimeInput.utils.js +24 -0
- package/internal/NativeTimeInput/NativeTimeInput.utils.js.map +1 -0
- package/internal/NativeTimeInput/index.d.ts +1 -0
- package/internal/NativeTimeInput/index.js +2 -0
- package/internal/NativeTimeInput/index.js.map +1 -0
- package/internal/TimeInput/TimeFragments.d.ts +14 -0
- package/internal/TimeInput/TimeFragments.js +94 -0
- package/internal/TimeInput/TimeFragments.js.map +1 -0
- package/internal/TimeInput/TimeFragments.styles.d.ts +32 -0
- package/internal/TimeInput/TimeFragments.styles.js +78 -0
- package/internal/TimeInput/TimeFragments.styles.js.map +1 -0
- package/internal/TimeInput/TimeInput.d.ts +21 -0
- package/internal/TimeInput/TimeInput.js +104 -0
- package/internal/TimeInput/TimeInput.js.map +1 -0
- package/internal/TimeInput/TimeInput.styles.d.ts +7 -0
- package/internal/TimeInput/TimeInput.styles.js +24 -0
- package/internal/TimeInput/TimeInput.styles.js.map +1 -0
- package/internal/TimeInput/index.d.ts +1 -0
- package/internal/TimeInput/index.js +2 -0
- package/internal/TimeInput/index.js.map +1 -0
- package/internal/TimePicker/useTimePickerDropdown.d.ts +23 -0
- package/internal/TimePicker/useTimePickerDropdown.js +67 -0
- package/internal/TimePicker/useTimePickerDropdown.js.map +1 -0
- package/internal/TimePicker/useTimePickerSelection.d.ts +18 -0
- package/internal/TimePicker/useTimePickerSelection.js +66 -0
- package/internal/TimePicker/useTimePickerSelection.js.map +1 -0
- package/internal/TimePicker/useTimePickerSource.d.ts +29 -0
- package/internal/TimePicker/useTimePickerSource.js +67 -0
- package/internal/TimePicker/useTimePickerSource.js.map +1 -0
- package/internal/TimePicker/useTimePickerValue.d.ts +35 -0
- package/internal/TimePicker/useTimePickerValue.js +94 -0
- package/internal/TimePicker/useTimePickerValue.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js.map +1 -0
- package/internal/themes/BasicTheme.d.ts +34 -0
- package/internal/themes/BasicTheme.js +90 -0
- package/internal/themes/BasicTheme.js.map +1 -1
- package/internal/themes/DarkTheme6_0.js +3 -0
- package/internal/themes/DarkTheme6_0.js.map +1 -1
- package/internal/themes/DarkTheme6_2.d.ts +1 -0
- package/internal/themes/DarkTheme6_2.js +30 -0
- package/internal/themes/DarkTheme6_2.js.map +1 -0
- package/internal/themes/DarkTheme6_3.d.ts +1 -0
- package/internal/themes/DarkTheme6_3.js +30 -0
- package/internal/themes/DarkTheme6_3.js.map +1 -0
- package/internal/themes/LightTheme6_2.d.ts +1 -0
- package/internal/themes/LightTheme6_2.js +30 -0
- package/internal/themes/LightTheme6_2.js.map +1 -0
- package/internal/themes/LightTheme6_3.d.ts +1 -0
- package/internal/themes/LightTheme6_3.js +30 -0
- package/internal/themes/LightTheme6_3.js.map +1 -0
- package/lib/locale/types.d.ts +2 -0
- package/lib/locale/types.js.map +1 -1
- package/lib/theming/ThemeVersions.d.ts +1 -1
- package/lib/theming/ThemeVersions.js.map +1 -1
- package/lib/theming/themes/DarkTheme.d.ts +2 -0
- package/lib/theming/themes/DarkTheme.js +5 -1
- package/lib/theming/themes/DarkTheme.js.map +1 -1
- package/lib/theming/themes/LightTheme.d.ts +2 -0
- package/lib/theming/themes/LightTheme.js +5 -1
- package/lib/theming/themes/LightTheme.js.map +1 -1
- package/lib/utils.d.ts +2 -0
- package/lib/utils.js +1 -0
- package/lib/utils.js.map +1 -1
- package/package.json +10 -2
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import warning from 'warning';
|
|
13
|
+
import { DIGIT_REGEXP, EMPTY_SEGMENT, EMPTY_VALUE, NON_DIGIT_REGEXP, TIME_LIKE_DIGITS_REGEXP, TIME_LIKE_SEGMENTS_REGEXP, TIME_SEPARATOR, ZERO_PAD_CHAR, } from './TimePicker.constants.js';
|
|
14
|
+
import { getDigits, getDisplaySegments, getTimeSegments, normalizeTimeSegment, sanitizeSegment, getTimeItemLabel, getTimeItemValue, isTimeItemDisabled, isTimeItem, isTimeItemObject, } from './TimePicker.shared.js';
|
|
15
|
+
/** Проверяет, что в display-значении нет ни одной введенной цифры. */
|
|
16
|
+
export var isTimeDisplayEmpty = function (value) { return !DIGIT_REGEXP.test(value); };
|
|
17
|
+
/**
|
|
18
|
+
* Приводит время элемента к формату поля: `renderItem` показывает элемент рядом с теми же временами,
|
|
19
|
+
* что и остальное меню, поэтому в нем не должно оказаться `9:00` или `09:00:00` из источника.
|
|
20
|
+
* Элемент-объект копируется только когда его время действительно записано иначе,
|
|
21
|
+
* так что в обычном случае наружу уходит тот же объект, что пришел в `source`.
|
|
22
|
+
*/
|
|
23
|
+
var normalizeTimeItem = function (item, value, normalizedValue) {
|
|
24
|
+
if (value === normalizedValue) {
|
|
25
|
+
return item;
|
|
26
|
+
}
|
|
27
|
+
return (isTimeItemObject(item) ? __assign(__assign({}, item), { value: normalizedValue }) : normalizedValue);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Разбирает элементы источника для отрисовки: достает время и подпись,
|
|
31
|
+
* а `disabled` дополняет проверкой диапазона `minTime`/`maxTime`.
|
|
32
|
+
* Время нормализуется по формату поля — и у времени элемента, и у самого элемента.
|
|
33
|
+
* React-элементы остаются на своих местах.
|
|
34
|
+
*/
|
|
35
|
+
export var resolveTimeItems = function (items, format, minTime, maxTime) {
|
|
36
|
+
return items.map(function (item) {
|
|
37
|
+
if (!isTimeItem(item)) {
|
|
38
|
+
return item;
|
|
39
|
+
}
|
|
40
|
+
var value = getTimeItemValue(item);
|
|
41
|
+
var normalizedValue = normalizeTimeValue(value, format);
|
|
42
|
+
return {
|
|
43
|
+
item: normalizeTimeItem(item, value, normalizedValue),
|
|
44
|
+
value: normalizedValue,
|
|
45
|
+
label: getTimeItemLabel(item),
|
|
46
|
+
disabled: isTimeItemDisabled(item) || isTimeValueOutOfRange(normalizedValue, format, minTime, maxTime),
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Оставляет только элементы, которые компонент умеет показать в меню.
|
|
52
|
+
* Пустые значения — результат условного рендера вроде `isVisible && item` или `items.length && item` —
|
|
53
|
+
* молча отбрасываются, а элементы, из которых не получается собрать время, отбрасываются с предупреждением.
|
|
54
|
+
*/
|
|
55
|
+
export var sanitizeTimeItems = function (items, format) {
|
|
56
|
+
if (!Array.isArray(items)) {
|
|
57
|
+
warning(false, '[TimePicker]: the source function is expected to return an array or a Promise of an array.');
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
return items.filter(function (item) {
|
|
61
|
+
if (!item) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (!isTimeItem(item)) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (isTimeItemObject(item) && typeof item.value !== 'string') {
|
|
68
|
+
warning(false, '[TimePicker]: a source item is expected to be a time string or an object with a time value.');
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (normalizeTimeValue(getTimeItemValue(item), format) === EMPTY_VALUE) {
|
|
72
|
+
warning(false, "[TimePicker]: the source item value \"".concat(getTimeItemValue(item), "\" is not a time."));
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Проверяет, выходит ли значение за диапазон `minTime`/`maxTime` после нормализации.
|
|
80
|
+
* Пустое значение не считается выходящим за диапазон. Если `minTime > maxTime`, диапазон трактуется как переходящий через полночь.
|
|
81
|
+
*/
|
|
82
|
+
export var isTimeValueOutOfRange = function (value, format, minTime, maxTime) {
|
|
83
|
+
var normalizedValue = normalizeTimeValue(value, format);
|
|
84
|
+
if (normalizedValue === EMPTY_VALUE) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
var normalizedMinTime = normalizeTimeRangeValue(minTime, format);
|
|
88
|
+
var normalizedMaxTime = normalizeTimeRangeValue(maxTime, format);
|
|
89
|
+
if (normalizedMinTime && normalizedMaxTime && normalizedMinTime > normalizedMaxTime) {
|
|
90
|
+
return normalizedValue < normalizedMinTime && normalizedValue > normalizedMaxTime;
|
|
91
|
+
}
|
|
92
|
+
return ((normalizedMinTime !== undefined && normalizedValue < normalizedMinTime) ||
|
|
93
|
+
(normalizedMaxTime !== undefined && normalizedValue > normalizedMaxTime));
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Нормализует display-значение в committed-форму `HH:mm[:ss]`.
|
|
97
|
+
* Частично заполненные сегменты дополняются и ограничиваются максимумами сегментов.
|
|
98
|
+
*/
|
|
99
|
+
export var normalizeTimeValue = function (value, format) {
|
|
100
|
+
if (isTimeDisplayEmpty(value)) {
|
|
101
|
+
return EMPTY_VALUE;
|
|
102
|
+
}
|
|
103
|
+
var displaySegments = getDisplaySegments(value, format);
|
|
104
|
+
return getTimeSegments(format)
|
|
105
|
+
.map(function (segment, index) { return normalizeTimeSegment(displaySegments[index], segment); })
|
|
106
|
+
.join(TIME_SEPARATOR);
|
|
107
|
+
};
|
|
108
|
+
var normalizeTimeRangeValue = function (value, format) {
|
|
109
|
+
if (!value) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
var normalizedValue = normalizeTimeValue(value, format);
|
|
113
|
+
return normalizedValue === EMPTY_VALUE ? undefined : normalizedValue;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Преобразует display-значение в промежуточное значение для `onInputValueChange`.
|
|
117
|
+
* Заполненные сегменты дополняются до двух цифр, пропущенные сегменты до последнего заполненного становятся `00`.
|
|
118
|
+
*/
|
|
119
|
+
export var serializeTimeValue = function (value, format) {
|
|
120
|
+
var serializedSegments = takeFilledSegments(getDisplaySegments(value, format).map(function (segmentValue) {
|
|
121
|
+
var digits = getDigits(segmentValue);
|
|
122
|
+
return digits ? digits.padStart(EMPTY_SEGMENT.length, ZERO_PAD_CHAR) : EMPTY_VALUE;
|
|
123
|
+
}));
|
|
124
|
+
return serializedSegments.map(function (segmentValue) { return segmentValue || '00'; }).join(TIME_SEPARATOR);
|
|
125
|
+
};
|
|
126
|
+
/** Отбрасывает незаполненный хвост сегментов: ведущие пустые сегменты остаются на своих местах. */
|
|
127
|
+
var takeFilledSegments = function (segments) {
|
|
128
|
+
var lastFilledIndex = segments.reduce(function (result, segmentValue, index) { return (segmentValue ? index : result); }, -1);
|
|
129
|
+
return segments.slice(0, lastFilledIndex + 1);
|
|
130
|
+
};
|
|
131
|
+
export var getTimeDisplayValue = function (value, format) {
|
|
132
|
+
if (value === EMPTY_VALUE) {
|
|
133
|
+
return EMPTY_VALUE;
|
|
134
|
+
}
|
|
135
|
+
return getDisplaySegments(value, format).join(TIME_SEPARATOR);
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Возвращает display-значение внешнего `value`.
|
|
139
|
+
* Сегменты, записанные одной цифрой, дополняются нулем, поэтому `9:00` показывается как `09:00` —
|
|
140
|
+
* так же, как компонент показывает время элементов источника.
|
|
141
|
+
* Значение без разделителя остается частично введенным: `1` — это первая цифра часов, а не `01:00`.
|
|
142
|
+
*/
|
|
143
|
+
export var getExternalTimeDisplayValue = function (value, format) {
|
|
144
|
+
if (!value.includes(TIME_SEPARATOR)) {
|
|
145
|
+
return getTimeDisplayValue(value, format);
|
|
146
|
+
}
|
|
147
|
+
var paddedSegments = value.split(TIME_SEPARATOR).map(function (segmentValue) {
|
|
148
|
+
var digits = getDigits(segmentValue);
|
|
149
|
+
return digits ? digits.padStart(EMPTY_SEGMENT.length, ZERO_PAD_CHAR) : EMPTY_VALUE;
|
|
150
|
+
});
|
|
151
|
+
return getTimeDisplayValue(paddedSegments.join(TIME_SEPARATOR), format);
|
|
152
|
+
};
|
|
153
|
+
/** Заменяет значение выбранного сегмента, сохраняя остальные сегменты display-значения без изменений. */
|
|
154
|
+
export var replaceTimeSegment = function (value, segment, nextSegmentValue, format) {
|
|
155
|
+
var segments = getDisplaySegments(value, format);
|
|
156
|
+
var index = getTimeSegments(format).indexOf(segment);
|
|
157
|
+
segments[index] = sanitizeSegment(nextSegmentValue);
|
|
158
|
+
return segments.join(TIME_SEPARATOR);
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Проверяет, что вставленное значение похоже на время:
|
|
162
|
+
* это либо сегменты из одной-двух цифр через любой разделитель — `12:30`, `9:5`, `1:23:45`, `12.30`, —
|
|
163
|
+
* либо цифры подряд — `9`, `1230`, `123045`.
|
|
164
|
+
* Строки, из которых время собралось бы случайно — `2026-08-01`, `hello 42`, — временем не считаются.
|
|
165
|
+
*/
|
|
166
|
+
export var isTimeLikePastedValue = function (value) {
|
|
167
|
+
var trimmedValue = value.trim();
|
|
168
|
+
return TIME_LIKE_SEGMENTS_REGEXP.test(trimmedValue) || TIME_LIKE_DIGITS_REGEXP.test(trimmedValue);
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Парсит вставленное пользователем значение и сразу преобразует его в committed-форму.
|
|
172
|
+
* Значение, не похожее на время, отдается как пустое: такую вставку компонент считает некорректным вводом.
|
|
173
|
+
*/
|
|
174
|
+
export var parsePastedTimeValue = function (value, format) {
|
|
175
|
+
var trimmedValue = value.trim();
|
|
176
|
+
if (!DIGIT_REGEXP.test(trimmedValue) || !isTimeLikePastedValue(trimmedValue)) {
|
|
177
|
+
return EMPTY_VALUE;
|
|
178
|
+
}
|
|
179
|
+
// Разделители сегментов приводятся к одному виду, чтобы `9.5` разбирался так же, как `9:5`.
|
|
180
|
+
var normalizedSeparators = TIME_LIKE_SEGMENTS_REGEXP.test(trimmedValue)
|
|
181
|
+
? trimmedValue.split(NON_DIGIT_REGEXP).join(TIME_SEPARATOR)
|
|
182
|
+
: trimmedValue;
|
|
183
|
+
var segments = getDisplaySegments(normalizedSeparators, format);
|
|
184
|
+
return normalizeTimeValue(segments.join(TIME_SEPARATOR), format);
|
|
185
|
+
};
|
|
186
|
+
/** Возвращает текущее display-значение сегмента или пустой сегмент, если индекс отсутствует. */
|
|
187
|
+
export var getTimeSegmentValue = function (value, segment, format) {
|
|
188
|
+
var _a;
|
|
189
|
+
var segments = getDisplaySegments(value, format);
|
|
190
|
+
var index = getTimeSegments(format).indexOf(segment);
|
|
191
|
+
return (_a = segments[index]) !== null && _a !== void 0 ? _a : EMPTY_SEGMENT;
|
|
192
|
+
};
|
|
193
|
+
export var getEmptyDisplayValue = function (precision) {
|
|
194
|
+
return getTimeSegments(precision)
|
|
195
|
+
.map(function () { return EMPTY_SEGMENT; })
|
|
196
|
+
.join(TIME_SEPARATOR);
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Преобразует display-значение в поисковый запрос для фильтрации элементов.
|
|
200
|
+
* Сегменты содержат только введенные цифры, незаполненный хвост отбрасывается: `12:3_` => `12:3`, `1_:__` => `1`.
|
|
201
|
+
* Позиции сегментов сохраняются, поэтому ведущие незаполненные сегменты остаются пустыми: `__:34` => `:34`.
|
|
202
|
+
* Это нужно для посегментного сравнения в `filterTimeItems` и передается как есть в пользовательскую `source`.
|
|
203
|
+
*/
|
|
204
|
+
export var getTimeFilterQuery = function (value, format) {
|
|
205
|
+
return takeFilledSegments(getDisplaySegments(value, format).map(getDigits)).join(TIME_SEPARATOR);
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Фильтрует элементы по запросу из поля ввода.
|
|
209
|
+
* Сравнивает запрос посегментно: введенные цифры сегмента должны быть префиксом соответствующего сегмента элемента.
|
|
210
|
+
* Пустой запрос возвращает все элементы.
|
|
211
|
+
*/
|
|
212
|
+
export var filterTimeItems = function (items, query, format) {
|
|
213
|
+
var querySegments = query.split(TIME_SEPARATOR).map(getDigits);
|
|
214
|
+
if (querySegments.every(function (segmentValue) { return !segmentValue; })) {
|
|
215
|
+
return items;
|
|
216
|
+
}
|
|
217
|
+
return items.filter(function (item) {
|
|
218
|
+
if (!isTimeItem(item)) {
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
var itemSegments = getDisplaySegments(normalizeTimeValue(getTimeItemValue(item), format), format);
|
|
222
|
+
return querySegments.every(function (segmentValue, index) { var _a; return !segmentValue || ((_a = itemSegments[index]) !== null && _a !== void 0 ? _a : EMPTY_VALUE).startsWith(segmentValue); });
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
//# sourceMappingURL=TimePicker.value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.value.js","sourceRoot":"","sources":["TimePicker.value.ts"],"names":[],"mappings":"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","sourcesContent":["import warning from 'warning';\n\nimport {\n DIGIT_REGEXP,\n EMPTY_SEGMENT,\n EMPTY_VALUE,\n NON_DIGIT_REGEXP,\n TIME_LIKE_DIGITS_REGEXP,\n TIME_LIKE_SEGMENTS_REGEXP,\n TIME_SEPARATOR,\n ZERO_PAD_CHAR,\n} from './TimePicker.constants.js';\nimport {\n getDigits,\n getDisplaySegments,\n getTimeSegments,\n normalizeTimeSegment,\n sanitizeSegment,\n getTimeItemLabel,\n getTimeItemValue,\n isTimeItemDisabled,\n type TimeFormat,\n type TimeItem,\n type TimeItemValue,\n type TimePickerExtendedItem,\n type TimePickerMenuItem,\n type TimeSegment,\n isTimeItem,\n isTimeItemObject,\n} from './TimePicker.shared.js';\n\n/** Проверяет, что в display-значении нет ни одной введенной цифры. */\nexport const isTimeDisplayEmpty = (value: string): boolean => !DIGIT_REGEXP.test(value);\n\n/**\n * Приводит время элемента к формату поля: `renderItem` показывает элемент рядом с теми же временами,\n * что и остальное меню, поэтому в нем не должно оказаться `9:00` или `09:00:00` из источника.\n * Элемент-объект копируется только когда его время действительно записано иначе,\n * так что в обычном случае наружу уходит тот же объект, что пришел в `source`.\n */\nconst normalizeTimeItem = <T extends TimeItemValue>(item: T, value: string, normalizedValue: string): T => {\n if (value === normalizedValue) {\n return item;\n }\n\n return (isTimeItemObject(item) ? { ...(item as TimeItem), value: normalizedValue } : normalizedValue) as T;\n};\n\n/**\n * Разбирает элементы источника для отрисовки: достает время и подпись,\n * а `disabled` дополняет проверкой диапазона `minTime`/`maxTime`.\n * Время нормализуется по формату поля — и у времени элемента, и у самого элемента.\n * React-элементы остаются на своих местах.\n */\nexport const resolveTimeItems = <T extends TimeItemValue>(\n items: Array<TimePickerExtendedItem<T>>,\n format: TimeFormat,\n minTime?: string,\n maxTime?: string,\n): Array<TimePickerMenuItem<T>> =>\n items.map((item) => {\n if (!isTimeItem(item)) {\n return item;\n }\n\n const value = getTimeItemValue(item);\n const normalizedValue = normalizeTimeValue(value, format);\n\n return {\n item: normalizeTimeItem(item, value, normalizedValue),\n value: normalizedValue,\n label: getTimeItemLabel(item),\n disabled: isTimeItemDisabled(item) || isTimeValueOutOfRange(normalizedValue, format, minTime, maxTime),\n };\n });\n\n/**\n * Оставляет только элементы, которые компонент умеет показать в меню.\n * Пустые значения — результат условного рендера вроде `isVisible && item` или `items.length && item` —\n * молча отбрасываются, а элементы, из которых не получается собрать время, отбрасываются с предупреждением.\n */\nexport const sanitizeTimeItems = <T extends TimeItemValue>(\n items: Array<TimePickerExtendedItem<T>>,\n format: TimeFormat,\n): Array<TimePickerExtendedItem<T>> => {\n if (!Array.isArray(items)) {\n warning(false, '[TimePicker]: the source function is expected to return an array or a Promise of an array.');\n\n return [];\n }\n\n return items.filter((item) => {\n if (!item) {\n return false;\n }\n\n if (!isTimeItem(item)) {\n return true;\n }\n\n if (isTimeItemObject(item) && typeof item.value !== 'string') {\n warning(false, '[TimePicker]: a source item is expected to be a time string or an object with a time value.');\n\n return false;\n }\n\n if (normalizeTimeValue(getTimeItemValue(item), format) === EMPTY_VALUE) {\n warning(false, `[TimePicker]: the source item value \"${getTimeItemValue(item)}\" is not a time.`);\n\n return false;\n }\n\n return true;\n });\n};\n\n/**\n * Проверяет, выходит ли значение за диапазон `minTime`/`maxTime` после нормализации.\n * Пустое значение не считается выходящим за диапазон. Если `minTime > maxTime`, диапазон трактуется как переходящий через полночь.\n */\nexport const isTimeValueOutOfRange = (\n value: string,\n format: TimeFormat,\n minTime?: string,\n maxTime?: string,\n): boolean => {\n const normalizedValue = normalizeTimeValue(value, format);\n\n if (normalizedValue === EMPTY_VALUE) {\n return false;\n }\n\n const normalizedMinTime = normalizeTimeRangeValue(minTime, format);\n const normalizedMaxTime = normalizeTimeRangeValue(maxTime, format);\n\n if (normalizedMinTime && normalizedMaxTime && normalizedMinTime > normalizedMaxTime) {\n return normalizedValue < normalizedMinTime && normalizedValue > normalizedMaxTime;\n }\n\n return (\n (normalizedMinTime !== undefined && normalizedValue < normalizedMinTime) ||\n (normalizedMaxTime !== undefined && normalizedValue > normalizedMaxTime)\n );\n};\n\n/**\n * Нормализует display-значение в committed-форму `HH:mm[:ss]`.\n * Частично заполненные сегменты дополняются и ограничиваются максимумами сегментов.\n */\nexport const normalizeTimeValue = (value: string, format: TimeFormat): string => {\n if (isTimeDisplayEmpty(value)) {\n return EMPTY_VALUE;\n }\n\n const displaySegments = getDisplaySegments(value, format);\n\n return getTimeSegments(format)\n .map((segment, index) => normalizeTimeSegment(displaySegments[index], segment))\n .join(TIME_SEPARATOR);\n};\n\nconst normalizeTimeRangeValue = (value: string | undefined, format: TimeFormat): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n const normalizedValue = normalizeTimeValue(value, format);\n\n return normalizedValue === EMPTY_VALUE ? undefined : normalizedValue;\n};\n\n/**\n * Преобразует display-значение в промежуточное значение для `onInputValueChange`.\n * Заполненные сегменты дополняются до двух цифр, пропущенные сегменты до последнего заполненного становятся `00`.\n */\nexport const serializeTimeValue = (value: string, format: TimeFormat): string => {\n const serializedSegments = takeFilledSegments(\n getDisplaySegments(value, format).map((segmentValue) => {\n const digits = getDigits(segmentValue);\n\n return digits ? digits.padStart(EMPTY_SEGMENT.length, ZERO_PAD_CHAR) : EMPTY_VALUE;\n }),\n );\n\n return serializedSegments.map((segmentValue) => segmentValue || '00').join(TIME_SEPARATOR);\n};\n\n/** Отбрасывает незаполненный хвост сегментов: ведущие пустые сегменты остаются на своих местах. */\nconst takeFilledSegments = (segments: string[]): string[] => {\n const lastFilledIndex = segments.reduce((result, segmentValue, index) => (segmentValue ? index : result), -1);\n\n return segments.slice(0, lastFilledIndex + 1);\n};\n\nexport const getTimeDisplayValue = (value: string, format: TimeFormat): string => {\n if (value === EMPTY_VALUE) {\n return EMPTY_VALUE;\n }\n\n return getDisplaySegments(value, format).join(TIME_SEPARATOR);\n};\n\n/**\n * Возвращает display-значение внешнего `value`.\n * Сегменты, записанные одной цифрой, дополняются нулем, поэтому `9:00` показывается как `09:00` —\n * так же, как компонент показывает время элементов источника.\n * Значение без разделителя остается частично введенным: `1` — это первая цифра часов, а не `01:00`.\n */\nexport const getExternalTimeDisplayValue = (value: string, format: TimeFormat): string => {\n if (!value.includes(TIME_SEPARATOR)) {\n return getTimeDisplayValue(value, format);\n }\n\n const paddedSegments = value.split(TIME_SEPARATOR).map((segmentValue) => {\n const digits = getDigits(segmentValue);\n\n return digits ? digits.padStart(EMPTY_SEGMENT.length, ZERO_PAD_CHAR) : EMPTY_VALUE;\n });\n\n return getTimeDisplayValue(paddedSegments.join(TIME_SEPARATOR), format);\n};\n\n/** Заменяет значение выбранного сегмента, сохраняя остальные сегменты display-значения без изменений. */\nexport const replaceTimeSegment = (\n value: string,\n segment: TimeSegment,\n nextSegmentValue: string,\n format: TimeFormat,\n): string => {\n const segments = getDisplaySegments(value, format);\n const index = getTimeSegments(format).indexOf(segment);\n\n segments[index] = sanitizeSegment(nextSegmentValue);\n\n return segments.join(TIME_SEPARATOR);\n};\n\n/**\n * Проверяет, что вставленное значение похоже на время:\n * это либо сегменты из одной-двух цифр через любой разделитель — `12:30`, `9:5`, `1:23:45`, `12.30`, —\n * либо цифры подряд — `9`, `1230`, `123045`.\n * Строки, из которых время собралось бы случайно — `2026-08-01`, `hello 42`, — временем не считаются.\n */\nexport const isTimeLikePastedValue = (value: string): boolean => {\n const trimmedValue = value.trim();\n\n return TIME_LIKE_SEGMENTS_REGEXP.test(trimmedValue) || TIME_LIKE_DIGITS_REGEXP.test(trimmedValue);\n};\n\n/**\n * Парсит вставленное пользователем значение и сразу преобразует его в committed-форму.\n * Значение, не похожее на время, отдается как пустое: такую вставку компонент считает некорректным вводом.\n */\nexport const parsePastedTimeValue = (value: string, format: TimeFormat): string => {\n const trimmedValue = value.trim();\n\n if (!DIGIT_REGEXP.test(trimmedValue) || !isTimeLikePastedValue(trimmedValue)) {\n return EMPTY_VALUE;\n }\n\n // Разделители сегментов приводятся к одному виду, чтобы `9.5` разбирался так же, как `9:5`.\n const normalizedSeparators = TIME_LIKE_SEGMENTS_REGEXP.test(trimmedValue)\n ? trimmedValue.split(NON_DIGIT_REGEXP).join(TIME_SEPARATOR)\n : trimmedValue;\n\n const segments = getDisplaySegments(normalizedSeparators, format);\n\n return normalizeTimeValue(segments.join(TIME_SEPARATOR), format);\n};\n\n/** Возвращает текущее display-значение сегмента или пустой сегмент, если индекс отсутствует. */\nexport const getTimeSegmentValue = (value: string, segment: TimeSegment, format: TimeFormat): string => {\n const segments = getDisplaySegments(value, format);\n const index = getTimeSegments(format).indexOf(segment);\n\n return segments[index] ?? EMPTY_SEGMENT;\n};\n\nexport const getEmptyDisplayValue = (precision: TimeFormat): string =>\n getTimeSegments(precision)\n .map(() => EMPTY_SEGMENT)\n .join(TIME_SEPARATOR);\n\n/**\n * Преобразует display-значение в поисковый запрос для фильтрации элементов.\n * Сегменты содержат только введенные цифры, незаполненный хвост отбрасывается: `12:3_` => `12:3`, `1_:__` => `1`.\n * Позиции сегментов сохраняются, поэтому ведущие незаполненные сегменты остаются пустыми: `__:34` => `:34`.\n * Это нужно для посегментного сравнения в `filterTimeItems` и передается как есть в пользовательскую `source`.\n */\nexport const getTimeFilterQuery = (value: string, format: TimeFormat): string =>\n takeFilledSegments(getDisplaySegments(value, format).map(getDigits)).join(TIME_SEPARATOR);\n\n/**\n * Фильтрует элементы по запросу из поля ввода.\n * Сравнивает запрос посегментно: введенные цифры сегмента должны быть префиксом соответствующего сегмента элемента.\n * Пустой запрос возвращает все элементы.\n */\nexport const filterTimeItems = <T extends TimeItemValue>(\n items: Array<TimePickerExtendedItem<T>>,\n query: string,\n format: TimeFormat,\n): Array<TimePickerExtendedItem<T>> => {\n const querySegments = query.split(TIME_SEPARATOR).map(getDigits);\n\n if (querySegments.every((segmentValue) => !segmentValue)) {\n return items;\n }\n\n return items.filter((item) => {\n if (!isTimeItem(item)) {\n return true;\n }\n\n const itemSegments = getDisplaySegments(normalizeTimeValue(getTimeItemValue(item), format), format);\n\n return querySegments.every(\n (segmentValue, index) => !segmentValue || (itemSegments[index] ?? EMPTY_VALUE).startsWith(segmentValue),\n );\n });\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Прокручивает ближайший scrollable-контейнер так, чтобы выбранный элемент оказался ближе к центру viewport контейнера.
|
|
3
|
+
* Отличается от библиотечной `scrollYCenterIntoNearestScrollable` тем, что смещение считается от текущего `scrollTop`:
|
|
4
|
+
* центр — это дельта относительно контейнера, поэтому библиотечная версия верна только для непрокрученного меню.
|
|
5
|
+
*/
|
|
6
|
+
export declare const scrollSelectedItemIntoView: (element: HTMLElement) => void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { findNearestScrollableParent } from '../../../lib/dom/scrollYCenterIntoNearestScrollable.js';
|
|
2
|
+
import { getOwnerGlobalObject, isBrowser } from '../../../lib/globalObject.js';
|
|
3
|
+
/**
|
|
4
|
+
* Прокручивает ближайший scrollable-контейнер так, чтобы выбранный элемент оказался ближе к центру viewport контейнера.
|
|
5
|
+
* Отличается от библиотечной `scrollYCenterIntoNearestScrollable` тем, что смещение считается от текущего `scrollTop`:
|
|
6
|
+
* центр — это дельта относительно контейнера, поэтому библиотечная версия верна только для непрокрученного меню.
|
|
7
|
+
*/
|
|
8
|
+
export var scrollSelectedItemIntoView = function (element) {
|
|
9
|
+
var globalObject = getOwnerGlobalObject(element);
|
|
10
|
+
if (!isBrowser(globalObject)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
var parent = findNearestScrollableParent(element);
|
|
14
|
+
if (!parent) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
var elementRect = element.getBoundingClientRect();
|
|
18
|
+
var parentRect = parent.getBoundingClientRect();
|
|
19
|
+
var scrollTopPos = elementRect.top - parentRect.top;
|
|
20
|
+
var scrollBottomPos = elementRect.bottom - parentRect.bottom;
|
|
21
|
+
var scrollCenterPos = (scrollTopPos + scrollBottomPos) / 2;
|
|
22
|
+
if (scrollCenterPos !== 0) {
|
|
23
|
+
parent.scrollTo({ top: parent.scrollTop + scrollCenterPos });
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=scrollSelectedItemIntoView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollSelectedItemIntoView.js","sourceRoot":"","sources":["scrollSelectedItemIntoView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,wDAAwD,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE/E;;;;GAIG;AACH,MAAM,CAAC,IAAM,0BAA0B,GAAG,UAAC,OAAoB;IAC7D,IAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,IAAM,MAAM,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACpD,IAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAElD,IAAM,YAAY,GAAG,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;IACtD,IAAM,eAAe,GAAG,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/D,IAAM,eAAe,GAAG,CAAC,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAE7D,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,eAAe,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { findNearestScrollableParent } from '../../../lib/dom/scrollYCenterIntoNearestScrollable.js';\nimport { getOwnerGlobalObject, isBrowser } from '../../../lib/globalObject.js';\n\n/**\n * Прокручивает ближайший scrollable-контейнер так, чтобы выбранный элемент оказался ближе к центру viewport контейнера.\n * Отличается от библиотечной `scrollYCenterIntoNearestScrollable` тем, что смещение считается от текущего `scrollTop`:\n * центр — это дельта относительно контейнера, поэтому библиотечная версия верна только для непрокрученного меню.\n */\nexport const scrollSelectedItemIntoView = (element: HTMLElement): void => {\n const globalObject = getOwnerGlobalObject(element);\n\n if (!isBrowser(globalObject)) {\n return;\n }\n\n const parent = findNearestScrollableParent(element);\n\n if (!parent) {\n return;\n }\n\n const elementRect = element.getBoundingClientRect();\n const parentRect = parent.getBoundingClientRect();\n\n const scrollTopPos = elementRect.top - parentRect.top;\n const scrollBottomPos = elementRect.bottom - parentRect.bottom;\n const scrollCenterPos = (scrollTopPos + scrollBottomPos) / 2;\n\n if (scrollCenterPos !== 0) {\n parent.scrollTo({ top: parent.scrollTop + scrollCenterPos });\n }\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Nullable } from '../../../typings/utility-types.js';
|
|
2
|
+
import type { TimeFormat } from './TimePicker.shared.js';
|
|
3
|
+
export interface TimePickerValidationOptions {
|
|
4
|
+
format?: TimeFormat;
|
|
5
|
+
minTime?: string;
|
|
6
|
+
maxTime?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const validateTimePicker: (value: Nullable<string>, options?: TimePickerValidationOptions) => boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EMPTY_VALUE } from './TimePicker.constants.js';
|
|
2
|
+
import { isTimeValueOutOfRange, normalizeTimeValue } from './TimePicker.value.js';
|
|
3
|
+
export var validateTimePicker = function (value, options) {
|
|
4
|
+
if (options === void 0) { options = {}; }
|
|
5
|
+
var timeValue = value !== null && value !== void 0 ? value : EMPTY_VALUE;
|
|
6
|
+
if (!timeValue) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
var _a = options.format, format = _a === void 0 ? 'HH:mm' : _a, minTime = options.minTime, maxTime = options.maxTime;
|
|
10
|
+
// Нормализованное значение уже канонично, поэтому отдельная проверка display-формы не нужна.
|
|
11
|
+
if (normalizeTimeValue(timeValue, format) !== timeValue) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return !isTimeValueOutOfRange(timeValue, format, minTime, maxTime);
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=validateTimePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTimePicker.js","sourceRoot":"","sources":["validateTimePicker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAQlF,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,KAAuB,EAAE,OAAyC;IAAzC,wBAAA,EAAA,YAAyC;IACnG,IAAM,SAAS,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,WAAW,CAAC;IAEvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,IAAA,KAAuC,OAAO,OAA9B,EAAhB,MAAM,mBAAG,OAAO,KAAA,EAAE,OAAO,GAAc,OAAO,QAArB,EAAE,OAAO,GAAK,OAAO,QAAZ,CAAa;IAEvD,6FAA6F;IAC7F,IAAI,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC,CAAC","sourcesContent":["import type { Nullable } from '../../../typings/utility-types.js';\nimport { EMPTY_VALUE } from './TimePicker.constants.js';\nimport type { TimeFormat } from './TimePicker.shared.js';\nimport { isTimeValueOutOfRange, normalizeTimeValue } from './TimePicker.value.js';\n\nexport interface TimePickerValidationOptions {\n format?: TimeFormat;\n minTime?: string;\n maxTime?: string;\n}\n\nexport const validateTimePicker = (value: Nullable<string>, options: TimePickerValidationOptions = {}): boolean => {\n const timeValue = value ?? EMPTY_VALUE;\n\n if (!timeValue) {\n return false;\n }\n\n const { format = 'HH:mm', minTime, maxTime } = options;\n\n // Нормализованное значение уже канонично, поэтому отдельная проверка display-формы не нужна.\n if (normalizeTimeValue(timeValue, format) !== timeValue) {\n return false;\n }\n\n return !isTimeValueOutOfRange(timeValue, format, minTime, maxTime);\n};\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './TimePicker.js';
|
|
2
|
+
export { TimePickerDataTids } from './helpers/TimePicker.constants.js';
|
|
3
|
+
export type { TimePickerValidationOptions } from './helpers/validateTimePicker.js';
|
|
4
|
+
export type { TimeFormat, TimeSegment, TimeItem, TimeItemValue, TimePickerExtendedItem, TimePickerMenuElement, TimePickerMenuItem, TimePickerResolvedItem, TimePickerSource, } from './helpers/TimePicker.shared.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC","sourcesContent":["export * from './TimePicker.js';\nexport { TimePickerDataTids } from './helpers/TimePicker.constants.js';\nexport type { TimePickerValidationOptions } from './helpers/validateTimePicker.js';\nexport type {\n TimeFormat,\n TimeSegment,\n TimeItem,\n TimeItemValue,\n TimePickerExtendedItem,\n TimePickerMenuElement,\n TimePickerMenuItem,\n TimePickerResolvedItem,\n TimePickerSource,\n} from './helpers/TimePicker.shared.js';\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LocaleHelper } from '../../../lib/locale/LocaleHelper.js';
|
|
2
|
+
import { componentsLocales as en_GB } from './locales/en.js';
|
|
3
|
+
import { componentsLocales as ru_RU } from './locales/ru.js';
|
|
4
|
+
export * from './types.js';
|
|
5
|
+
export var TimePickerLocaleHelper = new LocaleHelper({
|
|
6
|
+
ru_RU: ru_RU,
|
|
7
|
+
en_GB: en_GB,
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7D,cAAc,YAAY,CAAC;AAE3B,MAAM,CAAC,IAAM,sBAAsB,GAAG,IAAI,YAAY,CAAmB;IACvE,KAAK,OAAA;IACL,KAAK,OAAA;CACN,CAAC,CAAC","sourcesContent":["import { LocaleHelper } from '../../../lib/locale/LocaleHelper.js';\nimport { componentsLocales as en_GB } from './locales/en.js';\nimport { componentsLocales as ru_RU } from './locales/ru.js';\nimport type { TimePickerLocale } from './types.js';\n\nexport * from './types.js';\n\nexport const TimePickerLocaleHelper = new LocaleHelper<TimePickerLocale>({\n ru_RU,\n en_GB,\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["en.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAM,iBAAiB,GAAqB;IACjD,mBAAmB,EAAE,OAAO;IAC5B,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,SAAS;IAC7B,mBAAmB,EAAE,oEAAoE;CAC1F,CAAC","sourcesContent":["import type { TimePickerLocale } from '../types.js';\n\nexport const componentsLocales: TimePickerLocale = {\n ariaPlaceholderHHMM: 'hh:mm',\n ariaPlaceholderHHMMSS: 'hh:mm:ss',\n errorNetworkButton: 'Refresh',\n errorNetworkMessage: 'Something went wrong. Check your internet connection and try again',\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var componentsLocales = {
|
|
2
|
+
ariaPlaceholderHHMM: 'чч:мм',
|
|
3
|
+
ariaPlaceholderHHMMSS: 'чч:мм:сс',
|
|
4
|
+
errorNetworkButton: 'Обновить',
|
|
5
|
+
errorNetworkMessage: 'Что-то пошло не так. Проверьте соединение с интернетом и попробуйте еще раз',
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=ru.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ru.js","sourceRoot":"","sources":["ru.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAM,iBAAiB,GAAqB;IACjD,mBAAmB,EAAE,OAAO;IAC5B,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,UAAU;IAC9B,mBAAmB,EAAE,6EAA6E;CACnG,CAAC","sourcesContent":["import type { TimePickerLocale } from '../types.js';\n\nexport const componentsLocales: TimePickerLocale = {\n ariaPlaceholderHHMM: 'чч:мм',\n ariaPlaceholderHHMMSS: 'чч:мм:сс',\n errorNetworkButton: 'Обновить',\n errorNetworkMessage: 'Что-то пошло не так. Проверьте соединение с интернетом и попробуйте еще раз',\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"","sourcesContent":["export interface TimePickerLocale {\n ariaPlaceholderHHMM: string;\n ariaPlaceholderHHMMSS: string;\n errorNetworkButton: string;\n errorNetworkMessage: string;\n}\n"]}
|
package/index.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export * from './components/Sticky/index.js';
|
|
|
39
39
|
export * from './components/Switcher/index.js';
|
|
40
40
|
export * from './components/Tabs/index.js';
|
|
41
41
|
export * from './components/Textarea/index.js';
|
|
42
|
+
export * from './components/TimePicker/index.js';
|
|
42
43
|
export * from './components/Toast/index.js';
|
|
43
44
|
export * from './components/SingleToast/index.js';
|
|
44
45
|
export * from './components/Toggle/index.js';
|
package/index.js
CHANGED
|
@@ -39,6 +39,7 @@ export * from './components/Sticky/index.js';
|
|
|
39
39
|
export * from './components/Switcher/index.js';
|
|
40
40
|
export * from './components/Tabs/index.js';
|
|
41
41
|
export * from './components/Textarea/index.js';
|
|
42
|
+
export * from './components/TimePicker/index.js';
|
|
42
43
|
export * from './components/Toast/index.js';
|
|
43
44
|
export * from './components/SingleToast/index.js';
|
|
44
45
|
export * from './components/Toggle/index.js';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAE1C,OAAO,KAAK,cAAc,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,kBAAkB,MAAM,oCAAoC,CAAC","sourcesContent":["export * from './components/Autocomplete/index.js';\nexport * from './components/Button/index.js';\nexport * from './components/Calendar/index.js';\nexport * from './components/Center/index.js';\nexport * from './components/Checkbox/index.js';\nexport * from './components/ComboBox/index.js';\nexport * from './components/CurrencyInput/index.js';\nexport * from './components/CurrencyLabel/index.js';\nexport * from './components/DateInput/index.js';\nexport * from './components/DatePicker/index.js';\nexport * from './components/DateRangePicker/index.js';\nexport * from './components/Dropdown/index.js';\nexport * from './components/DropdownMenu/index.js';\nexport * from './components/FileUploader/index.js';\nexport * from './components/FxInput/index.js';\nexport * from './components/Gapped/index.js';\nexport * from './components/GlobalLoader/index.js';\nexport * from './components/Group/index.js';\nexport * from './components/Hint/index.js';\nexport * from './components/Input/index.js';\nexport * from './components/Kebab/index.js';\nexport * from './components/Link/index.js';\nexport * from './components/Loader/index.js';\nexport * from './components/MenuFooter/index.js';\nexport * from './components/MenuHeader/index.js';\nexport * from './components/MenuItem/index.js';\nexport * from './components/MenuSeparator/index.js';\nexport * from './components/MiniModal/index.js';\nexport * from './components/Modal/index.js';\nexport * from './components/Paging/index.js';\nexport * from './components/PasswordInput/index.js';\nexport * from './components/Radio/index.js';\nexport * from './components/RadioGroup/index.js';\nexport * from './components/ScrollContainer/index.js';\nexport * from './components/Select/index.js';\nexport * from './components/SidePage/index.js';\nexport * from './components/Spinner/index.js';\nexport * from './components/Sticky/index.js';\nexport * from './components/Switcher/index.js';\nexport * from './components/Tabs/index.js';\nexport * from './components/Textarea/index.js';\nexport * from './components/Toast/index.js';\nexport * from './components/SingleToast/index.js';\nexport * from './components/Toggle/index.js';\nexport * from './components/Token/index.js';\nexport * from './components/TokenInput/index.js';\nexport * from './components/Tooltip/index.js';\nexport * from './components/TooltipMenu/index.js';\nexport * from './components/ResponsiveLayout/index.js';\nexport * from './components/MaskedInput/index.js';\nexport * from './lib/featureFlagsContext/index.js';\nexport * from './lib/locale/index.js';\nexport * from './lib/size/index.js';\nexport * from './lib/theming/ThemeContext.js';\nexport * from './lib/theming/ThemeFactory.js';\nexport * from './lib/theming/themes/LightTheme.js';\nexport * from './lib/theming/themes/DarkTheme.js';\nexport * from './lib/types/props.js';\nexport * from './internal/Popup/types.js';\nexport type { PopupMenuCaptionProps } from './internal/PopupMenu/index.js';\nexport * as ColorFunctions from './lib/styles/ColorFunctions.js';\nexport * as DimensionFunctions from './lib/styles/DimensionFunctions.js';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAE1C,OAAO,KAAK,cAAc,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,kBAAkB,MAAM,oCAAoC,CAAC","sourcesContent":["export * from './components/Autocomplete/index.js';\nexport * from './components/Button/index.js';\nexport * from './components/Calendar/index.js';\nexport * from './components/Center/index.js';\nexport * from './components/Checkbox/index.js';\nexport * from './components/ComboBox/index.js';\nexport * from './components/CurrencyInput/index.js';\nexport * from './components/CurrencyLabel/index.js';\nexport * from './components/DateInput/index.js';\nexport * from './components/DatePicker/index.js';\nexport * from './components/DateRangePicker/index.js';\nexport * from './components/Dropdown/index.js';\nexport * from './components/DropdownMenu/index.js';\nexport * from './components/FileUploader/index.js';\nexport * from './components/FxInput/index.js';\nexport * from './components/Gapped/index.js';\nexport * from './components/GlobalLoader/index.js';\nexport * from './components/Group/index.js';\nexport * from './components/Hint/index.js';\nexport * from './components/Input/index.js';\nexport * from './components/Kebab/index.js';\nexport * from './components/Link/index.js';\nexport * from './components/Loader/index.js';\nexport * from './components/MenuFooter/index.js';\nexport * from './components/MenuHeader/index.js';\nexport * from './components/MenuItem/index.js';\nexport * from './components/MenuSeparator/index.js';\nexport * from './components/MiniModal/index.js';\nexport * from './components/Modal/index.js';\nexport * from './components/Paging/index.js';\nexport * from './components/PasswordInput/index.js';\nexport * from './components/Radio/index.js';\nexport * from './components/RadioGroup/index.js';\nexport * from './components/ScrollContainer/index.js';\nexport * from './components/Select/index.js';\nexport * from './components/SidePage/index.js';\nexport * from './components/Spinner/index.js';\nexport * from './components/Sticky/index.js';\nexport * from './components/Switcher/index.js';\nexport * from './components/Tabs/index.js';\nexport * from './components/Textarea/index.js';\nexport * from './components/TimePicker/index.js';\nexport * from './components/Toast/index.js';\nexport * from './components/SingleToast/index.js';\nexport * from './components/Toggle/index.js';\nexport * from './components/Token/index.js';\nexport * from './components/TokenInput/index.js';\nexport * from './components/Tooltip/index.js';\nexport * from './components/TooltipMenu/index.js';\nexport * from './components/ResponsiveLayout/index.js';\nexport * from './components/MaskedInput/index.js';\nexport * from './lib/featureFlagsContext/index.js';\nexport * from './lib/locale/index.js';\nexport * from './lib/size/index.js';\nexport * from './lib/theming/ThemeContext.js';\nexport * from './lib/theming/ThemeFactory.js';\nexport * from './lib/theming/themes/LightTheme.js';\nexport * from './lib/theming/themes/DarkTheme.js';\nexport * from './lib/types/props.js';\nexport * from './internal/Popup/types.js';\nexport type { PopupMenuCaptionProps } from './internal/PopupMenu/index.js';\nexport * as ColorFunctions from './lib/styles/ColorFunctions.js';\nexport * as DimensionFunctions from './lib/styles/DimensionFunctions.js';\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { TimeFormat } from '../../components/TimePicker/index.js';
|
|
3
|
+
import type { Nullable } from '../../typings/utility-types.js';
|
|
4
|
+
export interface NativeTimeInputProps {
|
|
5
|
+
'data-tid'?: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
format: TimeFormat;
|
|
8
|
+
value: Nullable<string>;
|
|
9
|
+
minTime?: Nullable<string>;
|
|
10
|
+
maxTime?: Nullable<string>;
|
|
11
|
+
onValueChange?(value: string): void;
|
|
12
|
+
onBlur?(event: React.FocusEvent<HTMLInputElement>): void;
|
|
13
|
+
}
|
|
14
|
+
export interface NativeTimeInputRef {
|
|
15
|
+
focus(): void;
|
|
16
|
+
blur(): void;
|
|
17
|
+
click(): void;
|
|
18
|
+
getNode(): HTMLInputElement | null;
|
|
19
|
+
}
|
|
20
|
+
export declare const NativeTimeInput: import("../../lib/forwardRefAndName.js").ReactUIComponentWithRef<NativeTimeInputRef, NativeTimeInputProps> & Record<never, never>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React, { useImperativeHandle, useRef } from 'react';
|
|
2
|
+
import { forwardRefAndName } from '../../lib/forwardRefAndName.js';
|
|
3
|
+
import { useEmotion } from '../../lib/renderEnvironment/index.js';
|
|
4
|
+
import { getJsStyles } from './NativeTimeInput.styles.js';
|
|
5
|
+
import { getDefaultMaxTime, getDefaultMinTime, getNativeTimeStep, getTimeForComponent, getTimeForNative, } from './NativeTimeInput.utils.js';
|
|
6
|
+
export var NativeTimeInput = forwardRefAndName('NativeTimeInput', function (props, ref) {
|
|
7
|
+
var _a;
|
|
8
|
+
var value = props.value, minTime = props.minTime, maxTime = props.maxTime, format = props.format, disabled = props.disabled, onValueChange = props.onValueChange, onBlur = props.onBlur, dataTid = props["data-tid"];
|
|
9
|
+
var jsStyles = getJsStyles(useEmotion());
|
|
10
|
+
var inputRef = useRef(null);
|
|
11
|
+
useImperativeHandle(ref, function () { return ({
|
|
12
|
+
focus: function () {
|
|
13
|
+
var _a;
|
|
14
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
15
|
+
},
|
|
16
|
+
blur: function () {
|
|
17
|
+
var _a;
|
|
18
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
19
|
+
},
|
|
20
|
+
click: function () {
|
|
21
|
+
var _a;
|
|
22
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.click();
|
|
23
|
+
},
|
|
24
|
+
getNode: function () { return inputRef.current; },
|
|
25
|
+
}); }, []);
|
|
26
|
+
return (React.createElement("input", { type: 'time', "data-tid": dataTid, ref: inputRef, disabled: disabled, className: jsStyles.inputTypeTime(), tabIndex: -1, step: getNativeTimeStep(format), min: minTime ? getTimeForNative(minTime, format) : getDefaultMinTime(format), max: maxTime ? getTimeForNative(maxTime, format) : getDefaultMaxTime(format), value: (_a = getTimeForNative(value, format)) !== null && _a !== void 0 ? _a : '', onBlur: onBlur, onChange: function (event) {
|
|
27
|
+
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(getTimeForComponent(event.target.value, format));
|
|
28
|
+
} }));
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=NativeTimeInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeTimeInput.js","sourceRoot":"","sources":["NativeTimeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAoBpC,MAAM,CAAC,IAAM,eAAe,GAAG,iBAAiB,CAC9C,iBAAiB,EACjB,UAAC,KAAK,EAAE,GAAG;;IACD,IAAA,KAAK,GAAqF,KAAK,MAA1F,EAAE,OAAO,GAA4E,KAAK,QAAjF,EAAE,OAAO,GAAmE,KAAK,QAAxE,EAAE,MAAM,GAA2D,KAAK,OAAhE,EAAE,QAAQ,GAAiD,KAAK,SAAtD,EAAE,aAAa,GAAkC,KAAK,cAAvC,EAAE,MAAM,GAA0B,KAAK,OAA/B,EAAc,OAAO,GAAK,KAAK,YAAV,CAAW;IAExG,IAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3C,IAAM,QAAQ,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IAEvD,mBAAmB,CACjB,GAAG,EACH,cAAM,OAAA,CAAC;QACL,KAAK;;YACH,MAAA,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI;;YACF,MAAA,QAAQ,CAAC,OAAO,0CAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,KAAK;;YACH,MAAA,QAAQ,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,EAAE,cAAM,OAAA,QAAQ,CAAC,OAAO,EAAhB,CAAgB;KAChC,CAAC,EAXI,CAWJ,EACF,EAAE,CACH,CAAC;IAEF,OAAO,CACL,+BACE,IAAI,EAAE,MAAM,cACF,OAAO,EACjB,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE,EACnC,QAAQ,EAAE,CAAC,CAAC,EACZ,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAC/B,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAC5E,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAC5E,KAAK,EAAE,MAAA,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,mCAAI,EAAE,EAC5C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAC,KAAK;YACd,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,CAAC,GACD,CACH,CAAC;AACJ,CAAC,CACF,CAAC","sourcesContent":["import React, { useImperativeHandle, useRef } from 'react';\n\nimport type { TimeFormat } from '../../components/TimePicker/index.js';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { useEmotion } from '../../lib/renderEnvironment/index.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getJsStyles } from './NativeTimeInput.styles.js';\nimport {\n getDefaultMaxTime,\n getDefaultMinTime,\n getNativeTimeStep,\n getTimeForComponent,\n getTimeForNative,\n} from './NativeTimeInput.utils.js';\n\nexport interface NativeTimeInputProps {\n 'data-tid'?: string;\n disabled?: boolean;\n format: TimeFormat;\n value: Nullable<string>;\n minTime?: Nullable<string>;\n maxTime?: Nullable<string>;\n onValueChange?(value: string): void;\n onBlur?(event: React.FocusEvent<HTMLInputElement>): void;\n}\n\nexport interface NativeTimeInputRef {\n focus(): void;\n blur(): void;\n click(): void;\n getNode(): HTMLInputElement | null;\n}\n\nexport const NativeTimeInput = forwardRefAndName<NativeTimeInputRef, NativeTimeInputProps>(\n 'NativeTimeInput',\n (props, ref) => {\n const { value, minTime, maxTime, format, disabled, onValueChange, onBlur, 'data-tid': dataTid } = props;\n\n const jsStyles = getJsStyles(useEmotion());\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus() {\n inputRef.current?.focus();\n },\n blur() {\n inputRef.current?.blur();\n },\n click() {\n inputRef.current?.click();\n },\n getNode: () => inputRef.current,\n }),\n [],\n );\n\n return (\n <input\n type={'time'}\n data-tid={dataTid}\n ref={inputRef}\n disabled={disabled}\n className={jsStyles.inputTypeTime()}\n tabIndex={-1}\n step={getNativeTimeStep(format)}\n min={minTime ? getTimeForNative(minTime, format) : getDefaultMinTime(format)}\n max={maxTime ? getTimeForNative(maxTime, format) : getDefaultMaxTime(format)}\n value={getTimeForNative(value, format) ?? ''}\n onBlur={onBlur}\n onChange={(event) => {\n onValueChange?.(getTimeForComponent(event.target.value, format));\n }}\n />\n );\n },\n);\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
2
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
|
+
return cooked;
|
|
4
|
+
};
|
|
5
|
+
import { memoizeGetStyles } from '../../lib/theming/Emotion.js';
|
|
6
|
+
export var getJsStyles = memoizeGetStyles(function (_a) {
|
|
7
|
+
var css = _a.css;
|
|
8
|
+
return ({
|
|
9
|
+
inputTypeTime: function () {
|
|
10
|
+
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n width: 0;\n height: 0;\n padding: 0;\n margin: 0;\n line-height: 0;\n transform: scale(0);\n border: none;\n overflow: hidden;\n opacity: 0;\n "], ["\n width: 0;\n height: 0;\n padding: 0;\n margin: 0;\n line-height: 0;\n transform: scale(0);\n border: none;\n overflow: hidden;\n opacity: 0;\n "])));
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
var templateObject_1;
|
|
15
|
+
//# sourceMappingURL=NativeTimeInput.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeTimeInput.styles.js","sourceRoot":"","sources":["NativeTimeInput.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,CAAC,IAAM,WAAW,GAAG,gBAAgB,CAAC,UAAC,EAAgB;QAAd,GAAG,SAAA;IAAgB,OAAA,CAAC;QACjE,aAAa;YACX,OAAO,GAAG,uQAAA,oMAUT,KAAC;QACJ,CAAC;KACF,CAAC;AAdgE,CAchE,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles } from '../../lib/theming/Emotion.js';\n\nexport const getJsStyles = memoizeGetStyles(({ css }: Emotion) => ({\n inputTypeTime() {\n return css`\n width: 0;\n height: 0;\n padding: 0;\n margin: 0;\n line-height: 0;\n transform: scale(0);\n border: none;\n overflow: hidden;\n opacity: 0;\n `;\n },\n}));\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TimeFormat } from '../../components/TimePicker/index.js';
|
|
2
|
+
import type { Nullable } from '../../typings/utility-types.js';
|
|
3
|
+
/** Приводит время компонента к форме нативного инпута. Пустое значение отдается как отсутствующее. */
|
|
4
|
+
export declare const getTimeForNative: (componentTime: Nullable<string>, format: TimeFormat) => string | undefined;
|
|
5
|
+
/** Приводит время нативного инпута к форме компонента. Пустое значение отдается пустой строкой. */
|
|
6
|
+
export declare const getTimeForComponent: (nativeTime: Nullable<string>, format: TimeFormat) => string;
|
|
7
|
+
export declare const getDefaultMinTime: (format: TimeFormat) => string;
|
|
8
|
+
export declare const getDefaultMaxTime: (format: TimeFormat) => string;
|
|
9
|
+
export declare const getNativeTimeStep: (format: TimeFormat) => number;
|