@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 +11 -0
- package/README.md +2 -0
- package/dist/components/Items/NextListItem/NextListItem.d.ts +1 -1
- package/dist/components/Items/NextListItem/NextListItem.js +2 -2
- package/dist/components/Lists/Droplist/DropList.d.ts +1 -1
- package/dist/components/Lists/Droplist/DropList.js +2 -2
- package/dist/components/Lists/ListPrivate/ListPrivate.js +2 -2
- package/dist/types.d.ts +2 -0
- package/package.json +2 -2
- package/src/components/Items/NextListItem/NextListItem.tsx +2 -0
- package/src/components/Lists/Droplist/DropList.tsx +2 -0
- package/src/components/Lists/ListPrivate/ListPrivate.tsx +2 -0
- package/src/types.ts +2 -0
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.
|
|
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": "
|
|
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
|
};
|