@cloud-ru/ds-list 2.3.0 → 2.3.2

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 CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 2.3.2 (2026-10-06)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **FF-9095:** fieldSelect text selection ([083a3b9](https://github.com/cloud-ru-tech/snack-v2/commit/083a3b9e97c87430a0ab1f41365f1060a097cdb0))
11
+
12
+ ## 2.3.1 (2026-10-05)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **FF-9172:** gen-props resolves indexed access to the field type ([baf31c4](https://github.com/cloud-ru-tech/snack-v2/commit/baf31c4053e76c81d681c9c19a6622f009f40413))
17
+
6
18
  # 2.3.0 (2026-10-05)
7
19
 
8
20
  ### Features
package/README.md CHANGED
@@ -970,7 +970,7 @@ export function DroplistWithHeader() {
970
970
  | `noResultsState` | `EmptyStateProps` | — | Экран при отсутствии результатов поиска или фильтров |
971
971
  | `onBackButtonClick` | `(() => void)` | — | Только mobile (`BottomSheet`): callback back-кнопки. |
972
972
  | `onOpenChange` | `((isOpen: boolean) => void)` | — | Колбек отображения компонента. Срабатывает при изменении состояния open. |
973
- | `onScroll` | `OriginalScrollProps` | — | Колбек на скролл прокручиваемого списка |
973
+ | `onScroll` | `((event?: Event) => void)` | — | Колбек на скролл прокручиваемого списка |
974
974
  | `open` | `boolean` | — | Управляет состоянием показан/не показан. |
975
975
  | `pinBottom` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Элементы списка, закрепленные снизу |
976
976
  | `pinTop` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Элементы списка, закрепленные сверху |
@@ -1026,6 +1026,8 @@ export function DroplistWithHeader() {
1026
1026
  | `toggleOn` | `"expandIcon"` \| `"item"` | — | Что переключает раскрытие вложенного списка: <br/> <br> - `item` — клик по всей строке (по умолчанию), <br/> <br> - `expandIcon` — только клик по шеврону; клик по строке остаётся потребителю <br/> (например, когда `itemWrapRender` оборачивает строку в ссылку). <br/> Клавиатура (`Enter` / `Space` / `ArrowRight` на строке) раскрывает группу в обоих режимах. |
1027
1027
  | `value` | `ItemId` | — | |
1028
1028
 
1029
+ - `CollapseToggleOn` = `"expandIcon"` \| `"item"`
1030
+
1029
1031
  **CommonGroupItem**
1030
1032
 
1031
1033
  | Prop | Type | Default | Description |
@@ -1035,7 +1037,7 @@ export function DroplistWithHeader() {
1035
1037
  | `groupVariant` | `"subtitle"` \| `"subtitleTertiary"` | — | Визуальный стиль заголовка группы |
1036
1038
  | `hidden` | `boolean \| undefined` | — | Скрыть группу из списка |
1037
1039
  | `label` | `string \| undefined` | — | Заголовок группы |
1038
- | `truncate` | `TruncateStringProps` | — | Настройки усечения длинного заголовка группы |
1040
+ | `truncate` | `{ variant?: TruncateStringProps["variant"]; } \| undefined` | — | Настройки усечения длинного заголовка группы |
1039
1041
 
1040
1042
  **EmptyStateProps**
1041
1043
 
@@ -1049,12 +1051,28 @@ export function DroplistWithHeader() {
1049
1051
 
1050
1052
  - `Item` = `BaseItem | GroupItem | GroupSelectItem | NextListItem | AccordionItem`
1051
1053
 
1054
+ **ItemContent**
1055
+
1056
+ | Prop | Type | Default | Description |
1057
+ |------|------|---------|-------------|
1058
+ | `caption` | `string \| undefined` | — | |
1059
+ | `className` | `string \| undefined` | — | |
1060
+ | `data-test-id` | `string \| undefined` | — | |
1061
+ | `description` | `string \| undefined` | — | |
1062
+ | `disabled` | `boolean \| undefined` | — | |
1063
+ | `label` | `string \| number` | — | |
1064
+ | `truncate` | `TruncateProps` | — | |
1065
+
1066
+ - `ItemId` = `string | number`
1067
+
1068
+ - `OnChangeHandler` = `(value: T) => void`
1069
+
1052
1070
  **ScrollProps**
1053
1071
 
1054
1072
  | Prop | Type | Default | Description |
1055
1073
  |------|------|---------|-------------|
1056
1074
  | `barHideStrategy` | `"leave"` \| `"move"` \| `"never"` \| `"scroll"` | — | Управление скрытием скролл баров: <br/> <br> - `Never` - показывать всегда <br/> <br> - `Leave` - скрывать когда курсор покидает компонент <br/> <br> - `Scroll` - показывать только когда происходит скроллинг <br/> <br> - `Move` - показывать при движении курсора над компонентом |
1057
- | `onScroll` | `OriginalScrollProps` | — | Колбек на скролл прокручиваемого списка |
1075
+ | `onScroll` | `((event?: Event) => void) \| undefined` | — | Колбек на скролл прокручиваемого списка |
1058
1076
  | `scroll` | `boolean \| undefined` | — | Включить ли скролл для основной части списка |
1059
1077
  | `scrollContainerRef` | `Ref<HTMLElement> \| undefined` | — | Ссылка на контейнер, который скроллится |
1060
1078
  | `scrollRef` | `Ref<HTMLElement> \| undefined` | — | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
@@ -115,7 +115,11 @@ function DesktopDroplist({ items: itemsProp, search, pinBottom: pinBottomProp =
115
115
  const closeDroplist = (0, react_1.useCallback)(() => {
116
116
  setOpen(false);
117
117
  resetActiveItemId();
118
- (triggerElemRefProp ?? triggerElemRef).current?.focus();
118
+ if ((0, utils_1.isBrowser)()) {
119
+ requestAnimationFrame(() => {
120
+ (triggerElemRefProp ?? triggerElemRef).current?.focus();
121
+ });
122
+ }
119
123
  }, [setOpen, resetActiveItemId, triggerElemRefProp]);
120
124
  const openListContextValue = (0, react_1.useMemo)(() => ({ closeDroplistOnItemClick, closeDroplist }), [closeDroplistOnItemClick, closeDroplist]);
121
125
  // virtualized-список не имеет собственной ширины: строки `position:absolute; width:100%`,
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Dropdown } from '@cloud-ru/ds-dropdown';
3
- import { focusWithoutScroll, preventScrollOnVerticalArrows, useValueControl } from '@cloud-ru/ds-utils';
3
+ import { focusWithoutScroll, isBrowser, preventScrollOnVerticalArrows, useValueControl } from '@cloud-ru/ds-utils';
4
4
  import cn from 'classnames';
5
5
  import mergeRefs from 'merge-refs';
6
6
  import { cloneElement, isValidElement, useCallback, useEffect, useMemo, useRef } from 'react';
@@ -109,7 +109,11 @@ export function DesktopDroplist({ items: itemsProp, search, pinBottom: pinBottom
109
109
  const closeDroplist = useCallback(() => {
110
110
  setOpen(false);
111
111
  resetActiveItemId();
112
- (triggerElemRefProp ?? triggerElemRef).current?.focus();
112
+ if (isBrowser()) {
113
+ requestAnimationFrame(() => {
114
+ (triggerElemRefProp ?? triggerElemRef).current?.focus();
115
+ });
116
+ }
113
117
  }, [setOpen, resetActiveItemId, triggerElemRefProp]);
114
118
  const openListContextValue = useMemo(() => ({ closeDroplistOnItemClick, closeDroplist }), [closeDroplistOnItemClick, closeDroplist]);
115
119
  // virtualized-список не имеет собственной ширины: строки `position:absolute; width:100%`,