@skbkontur/react-ui 6.2.0 → 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 +36 -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/Switcher/Switcher.d.ts +1 -1
- package/components/Switcher/Switcher.js +1 -1
- package/components/Switcher/Switcher.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 +11 -3
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import type { AriaAttributes, HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { CommonProps } from '../../internal/CommonWrapper/index.js';
|
|
4
|
+
import type { SizeProp } from '../../lib/types/props.js';
|
|
5
|
+
import type { MenuItemState } from '../MenuItem/index.js';
|
|
6
|
+
import { type TimeFormat, type TimeItem, type TimeItemValue, type TimePickerSource } from './helpers/TimePicker.shared.js';
|
|
7
|
+
import { validateTimePicker } from './helpers/validateTimePicker.js';
|
|
8
|
+
export interface TimePickerProps<T extends TimeItemValue = string> extends CommonProps, Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'> {
|
|
9
|
+
/** Устанавливает формат времени @default HH:mm */
|
|
10
|
+
format?: TimeFormat;
|
|
11
|
+
/** Задает источник элементов выпадающего списка: массив либо функцию запроса,
|
|
12
|
+
* которая возвращает массив или Promise с массивом.
|
|
13
|
+
* Запрос — это введенные цифры сегментов с сохранением их позиций: `12`, `12:3`, а если заполнены только минуты — `:30`.
|
|
14
|
+
* Элементы задаются либо строками со временем — `'09:00'`, — либо объектами `{ value, label?, disabled? }`
|
|
15
|
+
* с любыми дополнительными полями; смешивать формы в одном источнике нельзя, это ошибка типов.
|
|
16
|
+
* В `onValueChange` приходит только время выбранного элемента: сам элемент можно найти в `source` по нему.
|
|
17
|
+
* Кроме значений времени можно передать React-элементы — например `MenuHeader` или `MenuItem`:
|
|
18
|
+
* они отображаются в меню, но не участвуют в фильтрации и выборе значения.
|
|
19
|
+
* Фильтрацию, индикацию загрузки и повторные запросы компонент берет на себя,
|
|
20
|
+
* подробности — в разделе документации про выпадающий список.
|
|
21
|
+
* Замена самой функции уже открытый список не перезапрашивает: как в `ComboBox`,
|
|
22
|
+
* актуальная функция используется при следующем запросе. */
|
|
23
|
+
source?: TimePickerSource<T>;
|
|
24
|
+
/** Отрисовывает элемент со временем в выпадающем списке. Не применяется к React-элементам из `source`.
|
|
25
|
+
* Время элемента приведено к формату поля, как и везде в компоненте:
|
|
26
|
+
* элемент `'9:00'` приходит как `'09:00'`, а `{ value: '09:00:00' }` в формате `HH:mm` — как `{ value: '09:00' }`.
|
|
27
|
+
* Остальные поля элемента сохраняются. */
|
|
28
|
+
renderItem?: (item: T, state: MenuItemState) => ReactNode;
|
|
29
|
+
/** Задает нижнюю границу времени. Элементы за границей становятся заблокированными. */
|
|
30
|
+
minTime?: string;
|
|
31
|
+
/** Задает верхнюю границу времени. Элементы за границей становятся заблокированными. */
|
|
32
|
+
maxTime?: string;
|
|
33
|
+
/** Задает значение поля: время в формате `HH:mm[:ss]`.
|
|
34
|
+
* Пустое значение можно передать как `''` или `null`.
|
|
35
|
+
* Если проп не задан, компонент неконтролируемый: он хранит значение сам и сообщает о нем через `onValueChange`. */
|
|
36
|
+
value?: string | null;
|
|
37
|
+
/** Устанавливает фокус на поле ввода после окончания загрузки страницы @default false */
|
|
38
|
+
autoFocus?: boolean;
|
|
39
|
+
/** Делает компонент заблокированным. */
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
/** Переводит контрол в состояние валидации ошибки. */
|
|
42
|
+
error?: boolean;
|
|
43
|
+
/** Переводит контрол в состояние валидации предупреждения. */
|
|
44
|
+
warning?: boolean;
|
|
45
|
+
/** Включает нативный системный выбор времени в мобильной верстке.
|
|
46
|
+
* Мобильная верстка определяется медиавыражением темы, как в остальных адаптивных контролах. */
|
|
47
|
+
useMobileNativeTimePicker?: boolean;
|
|
48
|
+
/** Расположение выпадающего меню. */
|
|
49
|
+
menuPos?: 'top' | 'bottom';
|
|
50
|
+
/** Выравнивание выпадающего меню. */
|
|
51
|
+
menuAlign?: 'left' | 'right';
|
|
52
|
+
/** Ширина выпадающего меню. По умолчанию — минимальная ширина поля ввода, расширяется по контенту. */
|
|
53
|
+
menuWidth?: string | number;
|
|
54
|
+
/** Задает ширину поля. */
|
|
55
|
+
width?: string | number;
|
|
56
|
+
/** Переопределяет иконку или скрывает, если передать `null`.
|
|
57
|
+
* Пока элементы уже показаны, а новый запрос к функции-источнику еще выполняется,
|
|
58
|
+
* вместо иконки показывается индикатор загрузки. */
|
|
59
|
+
rightIcon?: React.ReactNode | (() => React.ReactNode);
|
|
60
|
+
/** Устанавливает суффикс после значения и перед иконкой. */
|
|
61
|
+
suffix?: ReactNode;
|
|
62
|
+
/** Размер поля ввода и выпадающего меню. */
|
|
63
|
+
size?: SizeProp;
|
|
64
|
+
/** Устанавливает радиус скруглений углов.
|
|
65
|
+
* @ignore */
|
|
66
|
+
corners?: Partial<Pick<React.CSSProperties, 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'>>;
|
|
67
|
+
/** Задает функцию, которая вызывается при нажатии на контрол. */
|
|
68
|
+
onClick?(event: React.MouseEvent<HTMLElement>): void;
|
|
69
|
+
/**
|
|
70
|
+
* Событие изменения значения `value`.
|
|
71
|
+
* Вызывается при коммите значения: потере фокуса, нажатии Enter, выборе элемента из списка
|
|
72
|
+
* или изменении в нативном пикере.
|
|
73
|
+
* Время полностью нормализовано до формата `HH:mm[:ss]`, а пустое значение приходит пустой строкой.
|
|
74
|
+
* Элементы-объекты из `source` наружу не приходят: по времени их можно найти в самом `source`.
|
|
75
|
+
*/
|
|
76
|
+
onValueChange?(time: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* Событие изменения значения в процессе ввода.
|
|
79
|
+
* Значение частично нормализуется по сегментам, например `1` => `01`, незаполненный хвост отбрасывается.
|
|
80
|
+
* Промежуточное значение может не соответствовать полной форме `HH:mm[:ss]`, поэтому тип — произвольная строка.
|
|
81
|
+
*/
|
|
82
|
+
onInputValueChange?(value: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Событие некорректного ввода: пользователь ввел или вставил значение, которое не может быть временем.
|
|
85
|
+
* Вызывается с нажатой клавишей — например `а` или `,` — либо со значением из буфера,
|
|
86
|
+
* из которого не получилось собрать время.
|
|
87
|
+
* Значение вне диапазона `minTime`/`maxTime` некорректным вводом не считается,
|
|
88
|
+
* его можно проверить через `TimePicker.validate`.
|
|
89
|
+
* Вторым аргументом передается метод вспыхивания рамки поля.
|
|
90
|
+
* Если обработчик не задан, поле вспыхивает само.
|
|
91
|
+
* Обработчик может подставить значение вместо некорректного ввода — например разобрать вставку
|
|
92
|
+
* в собственном формате: возвращенное время коммитится и приходит в `onValueChange`,
|
|
93
|
+
* `null` очищает поле, а `undefined` оставляет значение прежним.
|
|
94
|
+
*/
|
|
95
|
+
onUnexpectedInput?(value: string, blink: () => void): void | string | null;
|
|
96
|
+
/**
|
|
97
|
+
* Событие потери фокуса.
|
|
98
|
+
* Вызывается после коммита значения и следующего за ним рендера,
|
|
99
|
+
* поэтому обработчик видит уже измененное значение — например при выборе элемента в мобильном попапе.
|
|
100
|
+
* Из-за этого событие приходит отложенно и его `currentTarget` уже пуст: элемент читайте из `target`.
|
|
101
|
+
*/
|
|
102
|
+
onBlur?(event: React.FocusEvent<HTMLElement>): void;
|
|
103
|
+
/** Событие получения фокуса. */
|
|
104
|
+
onFocus?(event: React.FocusEvent<HTMLElement>): void;
|
|
105
|
+
/** Событие нажатия клавиши. */
|
|
106
|
+
onKeyDown?(event: React.KeyboardEvent<HTMLElement>): void;
|
|
107
|
+
/** Событие вставки из буфера. */
|
|
108
|
+
onPaste?(event: React.ClipboardEvent<HTMLElement>): void;
|
|
109
|
+
}
|
|
110
|
+
export interface TimePickerRef {
|
|
111
|
+
/** Устанавливает фокус на поле ввода.
|
|
112
|
+
* С опцией `withoutOpenDropdown` фокус не открывает выпадающее меню. */
|
|
113
|
+
focus(options?: {
|
|
114
|
+
withoutOpenDropdown?: boolean;
|
|
115
|
+
}): void;
|
|
116
|
+
/** Снимает фокус с поля ввода. */
|
|
117
|
+
blur(): void;
|
|
118
|
+
/** Открывает выпадающее меню, установив фокус на поле.
|
|
119
|
+
* В режиме нативного пикера открывает системный пикер. */
|
|
120
|
+
open(): void;
|
|
121
|
+
/** Закрывает выпадающее меню. */
|
|
122
|
+
close(): void;
|
|
123
|
+
/** Запускает анимацию blink у поля ввода времени. */
|
|
124
|
+
blink(): void;
|
|
125
|
+
/** Возвращает корневой DOM-узел компонента. */
|
|
126
|
+
getRootNode(): HTMLElement | null;
|
|
127
|
+
}
|
|
128
|
+
export type TimePicker = TimePickerRef;
|
|
129
|
+
interface TimePickerComponent {
|
|
130
|
+
/** Строковый режим: элементы source — строки со временем. */
|
|
131
|
+
(props: TimePickerProps<string> & React.RefAttributes<TimePickerRef>): React.ReactElement | null;
|
|
132
|
+
/** Объектный режим: элементы source — объекты, расширяющие `{ value: string }`. */
|
|
133
|
+
<T extends TimeItem>(props: TimePickerProps<T> & React.RefAttributes<TimePickerRef>): React.ReactElement | null;
|
|
134
|
+
displayName?: string;
|
|
135
|
+
__KONTUR_REACT_UI__: string;
|
|
136
|
+
/** Проверяет, что значение полностью заполнено, соответствует формату и попадает в диапазон `minTime`/`maxTime`. */
|
|
137
|
+
validate: typeof validateTimePicker;
|
|
138
|
+
}
|
|
139
|
+
/** Поле с временем помогает пользователю быстро и удобно указать время в правильном формате.
|
|
140
|
+
* В поле можно ввести время с клавиатуры либо выбрать из выпадающего списка,
|
|
141
|
+
* передав массив или функцию в проп `source`.
|
|
142
|
+
*/
|
|
143
|
+
export declare const TimePicker: TimePickerComponent;
|
|
144
|
+
export {};
|