@skbkontur/react-ui 6.1.7-65057.0 → 6.1.7-8e9d5.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.
Files changed (64) hide show
  1. package/components/TimePicker/TimePicker.d.ts +36 -29
  2. package/components/TimePicker/TimePicker.js +234 -132
  3. package/components/TimePicker/TimePicker.js.map +1 -1
  4. package/components/TimePicker/TimePicker.styles.d.ts +2 -2
  5. package/components/TimePicker/TimePicker.styles.js +4 -4
  6. package/components/TimePicker/TimePicker.styles.js.map +1 -1
  7. package/components/TimePicker/TimePickerItems.d.ts +5 -1
  8. package/components/TimePicker/TimePickerItems.js +16 -13
  9. package/components/TimePicker/TimePickerItems.js.map +1 -1
  10. package/components/TimePicker/TimePickerMobilePopup.d.ts +5 -2
  11. package/components/TimePicker/TimePickerMobilePopup.js +3 -3
  12. package/components/TimePicker/TimePickerMobilePopup.js.map +1 -1
  13. package/components/TimePicker/TimePickerPopup.d.ts +5 -1
  14. package/components/TimePicker/TimePickerPopup.js +2 -2
  15. package/components/TimePicker/TimePickerPopup.js.map +1 -1
  16. package/components/TimePicker/helpers/TimePicker.constants.d.ts +3 -1
  17. package/components/TimePicker/helpers/TimePicker.constants.js +3 -7
  18. package/components/TimePicker/helpers/TimePicker.constants.js.map +1 -1
  19. package/components/TimePicker/helpers/TimePicker.editing.d.ts +1 -5
  20. package/components/TimePicker/helpers/TimePicker.editing.js +8 -35
  21. package/components/TimePicker/helpers/TimePicker.editing.js.map +1 -1
  22. package/components/TimePicker/helpers/TimePicker.shared.d.ts +15 -24
  23. package/components/TimePicker/helpers/TimePicker.shared.js +13 -27
  24. package/components/TimePicker/helpers/TimePicker.shared.js.map +1 -1
  25. package/components/TimePicker/helpers/TimePicker.value.d.ts +3 -13
  26. package/components/TimePicker/helpers/TimePicker.value.js +13 -43
  27. package/components/TimePicker/helpers/TimePicker.value.js.map +1 -1
  28. package/components/TimePicker/helpers/scrollSelectedItemIntoView.d.ts +2 -0
  29. package/components/TimePicker/helpers/scrollSelectedItemIntoView.js +2 -0
  30. package/components/TimePicker/helpers/scrollSelectedItemIntoView.js.map +1 -1
  31. package/components/TimePicker/helpers/validateTimePicker.js +2 -4
  32. package/components/TimePicker/helpers/validateTimePicker.js.map +1 -1
  33. package/components/TimePicker/hooks/useTimePickerDropdown.js +9 -25
  34. package/components/TimePicker/hooks/useTimePickerDropdown.js.map +1 -1
  35. package/components/TimePicker/hooks/useTimePickerSource.d.ts +3 -1
  36. package/components/TimePicker/hooks/useTimePickerSource.js +14 -6
  37. package/components/TimePicker/hooks/useTimePickerSource.js.map +1 -1
  38. package/components/TimePicker/hooks/useTimePickerValue.d.ts +9 -4
  39. package/components/TimePicker/hooks/useTimePickerValue.js +22 -23
  40. package/components/TimePicker/hooks/useTimePickerValue.js.map +1 -1
  41. package/components/TimePicker/index.d.ts +1 -1
  42. package/components/TimePicker/index.js.map +1 -1
  43. package/components/TimePicker/locale/locales/en.js +2 -0
  44. package/components/TimePicker/locale/locales/en.js.map +1 -1
  45. package/components/TimePicker/locale/locales/ru.js +2 -0
  46. package/components/TimePicker/locale/locales/ru.js.map +1 -1
  47. package/components/TimePicker/locale/types.d.ts +2 -0
  48. package/components/TimePicker/locale/types.js.map +1 -1
  49. package/internal/NativeTimeInput/NativeTimeInput.d.ts +4 -0
  50. package/internal/NativeTimeInput/NativeTimeInput.js +7 -2
  51. package/internal/NativeTimeInput/NativeTimeInput.js.map +1 -1
  52. package/internal/NativeTimeInput/NativeTimeInput.utils.d.ts +2 -0
  53. package/internal/NativeTimeInput/NativeTimeInput.utils.js +4 -8
  54. package/internal/NativeTimeInput/NativeTimeInput.utils.js.map +1 -1
  55. package/internal/TimeInput/TimeFragments.d.ts +0 -1
  56. package/internal/TimeInput/TimeFragments.js +30 -8
  57. package/internal/TimeInput/TimeFragments.js.map +1 -1
  58. package/internal/TimeInput/TimeFragments.styles.d.ts +15 -0
  59. package/internal/TimeInput/TimeFragments.styles.js +39 -9
  60. package/internal/TimeInput/TimeFragments.styles.js.map +1 -1
  61. package/internal/TimeInput/TimeInput.d.ts +0 -1
  62. package/internal/TimeInput/TimeInput.js +0 -1
  63. package/internal/TimeInput/TimeInput.js.map +1 -1
  64. package/package.json +1 -1
@@ -4,28 +4,23 @@ import type { CommonProps } from '../../internal/CommonWrapper/index.js';
4
4
  import type { SizeProp } from '../../lib/types/props.js';
5
5
  import { type NoInfer } from '../../lib/utils.js';
6
6
  import type { MenuItemState } from '../MenuItem/index.js';
7
- import { type TimeFormat, type TimeItemValue, type TimePickerSource, type TimePickerValue, type TimePickerValueToItem } from './helpers/TimePicker.shared.js';
7
+ import { type TimeFormat, type TimeItem, type TimePickerEmptyItem, type TimeItemValue, type TimePickerSource, type TimePickerValue, type TimePickerValueToItem } from './helpers/TimePicker.shared.js';
8
8
  import { validateTimePicker } from './helpers/validateTimePicker.js';
9
9
  export interface TimePickerProps<T extends TimeItemValue = string> extends CommonProps, Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'> {
10
10
  /** Устанавливает формат времени @default HH:mm */
11
11
  format?: TimeFormat;
12
- /** Задает источник элементов выпадающего списка.
13
- * Можно передать массив или функцию, которая получает текущий запрос и возвращает массив либо Promise с массивом.
12
+ /** Задает источник элементов выпадающего списка: массив либо функцию запроса,
13
+ * которая возвращает массив или Promise с массивом.
14
14
  * Запрос — это введенные цифры сегментов с сохранением их позиций: `12`, `12:3`, а если заполнены только минуты — `:30`.
15
- * Элемент задается строкой со временем — `'09:00'`или объектом `{ value, label?, disabled? }`
16
- * с любыми дополнительными полями. Выбранный элемент приходит в `onValueChange` в той же форме.
17
- * Кроме значений времени можно передать React-элементы или функции, возвращающие React-элемент:
18
- * например, `MenuHeader`, `MenuFooter`, `MenuSeparator` или `MenuItem`.
19
- * Такие элементы отображаются в меню, но не участвуют в фильтрации и выборе значения.
20
- * Полученные элементы всегда фильтруются компонентом одинаково для массива и функции:
21
- * введенные цифры сегмента сравниваются с началом соответствующего сегмента элемента.
22
- * В выпадающем списке не может быть двух элементов с одинаковым временем:
23
- * из элементов с одинаковым временем компонент оставляет первый.
24
- * Пустые элементы из условного рендера — `isVisible && item` — пропускаются.
25
- * Пока Promise не разрешился и предыдущих результатов нет, в выпадающем меню показывается спиннер загрузки.
26
- * Если предыдущие результаты есть, подходящие элементы остаются видимыми до прихода новых,
27
- * а индикация загрузки показывается в правой иконке поля.
28
- * Замена функции не перезапрашивает уже открытый список: актуальная функция используется при следующем запросе. */
15
+ * Элементы задаются либо строками со временем — `'09:00'`,либо объектами `{ value, label?, disabled? }`
16
+ * с любыми дополнительными полями; смешивать формы в одном источнике нельзя, это ошибка типов.
17
+ * Выбранный элемент приходит в `onValueChange` в той же форме.
18
+ * Кроме значений времени можно передать React-элементы — например `MenuHeader` или `MenuItem`:
19
+ * они отображаются в меню, но не участвуют в фильтрации и выборе значения.
20
+ * Фильтрацию, индикацию загрузки и повторные запросы компонент берет на себя,
21
+ * подробности в разделе документации про выпадающий список.
22
+ * Замена самой функции уже открытый список не перезапрашивает: как в `ComboBox`,
23
+ * актуальная функция используется при следующем запросе. */
29
24
  source?: TimePickerSource<T>;
30
25
  /** Отрисовывает значение времени в выпадающем списке. Не применяется к React-элементам из `source`. */
31
26
  renderItem?: (item: T, state: MenuItemState) => ReactNode;
@@ -43,9 +38,8 @@ export interface TimePickerProps<T extends TimeItemValue = string> extends Commo
43
38
  * ручной ввод, изменение стрелками, вставка из буфера, нативный пикер.
44
39
  * По умолчанию компонент повторяет форму элементов `source` и `value`:
45
40
  * для строк отдает строку, для объектов — `{ value }`.
46
- * Форму элементов функции-источника компонент узнает только после первого ответа,
47
- * поэтому до него и всегда в режиме нативного пикера — время без этого пропа уходит строкой.
48
- * Задавайте этот проп, если элементы содержат поля, кроме `value`, `label` и `disabled`.
41
+ * Задавайте этот проп, если элементы содержат поля, кроме `value`, `label` и `disabled`:
42
+ * форму элементов функции-источника компонент узнает только после ее первого ответа.
49
43
  * @default (value) => value | ({ value }) */
50
44
  valueToItem?: TimePickerValueToItem<T>;
51
45
  /** Устанавливает фокус на поле ввода после окончания загрузки страницы @default false */
@@ -56,7 +50,8 @@ export interface TimePickerProps<T extends TimeItemValue = string> extends Commo
56
50
  error?: boolean;
57
51
  /** Переводит контрол в состояние валидации предупреждения. */
58
52
  warning?: boolean;
59
- /** Включает нативный системный выбор времени на мобильных устройствах. */
53
+ /** Включает нативный системный выбор времени в мобильной верстке.
54
+ * Мобильная верстка определяется медиавыражением темы, как в остальных адаптивных контролах. */
60
55
  useMobileNativeTimePicker?: boolean;
61
56
  /** Расположение выпадающего меню. */
62
57
  menuPos?: 'top' | 'bottom';
@@ -83,14 +78,15 @@ export interface TimePickerProps<T extends TimeItemValue = string> extends Commo
83
78
  * Событие изменения значения `value`.
84
79
  * Вызывается при коммите значения: потере фокуса, нажатии Enter, выборе элемента из списка
85
80
  * или изменении в нативном пикере.
86
- * Первым аргументом приходит элемент в той же форме, в которой элементы переданы в `source`:
87
- * при выборе из выпадающего списка — тот же элемент, в остальных случаях — результат `valueToItem`,
88
- * а при пустом значении `null`.
89
- * Вторым аргументом приходит полностью нормализованное время в формате `HH:mm[:ss]` или пустая строка.
81
+ * Элемент приходит в той же форме, в которой элементы переданы в `source`:
82
+ * при выборе из выпадающего списка — тот же элемент, в остальных случаях — результат `valueToItem`.
83
+ * Пустое значение приходит пустой строкой в строковой форме и `null` — в объектной.
84
+ * Время элемента полностью нормализовано до формата `HH:mm[:ss]`,
85
+ * у элемента-объекта его можно прочитать из `item.value`.
90
86
  * Тип элемента выводится из `source` и `value`, но не из этого обработчика,
91
87
  * иначе `onValueChange={setItem}` сузил бы его до `TimeItem`.
92
88
  */
93
- onValueChange?(item: NoInfer<T> | null, value: string): void;
89
+ onValueChange?(item: NoInfer<T> | TimePickerEmptyItem<T>): void;
94
90
  /**
95
91
  * Событие изменения значения в процессе ввода.
96
92
  * Значение частично нормализуется по сегментам, например `1` => `01`, незаполненный хвост отбрасывается.
@@ -105,9 +101,17 @@ export interface TimePickerProps<T extends TimeItemValue = string> extends Commo
105
101
  * его можно проверить через `TimePicker.validate`.
106
102
  * Вторым аргументом передается метод вспыхивания рамки поля.
107
103
  * Если обработчик не задан, поле вспыхивает само.
104
+ * Обработчик может подставить значение вместо некорректного ввода — например разобрать вставку
105
+ * в собственном формате: возвращенный элемент коммитится и приходит в `onValueChange`,
106
+ * `null` очищает поле, а `undefined` оставляет значение прежним.
107
+ */
108
+ onUnexpectedInput?(value: string, blink: () => void): void | NoInfer<T> | null;
109
+ /**
110
+ * Событие потери фокуса.
111
+ * Вызывается после коммита значения и следующего за ним рендера,
112
+ * поэтому обработчик видит уже измененное значение — например при выборе элемента в мобильном попапе.
113
+ * Из-за этого событие приходит отложенно и его `currentTarget` уже пуст: элемент читайте из `target`.
108
114
  */
109
- onUnexpectedInput?(value: string, blink: () => void): void;
110
- /** Событие потери фокуса. */
111
115
  onBlur?(event: React.FocusEvent<HTMLElement>): void;
112
116
  /** Событие получения фокуса. */
113
117
  onFocus?(event: React.FocusEvent<HTMLElement>): void;
@@ -136,7 +140,10 @@ export interface TimePickerRef {
136
140
  }
137
141
  export type TimePicker = TimePickerRef;
138
142
  interface TimePickerComponent {
139
- <T extends TimeItemValue = string>(props: TimePickerProps<T> & React.RefAttributes<TimePickerRef>): React.ReactElement | null;
143
+ /** Строковый режим: элементы source строки со временем. */
144
+ (props: TimePickerProps<string> & React.RefAttributes<TimePickerRef>): React.ReactElement | null;
145
+ /** Объектный режим: элементы source — объекты, расширяющие `{ value: string }`. */
146
+ <T extends TimeItem>(props: TimePickerProps<T> & React.RefAttributes<TimePickerRef>): React.ReactElement | null;
140
147
  displayName?: string;
141
148
  __KONTUR_REACT_UI__: string;
142
149
  /** Проверяет, что значение полностью заполнено, соответствует формату и попадает в диапазон `minTime`/`maxTime`. */