@snack-uikit/list 0.31.0 → 0.31.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,28 @@
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
+ ## 0.31.2 (2025-07-09)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **PDS-2584:** fix scroll size ([f4a253e](https://github.com/cloud-ru-tech/snack-uikit/commit/f4a253e7f6d62094167219c4006e05e2b255cb50))
12
+
13
+
14
+
15
+
16
+
17
+ ## 0.31.1 (2025-07-07)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **PDS-2556:** prop closeOnPopstate for dropdown ([139dc62](https://github.com/cloud-ru-tech/snack-uikit/commit/139dc62e1e03212a748977f197e1e5dca8736789))
23
+
24
+
25
+
26
+
27
+
6
28
  # 0.31.0 (2025-07-07)
7
29
 
8
30
 
package/README.md CHANGED
@@ -65,6 +65,7 @@
65
65
  | open | `boolean` | - | Управляет состоянием показан/не показан. |
66
66
  | onOpenChange | `(isOpen: boolean) => void` | - | Колбек отображения компонента. Срабатывает при изменении состояния open. |
67
67
  | widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | auto | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
68
+ | closeOnPopstate | `boolean` | - | Закрывать ли поповер при пекреходе по истории браузера |
68
69
  | trigger | enum Trigger: `"click"`, `"hover"`, `"focusVisible"`, `"focus"`, `"hoverAndFocusVisible"`, `"hoverAndFocus"`, `"clickAndFocusVisible"` | - | Условие отображения поповера: <br> - `click` - открывать по клику <br> - `hover` - открывать по ховеру <br> - `focusVisible` - открывать по focus-visible <br> - `focus` - открывать по фокусу <br> - `hoverAndFocusVisible` - открывать по ховеру и focus-visible <br> - `hoverAndFocus` - открывать по ховеру и фокусу <br> - `clickAndFocusVisible` - открывать по клику и focus-visible |
69
70
  | placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | top | Положение поповера относительно своего триггера (children). |
70
71
  | className | `string` | - | CSS-класс |
@@ -1,2 +1,2 @@
1
1
  import { DroplistProps } from '../types';
2
- export declare function Droplist({ items: itemsProp, search, pinBottom: pinBottomProp, pinTop: pinTopProp, footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, open: openProp, onOpenChange, collapse, triggerClassName, selection, contentRender, size, marker, closeDroplistOnItemClick, className, listRef: listRefProp, untouchableScrollbars, virtualized, ...props }: DroplistProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function Droplist({ items: itemsProp, search, pinBottom: pinBottomProp, pinTop: pinTopProp, footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, open: openProp, onOpenChange, collapse, triggerClassName, selection, contentRender, size, marker, closeDroplistOnItemClick, className, listRef: listRefProp, untouchableScrollbars, virtualized, closeOnPopstate, ...props }: DroplistProps): import("react/jsx-runtime").JSX.Element;
@@ -54,9 +54,10 @@ function Droplist(_a) {
54
54
  className,
55
55
  listRef: listRefProp,
56
56
  untouchableScrollbars = false,
57
- virtualized = false
57
+ virtualized = false,
58
+ closeOnPopstate
58
59
  } = _a,
59
- props = __rest(_a, ["items", "search", "pinBottom", "pinTop", "footerActiveElementsRefs", "children", "trigger", "placement", "widthStrategy", "triggerElemRef", "open", "onOpenChange", "collapse", "triggerClassName", "selection", "contentRender", "size", "marker", "closeDroplistOnItemClick", "className", "listRef", "untouchableScrollbars", "virtualized"]);
60
+ props = __rest(_a, ["items", "search", "pinBottom", "pinTop", "footerActiveElementsRefs", "children", "trigger", "placement", "widthStrategy", "triggerElemRef", "open", "onOpenChange", "collapse", "triggerClassName", "selection", "contentRender", "size", "marker", "closeDroplistOnItemClick", "className", "listRef", "untouchableScrollbars", "virtualized", "closeOnPopstate"]);
60
61
  const hasSearch = (0, react_1.useMemo)(() => Boolean(search), [search]);
61
62
  const [openCollapseItems = [], setOpenCollapsedItems] = (0, utils_1.useValueControl)(collapse);
62
63
  const toggleOpenCollapseItem = (0, react_1.useCallback)(id => setOpenCollapsedItems(items => (items === null || items === void 0 ? void 0 : items.includes(id)) ? items.filter(item => item !== id) : (items !== null && items !== void 0 ? items : []).concat([id])), [setOpenCollapsedItems]);
@@ -262,6 +263,7 @@ function Droplist(_a) {
262
263
  triggerRef: !triggerElemRefProp ? triggerElemRef : isValid && triggerElemRefProp || undefined,
263
264
  open: open,
264
265
  onOpenChange: handleOpenChange,
266
+ closeOnPopstate: closeOnPopstate,
265
267
  children: triggerElem
266
268
  })
267
269
  })
@@ -245,7 +245,7 @@ exports.ListPrivate = (0, react_1.forwardRef)((_a, ref) => {
245
245
  [styles_module_scss_1.default.scrollContainerL]: scroll && limitedScrollHeight && size === 'l'
246
246
  }, scrollContainerClassName),
247
247
  barHideStrategy: barHideStrategy,
248
- size: size === 's' ? 's' : 'm',
248
+ size: 's',
249
249
  ref: (0, merge_refs_1.default)(innerScrollRef, scrollContainerRef),
250
250
  untouchableScrollbars: untouchableScrollbars,
251
251
  onScroll: onScroll,
@@ -1,2 +1,2 @@
1
1
  import { DroplistProps } from '../types';
2
- export declare function Droplist({ items: itemsProp, search, pinBottom: pinBottomProp, pinTop: pinTopProp, footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, open: openProp, onOpenChange, collapse, triggerClassName, selection, contentRender, size, marker, closeDroplistOnItemClick, className, listRef: listRefProp, untouchableScrollbars, virtualized, ...props }: DroplistProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function Droplist({ items: itemsProp, search, pinBottom: pinBottomProp, pinTop: pinTopProp, footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, open: openProp, onOpenChange, collapse, triggerClassName, selection, contentRender, size, marker, closeDroplistOnItemClick, className, listRef: listRefProp, untouchableScrollbars, virtualized, closeOnPopstate, ...props }: DroplistProps): import("react/jsx-runtime").JSX.Element;
@@ -23,7 +23,7 @@ import { ListPrivate } from '../ListPrivate';
23
23
  import styles from '../styles.module.css';
24
24
  const DEFAULT_FALLBACK_PLACEMENTS = ['top', 'right', 'bottom', 'left'];
25
25
  export function Droplist(_a) {
26
- var { items: itemsProp, search, pinBottom: pinBottomProp = [], pinTop: pinTopProp = [], footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, open: openProp, onOpenChange, collapse = {}, triggerClassName, selection, contentRender, size = 's', marker = true, closeDroplistOnItemClick = false, className, listRef: listRefProp, untouchableScrollbars = false, virtualized = false } = _a, props = __rest(_a, ["items", "search", "pinBottom", "pinTop", "footerActiveElementsRefs", "children", "trigger", "placement", "widthStrategy", "triggerElemRef", "open", "onOpenChange", "collapse", "triggerClassName", "selection", "contentRender", "size", "marker", "closeDroplistOnItemClick", "className", "listRef", "untouchableScrollbars", "virtualized"]);
26
+ var { items: itemsProp, search, pinBottom: pinBottomProp = [], pinTop: pinTopProp = [], footerActiveElementsRefs, children, trigger, placement, widthStrategy, triggerElemRef: triggerElemRefProp, open: openProp, onOpenChange, collapse = {}, triggerClassName, selection, contentRender, size = 's', marker = true, closeDroplistOnItemClick = false, className, listRef: listRefProp, untouchableScrollbars = false, virtualized = false, closeOnPopstate } = _a, props = __rest(_a, ["items", "search", "pinBottom", "pinTop", "footerActiveElementsRefs", "children", "trigger", "placement", "widthStrategy", "triggerElemRef", "open", "onOpenChange", "collapse", "triggerClassName", "selection", "contentRender", "size", "marker", "closeDroplistOnItemClick", "className", "listRef", "untouchableScrollbars", "virtualized", "closeOnPopstate"]);
27
27
  const hasSearch = useMemo(() => Boolean(search), [search]);
28
28
  const [openCollapseItems = [], setOpenCollapsedItems] = useValueControl(collapse);
29
29
  const toggleOpenCollapseItem = useCallback((id) => setOpenCollapsedItems((items) => (items === null || items === void 0 ? void 0 : items.includes(id)) ? items.filter(item => item !== id) : (items !== null && items !== void 0 ? items : []).concat([id])), [setOpenCollapsedItems]);
@@ -146,5 +146,5 @@ export function Droplist(_a) {
146
146
  }, children: _jsx(Dropdown, { content: _jsx("div", { className: cn(styles.wrapper, className), children: _jsx(ListPrivate, Object.assign({}, props, { items: memorizedItems.items.focusCloseChildIds, pinTop: memorizedItems.pinTop.focusCloseChildIds, pinBottom: memorizedItems.pinBottom.focusCloseChildIds, virtualized: virtualized, onKeyDown: handleListKeyDown, searchItem: searchItem, tabIndex: 0, ref: mergeRefs(listRef, listRefProp), search: search, onFocus: e => {
147
147
  e.stopPropagation();
148
148
  forceUpdateActiveItemId === null || forceUpdateActiveItemId === void 0 ? void 0 : forceUpdateActiveItemId(ids[0]);
149
- }, limitedScrollHeight: true, untouchableScrollbars: untouchableScrollbars })) }), outsideClick: true, triggerClassName: triggerClassName, fallbackPlacements: DEFAULT_FALLBACK_PLACEMENTS, trigger: trigger, placement: placement, widthStrategy: widthStrategy, triggerRef: !triggerElemRefProp ? triggerElemRef : (isValid && triggerElemRefProp) || undefined, open: open, onOpenChange: handleOpenChange, children: triggerElem }) }) }) }) })) }));
149
+ }, limitedScrollHeight: true, untouchableScrollbars: untouchableScrollbars })) }), outsideClick: true, triggerClassName: triggerClassName, fallbackPlacements: DEFAULT_FALLBACK_PLACEMENTS, trigger: trigger, placement: placement, widthStrategy: widthStrategy, triggerRef: !triggerElemRefProp ? triggerElemRef : (isValid && triggerElemRefProp) || undefined, open: open, onOpenChange: handleOpenChange, closeOnPopstate: closeOnPopstate, children: triggerElem }) }) }) }) })) }));
150
150
  }
@@ -139,7 +139,7 @@ export const ListPrivate = forwardRef((_a, ref) => {
139
139
  [commonStyles.scrollContainerS]: scroll && limitedScrollHeight && size === 's',
140
140
  [commonStyles.scrollContainerM]: scroll && limitedScrollHeight && size === 'm',
141
141
  [commonStyles.scrollContainerL]: scroll && limitedScrollHeight && size === 'l',
142
- }, scrollContainerClassName), barHideStrategy: barHideStrategy, size: size === 's' ? 's' : 'm', ref: mergeRefs(innerScrollRef, scrollContainerRef), untouchableScrollbars: untouchableScrollbars, onScroll: onScroll, onInitialized: onScrollInitialized, children: [content, _jsx("div", { className: styles.scrollStub, ref: scrollRef })] })) : (_jsx(_Fragment, { children: content })), Number(pinBottom === null || pinBottom === void 0 ? void 0 : pinBottom.length) > 0 && _jsx(PinBottomGroupItem, { children: itemsPinBottomJSX }), footer && (_jsx("div", { className: styles.footer, onFocus: stopPropagation, children: footer }))] })));
142
+ }, scrollContainerClassName), barHideStrategy: barHideStrategy, size: 's', ref: mergeRefs(innerScrollRef, scrollContainerRef), untouchableScrollbars: untouchableScrollbars, onScroll: onScroll, onInitialized: onScrollInitialized, children: [content, _jsx("div", { className: styles.scrollStub, ref: scrollRef })] })) : (_jsx(_Fragment, { children: content })), Number(pinBottom === null || pinBottom === void 0 ? void 0 : pinBottom.length) > 0 && _jsx(PinBottomGroupItem, { children: itemsPinBottomJSX }), footer && (_jsx("div", { className: styles.footer, onFocus: stopPropagation, children: footer }))] })));
143
143
  if (!nested) {
144
144
  return listJSX;
145
145
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "List",
7
- "version": "0.31.0",
7
+ "version": "0.31.2",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -54,5 +54,5 @@
54
54
  "peerDependencies": {
55
55
  "@snack-uikit/locale": "*"
56
56
  },
57
- "gitHead": "9e08a5c61a90e739f44ba128242a95d866452dc0"
57
+ "gitHead": "e25c748c1a490abfd80ba40b9ef26c077080af29"
58
58
  }
@@ -45,6 +45,7 @@ export function Droplist({
45
45
  listRef: listRefProp,
46
46
  untouchableScrollbars = false,
47
47
  virtualized = false,
48
+ closeOnPopstate,
48
49
  ...props
49
50
  }: DroplistProps) {
50
51
  const hasSearch = useMemo(() => Boolean(search), [search]);
@@ -267,6 +268,7 @@ export function Droplist({
267
268
  triggerRef={!triggerElemRefProp ? triggerElemRef : (isValid && triggerElemRefProp) || undefined}
268
269
  open={open}
269
270
  onOpenChange={handleOpenChange}
271
+ closeOnPopstate={closeOnPopstate}
270
272
  >
271
273
  {triggerElem}
272
274
  </Dropdown>
@@ -277,7 +277,7 @@ export const ListPrivate = forwardRef(
277
277
  scrollContainerClassName,
278
278
  )}
279
279
  barHideStrategy={barHideStrategy}
280
- size={size === 's' ? 's' : 'm'}
280
+ size={ 's' }
281
281
  ref={mergeRefs(innerScrollRef, scrollContainerRef)}
282
282
  untouchableScrollbars={untouchableScrollbars}
283
283
  onScroll={onScroll}