@ozen-ui/kit 0.16.0 → 0.17.0-canary.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/__inner__/cjs/components/DataList/DataList.css +19 -46
- package/__inner__/cjs/components/DataList/DataList.js +101 -40
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/DataListCheckIcon.css +13 -0
- package/__inner__/cjs/components/{Select/components/SelectCheckIcon/SelectCheckIcon.d.ts → DataList/components/DataListCheckIcon/DataListCheckIcon.d.ts} +2 -2
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/DataListCheckIcon.js +16 -0
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/index.d.ts +1 -0
- package/__inner__/cjs/components/DataList/components/DataListCheckIcon/index.js +4 -0
- package/__inner__/cjs/components/DataList/components/DataListOption/DataListOption.css +20 -0
- package/__inner__/{esm/components/DataList/components → cjs/components/DataList/components/DataListOption}/DataListOption.d.ts +15 -4
- package/__inner__/cjs/components/DataList/components/DataListOption/DataListOption.js +39 -0
- package/__inner__/cjs/components/DataList/components/DataListOption/index.d.ts +1 -0
- package/__inner__/cjs/components/{Select/components/SelectCheckIcon → DataList/components/DataListOption}/index.js +1 -1
- package/__inner__/cjs/components/DataList/constants.d.ts +1 -0
- package/__inner__/cjs/components/DataList/constants.js +3 -1
- package/__inner__/cjs/components/DataList/helpers/index.d.ts +4 -0
- package/__inner__/cjs/components/DataList/helpers/index.js +7 -0
- package/__inner__/cjs/components/DataList/helpers/lastSelectedValue.d.ts +1 -0
- package/__inner__/cjs/components/DataList/helpers/lastSelectedValue.js +8 -0
- package/__inner__/cjs/components/DataList/helpers/types.d.ts +10 -0
- package/__inner__/cjs/components/DataList/helpers/types.js +7 -0
- package/__inner__/cjs/components/DataList/helpers/useDataListNavigation.d.ts +23 -0
- package/__inner__/cjs/components/DataList/helpers/useDataListNavigation.js +85 -0
- package/__inner__/cjs/components/DataList/helpers/useScrollContainerToElement.d.ts +3 -0
- package/__inner__/cjs/components/DataList/helpers/useScrollContainerToElement.js +15 -0
- package/__inner__/cjs/components/DataList/types.d.ts +3 -4
- package/__inner__/cjs/components/DataList/types.js +0 -5
- package/__inner__/cjs/components/FieldControl/FieldControl.js +1 -0
- package/__inner__/cjs/components/IconButton/IconButton.css +1 -1
- package/__inner__/cjs/components/Input/Input.js +1 -1
- package/__inner__/cjs/components/Input/types.d.ts +3 -2
- package/__inner__/cjs/components/Select/Select.css +33 -128
- package/__inner__/cjs/components/Select/Select.d.ts +2 -3
- package/__inner__/cjs/components/Select/Select.js +92 -80
- package/__inner__/cjs/components/Select/components/SelectConsumer/SelectInputConsumer.d.ts +5 -0
- package/__inner__/cjs/components/Select/components/SelectConsumer/SelectInputConsumer.js +21 -0
- package/__inner__/cjs/components/Select/components/SelectConsumer/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/SelectConsumer/index.js +4 -0
- package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.d.ts +1 -72
- package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.js +23 -22
- package/__inner__/cjs/components/Select/components/SelectInput/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/SelectInput/index.js +1 -0
- package/__inner__/cjs/components/Select/components/SelectInput/types.d.ts +89 -0
- package/__inner__/cjs/components/Select/components/SelectInput/types.js +2 -0
- package/__inner__/cjs/components/Select/components/index.d.ts +0 -1
- package/__inner__/cjs/components/Select/components/index.js +0 -1
- package/__inner__/cjs/components/Select/constants.d.ts +1 -1
- package/__inner__/cjs/components/Select/constants.js +2 -2
- package/__inner__/cjs/components/Select/helpers/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/helpers/index.js +4 -0
- package/__inner__/cjs/components/Select/helpers/types.d.ts +8 -0
- package/__inner__/cjs/components/Select/helpers/types.js +7 -0
- package/__inner__/cjs/components/Select/index.d.ts +2 -1
- package/__inner__/cjs/components/Select/index.js +5 -4
- package/__inner__/cjs/components/Select/types.d.ts +31 -18
- package/__inner__/cjs/components/Textarea/Textarea.js +1 -1
- package/__inner__/cjs/components/Textarea/types.d.ts +2 -2
- package/__inner__/cjs/utils/scrollContainerToElement.d.ts +3 -4
- package/__inner__/esm/components/DataList/DataList.css +19 -46
- package/__inner__/esm/components/DataList/DataList.js +101 -40
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/DataListCheckIcon.css +13 -0
- package/__inner__/esm/components/{Select/components/SelectCheckIcon/SelectCheckIcon.d.ts → DataList/components/DataListCheckIcon/DataListCheckIcon.d.ts} +2 -2
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/DataListCheckIcon.js +11 -0
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/index.d.ts +1 -0
- package/__inner__/esm/components/DataList/components/DataListCheckIcon/index.js +1 -0
- package/__inner__/esm/components/DataList/components/DataListOption/DataListOption.css +20 -0
- package/__inner__/{cjs/components/DataList/components → esm/components/DataList/components/DataListOption}/DataListOption.d.ts +15 -4
- package/__inner__/esm/components/DataList/components/DataListOption/DataListOption.js +36 -0
- package/__inner__/esm/components/DataList/components/DataListOption/index.d.ts +1 -0
- package/__inner__/esm/components/DataList/components/DataListOption/index.js +1 -0
- package/__inner__/esm/components/DataList/constants.d.ts +1 -0
- package/__inner__/esm/components/DataList/constants.js +2 -0
- package/__inner__/esm/components/DataList/helpers/index.d.ts +4 -0
- package/__inner__/esm/components/DataList/helpers/index.js +4 -0
- package/__inner__/esm/components/DataList/helpers/lastSelectedValue.d.ts +1 -0
- package/__inner__/esm/components/DataList/helpers/lastSelectedValue.js +4 -0
- package/__inner__/esm/components/DataList/helpers/types.d.ts +10 -0
- package/__inner__/esm/components/DataList/helpers/types.js +2 -0
- package/__inner__/esm/components/DataList/helpers/useDataListNavigation.d.ts +23 -0
- package/__inner__/esm/components/DataList/helpers/useDataListNavigation.js +81 -0
- package/__inner__/esm/components/DataList/helpers/useScrollContainerToElement.d.ts +3 -0
- package/__inner__/esm/components/DataList/helpers/useScrollContainerToElement.js +11 -0
- package/__inner__/esm/components/DataList/types.d.ts +3 -4
- package/__inner__/esm/components/DataList/types.js +1 -2
- package/__inner__/esm/components/FieldControl/FieldControl.js +1 -0
- package/__inner__/esm/components/IconButton/IconButton.css +1 -1
- package/__inner__/esm/components/Input/Input.js +1 -1
- package/__inner__/esm/components/Input/types.d.ts +3 -2
- package/__inner__/esm/components/Select/Select.css +33 -128
- package/__inner__/esm/components/Select/Select.d.ts +2 -3
- package/__inner__/esm/components/Select/Select.js +96 -84
- package/__inner__/esm/components/Select/components/SelectConsumer/SelectInputConsumer.d.ts +5 -0
- package/__inner__/esm/components/Select/components/SelectConsumer/SelectInputConsumer.js +17 -0
- package/__inner__/esm/components/Select/components/SelectConsumer/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/SelectConsumer/index.js +1 -0
- package/__inner__/esm/components/Select/components/SelectInput/SelectInput.d.ts +1 -72
- package/__inner__/esm/components/Select/components/SelectInput/SelectInput.js +25 -24
- package/__inner__/esm/components/Select/components/SelectInput/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/SelectInput/index.js +1 -0
- package/__inner__/esm/components/Select/components/SelectInput/types.d.ts +89 -0
- package/__inner__/esm/components/Select/components/SelectInput/types.js +1 -0
- package/__inner__/esm/components/Select/components/index.d.ts +0 -1
- package/__inner__/esm/components/Select/components/index.js +0 -1
- package/__inner__/esm/components/Select/constants.d.ts +1 -1
- package/__inner__/esm/components/Select/constants.js +1 -1
- package/__inner__/esm/components/Select/helpers/index.d.ts +1 -0
- package/__inner__/esm/components/Select/helpers/index.js +1 -0
- package/__inner__/esm/components/Select/helpers/types.d.ts +8 -0
- package/__inner__/esm/components/Select/helpers/types.js +2 -0
- package/__inner__/esm/components/Select/index.d.ts +2 -1
- package/__inner__/esm/components/Select/index.js +2 -1
- package/__inner__/esm/components/Select/types.d.ts +31 -18
- package/__inner__/esm/components/Textarea/Textarea.js +1 -1
- package/__inner__/esm/components/Textarea/types.d.ts +2 -2
- package/__inner__/esm/utils/scrollContainerToElement.d.ts +3 -4
- package/package.json +1 -1
- package/__inner__/cjs/components/DataList/DataListProvider.d.ts +0 -16
- package/__inner__/cjs/components/DataList/DataListProvider.js +0 -11
- package/__inner__/cjs/components/DataList/components/DataListOption.js +0 -40
- package/__inner__/cjs/components/DataList/useDataListNavigation.d.ts +0 -23
- package/__inner__/cjs/components/DataList/useDataListNavigation.js +0 -109
- package/__inner__/cjs/components/Select/components/SelectCheckIcon/SelectCheckIcon.css +0 -13
- package/__inner__/cjs/components/Select/components/SelectCheckIcon/SelectCheckIcon.js +0 -14
- package/__inner__/cjs/components/Select/components/SelectCheckIcon/index.d.ts +0 -1
- package/__inner__/esm/components/DataList/DataListProvider.d.ts +0 -16
- package/__inner__/esm/components/DataList/DataListProvider.js +0 -7
- package/__inner__/esm/components/DataList/components/DataListOption.js +0 -37
- package/__inner__/esm/components/DataList/useDataListNavigation.d.ts +0 -23
- package/__inner__/esm/components/DataList/useDataListNavigation.js +0 -105
- package/__inner__/esm/components/Select/components/SelectCheckIcon/SelectCheckIcon.css +0 -13
- package/__inner__/esm/components/Select/components/SelectCheckIcon/SelectCheckIcon.js +0 -9
- package/__inner__/esm/components/Select/components/SelectCheckIcon/index.d.ts +0 -1
- package/__inner__/esm/components/Select/components/SelectCheckIcon/index.js +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
.DataList
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
.DataList {
|
|
2
|
+
--scroll-bar-size: 12px;
|
|
3
|
+
}
|
|
4
|
+
.DataList::-webkit-scrollbar {
|
|
5
5
|
inline-size: var(--scroll-bar-size);
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
.DataList::-webkit-scrollbar-thumb {
|
|
8
8
|
background-color: var(--color-background-secondary);
|
|
9
9
|
border-radius: calc(var(--scroll-bar-size) / 2);
|
|
10
10
|
border: calc(var(--scroll-bar-size) / 4) solid transparent;
|
|
@@ -12,57 +12,30 @@
|
|
|
12
12
|
border-image: initial;
|
|
13
13
|
min-block-size: 24px;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
.DataList
|
|
15
|
+
.DataList::-webkit-scrollbar-thumb:hover,
|
|
16
|
+
.DataList::-webkit-scrollbar-thumb:active {
|
|
17
17
|
border: calc(var(--scroll-bar-size) / 4) solid transparent;
|
|
18
18
|
background-clip: padding-box;
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
.DataList::-webkit-scrollbar-thumb:hover {
|
|
21
21
|
background-color: var(--color-background-secondary-hover);
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
.DataList::-webkit-scrollbar-thumb:active {
|
|
24
24
|
background-color: var(--color-background-secondary-pressed);
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
.DataList::-webkit-scrollbar-corner {
|
|
27
27
|
background: transparent;
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
.DataList {
|
|
30
|
+
overflow: hidden auto;
|
|
31
|
+
max-block-size: 40vb;
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
cursor: pointer;
|
|
35
|
-
}
|
|
36
|
-
.DataList-Option_focused {
|
|
37
|
-
box-shadow: inset var(--shadow-outline-focused);
|
|
38
|
-
}
|
|
39
|
-
.DataList-Option_highlighted {
|
|
40
|
-
background-color: var(--color-background-main-hover);
|
|
41
|
-
}
|
|
42
|
-
.DataList-Option_disabled {
|
|
43
|
-
cursor: not-allowed;
|
|
44
|
-
}
|
|
45
|
-
.DataList-Option_disabled .ListItemText-TextPrimary,
|
|
46
|
-
.DataList-Option_disabled .ListItemText-TextSecondary {
|
|
47
|
-
color: var(--color-content-tertiary);
|
|
48
|
-
}
|
|
49
|
-
.DataList-IconWrapper {
|
|
50
|
-
min-inline-size: var(--select-check-icon-size);
|
|
51
|
-
min-block-size: var(--select-check-icon-size);
|
|
52
|
-
display: flex;
|
|
53
|
-
}
|
|
54
|
-
.DataList-IconWrapper_size_s {
|
|
55
|
-
--select-check-icon-size: 16px;
|
|
56
|
-
}
|
|
57
|
-
.DataList-IconWrapper_size_m {
|
|
58
|
-
--select-check-icon-size: 24px;
|
|
59
|
-
}
|
|
60
|
-
.DataList_animation-enter {
|
|
33
|
+
.DataList-animation-enter {
|
|
61
34
|
opacity: 0;
|
|
62
35
|
transform: translate(0, calc(var(--space-s) * -1));
|
|
63
36
|
pointer-events: none;
|
|
64
37
|
}
|
|
65
|
-
.
|
|
38
|
+
.DataList-animation-enter-active {
|
|
66
39
|
opacity: 1;
|
|
67
40
|
transition:
|
|
68
41
|
opacity var(--transition-default),
|
|
@@ -70,16 +43,16 @@
|
|
|
70
43
|
transform: translate(0);
|
|
71
44
|
pointer-events: none;
|
|
72
45
|
}
|
|
73
|
-
.
|
|
46
|
+
.DataList-animation-enter-done {
|
|
74
47
|
opacity: 1;
|
|
75
48
|
transform: translate(0);
|
|
76
49
|
}
|
|
77
|
-
.
|
|
50
|
+
.DataList-animation-exit {
|
|
78
51
|
opacity: 1;
|
|
79
52
|
transform: translate(0);
|
|
80
53
|
pointer-events: none;
|
|
81
54
|
}
|
|
82
|
-
.
|
|
55
|
+
.DataList-animation-exit-active {
|
|
83
56
|
opacity: 0;
|
|
84
57
|
transition:
|
|
85
58
|
opacity var(--transition-default),
|
|
@@ -87,7 +60,7 @@
|
|
|
87
60
|
transform: translate(0, calc(var(--space-s) * -1));
|
|
88
61
|
pointer-events: none;
|
|
89
62
|
}
|
|
90
|
-
.
|
|
63
|
+
.DataList-animation-exit-done {
|
|
91
64
|
opacity: 0;
|
|
92
65
|
transform: translate(0, calc(var(--space-s) * -1));
|
|
93
66
|
pointer-events: none;
|
|
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DataList = exports.cnDataList = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
require("./DataList.css");
|
|
6
|
-
var react_1 = tslib_1.
|
|
6
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
var react_is_1 = require("react-is");
|
|
7
8
|
var useBoolean_1 = require("../../hooks/useBoolean");
|
|
8
9
|
var useControlled_1 = require("../../hooks/useControlled");
|
|
9
10
|
var useEventListener_1 = require("../../hooks/useEventListener");
|
|
@@ -15,58 +16,88 @@ var polymorphicComponentWithRef_1 = require("../../utils/polymorphicComponentWit
|
|
|
15
16
|
var List_1 = require("../List");
|
|
16
17
|
var Popover_1 = require("../Popover");
|
|
17
18
|
var constants_1 = require("./constants");
|
|
18
|
-
var
|
|
19
|
+
var helpers_1 = require("./helpers");
|
|
19
20
|
var index_1 = require("./index");
|
|
20
|
-
var useDataListNavigation_1 = require("./useDataListNavigation");
|
|
21
21
|
exports.cnDataList = (0, classname_1.cn)('DataList');
|
|
22
22
|
var DataListRender = function (inProps, ref) {
|
|
23
23
|
var _a = (0, useThemeProps_1.useThemeProps)({ props: inProps, name: 'DataList' }), _b = _a.open, open = _b === void 0 ? constants_1.DATA_LIST_DEFAULT_OPEN : _b, _c = _a.size, size = _c === void 0 ? constants_1.DATA_LIST_DEFAULT_SIZE : _c, _d = _a.as, as = _d === void 0 ? constants_1.DATA_LIST_DEFAULT_TAG : _d, name = _a.name, children = _a.children, anchorRef = _a.anchorRef, selectedProp = _a.selected, defaultSelected = _a.defaultSelected, onClose = _a.onClose, onEnteredProp = _a.onEntered, onExitedProp = _a.onExited, listProps = _a.listProps, other = tslib_1.__rest(_a, ["open", "size", "as", "name", "children", "anchorRef", "selected", "defaultSelected", "onClose", "onEntered", "onExited", "listProps"]);
|
|
24
|
-
|
|
24
|
+
var listRef = (0, react_1.useRef)(null);
|
|
25
|
+
// Состояние представленного компонента с завершенной анимацией
|
|
25
26
|
var _e = tslib_1.__read((0, useBoolean_1.useBoolean)(false), 2), opened = _e[0], _f = _e[1], onEntered = _f.on, onExited = _f.off;
|
|
26
27
|
var _g = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
27
28
|
name: 'DataList',
|
|
28
29
|
defaultValue: defaultSelected,
|
|
29
30
|
value: selectedProp,
|
|
30
31
|
state: 'selected',
|
|
31
|
-
}), 2),
|
|
32
|
+
}), 2), selectedState = _g[0], setSelected = _g[1];
|
|
33
|
+
var nodes = (0, react_1.useMemo)(function () { return new Map(); }, [children]);
|
|
34
|
+
var resolvedChildren = (0, react_is_1.isFragment)(children)
|
|
35
|
+
? children.props.children
|
|
36
|
+
: children;
|
|
37
|
+
var isNotSelectOption = function (child) {
|
|
38
|
+
return !(0, react_1.isValidElement)(child) ||
|
|
39
|
+
child.type !== index_1.DataListOption ||
|
|
40
|
+
!!child.props.disabled;
|
|
41
|
+
};
|
|
42
|
+
react_1.Children.forEach(resolvedChildren, function (child, idx) {
|
|
43
|
+
if (!isNotSelectOption(child)) {
|
|
44
|
+
nodes.set(child.props.value, idx);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
32
47
|
var handleSelect = function (event, value) {
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
var params = {
|
|
49
|
+
multiple: inProps.multiple,
|
|
50
|
+
onSelect: inProps.onSelect,
|
|
51
|
+
selected: selectedState,
|
|
52
|
+
setSelected: setSelected,
|
|
53
|
+
};
|
|
54
|
+
if ((0, helpers_1.isMultipleParams)(params)) {
|
|
55
|
+
var selected_1 = params.selected, onSelect = params.onSelect, setSelected_1 = params.setSelected;
|
|
56
|
+
var res = (selected_1 === null || selected_1 === void 0 ? void 0 : selected_1.includes(value || ''))
|
|
57
|
+
? selected_1.filter(function (item) { return item !== value; })
|
|
58
|
+
: tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read((selected_1 || [])), false), [value], false);
|
|
59
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(event, { name: name, value: res });
|
|
60
|
+
setSelected_1(res);
|
|
41
61
|
}
|
|
42
|
-
if ((0,
|
|
43
|
-
|
|
44
|
-
|
|
62
|
+
if ((0, helpers_1.isNotMultipleParams)(params)) {
|
|
63
|
+
var onSelect = params.onSelect, setSelected_2 = params.setSelected;
|
|
64
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(event, { name: name, value: value });
|
|
65
|
+
setSelected_2(value);
|
|
45
66
|
}
|
|
46
|
-
setSelected(res || '');
|
|
47
67
|
};
|
|
48
|
-
//
|
|
49
|
-
var
|
|
50
|
-
? selected[selected.length - 1]
|
|
51
|
-
: selected;
|
|
52
|
-
var _h = (0, useDataListNavigation_1.useDataListNavigation)({
|
|
53
|
-
name: name,
|
|
68
|
+
// Навигация по списку
|
|
69
|
+
var _h = (0, helpers_1.useDataListNavigation)({
|
|
54
70
|
active: opened,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
71
|
+
items: tslib_1.__spreadArray([], tslib_1.__read(nodes.keys()), false),
|
|
72
|
+
current: (0, helpers_1.lastSelectedValue)(selectedState),
|
|
73
|
+
onSelect: function (event, item) {
|
|
74
|
+
handleSelect(event, item || '');
|
|
58
75
|
},
|
|
59
|
-
}),
|
|
60
|
-
|
|
76
|
+
}), selected = _h.selected, focused = _h.focused, highlighted = _h.highlighted, onKeyDown = _h.onKeyDown, onClick = _h.onClick, onMouseEnter = _h.onMouseEnter, onMouseLeave = _h.onMouseLeave;
|
|
77
|
+
var _j = tslib_1.__read((0, react_1.useState)({ current: null }), 2), selectedElRef = _j[0], setSelectedElRef = _j[1];
|
|
78
|
+
// Находит элемент по ключу
|
|
79
|
+
(0, react_1.useEffect)(function () {
|
|
80
|
+
var _a, _b;
|
|
81
|
+
var current = focused || selected || '';
|
|
82
|
+
var idx = nodes.get(current);
|
|
83
|
+
if (idx) {
|
|
84
|
+
setSelectedElRef({
|
|
85
|
+
current: (_b = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b[idx],
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}, [focused, selected]);
|
|
89
|
+
// Прокрутка списка
|
|
90
|
+
(0, helpers_1.useScrollContainerToElement)(listRef, selectedElRef, focused ? 'smooth' : 'instant');
|
|
91
|
+
// Назначает элементу контроля событие управления списком с клавиатуры
|
|
61
92
|
(0, useEventListener_1.useEventListener)({
|
|
62
|
-
active:
|
|
93
|
+
active: opened,
|
|
63
94
|
eventName: 'keydown',
|
|
64
95
|
element: anchorRef,
|
|
65
|
-
handler:
|
|
96
|
+
handler: function (event) {
|
|
97
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
|
98
|
+
},
|
|
66
99
|
});
|
|
67
|
-
// Закрывает список нажатию
|
|
68
|
-
// Событие focusout может не срабатывать на устройствах iOS,
|
|
69
|
-
// так как многие интерактивные элементы по клику не получают фокус.
|
|
100
|
+
// Закрывает список по нажатию на клавишу {Tab}
|
|
70
101
|
(0, useEventListener_1.useEventListener)({
|
|
71
102
|
active: open,
|
|
72
103
|
eventName: 'keydown',
|
|
@@ -77,8 +108,39 @@ var DataListRender = function (inProps, ref) {
|
|
|
77
108
|
}
|
|
78
109
|
},
|
|
79
110
|
});
|
|
111
|
+
// Представление раскрывающегося списка
|
|
112
|
+
var renderChildren = react_1.Children.map(resolvedChildren, function (child) {
|
|
113
|
+
if (isNotSelectOption(child)) {
|
|
114
|
+
return child;
|
|
115
|
+
}
|
|
116
|
+
var key = child.props.value;
|
|
117
|
+
var elementChild = child;
|
|
118
|
+
var props = {
|
|
119
|
+
onClick: function (event) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(event, key);
|
|
122
|
+
(_b = (_a = child.props).onClick) === null || _b === void 0 ? void 0 : _b.call(_a, event);
|
|
123
|
+
},
|
|
124
|
+
onMouseEnter: function (event) {
|
|
125
|
+
var _a, _b;
|
|
126
|
+
onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter(key);
|
|
127
|
+
(_b = (_a = child.props).onMouseEnter) === null || _b === void 0 ? void 0 : _b.call(_a, event);
|
|
128
|
+
},
|
|
129
|
+
onMouseLeave: function (event) {
|
|
130
|
+
var _a, _b;
|
|
131
|
+
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
|
|
132
|
+
(_b = (_a = child.props).onMouseLeave) === null || _b === void 0 ? void 0 : _b.call(_a, event);
|
|
133
|
+
},
|
|
134
|
+
highlighted: key === highlighted,
|
|
135
|
+
focused: key === focused,
|
|
136
|
+
selected: Array.isArray(selectedState)
|
|
137
|
+
? selectedState.includes(key)
|
|
138
|
+
: selectedState === key,
|
|
139
|
+
};
|
|
140
|
+
return (0, react_1.cloneElement)(elementChild, tslib_1.__assign({}, props));
|
|
141
|
+
});
|
|
80
142
|
return (react_1.default.createElement(Popover_1.Popover, tslib_1.__assign({ as: as, open: open, placement: "bottom-start", disableReturnFocus: true, disableEnforceFocus: true, offset: [0, 4], onClose: onClose, anchorRef: anchorRef, transitionProps: {
|
|
81
|
-
classNames:
|
|
143
|
+
classNames: 'DataList-animation',
|
|
82
144
|
} }, other, { onEntered: function () {
|
|
83
145
|
onEntered();
|
|
84
146
|
onEnteredProp === null || onEnteredProp === void 0 ? void 0 : onEnteredProp();
|
|
@@ -86,11 +148,10 @@ var DataListRender = function (inProps, ref) {
|
|
|
86
148
|
onExited();
|
|
87
149
|
onExitedProp === null || onExitedProp === void 0 ? void 0 : onExitedProp();
|
|
88
150
|
}, ref: ref }),
|
|
89
|
-
react_1.default.createElement(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}, ref: (0, useMultiRef_1.useMultiRef)([listRef, listProps === null || listProps === void 0 ? void 0 : listProps.ref]), className: (0, exports.cnDataList)('List', [listProps === null || listProps === void 0 ? void 0 : listProps.className]) }), children))));
|
|
151
|
+
react_1.default.createElement(List_1.List, tslib_1.__assign({ as: "ul", size: size }, listProps, { onMouseDown: function (e) {
|
|
152
|
+
var _a;
|
|
153
|
+
e.preventDefault();
|
|
154
|
+
(_a = listProps === null || listProps === void 0 ? void 0 : listProps.onMouseDown) === null || _a === void 0 ? void 0 : _a.call(listProps, e);
|
|
155
|
+
}, ref: (0, useMultiRef_1.useMultiRef)([listRef, listProps === null || listProps === void 0 ? void 0 : listProps.ref]), className: (0, exports.cnDataList)('', [listProps === null || listProps === void 0 ? void 0 : listProps.className]) }), renderChildren)));
|
|
95
156
|
};
|
|
96
157
|
exports.DataList = (0, polymorphicComponentWithRef_1.polymorphicComponentWithRef)(DataListRender);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
.DataListCheckIcon {
|
|
2
|
+
inline-size: var(--data-list-check-icon-size);
|
|
3
|
+
block-size: var(--data-list-check-icon-size);
|
|
4
|
+
display: flex;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.DataListCheckIcon_size_s {
|
|
8
|
+
--data-list-check-icon-size: 16px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.DataListCheckIcon_size_m {
|
|
12
|
+
--data-list-check-icon-size: 24px;
|
|
13
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import './
|
|
1
|
+
import './DataListCheckIcon.css';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { type IconSize } from '@ozen-ui/icons';
|
|
4
4
|
export type SelectCheckIconProps = {
|
|
5
5
|
size?: IconSize;
|
|
6
6
|
selected?: boolean;
|
|
7
7
|
};
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const DataListCheckIcon: React.FC<SelectCheckIconProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataListCheckIcon = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
require("./DataListCheckIcon.css");
|
|
6
|
+
var react_1 = tslib_1.__importDefault(require("react"));
|
|
7
|
+
var icons_1 = require("@ozen-ui/icons");
|
|
8
|
+
var classname_1 = require("../../../../utils/classname");
|
|
9
|
+
var List_1 = require("../../../List");
|
|
10
|
+
var cnDataListCheckIcon = (0, classname_1.cn)('DataListCheckIcon');
|
|
11
|
+
var DataListCheckIcon = function (_a) {
|
|
12
|
+
var size = _a.size, selected = _a.selected;
|
|
13
|
+
return (react_1.default.createElement("div", { className: cnDataListCheckIcon('', { size: size }) }, selected && (react_1.default.createElement(List_1.ListItemIcon, null,
|
|
14
|
+
react_1.default.createElement(icons_1.TickIcon, { size: size })))));
|
|
15
|
+
};
|
|
16
|
+
exports.DataListCheckIcon = DataListCheckIcon;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DataListCheckIcon';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.DataListOption {
|
|
2
|
+
cursor: pointer;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.DataListOption_focused {
|
|
6
|
+
box-shadow: inset var(--shadow-outline-focused);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.DataListOption_highlighted {
|
|
10
|
+
background-color: var(--color-background-main-hover);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.DataListOption_disabled {
|
|
14
|
+
cursor: not-allowed;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.DataListOption_disabled .ListItemText-TextPrimary,
|
|
18
|
+
.DataListOption_disabled .ListItemText-TextSecondary {
|
|
19
|
+
color: var(--color-content-tertiary);
|
|
20
|
+
}
|
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
import './DataListOption.css';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import type { KeyboardEventHandler, MouseEventHandler, ReactNode, ComponentPropsWithRef } from 'react';
|
|
4
|
+
import type { DATA_LIST_OPTION_DEFAULT_TAG } from '../../constants';
|
|
5
|
+
export declare const cnDataListOption: import("@bem-react/classname").ClassNameFormatter;
|
|
3
6
|
export type DataListOptionProps = {
|
|
7
|
+
/** Значение опции */
|
|
8
|
+
value: string | number;
|
|
9
|
+
/** Лейбл опции */
|
|
10
|
+
label?: string;
|
|
4
11
|
/** Если {true} отображает опцию заблокированной */
|
|
5
12
|
disabled?: boolean;
|
|
6
|
-
/**
|
|
7
|
-
|
|
13
|
+
/** Если {true} отображает опцию сфокусированной (клавиатура) */
|
|
14
|
+
focused?: boolean;
|
|
15
|
+
/** Если {true} отображает опцию наведенной (мышь) */
|
|
16
|
+
highlighted?: boolean;
|
|
17
|
+
/** Если {true} отображает опцию выбранной */
|
|
18
|
+
selected?: boolean;
|
|
8
19
|
/** Функция обратного вызова обработчик нажатий на клавиатуре */
|
|
9
20
|
onKeyDown?: KeyboardEventHandler<HTMLLIElement>;
|
|
10
21
|
/** Функция обратного вызова обработчик нажатий на клавиатуре */
|
|
@@ -12,6 +23,6 @@ export type DataListOptionProps = {
|
|
|
12
23
|
/** Функция обратного вызова обработчик нажатий на клавиатуре */
|
|
13
24
|
onMouseLeave?: MouseEventHandler<HTMLLIElement>;
|
|
14
25
|
/** Содержимое компонента */
|
|
15
|
-
children
|
|
16
|
-
} & ComponentPropsWithRef<'
|
|
26
|
+
children?: ReactNode;
|
|
27
|
+
} & Omit<ComponentPropsWithRef<typeof DATA_LIST_OPTION_DEFAULT_TAG>, 'value'>;
|
|
17
28
|
export declare const DataListOption: React.ForwardRefExoticComponent<Omit<DataListOptionProps, "ref"> & React.RefAttributes<HTMLLIElement>>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataListOption = exports.cnDataListOption = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
require("./DataListOption.css");
|
|
6
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
var classname_1 = require("../../../../utils/classname");
|
|
8
|
+
var getIconSizeToFormElement_1 = require("../../../../utils/getIconSizeToFormElement");
|
|
9
|
+
var isString_1 = require("../../../../utils/isString");
|
|
10
|
+
var List_1 = require("../../../List");
|
|
11
|
+
var constants_1 = require("../../constants");
|
|
12
|
+
var DataListCheckIcon_1 = require("../DataListCheckIcon");
|
|
13
|
+
exports.cnDataListOption = (0, classname_1.cn)('DataListOption');
|
|
14
|
+
var DataListContent = function (_a) {
|
|
15
|
+
var label = _a.label, selected = _a.selected;
|
|
16
|
+
var size = (0, List_1.useListContext)().size;
|
|
17
|
+
var iconSize = (0, getIconSizeToFormElement_1.getIconSizeToFormElement)(size);
|
|
18
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
19
|
+
react_1.default.createElement(List_1.ListItemText, { className: (0, exports.cnDataListOption)('Text'), primary: label }),
|
|
20
|
+
react_1.default.createElement(DataListCheckIcon_1.DataListCheckIcon, { selected: selected, size: iconSize })));
|
|
21
|
+
};
|
|
22
|
+
exports.DataListOption = (0, react_1.forwardRef)(function (_a, ref) {
|
|
23
|
+
var _b = _a.disabled, disabled = _b === void 0 ? constants_1.DATA_LIST_OPTION_DEFAULT_DISABLED : _b, value = _a.value, label = _a.label, children = _a.children, className = _a.className, highlighted = _a.highlighted, selected = _a.selected, focused = _a.focused, other = tslib_1.__rest(_a, ["disabled", "value", "label", "children", "className", "highlighted", "selected", "focused"]);
|
|
24
|
+
var renderChildren = function () {
|
|
25
|
+
if ((0, isString_1.isString)(children)) {
|
|
26
|
+
return react_1.default.createElement(DataListContent, { label: children, selected: selected });
|
|
27
|
+
}
|
|
28
|
+
if (label && !children) {
|
|
29
|
+
return react_1.default.createElement(DataListContent, { label: label, selected: selected });
|
|
30
|
+
}
|
|
31
|
+
return children;
|
|
32
|
+
};
|
|
33
|
+
return (react_1.default.createElement(List_1.ListItem, tslib_1.__assign({ role: "option", "aria-selected": selected, "aria-disabled": disabled, "data-label": label, "data-value": value, className: (0, exports.cnDataListOption)({
|
|
34
|
+
disabled: disabled,
|
|
35
|
+
highlighted: !disabled && highlighted,
|
|
36
|
+
focused: !disabled && focused,
|
|
37
|
+
}, [className]) }, other, { ref: ref }), renderChildren()));
|
|
38
|
+
});
|
|
39
|
+
exports.DataListOption.displayName = 'DataListOption';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DataListOption';
|
|
@@ -2,3 +2,4 @@ export declare const DATA_LIST_DEFAULT_TAG: import("../../utils/polymorphicCompo
|
|
|
2
2
|
export declare const DATA_LIST_DEFAULT_SIZE = "m";
|
|
3
3
|
export declare const DATA_LIST_DEFAULT_OPEN = false;
|
|
4
4
|
export declare const DATA_LIST_OPTION_DEFAULT_DISABLED = false;
|
|
5
|
+
export declare const DATA_LIST_OPTION_DEFAULT_TAG = "li";
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DATA_LIST_OPTION_DEFAULT_DISABLED = exports.DATA_LIST_DEFAULT_OPEN = exports.DATA_LIST_DEFAULT_SIZE = exports.DATA_LIST_DEFAULT_TAG = void 0;
|
|
3
|
+
exports.DATA_LIST_OPTION_DEFAULT_TAG = exports.DATA_LIST_OPTION_DEFAULT_DISABLED = exports.DATA_LIST_DEFAULT_OPEN = exports.DATA_LIST_DEFAULT_SIZE = exports.DATA_LIST_DEFAULT_TAG = void 0;
|
|
4
|
+
var constants_1 = require("../List/constants");
|
|
4
5
|
var Paper_1 = require("../Paper");
|
|
5
6
|
exports.DATA_LIST_DEFAULT_TAG = Paper_1.Paper;
|
|
6
7
|
exports.DATA_LIST_DEFAULT_SIZE = 'm';
|
|
7
8
|
exports.DATA_LIST_DEFAULT_OPEN = false;
|
|
8
9
|
exports.DATA_LIST_OPTION_DEFAULT_DISABLED = false;
|
|
10
|
+
exports.DATA_LIST_OPTION_DEFAULT_TAG = constants_1.LIST_ITEM_DEFAULT_TAG;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./lastSelectedValue"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./types"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./useDataListNavigation"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./useScrollContainerToElement"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const lastSelectedValue: <T>(selected: T) => any;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lastSelectedValue = void 0;
|
|
4
|
+
// Фиксируем последний выбранный элемент в списке, чтобы потом переводить на него scroll в контейнере
|
|
5
|
+
var lastSelectedValue = function (selected) {
|
|
6
|
+
return Array.isArray(selected) ? selected[selected.length - 1] : selected;
|
|
7
|
+
};
|
|
8
|
+
exports.lastSelectedValue = lastSelectedValue;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DataListBaseProps, DataListSelected } from '../index';
|
|
2
|
+
export type SetSelect<MULTIPLE extends boolean> = (newValue: DataListSelected<MULTIPLE>) => void;
|
|
3
|
+
export type SelectedParams<MULTIPLE extends boolean = false> = {
|
|
4
|
+
multiple: DataListBaseProps<MULTIPLE>['multiple'];
|
|
5
|
+
onSelect: DataListBaseProps<MULTIPLE>['onSelect'];
|
|
6
|
+
selected: DataListSelected<MULTIPLE>;
|
|
7
|
+
setSelected: SetSelect<MULTIPLE>;
|
|
8
|
+
};
|
|
9
|
+
export declare const isMultipleParams: (params: SelectedParams<boolean>) => params is SelectedParams<true>;
|
|
10
|
+
export declare const isNotMultipleParams: (params: SelectedParams<boolean>) => params is SelectedParams<false>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isNotMultipleParams = exports.isMultipleParams = void 0;
|
|
4
|
+
var isMultipleParams = function (params) { return !!params.multiple; };
|
|
5
|
+
exports.isMultipleParams = isMultipleParams;
|
|
6
|
+
var isNotMultipleParams = function (params) { return !params.multiple; };
|
|
7
|
+
exports.isNotMultipleParams = isNotMultipleParams;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { MouseEvent } from 'react';
|
|
2
|
+
export type UseListNavigationItem = string | number | null;
|
|
3
|
+
export type UseListNavigationItems = UseListNavigationItem[];
|
|
4
|
+
export type UseListNavigationProps = {
|
|
5
|
+
active?: boolean;
|
|
6
|
+
items?: UseListNavigationItems;
|
|
7
|
+
current?: UseListNavigationItem;
|
|
8
|
+
onSelect?: (event: KeyboardEvent | MouseEvent<HTMLElement>, item?: UseListNavigationItem) => void;
|
|
9
|
+
};
|
|
10
|
+
export type UseListNavigationState = {
|
|
11
|
+
focused?: UseListNavigationItem;
|
|
12
|
+
selected?: UseListNavigationItem;
|
|
13
|
+
highlighted?: UseListNavigationItem;
|
|
14
|
+
};
|
|
15
|
+
export type UseListNavigationEvents = {
|
|
16
|
+
onMouseLeave?: () => void;
|
|
17
|
+
onKeyDown?: (event: KeyboardEvent) => void;
|
|
18
|
+
onClick?: (event: MouseEvent<HTMLElement>, item: UseListNavigationItem) => void;
|
|
19
|
+
onMouseEnter?: (item: UseListNavigationItem) => void;
|
|
20
|
+
};
|
|
21
|
+
export type UseListNavigationReturn = UseListNavigationState & UseListNavigationEvents;
|
|
22
|
+
/** Навигация по элементам списка без перехвата фокуса с элемента контроля */
|
|
23
|
+
export declare function useDataListNavigation({ current, onSelect, active, items: itemsProps, }: UseListNavigationProps): UseListNavigationReturn;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useDataListNavigation = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var react_1 = require("react");
|
|
6
|
+
var getNextIndex_1 = require("../../../utils/getNextIndex");
|
|
7
|
+
var getPrevIndex_1 = require("../../../utils/getPrevIndex");
|
|
8
|
+
var isKey_1 = require("../../../utils/isKey");
|
|
9
|
+
/** Навигация по элементам списка без перехвата фокуса с элемента контроля */
|
|
10
|
+
function useDataListNavigation(_a) {
|
|
11
|
+
var current = _a.current, onSelect = _a.onSelect, _b = _a.active, active = _b === void 0 ? false : _b, itemsProps = _a.items;
|
|
12
|
+
var savedItems = (0, react_1.useRef)(itemsProps);
|
|
13
|
+
var savedOnSelect = (0, react_1.useRef)();
|
|
14
|
+
(0, react_1.useEffect)(function () {
|
|
15
|
+
savedItems.current = itemsProps;
|
|
16
|
+
}, [itemsProps]);
|
|
17
|
+
(0, react_1.useEffect)(function () {
|
|
18
|
+
savedOnSelect.current = onSelect;
|
|
19
|
+
}, [onSelect]);
|
|
20
|
+
var _c = tslib_1.__read((0, react_1.useState)({}), 2), state = _c[0], setState = _c[1];
|
|
21
|
+
var findInItems = function (value) { var _a; return (_a = savedItems.current) === null || _a === void 0 ? void 0 : _a.find(function (item) { return item === value; }); };
|
|
22
|
+
// Актуализирует состояние при каждом изменении текущего значения
|
|
23
|
+
(0, react_1.useEffect)(function () {
|
|
24
|
+
if (active) {
|
|
25
|
+
setState(function (prevState) {
|
|
26
|
+
var _a, _b, _c;
|
|
27
|
+
return (tslib_1.__assign(tslib_1.__assign({}, prevState), { focused: (_a = findInItems(prevState.focused)) !== null && _a !== void 0 ? _a : null, selected: (_b = findInItems(current)) !== null && _b !== void 0 ? _b : (_c = savedItems.current) === null || _c === void 0 ? void 0 : _c[0] }));
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}, [active, current]);
|
|
31
|
+
(0, react_1.useEffect)(function () {
|
|
32
|
+
if (!active) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
// Инициализация всех событий
|
|
36
|
+
var onMouseLeave = function () {
|
|
37
|
+
setState(function (prevState) { return (tslib_1.__assign(tslib_1.__assign({}, prevState), { highlighted: null })); });
|
|
38
|
+
};
|
|
39
|
+
var onMouseEnter = function (item) {
|
|
40
|
+
setState(function (prevState) { return (tslib_1.__assign(tslib_1.__assign({}, prevState), { highlighted: item })); });
|
|
41
|
+
};
|
|
42
|
+
var onClick = function (event, item) {
|
|
43
|
+
var _a;
|
|
44
|
+
setState(function (prevState) { return (tslib_1.__assign(tslib_1.__assign({}, prevState), { focused: item === prevState.focused ? item : null, selected: item })); });
|
|
45
|
+
(_a = savedOnSelect.current) === null || _a === void 0 ? void 0 : _a.call(savedOnSelect, event, item);
|
|
46
|
+
};
|
|
47
|
+
var onKeyDown = function (event) {
|
|
48
|
+
var _a;
|
|
49
|
+
if ((0, isKey_1.isKey)(event, 'Enter')) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
var selected_1;
|
|
52
|
+
setState(function (prevState) {
|
|
53
|
+
var _a;
|
|
54
|
+
selected_1 = (_a = prevState.focused) !== null && _a !== void 0 ? _a : prevState.selected;
|
|
55
|
+
return tslib_1.__assign(tslib_1.__assign({}, prevState), { selected: selected_1, focused: selected_1 });
|
|
56
|
+
});
|
|
57
|
+
(_a = savedOnSelect.current) === null || _a === void 0 ? void 0 : _a.call(savedOnSelect, event, selected_1);
|
|
58
|
+
}
|
|
59
|
+
if (!(0, isKey_1.isKey)(event, 'ArrowUp') && !(0, isKey_1.isKey)(event, 'ArrowDown')) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
setState(function (prevState) {
|
|
64
|
+
var _a, _b, _c, _d, _e;
|
|
65
|
+
var selected = (_a = prevState.focused) !== null && _a !== void 0 ? _a : prevState.selected;
|
|
66
|
+
var currentIndex = typeof selected !== 'undefined'
|
|
67
|
+
? (_b = savedItems.current) === null || _b === void 0 ? void 0 : _b.indexOf(selected)
|
|
68
|
+
: null;
|
|
69
|
+
var isArrowUp = (0, isKey_1.isKey)(event, 'ArrowUp');
|
|
70
|
+
var newIndex = isArrowUp
|
|
71
|
+
? (0, getPrevIndex_1.getPrevIndex)(currentIndex !== null && currentIndex !== void 0 ? currentIndex : 0, ((_c = savedItems.current) === null || _c === void 0 ? void 0 : _c.length) || 0)
|
|
72
|
+
: (0, getNextIndex_1.getNextIndex)(currentIndex !== null && currentIndex !== void 0 ? currentIndex : -1, ((_d = savedItems.current) === null || _d === void 0 ? void 0 : _d.length) || 0);
|
|
73
|
+
var newItem = (_e = savedItems.current) === null || _e === void 0 ? void 0 : _e[newIndex];
|
|
74
|
+
return tslib_1.__assign(tslib_1.__assign({}, prevState), { focused: newItem });
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
setState(function (prevState) { return (tslib_1.__assign(tslib_1.__assign({}, prevState), { onClick: onClick, onKeyDown: onKeyDown, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave })); });
|
|
78
|
+
return function () {
|
|
79
|
+
// Сброс
|
|
80
|
+
setState({});
|
|
81
|
+
};
|
|
82
|
+
}, [active]);
|
|
83
|
+
return state;
|
|
84
|
+
}
|
|
85
|
+
exports.useDataListNavigation = useDataListNavigation;
|