@vkontakte/vkui 4.21.0 → 4.22.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/.cache/.eslintcache +1 -1
- package/.cache/.stylelintcache +1 -1
- package/.cache/.tsbuildinfo +271 -37
- package/.cache/ts/src/components/Avatar/Avatar.d.ts +2 -0
- package/.cache/ts/src/components/Cell/Cell.d.ts +11 -0
- package/.cache/ts/src/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
- package/.cache/ts/src/components/Cell/CellDragger/CellDragger.d.ts +6 -0
- package/.cache/ts/src/components/Cell/useDraggable.d.ts +13 -0
- package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +0 -1
- package/.cache/ts/src/components/DropdownIcon/DropdownIcon.d.ts +3 -0
- package/.cache/ts/src/components/GridAvatar/GridAvatar.d.ts +9 -0
- package/.cache/ts/src/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
- package/.cache/ts/src/components/Removable/Removable.d.ts +2 -1
- package/.cache/ts/src/components/TabbarItem/TabbarItem.d.ts +3 -1
- package/.cache/ts/src/index.d.ts +4 -0
- package/dist/cjs/components/ActionSheet/ActionSheet.js +1 -12
- package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cjs/components/Avatar/Avatar.d.ts +2 -0
- package/dist/cjs/components/Avatar/Avatar.js +7 -3
- package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
- package/dist/cjs/components/CardScroll/CardScroll.js +1 -1
- package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/cjs/components/Cell/Cell.d.ts +11 -0
- package/dist/cjs/components/Cell/Cell.js +109 -182
- package/dist/cjs/components/Cell/Cell.js.map +1 -1
- package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
- package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js +50 -0
- package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
- package/dist/cjs/components/Cell/CellDragger/CellDragger.d.ts +6 -0
- package/dist/cjs/components/Cell/CellDragger/CellDragger.js +53 -0
- package/dist/cjs/components/Cell/CellDragger/CellDragger.js.map +1 -0
- package/dist/cjs/components/Cell/useDraggable.d.ts +13 -0
- package/dist/cjs/components/Cell/useDraggable.js +142 -0
- package/dist/cjs/components/Cell/useDraggable.js.map +1 -0
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +0 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js +2 -3
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/DropdownIcon/DropdownIcon.d.ts +3 -0
- package/dist/cjs/components/DropdownIcon/DropdownIcon.js +37 -0
- package/dist/cjs/components/DropdownIcon/DropdownIcon.js.map +1 -0
- package/dist/cjs/components/FocusTrap/FocusTrap.js +3 -5
- package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
- package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/cjs/components/GridAvatar/GridAvatar.d.ts +9 -0
- package/dist/cjs/components/GridAvatar/GridAvatar.js +61 -0
- package/dist/cjs/components/GridAvatar/GridAvatar.js.map +1 -0
- package/dist/cjs/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
- package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js +64 -0
- package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
- package/dist/cjs/components/NativeSelect/NativeSelect.js +2 -2
- package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cjs/components/Progress/Progress.js +6 -3
- package/dist/cjs/components/Progress/Progress.js.map +1 -1
- package/dist/cjs/components/Removable/Removable.d.ts +2 -1
- package/dist/cjs/components/Removable/Removable.js +20 -10
- package/dist/cjs/components/Removable/Removable.js.map +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js +2 -2
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cjs/components/Tabbar/Tabbar.js +3 -1
- package/dist/cjs/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/cjs/components/TabbarItem/TabbarItem.d.ts +3 -1
- package/dist/cjs/components/TabbarItem/TabbarItem.js +29 -11
- package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/cjs/components/View/View.js +53 -42
- package/dist/cjs/components/View/View.js.map +1 -1
- package/dist/cjs/components/View/ViewInfinite.js +63 -52
- package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +16 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/prefixClass.js +7 -6
- package/dist/cjs/lib/prefixClass.js.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.js +1 -11
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +2 -0
- package/dist/components/Avatar/Avatar.js +4 -2
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/CardScroll/CardScroll.js +1 -1
- package/dist/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/components/Cell/Cell.d.ts +11 -0
- package/dist/components/Cell/Cell.js +103 -177
- package/dist/components/Cell/Cell.js.map +1 -1
- package/dist/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
- package/dist/components/Cell/CellCheckbox/CellCheckbox.js +31 -0
- package/dist/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
- package/dist/components/Cell/CellDragger/CellDragger.d.ts +6 -0
- package/dist/components/Cell/CellDragger/CellDragger.js +30 -0
- package/dist/components/Cell/CellDragger/CellDragger.js.map +1 -0
- package/dist/components/Cell/useDraggable.d.ts +13 -0
- package/dist/components/Cell/useDraggable.js +126 -0
- package/dist/components/Cell/useDraggable.js.map +1 -0
- package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +0 -1
- package/dist/components/CustomSelect/CustomSelect.js +3 -5
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/DropdownIcon/DropdownIcon.d.ts +3 -0
- package/dist/components/DropdownIcon/DropdownIcon.js +19 -0
- package/dist/components/DropdownIcon/DropdownIcon.js.map +1 -0
- package/dist/components/FocusTrap/FocusTrap.js +3 -5
- package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/components/GridAvatar/GridAvatar.d.ts +9 -0
- package/dist/components/GridAvatar/GridAvatar.js +41 -0
- package/dist/components/GridAvatar/GridAvatar.js.map +1 -0
- package/dist/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
- package/dist/components/InitialsAvatar/InitialsAvatar.js +46 -0
- package/dist/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
- package/dist/components/NativeSelect/NativeSelect.js +2 -2
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/components/Progress/Progress.js +6 -3
- package/dist/components/Progress/Progress.js.map +1 -1
- package/dist/components/Removable/Removable.d.ts +2 -1
- package/dist/components/Removable/Removable.js +20 -11
- package/dist/components/Removable/Removable.js.map +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.js +2 -2
- package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/components/Tabbar/Tabbar.js +3 -1
- package/dist/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/components/TabbarItem/TabbarItem.d.ts +3 -1
- package/dist/components/TabbarItem/TabbarItem.js +26 -10
- package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/components/View/View.js +53 -42
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.js +65 -54
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -11
- package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cssm/components/Avatar/Avatar.js +4 -2
- package/dist/cssm/components/Avatar/Avatar.js.map +1 -1
- package/dist/cssm/components/CardScroll/CardScroll.js +1 -1
- package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/cssm/components/Cell/Cell.css +1 -1
- package/dist/cssm/components/Cell/Cell.js +103 -177
- package/dist/cssm/components/Cell/Cell.js.map +1 -1
- package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -0
- package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js +32 -0
- package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
- package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -0
- package/dist/cssm/components/Cell/CellDragger/CellDragger.js +31 -0
- package/dist/cssm/components/Cell/CellDragger/CellDragger.js.map +1 -0
- package/dist/cssm/components/Cell/useDraggable.js +126 -0
- package/dist/cssm/components/Cell/useDraggable.js.map +1 -0
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -5
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/DropdownIcon/DropdownIcon.css +1 -0
- package/dist/cssm/components/DropdownIcon/DropdownIcon.js +20 -0
- package/dist/cssm/components/DropdownIcon/DropdownIcon.js.map +1 -0
- package/dist/cssm/components/FocusTrap/FocusTrap.js +3 -5
- package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cssm/components/FormItem/FormItem.css +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/cssm/components/GridAvatar/GridAvatar.css +1 -0
- package/dist/cssm/components/GridAvatar/GridAvatar.js +42 -0
- package/dist/cssm/components/GridAvatar/GridAvatar.js.map +1 -0
- package/dist/cssm/components/InitialsAvatar/InitialsAvatar.css +1 -0
- package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js +52 -0
- package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
- package/dist/cssm/components/NativeSelect/NativeSelect.js +2 -2
- package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cssm/components/Progress/Progress.js +6 -3
- package/dist/cssm/components/Progress/Progress.js.map +1 -1
- package/dist/cssm/components/Removable/Removable.css +1 -1
- package/dist/cssm/components/Removable/Removable.js +20 -11
- package/dist/cssm/components/Removable/Removable.js.map +1 -1
- package/dist/cssm/components/Select/Select.css +1 -1
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js +2 -2
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.css +1 -1
- package/dist/cssm/components/Tabbar/Tabbar.css +1 -1
- package/dist/cssm/components/Tabbar/Tabbar.js +3 -1
- package/dist/cssm/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/cssm/components/TabbarItem/TabbarItem.css +1 -1
- package/dist/cssm/components/TabbarItem/TabbarItem.js +26 -10
- package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.css +1 -1
- package/dist/cssm/components/View/View.js +53 -42
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/ViewInfinite.js +65 -54
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/index.js +2 -0
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/prefixClass.js +7 -6
- package/dist/cssm/lib/prefixClass.js.map +1 -1
- package/dist/cssm/styles/components.css +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/prefixClass.js +7 -6
- package/dist/lib/prefixClass.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
- package/src/components/ActionSheet/ActionSheet.tsx +1 -8
- package/src/components/Avatar/Avatar.tsx +5 -2
- package/src/components/CardScroll/CardScroll.tsx +4 -1
- package/src/components/Cell/Cell.css +22 -45
- package/src/components/Cell/Cell.tsx +101 -162
- package/src/components/Cell/CellCheckbox/CellCheckbox.css +17 -0
- package/src/components/Cell/CellCheckbox/CellCheckbox.tsx +42 -0
- package/src/components/Cell/CellDragger/CellDragger.css +4 -0
- package/src/components/Cell/CellDragger/CellDragger.tsx +40 -0
- package/src/components/Cell/Readme.md +89 -51
- package/src/components/Cell/useDraggable.tsx +112 -0
- package/src/components/ChipsSelect/ChipsSelect.tsx +2 -2
- package/src/components/CustomSelect/CustomSelect.tsx +3 -4
- package/src/components/DropdownIcon/DropdownIcon.css +3 -0
- package/src/components/DropdownIcon/DropdownIcon.tsx +20 -0
- package/src/components/Epic/Readme.md +1 -0
- package/src/components/FocusTrap/FocusTrap.tsx +11 -8
- package/src/components/FormItem/FormItem.css +8 -8
- package/src/components/FormLayoutGroup/FormLayoutGroup.css +9 -3
- package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +10 -1
- package/src/components/GridAvatar/GridAvatar.css +37 -0
- package/src/components/GridAvatar/GridAvatar.tsx +55 -0
- package/src/components/GridAvatar/Readme.md +12 -0
- package/src/components/InitialsAvatar/InitialsAvatar.css +53 -0
- package/src/components/InitialsAvatar/InitialsAvatar.tsx +90 -0
- package/src/components/InitialsAvatar/Readme.md +14 -0
- package/src/components/ModalRoot/Readme.md +2 -2
- package/src/components/NativeSelect/NativeSelect.tsx +2 -2
- package/src/components/Progress/Progress.tsx +8 -3
- package/src/components/Removable/Removable.css +9 -20
- package/src/components/Removable/Removable.tsx +19 -11
- package/src/components/Select/Select.css +1 -1
- package/src/components/SelectMimicry/SelectMimicry.tsx +2 -2
- package/src/components/SimpleCell/SimpleCell.css +10 -27
- package/src/components/Tabbar/Tabbar.css +15 -4
- package/src/components/Tabbar/Tabbar.tsx +3 -1
- package/src/components/TabbarItem/Readme.md +72 -0
- package/src/components/TabbarItem/TabbarItem.css +65 -14
- package/src/components/TabbarItem/TabbarItem.tsx +46 -22
- package/src/components/TabsItem/TabsItem.css +5 -2
- package/src/components/View/View.tsx +37 -31
- package/src/components/View/ViewInfinite.tsx +44 -38
- package/src/index.ts +4 -0
- package/src/lib/prefixClass.ts +9 -6
- package/src/styles/components.css +4 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.useDraggable = void 0;
|
|
11
|
+
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var React = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var useDraggable = function useDraggable(_ref) {
|
|
19
|
+
var onDragFinish = _ref.onDragFinish;
|
|
20
|
+
|
|
21
|
+
var _React$useState = React.useState(false),
|
|
22
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
23
|
+
dragging = _React$useState2[0],
|
|
24
|
+
setDragging = _React$useState2[1];
|
|
25
|
+
|
|
26
|
+
var rootElRef = React.useRef(null);
|
|
27
|
+
|
|
28
|
+
var _React$useState3 = React.useState(undefined),
|
|
29
|
+
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
|
|
30
|
+
siblings = _React$useState4[0],
|
|
31
|
+
setSiblings = _React$useState4[1];
|
|
32
|
+
|
|
33
|
+
var _React$useState5 = React.useState(undefined),
|
|
34
|
+
_React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2),
|
|
35
|
+
dragStartIndex = _React$useState6[0],
|
|
36
|
+
setDragStartIndex = _React$useState6[1];
|
|
37
|
+
|
|
38
|
+
var _React$useState7 = React.useState(undefined),
|
|
39
|
+
_React$useState8 = (0, _slicedToArray2.default)(_React$useState7, 2),
|
|
40
|
+
dragEndIndex = _React$useState8[0],
|
|
41
|
+
setDragEndIndex = _React$useState8[1];
|
|
42
|
+
|
|
43
|
+
var _React$useState9 = React.useState(0),
|
|
44
|
+
_React$useState10 = (0, _slicedToArray2.default)(_React$useState9, 2),
|
|
45
|
+
dragShift = _React$useState10[0],
|
|
46
|
+
setDragShift = _React$useState10[1];
|
|
47
|
+
|
|
48
|
+
var _React$useState11 = React.useState(undefined),
|
|
49
|
+
_React$useState12 = (0, _slicedToArray2.default)(_React$useState11, 2),
|
|
50
|
+
dragDirection = _React$useState12[0],
|
|
51
|
+
setDragDirection = _React$useState12[1];
|
|
52
|
+
|
|
53
|
+
var onDragStart = function onDragStart() {
|
|
54
|
+
var rootEl = rootElRef.current;
|
|
55
|
+
setDragging(true);
|
|
56
|
+
|
|
57
|
+
var _siblings = (0, _toConsumableArray2.default)(rootEl.parentElement.childNodes);
|
|
58
|
+
|
|
59
|
+
var idx = _siblings.indexOf(rootEl);
|
|
60
|
+
|
|
61
|
+
setDragStartIndex(idx);
|
|
62
|
+
setDragEndIndex(idx);
|
|
63
|
+
setSiblings(_siblings);
|
|
64
|
+
setDragShift(0);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
var onDragMove = function onDragMove(e) {
|
|
68
|
+
e.originalEvent.preventDefault();
|
|
69
|
+
var rootEl = rootElRef.current;
|
|
70
|
+
rootEl.style.transform = "translateY(".concat(e.shiftY, "px)");
|
|
71
|
+
var rootGesture = rootEl.getBoundingClientRect();
|
|
72
|
+
setDragDirection(dragShift - e.shiftY < 0 ? 'down' : 'up');
|
|
73
|
+
setDragShift(e.shiftY);
|
|
74
|
+
setDragEndIndex(dragStartIndex);
|
|
75
|
+
siblings.forEach(function (sibling, siblingIndex) {
|
|
76
|
+
var siblingGesture = sibling.getBoundingClientRect();
|
|
77
|
+
var siblingHalfHeight = siblingGesture.height / 2;
|
|
78
|
+
var rootOverSibling = rootGesture.bottom > siblingGesture.top + siblingHalfHeight;
|
|
79
|
+
var rootUnderSibling = rootGesture.top < siblingGesture.bottom - siblingHalfHeight;
|
|
80
|
+
|
|
81
|
+
if (dragStartIndex < siblingIndex) {
|
|
82
|
+
if (rootOverSibling) {
|
|
83
|
+
if (dragDirection === 'down') {
|
|
84
|
+
sibling.style.transform = 'translateY(-100%)';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
setDragEndIndex(function (dragEndIndex) {
|
|
88
|
+
return dragEndIndex + 1;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (rootUnderSibling && dragDirection === 'up') {
|
|
93
|
+
sibling.style.transform = 'translateY(0)';
|
|
94
|
+
}
|
|
95
|
+
} else if (dragStartIndex > siblingIndex) {
|
|
96
|
+
if (rootUnderSibling) {
|
|
97
|
+
if (dragDirection === 'up') {
|
|
98
|
+
sibling.style.transform = 'translateY(100%)';
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
setDragEndIndex(function (dragEndIndex) {
|
|
102
|
+
return dragEndIndex - 1;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (rootOverSibling && dragDirection === 'down') {
|
|
107
|
+
sibling.style.transform = 'translateY(0)';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
var onDragEnd = function onDragEnd() {
|
|
114
|
+
var from = dragStartIndex,
|
|
115
|
+
to = dragEndIndex;
|
|
116
|
+
siblings.forEach(function (sibling) {
|
|
117
|
+
sibling.style.transform = null;
|
|
118
|
+
});
|
|
119
|
+
setSiblings(undefined);
|
|
120
|
+
setDragEndIndex(undefined);
|
|
121
|
+
setDragStartIndex(undefined);
|
|
122
|
+
setDragDirection(undefined);
|
|
123
|
+
setDragShift(undefined);
|
|
124
|
+
setDragging(false);
|
|
125
|
+
onDragFinish && onDragFinish({
|
|
126
|
+
from: from,
|
|
127
|
+
to: to
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
var useDraggableProps = {
|
|
132
|
+
onDragStart: onDragStart,
|
|
133
|
+
onDragMove: onDragMove,
|
|
134
|
+
onDragEnd: onDragEnd,
|
|
135
|
+
dragging: dragging,
|
|
136
|
+
rootElRef: rootElRef
|
|
137
|
+
};
|
|
138
|
+
return useDraggableProps;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
exports.useDraggable = useDraggable;
|
|
142
|
+
//# sourceMappingURL=useDraggable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Cell/useDraggable.tsx"],"names":["useDraggable","onDragFinish","React","useState","dragging","setDragging","rootElRef","useRef","undefined","siblings","setSiblings","dragStartIndex","setDragStartIndex","dragEndIndex","setDragEndIndex","dragShift","setDragShift","dragDirection","setDragDirection","onDragStart","rootEl","current","_siblings","parentElement","childNodes","idx","indexOf","onDragMove","e","originalEvent","preventDefault","style","transform","shiftY","rootGesture","getBoundingClientRect","forEach","sibling","siblingIndex","siblingGesture","siblingHalfHeight","height","rootOverSibling","bottom","top","rootUnderSibling","onDragEnd","from","to","useDraggableProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { TouchEvent } from '../Touch/Touch';\nimport { CellProps } from './Cell';\n\nexport interface DraggableProps {\n onDragStart: () => void;\n onDragEnd: () => void;\n onDragMove: (e: TouchEvent) => void;\n}\n\ninterface UseDraggableProps extends DraggableProps {\n dragging: boolean;\n rootElRef: any;\n}\n\nexport const useDraggable = ({ onDragFinish }: Pick<CellProps, 'onDragFinish'>) => {\n const [dragging, setDragging] = React.useState<boolean>(false);\n const rootElRef = React.useRef(null);\n\n const [siblings, setSiblings] = React.useState<HTMLElement[]>(undefined);\n const [dragStartIndex, setDragStartIndex] = React.useState<number>(undefined);\n const [dragEndIndex, setDragEndIndex] = React.useState<number>(undefined);\n const [dragShift, setDragShift] = React.useState<number>(0);\n const [dragDirection, setDragDirection] = React.useState<'down' | 'up'>(undefined);\n\n const onDragStart = () => {\n const rootEl = rootElRef.current;\n\n setDragging(true);\n\n const _siblings: HTMLElement[] = [...rootEl.parentElement.childNodes];\n const idx = _siblings.indexOf(rootEl);\n\n setDragStartIndex(idx);\n setDragEndIndex(idx);\n setSiblings(_siblings);\n setDragShift(0);\n };\n\n const onDragMove = (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n\n const rootEl = rootElRef.current;\n\n rootEl.style.transform = `translateY(${e.shiftY}px)`;\n const rootGesture = rootEl.getBoundingClientRect();\n\n setDragDirection(dragShift - e.shiftY < 0 ? 'down' : 'up');\n setDragShift(e.shiftY);\n setDragEndIndex(dragStartIndex);\n\n siblings.forEach((sibling: HTMLElement, siblingIndex: number) => {\n const siblingGesture = sibling.getBoundingClientRect();\n const siblingHalfHeight = siblingGesture.height / 2;\n\n const rootOverSibling = rootGesture.bottom > siblingGesture.top + siblingHalfHeight;\n const rootUnderSibling = rootGesture.top < siblingGesture.bottom - siblingHalfHeight;\n\n if (dragStartIndex < siblingIndex) {\n if (rootOverSibling) {\n if (dragDirection === 'down') {\n sibling.style.transform = 'translateY(-100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex + 1);\n }\n if (rootUnderSibling && dragDirection === 'up') {\n sibling.style.transform = 'translateY(0)';\n }\n } else if (dragStartIndex > siblingIndex) {\n if (rootUnderSibling) {\n if (dragDirection === 'up') {\n sibling.style.transform = 'translateY(100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex - 1);\n }\n if (rootOverSibling && dragDirection === 'down') {\n sibling.style.transform = 'translateY(0)';\n }\n }\n });\n };\n\n const onDragEnd = () => {\n const [from, to] = [dragStartIndex, dragEndIndex];\n\n siblings.forEach((sibling: HTMLElement) => {\n sibling.style.transform = null;\n });\n\n setSiblings(undefined);\n setDragEndIndex(undefined);\n setDragStartIndex(undefined);\n setDragDirection(undefined);\n setDragShift(undefined);\n\n setDragging(false);\n\n onDragFinish && onDragFinish({ from, to });\n };\n\n const useDraggableProps: UseDraggableProps = {\n onDragStart,\n onDragMove,\n onDragEnd,\n dragging,\n rootElRef,\n };\n\n return useDraggableProps;\n};\n"],"file":"useDraggable.js"}
|
|
@@ -23,7 +23,7 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
23
23
|
|
|
24
24
|
var React = _interopRequireWildcard(require("react"));
|
|
25
25
|
|
|
26
|
-
var
|
|
26
|
+
var _DropdownIcon = require("../DropdownIcon/DropdownIcon");
|
|
27
27
|
|
|
28
28
|
var _classNames3 = require("../../lib/classNames");
|
|
29
29
|
|
|
@@ -282,7 +282,7 @@ var ChipsSelect = function ChipsSelect(props) {
|
|
|
282
282
|
getRef: getRef,
|
|
283
283
|
disabled: disabled,
|
|
284
284
|
onInputChange: handleInputChange,
|
|
285
|
-
after: (0, _jsxRuntime.createScopedElement)(
|
|
285
|
+
after: (0, _jsxRuntime.createScopedElement)(_DropdownIcon.DropdownIcon, null)
|
|
286
286
|
})), opened && (0, _jsxRuntime.createScopedElement)("div", {
|
|
287
287
|
vkuiClass: (0, _classNames3.classNames)('ChipsSelect__options', (0, _defineProperty2.default)({}, 'ChipsSelect__options--popupDirectionTop', popupDirection === 'top')),
|
|
288
288
|
onMouseLeave: function onMouseLeave() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"names":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","ChipsSelect","props","style","onFocus","onKeyDown","className","fetching","renderOption","emptyText","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","showSelected","getNewOptionData","renderChip","popupDirection","creatable","filterFn","inputValue","creatableText","sizeY","closeAfterSelect","onChangeStart","after","options","restProps","document","scrollBoxRef","React","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","rootNode","current","target","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemove","onRemoveWrapper","stopPropagation","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter","chipsSelectDefaultProps","chipsInputDefaultProps","noop","defaultFilterFn","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Icon20Dropdown } from '@vkontakte/icons';\nimport { classNames } from '../../lib/classNames';\nimport Spinner from '../Spinner/Spinner';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport ChipsInput, { ChipsInputOption, ChipsInputProps, ChipsInputValue, RenderChip, chipsInputDefaultProps } from '../ChipsInput/ChipsInput';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { useChipsSelect } from './useChipsSelect';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { noop } from '../../lib/utils';\nimport { useDOM } from '../../lib/dom';\nimport Caption from '../Typography/Caption/Caption';\nimport { prefixClass } from '../../lib/prefixClass';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { defaultFilterFn } from '../../lib/select';\nimport './ChipsSelect.css';\n\nexport interface ChipsSelectProps<Option extends ChipsInputOption> extends ChipsInputProps<Option>, AdaptivityProps {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?: false | ((value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающиего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n}\n\ntype focusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: focusActionType = 'next';\nconst FOCUS_ACTION_PREV: focusActionType = 'prev';\n\nconst ChipsSelect = <Option extends ChipsInputOption>(props: ChipsSelectProps<Option>) => {\n const {\n style, onFocus, onKeyDown, className, fetching, renderOption, emptyText,\n getRef, getRootRef, disabled, placeholder, tabIndex, getOptionValue, getOptionLabel, showSelected,\n getNewOptionData, renderChip, popupDirection, creatable, filterFn, inputValue, creatableText, sizeY,\n closeAfterSelect, onChangeStart, after, options, ...restProps\n } = props;\n\n const { document } = useDOM();\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue, selectedOptions, opened, setOpened, addOptionFromInput,\n filteredOptions, addOption, handleInputChange, clearInput,\n focusedOption, setFocusedOption, focusedOptionIndex, setFocusedOptionIndex,\n } = useChipsSelect(props);\n\n const showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const { current: rootNode } = rootRef;\n if (rootNode && e.target !== rootNode && !rootNode.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number|null, type: focusActionType) => {\n let index = typeof nextIndex !== 'number' ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions]);\n\n React.useEffect(() => {\n const index = focusedOption ? filteredOptions.findIndex(({ value }) => value === focusedOption.value) : -1;\n\n if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [filteredOptions, focusedOption, showCreatable, closeAfterSelect]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option>) => {\n const { onRemove } = renderChipProps;\n\n const onRemoveWrapper = (e: React.MouseEvent, value: ChipsInputValue) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemove(e, value);\n };\n\n return renderChip({ ...renderChipProps, onRemove: onRemoveWrapper });\n };\n\n return (\n <div\n vkuiClass={classNames('ChipsSelect', `ChipsSelect--sizeY-${sizeY}`)}\n ref={rootRef}\n style={style}\n className={className}\n >\n <ChipsInput\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n vkuiClass={classNames({\n ['ChipsSelect__open']: opened,\n ['ChipsSelect__open--popupDirectionTop']: popupDirection === 'top',\n })}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n after={<Icon20Dropdown />}\n />\n {opened &&\n <div\n vkuiClass={classNames('ChipsSelect__options', {\n ['ChipsSelect__options--popupDirectionTop']: popupDirection === 'top',\n })}\n onMouseLeave={() => setFocusedOptionIndex(null)}\n >\n <CustomScrollView boxRef={scrollBoxRef}>\n {fetching ? (\n <div vkuiClass=\"ChipsSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n ) : (\n <React.Fragment>\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) :\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel(option);\n const hovered = focusedOption && getOptionValue(option) === getOptionValue(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue(selectedOption) === getOptionValue(option);\n });\n const value = getOptionValue(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption({\n className: prefixClass('ChipsSelect__option'),\n option,\n hovered,\n children: label,\n selected: !!selected,\n getRootRef: (e) => chipsSelectOptions[index] = e,\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n }\n </React.Fragment>\n )}\n </CustomScrollView>\n </div>\n }\n </div>\n );\n};\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption({ option, ...restProps }: CustomSelectOptionProps): React.ReactNode {\n return (\n <CustomSelectOption {...restProps} />\n );\n },\n};\n\nChipsSelect.defaultProps = chipsSelectDefaultProps;\n\nexport default withAdaptivity(ChipsSelect, { sizeY: true });\n"],"file":"ChipsSelect.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"names":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","ChipsSelect","props","style","onFocus","onKeyDown","className","fetching","renderOption","emptyText","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","showSelected","getNewOptionData","renderChip","popupDirection","creatable","filterFn","inputValue","creatableText","sizeY","closeAfterSelect","onChangeStart","after","options","restProps","document","scrollBoxRef","React","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","rootNode","current","target","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemove","onRemoveWrapper","stopPropagation","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter","chipsSelectDefaultProps","chipsInputDefaultProps","noop","defaultFilterFn","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { classNames } from '../../lib/classNames';\nimport Spinner from '../Spinner/Spinner';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport ChipsInput, { ChipsInputOption, ChipsInputProps, ChipsInputValue, RenderChip, chipsInputDefaultProps } from '../ChipsInput/ChipsInput';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { useChipsSelect } from './useChipsSelect';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { noop } from '../../lib/utils';\nimport { useDOM } from '../../lib/dom';\nimport Caption from '../Typography/Caption/Caption';\nimport { prefixClass } from '../../lib/prefixClass';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { defaultFilterFn } from '../../lib/select';\nimport './ChipsSelect.css';\n\nexport interface ChipsSelectProps<Option extends ChipsInputOption> extends ChipsInputProps<Option>, AdaptivityProps {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?: false | ((value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающиего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n}\n\ntype focusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: focusActionType = 'next';\nconst FOCUS_ACTION_PREV: focusActionType = 'prev';\n\nconst ChipsSelect = <Option extends ChipsInputOption>(props: ChipsSelectProps<Option>) => {\n const {\n style, onFocus, onKeyDown, className, fetching, renderOption, emptyText,\n getRef, getRootRef, disabled, placeholder, tabIndex, getOptionValue, getOptionLabel, showSelected,\n getNewOptionData, renderChip, popupDirection, creatable, filterFn, inputValue, creatableText, sizeY,\n closeAfterSelect, onChangeStart, after, options, ...restProps\n } = props;\n\n const { document } = useDOM();\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue, selectedOptions, opened, setOpened, addOptionFromInput,\n filteredOptions, addOption, handleInputChange, clearInput,\n focusedOption, setFocusedOption, focusedOptionIndex, setFocusedOptionIndex,\n } = useChipsSelect(props);\n\n const showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const { current: rootNode } = rootRef;\n if (rootNode && e.target !== rootNode && !rootNode.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number|null, type: focusActionType) => {\n let index = typeof nextIndex !== 'number' ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions]);\n\n React.useEffect(() => {\n const index = focusedOption ? filteredOptions.findIndex(({ value }) => value === focusedOption.value) : -1;\n\n if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [filteredOptions, focusedOption, showCreatable, closeAfterSelect]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option>) => {\n const { onRemove } = renderChipProps;\n\n const onRemoveWrapper = (e: React.MouseEvent, value: ChipsInputValue) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemove(e, value);\n };\n\n return renderChip({ ...renderChipProps, onRemove: onRemoveWrapper });\n };\n\n return (\n <div\n vkuiClass={classNames('ChipsSelect', `ChipsSelect--sizeY-${sizeY}`)}\n ref={rootRef}\n style={style}\n className={className}\n >\n <ChipsInput\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n vkuiClass={classNames({\n ['ChipsSelect__open']: opened,\n ['ChipsSelect__open--popupDirectionTop']: popupDirection === 'top',\n })}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n after={<DropdownIcon />}\n />\n {opened &&\n <div\n vkuiClass={classNames('ChipsSelect__options', {\n ['ChipsSelect__options--popupDirectionTop']: popupDirection === 'top',\n })}\n onMouseLeave={() => setFocusedOptionIndex(null)}\n >\n <CustomScrollView boxRef={scrollBoxRef}>\n {fetching ? (\n <div vkuiClass=\"ChipsSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n ) : (\n <React.Fragment>\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) :\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel(option);\n const hovered = focusedOption && getOptionValue(option) === getOptionValue(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue(selectedOption) === getOptionValue(option);\n });\n const value = getOptionValue(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption({\n className: prefixClass('ChipsSelect__option'),\n option,\n hovered,\n children: label,\n selected: !!selected,\n getRootRef: (e) => chipsSelectOptions[index] = e,\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n }\n </React.Fragment>\n )}\n </CustomScrollView>\n </div>\n }\n </div>\n );\n};\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption({ option, ...restProps }: CustomSelectOptionProps): React.ReactNode {\n return (\n <CustomSelectOption {...restProps} />\n );\n },\n};\n\nChipsSelect.defaultProps = chipsSelectDefaultProps;\n\nexport default withAdaptivity(ChipsSelect, { sizeY: true });\n"],"file":"ChipsSelect.js"}
|
|
@@ -64,7 +64,6 @@ declare type MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;
|
|
|
64
64
|
declare class CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {
|
|
65
65
|
static defaultProps: CustomSelectProps;
|
|
66
66
|
constructor(props: CustomSelectProps);
|
|
67
|
-
state: CustomSelectState;
|
|
68
67
|
private keyboardInput;
|
|
69
68
|
private isControlledOutside;
|
|
70
69
|
private selectEl;
|
|
@@ -49,7 +49,7 @@ var _getClassName = require("../../helpers/getClassName");
|
|
|
49
49
|
|
|
50
50
|
var _Input = _interopRequireDefault(require("../Input/Input"));
|
|
51
51
|
|
|
52
|
-
var
|
|
52
|
+
var _DropdownIcon = require("../DropdownIcon/DropdownIcon");
|
|
53
53
|
|
|
54
54
|
var _Caption = _interopRequireDefault(require("../Typography/Caption/Caption"));
|
|
55
55
|
|
|
@@ -116,7 +116,6 @@ var CustomSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
116
116
|
|
|
117
117
|
(0, _classCallCheck2.default)(this, CustomSelect);
|
|
118
118
|
_this = _super.call(this, props);
|
|
119
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", void 0);
|
|
120
119
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "keyboardInput", void 0);
|
|
121
120
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isControlledOutside", void 0);
|
|
122
121
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "selectEl", void 0);
|
|
@@ -585,7 +584,7 @@ var CustomSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
585
584
|
// @ts-ignore
|
|
586
585
|
,
|
|
587
586
|
onClick: onClick,
|
|
588
|
-
after:
|
|
587
|
+
after: (0, _jsxRuntime.createScopedElement)(_DropdownIcon.DropdownIcon, null),
|
|
589
588
|
placeholder: restProps.placeholder
|
|
590
589
|
})) : (0, _jsxRuntime.createScopedElement)(_SelectMimicry.default, (0, _extends2.default)({}, restProps, {
|
|
591
590
|
"aria-hidden": true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":["findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","CustomSelect","props","React","createRef","keyboardInput","state","selectedOptionIndex","inputValue","filterFn","filter","setState","opened","focusedOptionIndex","isValidIndex","scrollToElement","onOpen","resetKeyboardInput","onClose","select","index","nativeSelectValue","event","Event","bubbles","selectEl","dispatchEvent","close","open","scrollTo","type","nextIndex","beforeIndex","focusOptionByIndex","e","Array","prototype","indexOf","call","currentTarget","parentNode","children","preventDefault","selectFocused","key","fullInput","optionIndex","label","toLowerCase","includes","scrollBoxRef","current","contains","target","isControlledOutside","findSelectedIndex","onChange","onInputChange","process","env","NODE_ENV","areOptionsShown","focusOption","onKeyboardInput","renderOption","hovered","selected","onClick","handleOptionClick","onMouseDown","handleOptionDown","onMouseEnter","handleOptionHover","element","getRef","defaultValue","initialValue","undefined","Number","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","prevProps","searchable","name","className","getRootRef","popupDirection","sizeY","platform","style","onBlur","onFocus","emptyText","renderDropdown","fetching","restProps","getSelectedItem","defaultDropdownContent","resolvedContent","onLabelClick","onInputKeyDown","SizeType","COMPACT","placeholder","handleKeyDownSelect","handleKeyUp","selectRef","onNativeSelectChange","resetFocusedOption","Component","defaultFilterFn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;AAGA,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,CAACC,OAAD,EAA6D;AAAA,MAApBC,UAAoB,uEAAP,CAAC,CAAM;;AAClF,MAAIA,UAAU,IAAID,OAAO,CAACE,MAAR,GAAiB,CAAnC,EAAsC;AACpC,WAAO,CAAC,CAAR;AACD;;AACD,SAAOF,OAAO,CAACG,SAAR,CAAkB,UAACC,MAAD,EAASC,CAAT;AAAA,WAAeA,CAAC,GAAGJ,UAAJ,IAAkB,CAACG,MAAM,CAACE,QAAzC;AAAA,GAAlB,CAAP;AACD,CALD;;AAOA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACP,OAAD,EAA+E;AAAA,MAAtCQ,QAAsC,uEAAnBR,OAAO,CAACE,MAAW;AACrG,MAAIO,MAAM,GAAG,CAAC,CAAd;;AACA,MAAID,QAAQ,IAAI,CAAhB,EAAmB;AACjB,WAAOC,MAAP;AACD;;AACD,OAAK,IAAIJ,CAAC,GAAGG,QAAQ,GAAG,CAAxB,EAA2BH,CAAC,IAAI,CAAhC,EAAmCA,CAAC,EAApC,EAAwC;AACtC,QAAID,OAAM,GAAGJ,OAAO,CAACK,CAAD,CAApB;;AAEA,QAAI,CAACD,OAAM,CAACE,QAAZ,EAAsB;AACpBG,MAAAA,MAAM,GAAGJ,CAAT;AACA;AACD;AACF;;AACD,SAAOI,MAAP;AACD,CAdD;;AAgBA,IAAMC,IAAI,GAAG,wBAAS,cAAT,CAAb;;AAEA,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACX,OAAD,EAA4C;AACxE,MAAI,IAAIY,GAAJ,CAAQZ,OAAO,CAACa,GAAR,CAAY,UAACC,IAAD;AAAA,iCAAiBA,IAAI,CAACC,KAAtB;AAAA,GAAZ,CAAR,EAAkDC,IAAlD,GAAyD,CAA7D,EAAgE;AAC9DN,IAAAA,IAAI,CAAC,uGAAD,CAAJ;AACD;AACF,CAJD;;IAkEMO,Y;;;;;AAaJ,wBAAmBC,KAAnB,EAA6C;AAAA;;AAAA;AAC3C,8BAAMA,KAAN;AAD2C;AAAA;AAAA;AAAA;AAAA,4GA+BbC,KAAK,CAACC,SAAN,EA/Ba;AAAA,qGAiCP,YAAM;AAC1C,YAAKC,aAAL,GAAqB,EAArB;AACD,KAnC4C;AAAA,kGAqCV,YAAM;AACvC,wBAAyC,MAAKC,KAA9C;AAAA,UAAQC,mBAAR,eAAQA,mBAAR;AAAA,UAA6BvB,OAA7B,eAA6BA,OAA7B;;AAEA,UAAI,CAACA,OAAO,CAACE,MAAb,EAAqB;AACnB,eAAO,IAAP;AACD;;AAED,aAAOF,OAAO,CAACuB,mBAAD,CAAd;AACD,KA7C4C;AAAA,yFAmDpC,UAACvB,OAAD,EAAwCwB,UAAxC,EAA4DC,QAA5D,EAAwG;AAC/G,aAAO,OAAOA,QAAP,KAAoB,UAApB,GAAiCzB,OAAO,CAAC0B,MAAR,CAAe,UAACtB,MAAD;AAAA,eAAYqB,QAAQ,CAACD,UAAD,EAAapB,MAAb,CAApB;AAAA,OAAf,CAAjC,GAA4FJ,OAAnG;AACD,KArD4C;AAAA,uFA8DtC,YAAM;AACX,YAAK2B,QAAL,CAAc;AAAA,YAAGJ,mBAAH,QAAGA,mBAAH;AAAA,eAA8B;AAC1CK,UAAAA,MAAM,EAAE,IADkC;AAE1CC,UAAAA,kBAAkB,EAAEN;AAFsB,SAA9B;AAAA,OAAd,EAGI,YAAM;AACR,YAAQA,mBAAR,GAAgC,MAAKD,KAArC,CAAQC,mBAAR;;AAEA,YAAI,MAAKO,YAAL,CAAkBP,mBAAlB,CAAJ,EAA4C;AAC1C,gBAAKQ,eAAL,CAAqBR,mBAArB,EAA0C,IAA1C;AACD;AACF,OATD;;AAUA,aAAO,MAAKL,KAAL,CAAWc,MAAlB,KAA6B,UAA7B,IAA2C,MAAKd,KAAL,CAAWc,MAAX,EAA3C;AACD,KA1E4C;AAAA,wFA4ErC,YAAM;AACZ,YAAKC,kBAAL;;AAEA,YAAKN,QAAL,CAAc;AAAA,eAAO;AACnBH,UAAAA,UAAU,EAAE,EADO;AAEnBI,UAAAA,MAAM,EAAE,KAFW;AAGnBC,UAAAA,kBAAkB,EAAE,CAAC,CAHF;AAInB7B,UAAAA,OAAO,EAAE,MAAKkB,KAAL,CAAWlB;AAJD,SAAP;AAAA,OAAd;;AAMA,aAAO,MAAKkB,KAAL,CAAWgB,OAAlB,KAA8B,UAA9B,IAA4C,MAAKhB,KAAL,CAAWgB,OAAX,EAA5C;AACD,KAtF4C;AAAA,gGA4F7B,YAAM;AACpB,UAAQL,kBAAR,GAA+B,MAAKP,KAApC,CAAQO,kBAAR;;AAEA,YAAKM,MAAL,CAAYN,kBAAZ;AACD,KAhG4C;AAAA,yFAkGpC,UAACO,KAAD,EAAmB;AAC1B,UAAI,CAAC,MAAKN,YAAL,CAAkBM,KAAlB,CAAL,EAA+B;AAC7B;AACD;;AAED,UAAMtB,IAAI,GAAG,MAAKQ,KAAL,CAAWtB,OAAX,CAAmBoC,KAAnB,CAAb;;AAEA,YAAKT,QAAL,CAAc;AACZU,QAAAA,iBAAiB,EAAEvB,IAAI,CAACC;AADZ,OAAd,EAEG,YAAM;AACP,YAAMuB,KAAK,GAAG,IAAIC,KAAJ,CAAU,QAAV,EAAoB;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAApB,CAAd;;AACA,cAAKC,QAAL,CAAcC,aAAd,CAA4BJ,KAA5B;AACD,OALD;;AAMA,YAAKK,KAAL;AACD,KAhH4C;AAAA,0FAkHnC,YAAM;AACd,YAAKrB,KAAL,CAAWM,MAAX,GAAoB,MAAKe,KAAL,EAApB,GAAmC,MAAKC,IAAL,EAAnC;AACD,KApH4C;AAAA,0FAsHnC,YAAM;AACd,UAAMN,KAAK,GAAG,IAAIC,KAAJ,CAAU,OAAV,CAAd;;AACA,YAAKE,QAAL,CAAcC,aAAd,CAA4BJ,KAA5B;AACD,KAzH4C;AAAA,yFA2HpC,YAAM;AACb,YAAKK,KAAL;;AACA,UAAML,KAAK,GAAG,IAAIC,KAAJ,CAAU,MAAV,CAAd;;AACA,YAAKE,QAAL,CAAcC,aAAd,CAA4BJ,KAA5B;AACD,KA/H4C;AAAA,qGAuJxB,UAACF,KAAD,EAAoC;AAAA,UAApBS,QAAoB,uEAAT,IAAS;;AACvD,UAAIT,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAG,MAAKd,KAAL,CAAWtB,OAAX,CAAmBE,MAAnB,GAA4B,CAArD,EAAwD;AACtD;AACD;;AAED,UAAME,MAAM,GAAG,MAAKkB,KAAL,CAAWtB,OAAX,CAAmBoC,KAAnB,CAAf;;AAEA,UAAIhC,MAAM,CAACE,QAAX,EAAqB;AACnB;AACD;;AAEDuC,MAAAA,QAAQ,IAAI,MAAKd,eAAL,CAAqBK,KAArB,CAAZ;;AAEA,YAAKT,QAAL,CAAc;AAAA,eAAO;AACnBE,UAAAA,kBAAkB,EAAEO;AADD,SAAP;AAAA,OAAd;AAGD,KAvK4C;AAAA,8FAyK/B,UAACU,IAAD,EAA2B;AACvC,UAAQjB,kBAAR,GAA+B,MAAKP,KAApC,CAAQO,kBAAR;AACA,UAAIO,KAAK,GAAGP,kBAAZ;;AAEA,UAAIiB,IAAI,KAAK,MAAb,EAAqB;AACnB,YAAMC,SAAS,GAAGhD,cAAc,CAAC,MAAKuB,KAAL,CAAWtB,OAAZ,EAAqBoC,KAArB,CAAhC;AACAA,QAAAA,KAAK,GAAGW,SAAS,KAAK,CAAC,CAAf,GAAmBhD,cAAc,CAAC,MAAKuB,KAAL,CAAWtB,OAAZ,CAAjC,GAAwD+C,SAAhE,CAFmB,CAEwD;AAC5E,OAHD,MAGO,IAAID,IAAI,KAAK,MAAb,EAAqB;AAC1B,YAAME,WAAW,GAAGzC,eAAe,CAAC,MAAKe,KAAL,CAAWtB,OAAZ,EAAqBoC,KAArB,CAAnC;AACAA,QAAAA,KAAK,GAAGY,WAAW,KAAK,CAAC,CAAjB,GAAqBzC,eAAe,CAAC,MAAKe,KAAL,CAAWtB,OAAZ,CAApC,GAA2DgD,WAAnE,CAF0B,CAEsD;AACjF;;AAED,YAAKC,kBAAL,CAAwBb,KAAxB;AACD,KAtL4C;AAAA,oGAwLN,UAACc,CAAD,EAAsC;AAC3E,YAAKD,kBAAL,CAAwBE,KAAK,CAACC,SAAN,CAAgBC,OAAhB,CAAwBC,IAAxB,CAA6BJ,CAAC,CAACK,aAAF,CAAgBC,UAAhB,CAA2BC,QAAxD,EAAkEP,CAAC,CAACK,aAApE,CAAxB,EAA4G,KAA5G;AACD,KA1L4C;AAAA,mGA4LP,UAACL,CAAD,EAAsC;AAC1EA,MAAAA,CAAC,CAACQ,cAAF;AACD,KA9L4C;AAAA,oGAgMN,UAACR,CAAD,EAAsC;AAC3E,UAAMd,KAAK,GAAGe,KAAK,CAACC,SAAN,CAAgBC,OAAhB,CAAwBC,IAAxB,CAA6BJ,CAAC,CAACK,aAAF,CAAgBC,UAAhB,CAA2BC,QAAxD,EAAkEP,CAAC,CAACK,aAApE,CAAd;AACA,UAAMnD,MAAM,GAAG,MAAKkB,KAAL,CAAWtB,OAAX,CAAmBoC,KAAnB,CAAf;;AAEA,UAAIhC,MAAM,IAAI,CAACA,MAAM,CAACE,QAAtB,EAAgC;AAC9B,cAAKqD,aAAL;AACD;AACF,KAvM4C;AAAA,qGAyMxB,YAAM;AACzB,YAAKhC,QAAL,CAAc;AAAEE,QAAAA,kBAAkB,EAAE,CAAC;AAAvB,OAAd;AACD,KA3M4C;AAAA,kGA6M3B,UAAC+B,GAAD,EAAiB;AACjC,UAAMC,SAAS,GAAG,MAAKxC,aAAL,GAAqBuC,GAAvC;;AAEA,UAAME,WAAW,GAAG,MAAKxC,KAAL,CAAWtB,OAAX,CAAmBG,SAAnB,CAA6B,UAACC,MAAD,EAAY;AAC3D,eAAOA,MAAM,CAAC2D,KAAP,CAAaC,WAAb,GAA2BC,QAA3B,CAAoCJ,SAApC,CAAP;AACD,OAFmB,CAApB;;AAIA,UAAIC,WAAW,GAAG,CAAC,CAAnB,EAAsB;AACpB,cAAKb,kBAAL,CAAwBa,WAAxB;AACD;;AAED,YAAKzC,aAAL,GAAqBwC,SAArB;AACD,KAzN4C;AAAA,+FA+N9B,UAACX,CAAD,EAA2C;AAAA;;AACxD,mCAAI,MAAKgB,YAAL,CAAkBC,OAAtB,kDAAI,sBAA2BC,QAA3B,CAAoClB,CAAC,CAACmB,MAAtC,CAAJ,EAA2D;AACzDnB,QAAAA,CAAC,CAACQ,cAAF;AACD;AACF,KAnO4C;AAAA,uGAqOuB,UAACR,CAAD,EAAO;AACzE,UAAMnC,KAAK,GAAGmC,CAAC,CAACK,aAAF,CAAgBxC,KAA9B;;AACA,UAAI,CAAC,MAAKuD,mBAAV,EAA+B;AAC7B,cAAK3C,QAAL,CAAc;AACZJ,UAAAA,mBAAmB,EAAE,MAAKgD,iBAAL,CAAuB,MAAKjD,KAAL,CAAWtB,OAAlC,EAA2Ce,KAA3C;AADT,SAAd;AAGD;;AACD,UAAI,MAAKG,KAAL,CAAWsD,QAAf,EAAyB;AACvB,cAAKtD,KAAL,CAAWsD,QAAX,CAAoBtB,CAApB;AACD;AACF,KA/O4C;AAAA,gGAiPe,UAACA,CAAD,EAAO;AACjE,UAAI,MAAKhC,KAAL,CAAWuD,aAAf,EAA8B;AAC5B,YAAMzE,QAAO,GAAG,MAAKkB,KAAL,CAAWuD,aAAX,CAAyBvB,CAAzB,EAA4B,MAAKhC,KAAL,CAAWlB,OAAvC,CAAhB;;AACA,YAAIA,QAAJ,EAAa;AACX,cAAI0E,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,aAA7B,EAA4C;AAC1ClE,YAAAA,IAAI,CAAC,6EACH,+GADE,CAAJ;AAED;;AACD,gBAAKiB,QAAL,CAAc;AACZ3B,YAAAA,OAAO,EAAPA,QADY;AAEZuB,YAAAA,mBAAmB,EAAE,MAAKgD,iBAAL,CAAuBvE,QAAvB,EAAgC,MAAKsB,KAAL,CAAWe,iBAA3C,CAFT;AAGZb,YAAAA,UAAU,EAAE0B,CAAC,CAACmB,MAAF,CAAStD;AAHT,WAAd;AAKD,SAVD,MAUO;AACL,gBAAKY,QAAL,CAAc;AAAEH,YAAAA,UAAU,EAAE0B,CAAC,CAACmB,MAAF,CAAStD;AAAvB,WAAd;AACD;AACF,OAfD,MAeO;AACL,YAAMf,SAAO,GAAG,MAAK0B,MAAL,CAAY,MAAKR,KAAL,CAAWlB,OAAvB,EAAgCkD,CAAC,CAACmB,MAAF,CAAStD,KAAzC,EAAgD,MAAKG,KAAL,CAAWO,QAA3D,CAAhB;;AACA,cAAKE,QAAL,CAAc;AACZ3B,UAAAA,OAAO,EAAPA,SADY;AAEZuB,UAAAA,mBAAmB,EAAE,MAAKgD,iBAAL,CAAuBvE,SAAvB,EAAgC,MAAKsB,KAAL,CAAWe,iBAA3C,CAFT;AAGZb,UAAAA,UAAU,EAAE0B,CAAC,CAACmB,MAAF,CAAStD;AAHT,SAAd;AAKD;AACF,KAzQ4C;AAAA,iGA2QkB,UAACuB,KAAD,EAAW;AACxE,OAAC,SAAD,EAAY,WAAZ,EAAyB,QAAzB,EAAmC,OAAnC,EAA4C2B,QAA5C,CAAqD3B,KAAK,CAACsB,GAA3D,KAAmE,MAAKiB,eAAxE,IAA2FvC,KAAK,CAACoB,cAAN,EAA3F;;AAEA,cAAQpB,KAAK,CAACsB,GAAd;AACE,aAAK,SAAL;AACE,gBAAKiB,eAAL,IAAwB,MAAKC,WAAL,CAAiB,MAAjB,CAAxB;AACA;;AACF,aAAK,WAAL;AACE,gBAAKD,eAAL,IAAwB,MAAKC,WAAL,CAAiB,MAAjB,CAAxB;AACA;;AACF,aAAK,QAAL;AACE,gBAAKnC,KAAL;;AACA;;AACF,aAAK,OAAL;AACE,gBAAKkC,eAAL,IAAwB,MAAKlB,aAAL,EAAxB;AACA;AAZJ;AAcD,KA5R4C;AAAA,sGA8RvB,UAACrB,KAAD,EAAgC;AACpD,UAAQV,MAAR,GAAmB,MAAKN,KAAxB,CAAQM,MAAR;;AAEA,UAAIU,KAAK,CAACsB,GAAN,CAAU1D,MAAV,KAAqB,CAArB,IAA0BoC,KAAK,CAACsB,GAAN,KAAc,GAA5C,EAAiD;AAC/C,cAAKmB,eAAL,CAAqBzC,KAAK,CAACsB,GAA3B;;AACA;AACD;;AAED,OAAC,SAAD,EAAY,WAAZ,EAAyB,QAAzB,EAAmC,OAAnC,EAA4CK,QAA5C,CAAqD3B,KAAK,CAACsB,GAA3D,KAAmE,MAAKiB,eAAxE,IAA2FvC,KAAK,CAACoB,cAAN,EAA3F;;AAEA,cAAQpB,KAAK,CAACsB,GAAd;AACE,aAAK,SAAL;AACE,cAAIhC,MAAJ,EAAY;AACV,kBAAKiD,eAAL,IAAwB,MAAKC,WAAL,CAAiB,MAAjB,CAAxB;AACD,WAFD,MAEO;AACL,kBAAKlC,IAAL;AACD;;AACD;;AACF,aAAK,WAAL;AACE,cAAIhB,MAAJ,EAAY;AACV,kBAAKiD,eAAL,IAAwB,MAAKC,WAAL,CAAiB,MAAjB,CAAxB;AACD,WAFD,MAEO;AACL,kBAAKlC,IAAL;AACD;;AACD;;AACF,aAAK,QAAL;AACE,gBAAKD,KAAL;;AACA;;AACF,aAAK,OAAL;AACA,aAAK,UAAL;AACA,aAAK,GAAL;AACE,cAAIf,MAAJ,EAAY;AACV,kBAAKiD,eAAL,IAAwB,MAAKlB,aAAL,EAAxB;AACD,WAFD,MAEO;AACL,kBAAKf,IAAL;AACD;;AACD;AA1BJ;AA4BD,KApU4C;AAAA,8FAsU/B,qBAAS,MAAKX,kBAAd,EAAkC,IAAlC,CAtU+B;AAAA,+FA0V9B,UAAC7B,MAAD,EAAsCgC,KAAtC,EAAwD;AACrE,yBAAoD,MAAKd,KAAzD;AAAA,UAAQO,kBAAR,gBAAQA,kBAAR;AAAA,UAA4BN,mBAA5B,gBAA4BA,mBAA5B;AACA,UAAQyD,YAAR,GAAyB,MAAK9D,KAA9B,CAAQ8D,YAAR;AACA,UAAMC,OAAO,GAAG7C,KAAK,KAAKP,kBAA1B;AACA,UAAMqD,QAAQ,GAAG9C,KAAK,KAAKb,mBAA3B;AAEA,aACE,qCAAC,KAAD,CAAO,QAAP;AAAgB,QAAA,GAAG,YAAKnB,MAAM,CAACW,KAAZ;AAAnB,SACGiE,YAAY,CAAC;AACZ5E,QAAAA,MAAM,EAANA,MADY;AAEZ6E,QAAAA,OAAO,EAAPA,OAFY;AAGZxB,QAAAA,QAAQ,EAAErD,MAAM,CAAC2D,KAHL;AAIZmB,QAAAA,QAAQ,EAARA,QAJY;AAKZ5E,QAAAA,QAAQ,EAAEF,MAAM,CAACE,QALL;AAMZ6E,QAAAA,OAAO,EAAE,MAAKC,iBANF;AAOZC,QAAAA,WAAW,EAAE,MAAKC,gBAPN;AAQZC,QAAAA,YAAY,EAAE,MAAKC;AARP,OAAD,CADf,CADF;AAcD,KA9W4C;AAAA,4FAgXjC,UAACC,OAAD,EAAgC;AAC1C,YAAKhD,QAAL,GAAgBgD,OAAhB;AACA,yBAAOA,OAAP,EAAgB,MAAKvE,KAAL,CAAWwE,MAA3B;AACD,KAnX4C;AAG3C,QAAQ3E,MAAR,GAAgCG,KAAhC,CAAQH,KAAR;AAAA,QAAe4E,YAAf,GAAgCzE,KAAhC,CAAeyE,YAAf;AAEA,QAAMC,YAAY,GAAG7E,MAAK,KAAK8E,SAAV,GAAsB9E,MAAtB,GAA8B4E,YAAnD;AAEA,UAAKtE,aAAL,GAAqB,EAArB;;AAEA,QAAIqD,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,aAA7B,EAA4C;AAC1CjE,MAAAA,qBAAqB,CAACO,KAAK,CAAClB,OAAP,CAArB;AACD;;AAED,UAAKsB,KAAL,GAAa;AACXM,MAAAA,MAAM,EAAE,KADG;AAEXC,MAAAA,kBAAkB,EAAE,CAAC,CAFV;AAGXN,MAAAA,mBAAmB,EAAE,MAAKgD,iBAAL,CAAuBrD,KAAK,CAAClB,OAA7B,EAAsC4F,YAAtC,CAHV;AAIXvD,MAAAA,iBAAiB,EAAEuD,YAJR;AAKX5F,MAAAA,OAAO,EAAEkB,KAAK,CAAClB,OALJ;AAMXwB,MAAAA,UAAU,EAAE;AAND,KAAb;;AASA,QAAIN,KAAK,CAACH,KAAN,KAAgB8E,SAApB,EAA+B;AAC7B,YAAKvB,mBAAL,GAA2B,IAA3B;AACD;;AAxB0C;AAyB5C;;;;SAsBD,eAAsB;AACpB,aAAO,KAAKJ,YAAL,CAAkBC,OAAlB,KAA8B,IAArC;AACD;;;WAMD,2BAAkBnE,OAAlB,EAA0De,KAA1D,EAA8E;AAC5E,aAAOf,OAAO,CAACG,SAAR,CAAkB,UAACW,IAAD,EAAU;AACjCC,QAAAA,KAAK,GAAG,OAAOD,IAAI,CAACC,KAAZ,KAAsB,QAAtB,GAAiC+E,MAAM,CAAC/E,KAAD,CAAvC,GAAiDA,KAAzD;AACA,eAAOD,IAAI,CAACC,KAAL,KAAeA,KAAtB;AACD,OAHM,CAAP;AAID;;;WA4BD,sBAAqBqB,KAArB,EAAoC;AAClC,aAAOA,KAAK,IAAI,CAAT,IAAcA,KAAK,GAAG,KAAKd,KAAL,CAAWtB,OAAX,CAAmBE,MAAhD;AACD;;;WAuCD,yBAAwBkC,KAAxB,EAAuD;AAAA,UAAhB2D,MAAgB,uEAAP,KAAO;AACrD,UAAMC,QAAQ,GAAG,KAAK9B,YAAL,CAAkBC,OAAnC;AACA,UAAMrD,IAAI,GAAGkF,QAAQ,GAAIA,QAAQ,CAACvC,QAAT,CAAkBrB,KAAlB,CAAJ,GAA+C,IAApE;;AAEA,UAAI,CAACtB,IAAL,EAAW;AACT;AACD;;AAED,UAAMmF,cAAc,GAAGD,QAAQ,CAACE,YAAhC;AACA,UAAMC,SAAS,GAAGH,QAAQ,CAACG,SAA3B;AACA,UAAMC,OAAO,GAAGtF,IAAI,CAACuF,SAArB;AACA,UAAMC,UAAU,GAAGxF,IAAI,CAACoF,YAAxB;;AAEA,UAAIH,MAAJ,EAAY;AACVC,QAAAA,QAAQ,CAACG,SAAT,GAAqBC,OAAO,GAAGH,cAAc,GAAG,CAA3B,GAA+BK,UAAU,GAAG,CAAjE;AACD,OAFD,MAEO,IAAIF,OAAO,GAAGE,UAAV,GAAuBL,cAAc,GAAGE,SAA5C,EAAuD;AAC5DH,QAAAA,QAAQ,CAACG,SAAT,GAAqBC,OAAO,GAAGH,cAAV,GAA2BK,UAAhD;AACD,OAFM,MAEA,IAAIF,OAAO,GAAGD,SAAd,EAAyB;AAC9BH,QAAAA,QAAQ,CAACG,SAAT,GAAqBC,OAArB;AACD;AACF;;;WAmLD,4BAAmBG,SAAnB,EAAiD;AAC/C;AACA,UAAI,CAAC,YAAGA,SAAS,CAACxF,KAAb,EAAoB,KAAKG,KAAL,CAAWH,KAA/B,CAAD,IAA0CwF,SAAS,CAACvG,OAAV,KAAsB,KAAKkB,KAAL,CAAWlB,OAA/E,EAAwF;AACtF,YAAI0E,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,aAA7B,EAA4C;AAC1CjE,UAAAA,qBAAqB,CAAC,KAAKO,KAAL,CAAWlB,OAAZ,CAArB;AACD;;AAED,aAAKsE,mBAAL,GAA2B,KAAKpD,KAAL,CAAWH,KAAX,KAAqB8E,SAAhD;;AACA,YAAM9E,OAAK,GAAG,KAAKG,KAAL,CAAWH,KAAX,KAAqB8E,SAArB,GAAiC,KAAKvE,KAAL,CAAWe,iBAA5C,GAAgE,KAAKnB,KAAL,CAAWH,KAAzF;;AACA,YAAMf,SAAO,GAAG,KAAKkB,KAAL,CAAWsF,UAAX,GAAwB,KAAK9E,MAAL,CAAY,KAAKR,KAAL,CAAWlB,OAAvB,EAAgC,KAAKsB,KAAL,CAAWE,UAA3C,EAAuD,KAAKN,KAAL,CAAWO,QAAlE,CAAxB,GAAsG,KAAKP,KAAL,CAAWlB,OAAjI;;AACA,aAAK2B,QAAL,CAAc;AACZU,UAAAA,iBAAiB,EAAEtB,OADP;AAEZQ,UAAAA,mBAAmB,EAAE,KAAKgD,iBAAL,CAAuBvE,SAAvB,EAAgCe,OAAhC,CAFT;AAGZf,UAAAA,OAAO,EAAPA;AAHY,SAAd;AAKD;AACF;;;WA6BD,kBAAS;AACP,yBAAsC,KAAKsB,KAA3C;AAAA,UAAQM,MAAR,gBAAQA,MAAR;AAAA,UAAgBS,iBAAhB,gBAAgBA,iBAAhB;AACA,wBAyBI,KAAKnB,KAzBT;AAAA,UACEsF,UADF,eACEA,UADF;AAAA,UAEEC,IAFF,eAEEA,IAFF;AAAA,UAGEC,SAHF,eAGEA,SAHF;AAAA,UAIEhB,MAJF,eAIEA,MAJF;AAAA,UAKEiB,UALF,eAKEA,UALF;AAAA,UAMEC,cANF,eAMEA,cANF;AAAA,UAOE5G,OAPF,eAOEA,OAPF;AAAA,UAQE6G,KARF,eAQEA,KARF;AAAA,UASEC,QATF,eASEA,QATF;AAAA,UAUEC,KAVF,eAUEA,KAVF;AAAA,UAWEvC,QAXF,eAWEA,QAXF;AAAA,UAYEwC,MAZF,eAYEA,MAZF;AAAA,UAaEC,OAbF,eAaEA,OAbF;AAAA,UAcE9B,OAdF,eAcEA,OAdF;AAAA,UAeEH,YAfF,eAeEA,YAfF;AAAA,UAgBEvB,QAhBF,eAgBEA,QAhBF;AAAA,UAiBEyD,SAjBF,eAiBEA,SAjBF;AAAA,UAkBEzC,aAlBF,eAkBEA,aAlBF;AAAA,UAmBEhD,QAnBF,eAmBEA,QAnBF;AAAA,UAoBE0F,cApBF,eAoBEA,cApBF;AAAA,UAqBEnF,MArBF,eAqBEA,MArBF;AAAA,UAsBEE,OAtBF,eAsBEA,OAtBF;AAAA,UAuBEkF,QAvBF,eAuBEA,QAvBF;AAAA,UAwBKC,SAxBL;AA0BA,UAAMnC,QAAQ,GAAG,KAAKoC,eAAL,EAAjB;AACA,UAAMvD,KAAK,GAAGmB,QAAQ,GAAGA,QAAQ,CAACnB,KAAZ,GAAoB8B,SAA1C;AAEA,UAAM0B,sBAAsB,GAC1B,qCAAC,yBAAD;AAAkB,QAAA,MAAM,EAAE,KAAKrD;AAA/B,SACG,KAAK5C,KAAL,CAAWtB,OAAX,CAAmBa,GAAnB,CAAuB,KAAKmE,YAA5B,CADH,EAEG,KAAK1D,KAAL,CAAWtB,OAAX,CAAmBE,MAAnB,KAA8B,CAA9B,IACD,qCAAC,gBAAD;AAAS,QAAA,KAAK,EAAC,GAAf;AAAmB,QAAA,MAAM,EAAC,SAA1B;AAAoC,QAAA,SAAS,EAAC;AAA9C,SACG,KAAKgB,KAAL,CAAWgG,SADd,CAHF,CADF;AAWA,UAAIM,eAAJ;;AAEA,UAAI,OAAOL,cAAP,KAA0B,UAA9B,EAA0C;AACxCK,QAAAA,eAAe,GAAGL,cAAc,CAAC;AAAEI,UAAAA,sBAAsB,EAAtBA;AAAF,SAAD,CAAhC;AACD,OAFD,MAEO,IAAIH,QAAJ,EAAc;AACnBI,QAAAA,eAAe,GACb;AAAK,UAAA,SAAS,EAAC;AAAf,WACE,qCAAC,gBAAD;AAAS,UAAA,IAAI,EAAC;AAAd,UADF,CADF;AAKD,OANM,MAMA;AACLA,QAAAA,eAAe,GAAGD,sBAAlB;AACD;;AAED,aACE;AACE,QAAA,SAAS,EAAE,gCAAa,cAAb,EAA6BT,QAA7B,CADb;AAEE,QAAA,SAAS,EAAEJ,SAFb;AAGE,QAAA,KAAK,EAAEK,KAHT;AAIE,QAAA,GAAG,EAAEJ,UAJP;AAKE,QAAA,OAAO,EAAE,KAAKc;AALhB,SAOG7F,MAAM,IAAI4E,UAAV,GACC,qCAAC,cAAD,6BACMa,SADN;AAEE,QAAA,SAAS,MAFX;AAGE,QAAA,MAAM,EAAE,KAAKL,MAHf;AAIE,QAAA,SAAS,EAAE,4BAAW;AACpB,gCAAsBpF,MADF;AAEpB,mDAAyCgF,cAAc,KAAK;AAFxC,SAAX,CAJb;AAQE,QAAA,KAAK,EAAE,KAAKtF,KAAL,CAAWE,UARpB;AASE,QAAA,SAAS,EAAE,KAAKkG,cATlB;AAUE,QAAA,QAAQ,EAAE,KAAKjD,aAVjB,CAWE;AACA;AACA;AAbF;AAcE,QAAA,OAAO,EAAEU,OAdX;AAeE,QAAA,KAAK,EAAE0B,KAAK,KAAKc,yBAASC,OAAnB,GAA6B,qCAAC,qBAAD,OAA7B,GAAkD,qCAAC,qBAAD,OAf3D;AAgBE,QAAA,WAAW,EAAEP,SAAS,CAACQ;AAhBzB,SADD,GAmBC,qCAAC,sBAAD,6BACMR,SADN;AAEE,uBAAa,IAFf;AAGE,QAAA,OAAO,EAAE,KAAKlC,OAHhB;AAIE,QAAA,SAAS,EAAE,KAAK2C,mBAJlB;AAKE,QAAA,OAAO,EAAE,KAAKC,WALhB;AAME,QAAA,OAAO,EAAE,KAAKd,OANhB;AAOE,QAAA,MAAM,EAAE,KAAKD,MAPf;AAQE,QAAA,SAAS,EAAE,4BAAW;AACpB,gCAAsBpF,MADF;AAEpB,mDAAyCgF,cAAc,KAAK;AAFxC,SAAX;AARb,UAaG7C,KAbH,CA1BJ,EA0CE;AACE,QAAA,GAAG,EAAE,KAAKiE,SADZ;AAEE,QAAA,IAAI,EAAEvB,IAFR;AAGE,QAAA,QAAQ,EAAE,KAAKwB,oBAHjB;AAIE,QAAA,MAAM,EAAEjB,MAJV;AAKE,QAAA,OAAO,EAAEC,OALX;AAME,QAAA,OAAO,EAAE9B,OANX;AAOE,QAAA,KAAK,EAAE9C,iBAPT;AAQE,uBAAa,IARf;AASE,QAAA,SAAS,EAAC;AATZ,SAWGrC,OAAO,CAACa,GAAR,CAAY,UAACC,IAAD;AAAA,eAAU;AAAQ,UAAA,GAAG,YAAKA,IAAI,CAACC,KAAV,CAAX;AAA8B,UAAA,KAAK,EAAED,IAAI,CAACC;AAA1C,UAAV;AAAA,OAAZ,CAXH,CA1CF,EAuDGa,MAAM,IACL;AACE,QAAA,SAAS,EAAE,4BAAW,uBAAX,yCAAoEiF,KAApE,GAA6E;AACtF,sDAA4CD,cAAc,KAAK;AADuB,SAA7E,CADb;AAIE,QAAA,YAAY,EAAE,KAAKsB;AAJrB,SAMGV,eANH,CAxDJ,CADF;AAoED;;;EA9fwBrG,KAAK,CAACgH,S;;8BAA3BlH,Y,kBACqC;AACvCuF,EAAAA,UAAU,EAAE,KAD2B;AAEvCxB,EAAAA,YAFuC,+BAEa;AAAA,QAArC5E,MAAqC,SAArCA,MAAqC;AAAA,QAA1Bc,KAA0B;AAClD,WACE,qCAAC,2BAAD,EAAwBA,KAAxB,CADF;AAGD,GANsC;AAOvClB,EAAAA,OAAO,EAAE,EAP8B;AAQvCkH,EAAAA,SAAS,EAAE,mBAR4B;AASvCzF,EAAAA,QAAQ,EAAE2G;AAT6B,C;;eAggB5B,gCAAa,oCAAenH,YAAf,EAA6B;AACvD4F,EAAAA,KAAK,EAAE;AADgD,CAA7B,CAAb,C","sourcesContent":["import * as React from 'react';\nimport SelectMimicry from '../SelectMimicry/SelectMimicry';\nimport { debounce, setRef } from '../../lib/utils';\nimport { classNames } from '../../lib/classNames';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport { SizeType, withAdaptivity } from '../../hoc/withAdaptivity';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { getClassName } from '../../helpers/getClassName';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { HasPlatform } from '../../types';\nimport Input from '../Input/Input';\nimport { Icon20Dropdown, Icon24Dropdown } from '@vkontakte/icons';\nimport Caption from '../Typography/Caption/Caption';\nimport { warnOnce } from '../../lib/warnOnce';\nimport Spinner from '../Spinner/Spinner';\nimport { defaultFilterFn } from '../../lib/select';\nimport { is } from '../../lib/is';\nimport './CustomSelect.css';\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (options: CustomSelectOptionInterface[], endIndex: number = options.length) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn('Some values of your options have different types. CustomSelect onChange always returns a string type.');\n }\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectState {\n inputValue?: string;\n opened?: boolean;\n focusedOptionIndex?: number;\n selectedOptionIndex?: number;\n nativeSelectValue?: SelectValue;\n options?: CustomSelectOptionInterface[];\n}\n\nexport interface CustomSelectProps extends NativeSelectProps, HasPlatform, FormFieldProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`\n */\n emptyText?: string;\n onInputChange?: (e: React.ChangeEvent, options: CustomSelectOptionInterface[]) => void | CustomSelectOptionInterface[];\n options: Array<{\n value: SelectValue;\n label: string;\n [index: string]: any;\n }>;\n /**\n * Функция для кастомной фильтрации. По-умолчанию поиск производится по option.label.\n */\n filterFn?: false | ((value: string, option: CustomSelectOptionInterface, getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В defaultDropdownContent содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({ defaultDropdownContent }: { defaultDropdownContent: React.ReactNode }) => React.ReactNode;\n /**\n * Если true, то в дропдауне вместо списка опций рисуется спиннер. При переданных renderDropdown и fetching: true,\n * \"победит\" renderDropdown\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nclass CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {\n static defaultProps: CustomSelectProps = {\n searchable: false,\n renderOption({ option, ...props }): React.ReactNode {\n return (\n <CustomSelectOption {...props} />\n );\n },\n options: [],\n emptyText: 'Ничего не найдено',\n filterFn: defaultFilterFn,\n };\n\n public constructor(props: CustomSelectProps) {\n super(props);\n\n const { value, defaultValue } = props;\n\n const initialValue = value !== undefined ? value : defaultValue;\n\n this.keyboardInput = '';\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(props.options);\n }\n\n this.state = {\n opened: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: this.findSelectedIndex(props.options, initialValue),\n nativeSelectValue: initialValue,\n options: props.options,\n inputValue: '',\n };\n\n if (props.value !== undefined) {\n this.isControlledOutside = true;\n }\n }\n\n public state: CustomSelectState;\n private keyboardInput: string;\n private isControlledOutside: boolean;\n private selectEl: HTMLSelectElement;\n private readonly scrollBoxRef = React.createRef<HTMLDivElement>();\n\n private readonly resetKeyboardInput = () => {\n this.keyboardInput = '';\n };\n\n private readonly getSelectedItem = () => {\n const { selectedOptionIndex, options } = this.state;\n\n if (!options.length) {\n return null;\n }\n\n return options[selectedOptionIndex];\n };\n\n get areOptionsShown() {\n return this.scrollBoxRef.current !== null;\n }\n\n filter = (options: CustomSelectProps['options'], inputValue: string, filterFn: CustomSelectProps['filterFn']) => {\n return typeof filterFn === 'function' ? options.filter((option) => filterFn(inputValue, option)) : options;\n };\n\n findSelectedIndex(options: CustomSelectOptionInterface[], value: SelectValue) {\n return options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n });\n }\n\n open = () => {\n this.setState(({ selectedOptionIndex }) => ({\n opened: true,\n focusedOptionIndex: selectedOptionIndex,\n }), () => {\n const { selectedOptionIndex } = this.state;\n\n if (this.isValidIndex(selectedOptionIndex)) {\n this.scrollToElement(selectedOptionIndex, true);\n }\n });\n typeof this.props.onOpen === 'function' && this.props.onOpen();\n };\n\n close = () => {\n this.resetKeyboardInput();\n\n this.setState(() => ({\n inputValue: '',\n opened: false,\n focusedOptionIndex: -1,\n options: this.props.options,\n }));\n typeof this.props.onClose === 'function' && this.props.onClose();\n };\n\n private isValidIndex(index: number) {\n return index >= 0 && index < this.state.options.length;\n }\n\n selectFocused = () => {\n const { focusedOptionIndex } = this.state;\n\n this.select(focusedOptionIndex);\n };\n\n select = (index: number) => {\n if (!this.isValidIndex(index)) {\n return;\n }\n\n const item = this.state.options[index];\n\n this.setState({\n nativeSelectValue: item.value,\n }, () => {\n const event = new Event('change', { bubbles: true });\n this.selectEl.dispatchEvent(event);\n });\n this.close();\n };\n\n onClick = () => {\n this.state.opened ? this.close() : this.open();\n };\n\n onFocus = () => {\n const event = new Event('focus');\n this.selectEl.dispatchEvent(event);\n };\n\n onBlur = () => {\n this.close();\n const event = new Event('blur');\n this.selectEl.dispatchEvent(event);\n };\n\n private scrollToElement(index: number, center = false) {\n const dropdown = this.scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }\n\n focusOptionByIndex = (index: number, scrollTo = true) => {\n if (index < 0 || index > this.state.options.length - 1) {\n return;\n }\n\n const option = this.state.options[index];\n\n if (option.disabled) {\n return;\n }\n\n scrollTo && this.scrollToElement(index);\n\n this.setState(() => ({\n focusedOptionIndex: index,\n }));\n };\n\n focusOption = (type: 'next' | 'prev') => {\n const { focusedOptionIndex } = this.state;\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(this.state.options, index);\n index = nextIndex === -1 ? findIndexAfter(this.state.options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(this.state.options, index);\n index = beforeIndex === -1 ? findIndexBefore(this.state.options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n this.focusOptionByIndex(index);\n };\n\n handleOptionHover: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n this.focusOptionByIndex(Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget), false);\n };\n\n handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n };\n\n handleOptionClick: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget);\n const option = this.state.options[index];\n\n if (option && !option.disabled) {\n this.selectFocused();\n }\n };\n\n resetFocusedOption = () => {\n this.setState({ focusedOptionIndex: -1 });\n };\n\n onKeyboardInput = (key: string) => {\n const fullInput = this.keyboardInput + key;\n\n const optionIndex = this.state.options.findIndex((option) => {\n return option.label.toLowerCase().includes(fullInput);\n });\n\n if (optionIndex > -1) {\n this.focusOptionByIndex(optionIndex);\n }\n\n this.keyboardInput = fullInput;\n };\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n onLabelClick = (e: React.MouseEvent<HTMLLabelElement>) => {\n if (this.scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n };\n\n onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const value = e.currentTarget.value;\n if (!this.isControlledOutside) {\n this.setState({\n selectedOptionIndex: this.findSelectedIndex(this.state.options, value),\n });\n }\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n };\n\n onInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n if (this.props.onInputChange) {\n const options = this.props.onInputChange(e, this.props.options);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn('This filtration method is deprecated. Return value of onInputChange will' +\n ' be ignored in v5.0.0. For custom filtration please update props.options by yourself or use filterFn property');\n }\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n } else {\n this.setState({ inputValue: e.target.value });\n }\n } else {\n const options = this.filter(this.props.options, e.target.value, this.props.filterFn);\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n }\n };\n\n onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n this.areOptionsShown && this.focusOption('prev');\n break;\n case 'ArrowDown':\n this.areOptionsShown && this.focusOption('next');\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n this.areOptionsShown && this.selectFocused();\n break;\n }\n };\n\n handleKeyDownSelect = (event: React.KeyboardEvent) => {\n const { opened } = this.state;\n\n if (event.key.length === 1 && event.key !== ' ') {\n this.onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n this.areOptionsShown && this.focusOption('prev');\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n this.areOptionsShown && this.focusOption('next');\n } else {\n this.open();\n }\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n this.areOptionsShown && this.selectFocused();\n } else {\n this.open();\n }\n break;\n }\n };\n\n handleKeyUp = debounce(this.resetKeyboardInput, 1000);\n\n componentDidUpdate(prevProps: CustomSelectProps) {\n // Внутри useEffect и так is, можно убрать\n if (!is(prevProps.value, this.props.value) || prevProps.options !== this.props.options) {\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(this.props.options);\n }\n\n this.isControlledOutside = this.props.value !== undefined;\n const value = this.props.value === undefined ? this.state.nativeSelectValue : this.props.value;\n const options = this.props.searchable ? this.filter(this.props.options, this.state.inputValue, this.props.filterFn) : this.props.options;\n this.setState({\n nativeSelectValue: value,\n selectedOptionIndex: this.findSelectedIndex(options, value),\n options,\n });\n }\n }\n\n renderOption = (option: CustomSelectOptionInterface, index: number) => {\n const { focusedOptionIndex, selectedOptionIndex } = this.state;\n const { renderOption } = this.props;\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOption({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: this.handleOptionClick,\n onMouseDown: this.handleOptionDown,\n onMouseEnter: this.handleOptionHover,\n })}\n </React.Fragment>\n );\n };\n\n selectRef = (element: HTMLSelectElement) => {\n this.selectEl = element;\n setRef(element, this.props.getRef);\n };\n\n render() {\n const { opened, nativeSelectValue } = this.state;\n const {\n searchable,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n options,\n sizeY,\n platform,\n style,\n onChange,\n onBlur,\n onFocus,\n onClick,\n renderOption,\n children,\n emptyText,\n onInputChange,\n filterFn,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n ...restProps\n } = this.props;\n const selected = this.getSelectedItem();\n const label = selected ? selected.label : undefined;\n\n const defaultDropdownContent = (\n <CustomScrollView boxRef={this.scrollBoxRef}>\n {this.state.options.map(this.renderOption)}\n {this.state.options.length === 0 &&\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"CustomSelect__empty\">\n {this.props.emptyText}\n </Caption>\n }\n </CustomScrollView>\n );\n\n let resolvedContent;\n\n if (typeof renderDropdown === 'function') {\n resolvedContent = renderDropdown({ defaultDropdownContent });\n } else if (fetching) {\n resolvedContent = (\n <div vkuiClass=\"CustomSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n );\n } else {\n resolvedContent = defaultDropdownContent;\n }\n\n return (\n <label\n vkuiClass={getClassName('CustomSelect', platform)}\n className={className}\n style={style}\n ref={getRootRef}\n onClick={this.onLabelClick}\n >\n {opened && searchable ?\n <Input\n {...restProps}\n autoFocus\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n value={this.state.inputValue}\n onKeyDown={this.onInputKeyDown}\n onChange={this.onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехвает Input. К сожалению, это приводит конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={onClick}\n after={sizeY === SizeType.COMPACT ? <Icon20Dropdown /> : <Icon24Dropdown />}\n placeholder={restProps.placeholder}\n /> :\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={this.onClick}\n onKeyDown={this.handleKeyDownSelect}\n onKeyUp={this.handleKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n >\n {label}\n </SelectMimicry>\n }\n <select\n ref={this.selectRef}\n name={name}\n onChange={this.onNativeSelectChange}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {options.map((item) => <option key={`${item.value}`} value={item.value} />)}\n </select>\n {opened &&\n <div\n vkuiClass={classNames('CustomSelect__options', `CustomSelect__options--sizeY-${sizeY}`, {\n 'CustomSelect__options--popupDirectionTop': popupDirection === 'top',\n })}\n onMouseLeave={this.resetFocusedOption}\n >\n {resolvedContent}\n </div>\n }\n </label>\n );\n }\n}\n\nexport default withPlatform(withAdaptivity(CustomSelect, {\n sizeY: true,\n}));\n"],"file":"CustomSelect.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":["findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","CustomSelect","props","React","createRef","keyboardInput","state","selectedOptionIndex","inputValue","filterFn","filter","setState","opened","focusedOptionIndex","isValidIndex","scrollToElement","onOpen","resetKeyboardInput","onClose","select","index","nativeSelectValue","event","Event","bubbles","selectEl","dispatchEvent","close","open","scrollTo","type","nextIndex","beforeIndex","focusOptionByIndex","e","Array","prototype","indexOf","call","currentTarget","parentNode","children","preventDefault","selectFocused","key","fullInput","optionIndex","label","toLowerCase","includes","scrollBoxRef","current","contains","target","isControlledOutside","findSelectedIndex","onChange","onInputChange","process","env","NODE_ENV","areOptionsShown","focusOption","onKeyboardInput","renderOption","hovered","selected","onClick","handleOptionClick","onMouseDown","handleOptionDown","onMouseEnter","handleOptionHover","element","getRef","defaultValue","initialValue","undefined","Number","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","prevProps","searchable","name","className","getRootRef","popupDirection","sizeY","platform","style","onBlur","onFocus","emptyText","renderDropdown","fetching","restProps","getSelectedItem","defaultDropdownContent","resolvedContent","onLabelClick","onInputKeyDown","placeholder","handleKeyDownSelect","handleKeyUp","selectRef","onNativeSelectChange","resetFocusedOption","Component","defaultFilterFn"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport SelectMimicry from '../SelectMimicry/SelectMimicry';\nimport { debounce, setRef } from '../../lib/utils';\nimport { classNames } from '../../lib/classNames';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport { withAdaptivity } from '../../hoc/withAdaptivity';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { getClassName } from '../../helpers/getClassName';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { HasPlatform } from '../../types';\nimport Input from '../Input/Input';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport Caption from '../Typography/Caption/Caption';\nimport { warnOnce } from '../../lib/warnOnce';\nimport Spinner from '../Spinner/Spinner';\nimport { defaultFilterFn } from '../../lib/select';\nimport { is } from '../../lib/is';\nimport './CustomSelect.css';\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (options: CustomSelectOptionInterface[], endIndex: number = options.length) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn('Some values of your options have different types. CustomSelect onChange always returns a string type.');\n }\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectState {\n inputValue?: string;\n opened?: boolean;\n focusedOptionIndex?: number;\n selectedOptionIndex?: number;\n nativeSelectValue?: SelectValue;\n options?: CustomSelectOptionInterface[];\n}\n\nexport interface CustomSelectProps extends NativeSelectProps, HasPlatform, FormFieldProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`\n */\n emptyText?: string;\n onInputChange?: (e: React.ChangeEvent, options: CustomSelectOptionInterface[]) => void | CustomSelectOptionInterface[];\n options: Array<{\n value: SelectValue;\n label: string;\n [index: string]: any;\n }>;\n /**\n * Функция для кастомной фильтрации. По-умолчанию поиск производится по option.label.\n */\n filterFn?: false | ((value: string, option: CustomSelectOptionInterface, getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В defaultDropdownContent содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({ defaultDropdownContent }: { defaultDropdownContent: React.ReactNode }) => React.ReactNode;\n /**\n * Если true, то в дропдауне вместо списка опций рисуется спиннер. При переданных renderDropdown и fetching: true,\n * \"победит\" renderDropdown\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nclass CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {\n static defaultProps: CustomSelectProps = {\n searchable: false,\n renderOption({ option, ...props }): React.ReactNode {\n return (\n <CustomSelectOption {...props} />\n );\n },\n options: [],\n emptyText: 'Ничего не найдено',\n filterFn: defaultFilterFn,\n };\n\n public constructor(props: CustomSelectProps) {\n super(props);\n\n const { value, defaultValue } = props;\n\n const initialValue = value !== undefined ? value : defaultValue;\n\n this.keyboardInput = '';\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(props.options);\n }\n\n this.state = {\n opened: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: this.findSelectedIndex(props.options, initialValue),\n nativeSelectValue: initialValue,\n options: props.options,\n inputValue: '',\n };\n\n if (props.value !== undefined) {\n this.isControlledOutside = true;\n }\n }\n\n private keyboardInput: string;\n private isControlledOutside: boolean;\n private selectEl: HTMLSelectElement;\n private readonly scrollBoxRef = React.createRef<HTMLDivElement>();\n\n private readonly resetKeyboardInput = () => {\n this.keyboardInput = '';\n };\n\n private readonly getSelectedItem = () => {\n const { selectedOptionIndex, options } = this.state;\n\n if (!options.length) {\n return null;\n }\n\n return options[selectedOptionIndex];\n };\n\n get areOptionsShown() {\n return this.scrollBoxRef.current !== null;\n }\n\n filter = (options: CustomSelectProps['options'], inputValue: string, filterFn: CustomSelectProps['filterFn']) => {\n return typeof filterFn === 'function' ? options.filter((option) => filterFn(inputValue, option)) : options;\n };\n\n findSelectedIndex(options: CustomSelectOptionInterface[], value: SelectValue) {\n return options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n });\n }\n\n open = () => {\n this.setState(({ selectedOptionIndex }) => ({\n opened: true,\n focusedOptionIndex: selectedOptionIndex,\n }), () => {\n const { selectedOptionIndex } = this.state;\n\n if (this.isValidIndex(selectedOptionIndex)) {\n this.scrollToElement(selectedOptionIndex, true);\n }\n });\n typeof this.props.onOpen === 'function' && this.props.onOpen();\n };\n\n close = () => {\n this.resetKeyboardInput();\n\n this.setState(() => ({\n inputValue: '',\n opened: false,\n focusedOptionIndex: -1,\n options: this.props.options,\n }));\n typeof this.props.onClose === 'function' && this.props.onClose();\n };\n\n private isValidIndex(index: number) {\n return index >= 0 && index < this.state.options.length;\n }\n\n selectFocused = () => {\n const { focusedOptionIndex } = this.state;\n\n this.select(focusedOptionIndex);\n };\n\n select = (index: number) => {\n if (!this.isValidIndex(index)) {\n return;\n }\n\n const item = this.state.options[index];\n\n this.setState({\n nativeSelectValue: item.value,\n }, () => {\n const event = new Event('change', { bubbles: true });\n this.selectEl.dispatchEvent(event);\n });\n this.close();\n };\n\n onClick = () => {\n this.state.opened ? this.close() : this.open();\n };\n\n onFocus = () => {\n const event = new Event('focus');\n this.selectEl.dispatchEvent(event);\n };\n\n onBlur = () => {\n this.close();\n const event = new Event('blur');\n this.selectEl.dispatchEvent(event);\n };\n\n private scrollToElement(index: number, center = false) {\n const dropdown = this.scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }\n\n focusOptionByIndex = (index: number, scrollTo = true) => {\n if (index < 0 || index > this.state.options.length - 1) {\n return;\n }\n\n const option = this.state.options[index];\n\n if (option.disabled) {\n return;\n }\n\n scrollTo && this.scrollToElement(index);\n\n this.setState(() => ({\n focusedOptionIndex: index,\n }));\n };\n\n focusOption = (type: 'next' | 'prev') => {\n const { focusedOptionIndex } = this.state;\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(this.state.options, index);\n index = nextIndex === -1 ? findIndexAfter(this.state.options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(this.state.options, index);\n index = beforeIndex === -1 ? findIndexBefore(this.state.options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n this.focusOptionByIndex(index);\n };\n\n handleOptionHover: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n this.focusOptionByIndex(Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget), false);\n };\n\n handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n };\n\n handleOptionClick: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget);\n const option = this.state.options[index];\n\n if (option && !option.disabled) {\n this.selectFocused();\n }\n };\n\n resetFocusedOption = () => {\n this.setState({ focusedOptionIndex: -1 });\n };\n\n onKeyboardInput = (key: string) => {\n const fullInput = this.keyboardInput + key;\n\n const optionIndex = this.state.options.findIndex((option) => {\n return option.label.toLowerCase().includes(fullInput);\n });\n\n if (optionIndex > -1) {\n this.focusOptionByIndex(optionIndex);\n }\n\n this.keyboardInput = fullInput;\n };\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n onLabelClick = (e: React.MouseEvent<HTMLLabelElement>) => {\n if (this.scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n };\n\n onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const value = e.currentTarget.value;\n if (!this.isControlledOutside) {\n this.setState({\n selectedOptionIndex: this.findSelectedIndex(this.state.options, value),\n });\n }\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n };\n\n onInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n if (this.props.onInputChange) {\n const options = this.props.onInputChange(e, this.props.options);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn('This filtration method is deprecated. Return value of onInputChange will' +\n ' be ignored in v5.0.0. For custom filtration please update props.options by yourself or use filterFn property');\n }\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n } else {\n this.setState({ inputValue: e.target.value });\n }\n } else {\n const options = this.filter(this.props.options, e.target.value, this.props.filterFn);\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n }\n };\n\n onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n this.areOptionsShown && this.focusOption('prev');\n break;\n case 'ArrowDown':\n this.areOptionsShown && this.focusOption('next');\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n this.areOptionsShown && this.selectFocused();\n break;\n }\n };\n\n handleKeyDownSelect = (event: React.KeyboardEvent) => {\n const { opened } = this.state;\n\n if (event.key.length === 1 && event.key !== ' ') {\n this.onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n this.areOptionsShown && this.focusOption('prev');\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n this.areOptionsShown && this.focusOption('next');\n } else {\n this.open();\n }\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n this.areOptionsShown && this.selectFocused();\n } else {\n this.open();\n }\n break;\n }\n };\n\n handleKeyUp = debounce(this.resetKeyboardInput, 1000);\n\n componentDidUpdate(prevProps: CustomSelectProps) {\n // Внутри useEffect и так is, можно убрать\n if (!is(prevProps.value, this.props.value) || prevProps.options !== this.props.options) {\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(this.props.options);\n }\n\n this.isControlledOutside = this.props.value !== undefined;\n const value = this.props.value === undefined ? this.state.nativeSelectValue : this.props.value;\n const options = this.props.searchable ? this.filter(this.props.options, this.state.inputValue, this.props.filterFn) : this.props.options;\n this.setState({\n nativeSelectValue: value,\n selectedOptionIndex: this.findSelectedIndex(options, value),\n options,\n });\n }\n }\n\n renderOption = (option: CustomSelectOptionInterface, index: number) => {\n const { focusedOptionIndex, selectedOptionIndex } = this.state;\n const { renderOption } = this.props;\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOption({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: this.handleOptionClick,\n onMouseDown: this.handleOptionDown,\n onMouseEnter: this.handleOptionHover,\n })}\n </React.Fragment>\n );\n };\n\n selectRef = (element: HTMLSelectElement) => {\n this.selectEl = element;\n setRef(element, this.props.getRef);\n };\n\n render() {\n const { opened, nativeSelectValue } = this.state;\n const {\n searchable,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n options,\n sizeY,\n platform,\n style,\n onChange,\n onBlur,\n onFocus,\n onClick,\n renderOption,\n children,\n emptyText,\n onInputChange,\n filterFn,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n ...restProps\n } = this.props;\n const selected = this.getSelectedItem();\n const label = selected ? selected.label : undefined;\n\n const defaultDropdownContent = (\n <CustomScrollView boxRef={this.scrollBoxRef}>\n {this.state.options.map(this.renderOption)}\n {this.state.options.length === 0 &&\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"CustomSelect__empty\">\n {this.props.emptyText}\n </Caption>\n }\n </CustomScrollView>\n );\n\n let resolvedContent;\n\n if (typeof renderDropdown === 'function') {\n resolvedContent = renderDropdown({ defaultDropdownContent });\n } else if (fetching) {\n resolvedContent = (\n <div vkuiClass=\"CustomSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n );\n } else {\n resolvedContent = defaultDropdownContent;\n }\n\n return (\n <label\n vkuiClass={getClassName('CustomSelect', platform)}\n className={className}\n style={style}\n ref={getRootRef}\n onClick={this.onLabelClick}\n >\n {opened && searchable ?\n <Input\n {...restProps}\n autoFocus\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n value={this.state.inputValue}\n onKeyDown={this.onInputKeyDown}\n onChange={this.onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехвает Input. К сожалению, это приводит конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={onClick}\n after={<DropdownIcon />}\n placeholder={restProps.placeholder}\n /> :\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={this.onClick}\n onKeyDown={this.handleKeyDownSelect}\n onKeyUp={this.handleKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n >\n {label}\n </SelectMimicry>\n }\n <select\n ref={this.selectRef}\n name={name}\n onChange={this.onNativeSelectChange}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {options.map((item) => <option key={`${item.value}`} value={item.value} />)}\n </select>\n {opened &&\n <div\n vkuiClass={classNames('CustomSelect__options', `CustomSelect__options--sizeY-${sizeY}`, {\n 'CustomSelect__options--popupDirectionTop': popupDirection === 'top',\n })}\n onMouseLeave={this.resetFocusedOption}\n >\n {resolvedContent}\n </div>\n }\n </label>\n );\n }\n}\n\nexport default withPlatform(withAdaptivity(CustomSelect, {\n sizeY: true,\n}));\n"],"file":"CustomSelect.js"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.DropdownIcon = void 0;
|
|
9
|
+
|
|
10
|
+
var _jsxRuntime = require("../../lib/jsxRuntime");
|
|
11
|
+
|
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _icons = require("@vkontakte/icons");
|
|
15
|
+
|
|
16
|
+
var _AdaptivityContext = require("../AdaptivityProvider/AdaptivityContext");
|
|
17
|
+
|
|
18
|
+
var _getClassName = require("../../helpers/getClassName");
|
|
19
|
+
|
|
20
|
+
var _useAdaptivity2 = require("../../hooks/useAdaptivity");
|
|
21
|
+
|
|
22
|
+
var _usePlatform = require("../../hooks/usePlatform");
|
|
23
|
+
|
|
24
|
+
var DropdownIcon = function DropdownIcon(props) {
|
|
25
|
+
var platform = (0, _usePlatform.usePlatform)();
|
|
26
|
+
|
|
27
|
+
var _useAdaptivity = (0, _useAdaptivity2.useAdaptivity)(),
|
|
28
|
+
sizeY = _useAdaptivity.sizeY;
|
|
29
|
+
|
|
30
|
+
var Icon = sizeY === _AdaptivityContext.SizeType.COMPACT ? _icons.Icon20Dropdown : _icons.Icon24ChevronDown;
|
|
31
|
+
return (0, _jsxRuntime.createScopedElement)(Icon, (0, _extends2.default)({
|
|
32
|
+
vkuiClass: (0, _getClassName.getClassName)('DropdownIcon', platform)
|
|
33
|
+
}, props));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.DropdownIcon = DropdownIcon;
|
|
37
|
+
//# sourceMappingURL=DropdownIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/DropdownIcon/DropdownIcon.tsx"],"names":["DropdownIcon","props","platform","sizeY","Icon","SizeType","COMPACT","Icon20Dropdown","Icon24ChevronDown"],"mappings":";;;;;;;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGO,IAAMA,YAAyD,GAAG,SAA5DA,YAA4D,CAACC,KAAD,EAAW;AAClF,MAAMC,QAAQ,GAAG,+BAAjB;;AACA,uBAAkB,oCAAlB;AAAA,MAAQC,KAAR,kBAAQA,KAAR;;AAEA,MAAMC,IAAI,GAAGD,KAAK,KAAKE,4BAASC,OAAnB,GACTC,qBADS,GAETC,wBAFJ;AAIA,SACE,qCAAC,IAAD;AAAM,IAAA,SAAS,EAAE,gCAAa,cAAb,EAA6BN,QAA7B;AAAjB,KAA6DD,KAA7D,EADF;AAGD,CAXM","sourcesContent":["import * as React from 'react';\nimport { Icon20Dropdown, Icon24ChevronDown } from '@vkontakte/icons';\nimport { SizeType } from '../AdaptivityProvider/AdaptivityContext';\nimport { getClassName } from '../../helpers/getClassName';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport './DropdownIcon.css';\n\nexport const DropdownIcon: React.FC<React.HTMLAttributes<HTMLElement>> = (props) => {\n const platform = usePlatform();\n const { sizeY } = useAdaptivity();\n\n const Icon = sizeY === SizeType.COMPACT\n ? Icon20Dropdown\n : Icon24ChevronDown;\n\n return (\n <Icon vkuiClass={getClassName('DropdownIcon', platform)} {...props} />\n );\n};\n"],"file":"DropdownIcon.js"}
|
|
@@ -85,15 +85,13 @@ var FocusTrap = function FocusTrap(_ref) {
|
|
|
85
85
|
}, []); // HANDLE FOCUSABLE NODES
|
|
86
86
|
|
|
87
87
|
(0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
|
|
88
|
-
var _ref$current2;
|
|
89
|
-
|
|
90
88
|
if (!ref.current) {
|
|
91
89
|
return (0, _utils.noop)();
|
|
92
90
|
}
|
|
93
91
|
|
|
94
|
-
var nodes = [];
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
var nodes = [];
|
|
93
|
+
Array.prototype.forEach.call( // eslint-disable-next-line no-restricted-properties
|
|
94
|
+
ref.current.querySelectorAll(FOCUSABLE_ELEMENTS), function (focusableEl) {
|
|
97
95
|
var _window$getComputedSt = window.getComputedStyle(focusableEl),
|
|
98
96
|
display = _window$getComputedSt.display,
|
|
99
97
|
visibility = _window$getComputedSt.visibility;
|