@snack-uikit/list 0.15.3 → 0.16.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 CHANGED
@@ -3,6 +3,17 @@
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.16.0 (2024-08-21)
7
+
8
+
9
+ ### Features
10
+
11
+ * **DPS-13067:** pass untouchableScrollbars prop ([0f7ac6d](https://github.com/cloud-ru-tech/snack-uikit/commit/0f7ac6d42ba8064cddebe8a70cfa9bf32ea7eaa8))
12
+
13
+
14
+
15
+
16
+
6
17
  ## 0.15.3 (2024-08-14)
7
18
 
8
19
  ### Only dependencies have been changed
package/README.md CHANGED
@@ -81,6 +81,7 @@
81
81
  | scroll | `boolean` | - | Включить ли скролл для основной части списка |
82
82
  | scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
83
83
  | scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
84
+ | untouchableScrollbars | `boolean` | - | Отключает возможность взаимодействовать со скролбарами мышью. |
84
85
  | onScroll | `(event?: Event) => void` | - | Колбек на скролл прокручиваемого списка |
85
86
  | dataFiltered | `boolean` | - | |
86
87
  | dataError | `boolean` | - | |
@@ -109,6 +110,7 @@
109
110
  | scroll | `boolean` | - | Включить ли скролл для основной части списка |
110
111
  | scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
111
112
  | scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
113
+ | untouchableScrollbars | `boolean` | - | Отключает возможность взаимодействовать со скролбарами мышью. |
112
114
  | onScroll | `(event?: Event) => void` | - | Колбек на скролл прокручиваемого списка |
113
115
  | dataFiltered | `boolean` | - | |
114
116
  | dataError | `boolean` | - | |
@@ -2,5 +2,5 @@ import { CommonFlattenProps, FlattenNextListItem, ItemId } from '../types';
2
2
  type NextListItemProps = Omit<FlattenNextListItem, 'type'> & CommonFlattenProps & {
3
3
  focusId?: ItemId;
4
4
  };
5
- export declare function NextListItem({ items, placement, id, scroll, scrollRef, disabled, onSublistOpenChanged, allChildIds, loading, focusId, ...option }: NextListItemProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function NextListItem({ items, placement, id, scroll, scrollRef, disabled, onSublistOpenChanged, allChildIds, loading, focusId, untouchableScrollbars, ...option }: NextListItemProps): import("react/jsx-runtime").JSX.Element;
6
6
  export {};
@@ -20,7 +20,7 @@ import { useGroupItemSelection } from '../hooks';
20
20
  import { extractActiveItems, isNextListItem } from '../utils';
21
21
  import { FALLBACK_PLACEMENTS } from './constants';
22
22
  export function NextListItem(_a) {
23
- var { items, placement = 'right-start', id, scroll, scrollRef, disabled, onSublistOpenChanged, allChildIds, loading = false, focusId = id } = _a, option = __rest(_a, ["items", "placement", "id", "scroll", "scrollRef", "disabled", "onSublistOpenChanged", "allChildIds", "loading", "focusId"]);
23
+ var { items, placement = 'right-start', id, scroll, scrollRef, disabled, onSublistOpenChanged, allChildIds, loading = false, focusId = id, untouchableScrollbars = false } = _a, option = __rest(_a, ["items", "placement", "id", "scroll", "scrollRef", "disabled", "onSublistOpenChanged", "allChildIds", "loading", "focusId", "untouchableScrollbars"]);
24
24
  const { flattenItems, focusFlattenItems } = useNewListContext();
25
25
  const { isSelectionMultiple } = useSelectionContext();
26
26
  const { openCollapseItems = [] } = useCollapseContext();
@@ -64,7 +64,7 @@ export function NextListItem(_a) {
64
64
  return (_jsx(Dropdown, { outsideClick: handleOutsideClick, fallbackPlacements: FALLBACK_PLACEMENTS, content: _jsx(ListPrivate, { onKeyDown: handleListKeyDown, items: items, nested: true, scroll: scroll, tabIndex: 0, ref: listRef, onFocus: e => {
65
65
  e.stopPropagation();
66
66
  forceUpdateActiveItemId === null || forceUpdateActiveItemId === void 0 ? void 0 : forceUpdateActiveItemId(ids[0]);
67
- }, scrollRef: scrollRef, limitedScrollHeight: true, loading: loading }), trigger: 'hover', open: isOpen || open, onOpenChange: value => {
67
+ }, scrollRef: scrollRef, limitedScrollHeight: true, untouchableScrollbars: untouchableScrollbars, loading: loading }), trigger: 'hover', open: isOpen || open, onOpenChange: value => {
68
68
  setOpen(value);
69
69
  onSublistOpenChanged === null || onSublistOpenChanged === void 0 ? void 0 : onSublistOpenChanged(value, id);
70
70
  }, placement: placement, widthStrategy: 'auto', children: _jsx(BaseItem, Object.assign({}, option, { disabled: disabled, open: open, expandIcon: _jsx(ChevronRightSVG, {}), id: id, isParentNode: true, indeterminate: indeterminate, checked: checked, onOpenNestedList: () => {
@@ -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, ...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, ...props }: DroplistProps): import("react/jsx-runtime").JSX.Element;
@@ -22,7 +22,7 @@ import { ListPrivate } from '../ListPrivate';
22
22
  import styles from '../styles.module.css';
23
23
  const DEFAULT_FALLBACK_PLACEMENTS = ['top', 'right', 'bottom', 'left'];
24
24
  export function Droplist(_a) {
25
- 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 } = _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"]);
25
+ 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 } = _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"]);
26
26
  const hasSearch = useMemo(() => Boolean(search), [search]);
27
27
  const [openCollapseItems = [], setOpenCollapsedItems] = useValueControl(collapse);
28
28
  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]);
@@ -130,5 +130,5 @@ export function Droplist(_a) {
130
130
  }, 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, onKeyDown: handleListKeyDown, searchItem: searchItem, tabIndex: 0, ref: mergeRefs(listRef, listRefProp), search: search, onFocus: e => {
131
131
  e.stopPropagation();
132
132
  forceUpdateActiveItemId === null || forceUpdateActiveItemId === void 0 ? void 0 : forceUpdateActiveItemId(ids[0]);
133
- }, limitedScrollHeight: true })) }), 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 }) }) }) }) })) }));
133
+ }, 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 }) }) }) }) })) }));
134
134
  }
@@ -21,7 +21,7 @@ import { useNewListContext } from '../contexts';
21
21
  import commonStyles from '../styles.module.css';
22
22
  import styles from './styles.module.css';
23
23
  export const ListPrivate = forwardRef((_a, ref) => {
24
- var { items, pinTop, pinBottom, onKeyDown, onBlur, onFocus, tabIndex, active, scroll, nested, search, searchItem, scrollRef, scrollContainerRef, onScroll, footer, loading, limitedScrollHeight, className, noDataState, noResultsState, errorDataState, dataError, dataFiltered } = _a, props = __rest(_a, ["items", "pinTop", "pinBottom", "onKeyDown", "onBlur", "onFocus", "tabIndex", "active", "scroll", "nested", "search", "searchItem", "scrollRef", "scrollContainerRef", "onScroll", "footer", "loading", "limitedScrollHeight", "className", "noDataState", "noResultsState", "errorDataState", "dataError", "dataFiltered"]);
24
+ var { items, pinTop, pinBottom, onKeyDown, onBlur, onFocus, tabIndex, active, scroll, nested, search, searchItem, scrollRef, scrollContainerRef, onScroll, footer, loading, limitedScrollHeight, untouchableScrollbars, className, noDataState, noResultsState, errorDataState, dataError, dataFiltered } = _a, props = __rest(_a, ["items", "pinTop", "pinBottom", "onKeyDown", "onBlur", "onFocus", "tabIndex", "active", "scroll", "nested", "search", "searchItem", "scrollRef", "scrollContainerRef", "onScroll", "footer", "loading", "limitedScrollHeight", "untouchableScrollbars", "className", "noDataState", "noResultsState", "errorDataState", "dataError", "dataFiltered"]);
25
25
  const { size = 's' } = useNewListContext();
26
26
  const itemsJSX = useRenderItems(items);
27
27
  const itemsPinTopJSX = useRenderItems(pinTop);
@@ -34,7 +34,7 @@ export const ListPrivate = forwardRef((_a, ref) => {
34
34
  [commonStyles.scrollContainerS]: scroll && limitedScrollHeight && size === 's',
35
35
  [commonStyles.scrollContainerM]: scroll && limitedScrollHeight && size === 'm',
36
36
  [commonStyles.scrollContainerL]: scroll && limitedScrollHeight && size === 'l',
37
- }), barHideStrategy: 'never', size: size === 's' ? 's' : 'm', ref: scrollContainerRef, onScroll: onScroll, 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: e => e.stopPropagation(), children: footer }))] })));
37
+ }), barHideStrategy: 'never', size: size === 's' ? 's' : 'm', ref: scrollContainerRef, untouchableScrollbars: untouchableScrollbars, onScroll: onScroll, 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: e => e.stopPropagation(), children: footer }))] })));
38
38
  if (!nested) {
39
39
  return listJSX;
40
40
  }
package/dist/types.d.ts CHANGED
@@ -13,6 +13,8 @@ export type ScrollProps = {
13
13
  scrollRef?: RefObject<HTMLElement>;
14
14
  /** Ссылка на контейнер, который скроллится */
15
15
  scrollContainerRef?: RefObject<HTMLElement>;
16
+ /** Отключает возможность взаимодействовать со скролбарами мышью. */
17
+ untouchableScrollbars?: boolean;
16
18
  /** Колбек на скролл прокручиваемого списка */
17
19
  onScroll?: OriginalScrollProps['onScroll'];
18
20
  };
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "List",
7
- "version": "0.15.3",
7
+ "version": "0.16.0",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -49,5 +49,5 @@
49
49
  "peerDependencies": {
50
50
  "@snack-uikit/locale": "*"
51
51
  },
52
- "gitHead": "4b0115dd4accdaf26fcd86248ec1ac8e78ac41a5"
52
+ "gitHead": "f28082de935a68b3cd19966d62b18ad6b98f4197"
53
53
  }
@@ -24,6 +24,7 @@ export function NextListItem({
24
24
  allChildIds,
25
25
  loading = false,
26
26
  focusId = id,
27
+ untouchableScrollbars = false,
27
28
  ...option
28
29
  }: NextListItemProps) {
29
30
  const { flattenItems, focusFlattenItems } = useNewListContext();
@@ -104,6 +105,7 @@ export function NextListItem({
104
105
  }}
105
106
  scrollRef={scrollRef}
106
107
  limitedScrollHeight
108
+ untouchableScrollbars={untouchableScrollbars}
107
109
  loading={loading}
108
110
  />
109
111
  }
@@ -42,6 +42,7 @@ export function Droplist({
42
42
  closeDroplistOnItemClick = false,
43
43
  className,
44
44
  listRef: listRefProp,
45
+ untouchableScrollbars = false,
45
46
  ...props
46
47
  }: DroplistProps) {
47
48
  const hasSearch = useMemo(() => Boolean(search), [search]);
@@ -233,6 +234,7 @@ export function Droplist({
233
234
  forceUpdateActiveItemId?.(ids[0]);
234
235
  }}
235
236
  limitedScrollHeight
237
+ untouchableScrollbars={untouchableScrollbars}
236
238
  />
237
239
  </div>
238
240
  }
@@ -33,6 +33,7 @@ export const ListPrivate = forwardRef(
33
33
  footer,
34
34
  loading,
35
35
  limitedScrollHeight,
36
+ untouchableScrollbars,
36
37
  className,
37
38
  noDataState,
38
39
  noResultsState,
@@ -117,6 +118,7 @@ export const ListPrivate = forwardRef(
117
118
  barHideStrategy='never'
118
119
  size={size === 's' ? 's' : 'm'}
119
120
  ref={scrollContainerRef}
121
+ untouchableScrollbars={untouchableScrollbars}
120
122
  onScroll={onScroll}
121
123
  >
122
124
  {content}
package/src/types.ts CHANGED
@@ -16,6 +16,8 @@ export type ScrollProps = {
16
16
  scrollRef?: RefObject<HTMLElement>;
17
17
  /** Ссылка на контейнер, который скроллится */
18
18
  scrollContainerRef?: RefObject<HTMLElement>;
19
+ /** Отключает возможность взаимодействовать со скролбарами мышью. */
20
+ untouchableScrollbars?: boolean;
19
21
  /** Колбек на скролл прокручиваемого списка */
20
22
  onScroll?: OriginalScrollProps['onScroll'];
21
23
  };