@vkontakte/vkui 4.37.4 → 4.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/.eslintcache +1 -1
- package/.cache/.stylelintcache +1 -1
- package/.cache/.tsbuildinfo +1099 -879
- package/.cache/ts/src/components/ActionSheetItem/ActionSheetItem.d.ts +5 -1
- package/.cache/ts/src/components/AppRoot/AppRoot.d.ts +1 -1
- package/.cache/ts/src/components/Button/Button.d.ts +1 -1
- package/.cache/ts/src/components/CardGrid/CardGrid.d.ts +1 -1
- package/.cache/ts/src/components/Checkbox/Checkbox.d.ts +1 -1
- package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/.cache/ts/src/components/DatePicker/DatePicker.d.ts +1 -1
- package/.cache/ts/src/components/Epic/Epic.d.ts +1 -1
- package/.cache/ts/src/components/Group/Group.d.ts +1 -1
- package/.cache/ts/src/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
- package/.cache/ts/src/components/IconButton/IconButton.d.ts +1 -1
- package/.cache/ts/src/components/Input/Input.d.ts +1 -1
- package/.cache/ts/src/components/ModalCard/ModalCard.d.ts +1 -1
- package/.cache/ts/src/components/ModalCardBase/ModalCardBase.d.ts +1 -1
- package/.cache/ts/src/components/ModalPage/ModalPage.d.ts +1 -1
- package/.cache/ts/src/components/NativeSelect/NativeSelect.d.ts +1 -1
- package/.cache/ts/src/components/Panel/Panel.d.ts +1 -1
- package/.cache/ts/src/components/PanelHeader/PanelHeader.d.ts +1 -1
- package/.cache/ts/src/components/PanelHeaderBack/PanelHeaderBack.d.ts +1 -1
- package/.cache/ts/src/components/PopoutRoot/PopoutRoot.d.ts +1 -1
- package/.cache/ts/src/components/Radio/Radio.d.ts +1 -1
- package/.cache/ts/src/components/RangeSlider/UniversalSlider.d.ts +1 -1
- package/.cache/ts/src/components/RichCell/RichCell.d.ts +1 -1
- package/.cache/ts/src/components/Search/Search.d.ts +1 -1
- package/.cache/ts/src/components/Select/Select.d.ts +1 -1
- package/.cache/ts/src/components/SelectMimicry/SelectMimicry.d.ts +1 -1
- package/.cache/ts/src/components/SimpleCell/SimpleCell.d.ts +1 -1
- package/.cache/ts/src/components/SliderSwitch/SliderSwitch.d.ts +2 -2
- package/.cache/ts/src/components/Snackbar/Snackbar.d.ts +1 -1
- package/.cache/ts/src/components/Tabs/Tabs.d.ts +1 -1
- package/.cache/ts/src/components/TabsItem/TabsItem.d.ts +1 -1
- package/.cache/ts/src/components/Tappable/Tappable.d.ts +1 -1
- package/.cache/ts/src/components/Textarea/Textarea.d.ts +1 -1
- package/.cache/ts/src/components/View/ViewInfinite.d.ts +1 -1
- package/.cache/ts/src/index.d.ts +1 -0
- package/.cache/ts/src/lib/accessibility.d.ts +6 -1
- package/dist/cjs/components/ActionSheetItem/ActionSheetItem.d.ts +5 -1
- package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +6 -2
- package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
- package/dist/cjs/components/AppRoot/AppRoot.d.ts +1 -1
- package/dist/cjs/components/Button/Button.d.ts +1 -1
- package/dist/cjs/components/CardGrid/CardGrid.d.ts +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/cjs/components/Epic/Epic.d.ts +1 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cjs/components/Group/Group.d.ts +1 -1
- package/dist/cjs/components/Group/Group.js +13 -1
- package/dist/cjs/components/Group/Group.js.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
- package/dist/cjs/components/IconButton/IconButton.d.ts +1 -1
- package/dist/cjs/components/Input/Input.d.ts +1 -1
- package/dist/cjs/components/ModalCard/ModalCard.d.ts +1 -1
- package/dist/cjs/components/ModalCardBase/ModalCardBase.d.ts +1 -1
- package/dist/cjs/components/ModalPage/ModalPage.d.ts +1 -1
- package/dist/cjs/components/NativeSelect/NativeSelect.d.ts +1 -1
- package/dist/cjs/components/Panel/Panel.d.ts +1 -1
- package/dist/cjs/components/PanelHeader/PanelHeader.d.ts +1 -1
- package/dist/cjs/components/PanelHeaderBack/PanelHeaderBack.d.ts +1 -1
- package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js +3 -0
- package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
- package/dist/cjs/components/PopoutRoot/PopoutRoot.d.ts +1 -1
- package/dist/cjs/components/Radio/Radio.d.ts +1 -1
- package/dist/cjs/components/RangeSlider/UniversalSlider.d.ts +1 -1
- package/dist/cjs/components/RichCell/RichCell.d.ts +1 -1
- package/dist/cjs/components/Search/Search.d.ts +1 -1
- package/dist/cjs/components/Select/Select.d.ts +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.d.ts +1 -1
- package/dist/cjs/components/SimpleCell/SimpleCell.d.ts +1 -1
- package/dist/cjs/components/SliderSwitch/SliderSwitch.d.ts +2 -2
- package/dist/cjs/components/Snackbar/Snackbar.d.ts +1 -1
- package/dist/cjs/components/Tabs/Tabs.d.ts +1 -1
- package/dist/cjs/components/Tabs/Tabs.js +127 -3
- package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
- package/dist/cjs/components/TabsItem/TabsItem.d.ts +1 -1
- package/dist/cjs/components/TabsItem/TabsItem.js +26 -2
- package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.d.ts +1 -1
- package/dist/cjs/components/Textarea/Textarea.d.ts +1 -1
- package/dist/cjs/components/View/ViewInfinite.d.ts +1 -1
- package/dist/cjs/hooks/useWaitTransitionFinish.js +15 -2
- package/dist/cjs/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/accessibility.d.ts +6 -1
- package/dist/cjs/lib/accessibility.js +25 -0
- package/dist/cjs/lib/accessibility.js.map +1 -1
- package/dist/cjs/lib/calendar.d.ts +2 -2
- package/dist/components/ActionSheetItem/ActionSheetItem.d.ts +5 -1
- package/dist/components/ActionSheetItem/ActionSheetItem.js +6 -2
- package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
- package/dist/components/AppRoot/AppRoot.d.ts +1 -1
- package/dist/components/Button/Button.d.ts +1 -1
- package/dist/components/CardGrid/CardGrid.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/components/Epic/Epic.d.ts +1 -1
- package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/components/Group/Group.d.ts +1 -1
- package/dist/components/Group/Group.js +12 -1
- package/dist/components/Group/Group.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
- package/dist/components/IconButton/IconButton.d.ts +1 -1
- package/dist/components/Input/Input.d.ts +1 -1
- package/dist/components/ModalCard/ModalCard.d.ts +1 -1
- package/dist/components/ModalCardBase/ModalCardBase.d.ts +1 -1
- package/dist/components/ModalPage/ModalPage.d.ts +1 -1
- package/dist/components/NativeSelect/NativeSelect.d.ts +1 -1
- package/dist/components/Panel/Panel.d.ts +1 -1
- package/dist/components/PanelHeader/PanelHeader.d.ts +1 -1
- package/dist/components/PanelHeaderBack/PanelHeaderBack.d.ts +1 -1
- package/dist/components/PanelHeaderContext/PanelHeaderContext.js +3 -0
- package/dist/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
- package/dist/components/PopoutRoot/PopoutRoot.d.ts +1 -1
- package/dist/components/Radio/Radio.d.ts +1 -1
- package/dist/components/RangeSlider/UniversalSlider.d.ts +1 -1
- package/dist/components/RichCell/RichCell.d.ts +1 -1
- package/dist/components/Search/Search.d.ts +1 -1
- package/dist/components/Select/Select.d.ts +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.d.ts +1 -1
- package/dist/components/SimpleCell/SimpleCell.d.ts +1 -1
- package/dist/components/SliderSwitch/SliderSwitch.d.ts +2 -2
- package/dist/components/Snackbar/Snackbar.d.ts +1 -1
- package/dist/components/Tabs/Tabs.d.ts +1 -1
- package/dist/components/Tabs/Tabs.js +124 -3
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/TabsItem/TabsItem.d.ts +1 -1
- package/dist/components/TabsItem/TabsItem.js +26 -3
- package/dist/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +1 -1
- package/dist/components/Textarea/Textarea.d.ts +1 -1
- package/dist/components/View/ViewInfinite.d.ts +1 -1
- package/dist/components.css +2 -2
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.css +1 -1
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.d.ts +5 -1
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +6 -2
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.d.ts +1 -1
- package/dist/cssm/components/Button/Button.d.ts +1 -1
- package/dist/cssm/components/CardGrid/CardGrid.d.ts +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/cssm/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/cssm/components/Epic/Epic.d.ts +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cssm/components/Group/Group.d.ts +1 -1
- package/dist/cssm/components/Group/Group.js +12 -1
- package/dist/cssm/components/Group/Group.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
- package/dist/cssm/components/IconButton/IconButton.d.ts +1 -1
- package/dist/cssm/components/Input/Input.d.ts +1 -1
- package/dist/cssm/components/ModalCard/ModalCard.d.ts +1 -1
- package/dist/cssm/components/ModalCardBase/ModalCardBase.d.ts +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.css +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.d.ts +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.d.ts +1 -1
- package/dist/cssm/components/Panel/Panel.d.ts +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.d.ts +1 -1
- package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.d.ts +1 -1
- package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js +3 -0
- package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
- package/dist/cssm/components/PopoutRoot/PopoutRoot.d.ts +1 -1
- package/dist/cssm/components/Radio/Radio.d.ts +1 -1
- package/dist/cssm/components/RangeSlider/UniversalSlider.d.ts +1 -1
- package/dist/cssm/components/RichCell/RichCell.d.ts +1 -1
- package/dist/cssm/components/Search/Search.d.ts +1 -1
- package/dist/cssm/components/Select/Select.d.ts +1 -1
- package/dist/cssm/components/SelectMimicry/SelectMimicry.d.ts +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.d.ts +1 -1
- package/dist/cssm/components/SliderSwitch/SliderSwitch.d.ts +2 -2
- package/dist/cssm/components/Snackbar/Snackbar.d.ts +1 -1
- package/dist/cssm/components/Tabs/Tabs.d.ts +1 -1
- package/dist/cssm/components/Tabs/Tabs.js +124 -3
- package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.d.ts +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.js +26 -3
- package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.d.ts +1 -1
- package/dist/cssm/components/Textarea/Textarea.d.ts +1 -1
- package/dist/cssm/components/View/ViewInfinite.d.ts +1 -1
- package/dist/cssm/hooks/useWaitTransitionFinish.js +14 -2
- package/dist/cssm/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/cssm/index.d.ts +1 -0
- package/dist/cssm/index.js +4 -0
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/accessibility.d.ts +6 -1
- package/dist/cssm/lib/accessibility.js +25 -0
- package/dist/cssm/lib/accessibility.js.map +1 -1
- package/dist/cssm/lib/calendar.d.ts +2 -2
- package/dist/cssm/styles/components.css +2 -2
- package/dist/hooks/useWaitTransitionFinish.js +14 -2
- package/dist/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/accessibility.d.ts +6 -1
- package/dist/lib/accessibility.js +25 -0
- package/dist/lib/accessibility.js.map +1 -1
- package/dist/lib/calendar.d.ts +2 -2
- package/dist/vkui.css +2 -2
- package/dist/vkui.css.map +1 -1
- package/package.json +15 -12
- package/src/components/ActionSheetItem/ActionSheetItem.css +0 -3
- package/src/components/ActionSheetItem/ActionSheetItem.tsx +6 -3
- package/src/components/FocusTrap/FocusTrap.tsx +0 -1
- package/src/components/Group/Group.tsx +19 -0
- package/src/components/ModalPage/ModalPage.css +1 -2
- package/src/components/PanelHeaderContext/PanelHeaderContext.tsx +3 -1
- package/src/components/Tabs/Readme.md +34 -3
- package/src/components/Tabs/Tabs.tsx +115 -1
- package/src/components/TabsItem/TabsItem.tsx +26 -0
- package/src/hooks/useWaitTransitionFinish.ts +14 -2
- package/src/index.ts +1 -0
- package/src/lib/accessibility.ts +30 -0
- package/tsconfig.json +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["children", "mode", "getRootRef", "sizeX"];
|
|
3
|
+
var _excluded = ["children", "mode", "getRootRef", "sizeX", "role"];
|
|
4
4
|
import { createScopedElement } from "../../lib/jsxRuntime";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { classNames } from "../../lib/classNames";
|
|
@@ -8,6 +8,9 @@ import { usePlatform } from "../../hooks/usePlatform";
|
|
|
8
8
|
import { IOS, VKCOM } from "../../lib/platform";
|
|
9
9
|
import { withAdaptivity } from "../../hoc/withAdaptivity";
|
|
10
10
|
import { warnOnce } from "../../lib/warnOnce";
|
|
11
|
+
import { useGlobalEventListener } from "../../hooks/useGlobalEventListener";
|
|
12
|
+
import { useDOM } from "../../lib/dom";
|
|
13
|
+
import { pressedKey } from "../../lib/accessibility";
|
|
11
14
|
import "./Tabs.css";
|
|
12
15
|
var warn = warnOnce("Tabs");
|
|
13
16
|
export var TabsModeContext = /*#__PURE__*/React.createContext({
|
|
@@ -21,10 +24,18 @@ var TabsComponent = function TabsComponent(_ref) {
|
|
|
21
24
|
mode = _ref$mode === void 0 ? "default" : _ref$mode,
|
|
22
25
|
getRootRef = _ref.getRootRef,
|
|
23
26
|
sizeX = _ref.sizeX,
|
|
27
|
+
_ref$role = _ref.role,
|
|
28
|
+
role = _ref$role === void 0 ? "tablist" : _ref$role,
|
|
24
29
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
25
30
|
|
|
26
31
|
var platform = usePlatform();
|
|
27
32
|
|
|
33
|
+
var _useDOM = useDOM(),
|
|
34
|
+
document = _useDOM.document;
|
|
35
|
+
|
|
36
|
+
var isTabFlow = role === "tablist";
|
|
37
|
+
var tabsRef = React.useRef(null);
|
|
38
|
+
|
|
28
39
|
if ((mode === "buttons" || mode === "segmented") && process.env.NODE_ENV === "development") {
|
|
29
40
|
var expectedValueText = mode === "buttons" ? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \"secondary\"" : "компонент SegmentedControl";
|
|
30
41
|
warn("mode=\"".concat(mode, "\" \u0443\u0441\u0442\u0430\u0440\u0435\u043B\u043E \u0438 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u043E \u0432 5.0.0. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 ").concat(expectedValueText));
|
|
@@ -39,12 +50,122 @@ var TabsComponent = function TabsComponent(_ref) {
|
|
|
39
50
|
}
|
|
40
51
|
|
|
41
52
|
var withGaps = mode === "accent" || mode === "secondary";
|
|
53
|
+
|
|
54
|
+
var getTabEls = function getTabEls() {
|
|
55
|
+
if (!tabsRef.current) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return Array.from( // eslint-disable-next-line no-restricted-properties
|
|
60
|
+
tabsRef.current.querySelectorAll("[role=tab]:not([disabled])"));
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
var handleDocumentKeydown = function handleDocumentKeydown(event) {
|
|
64
|
+
if (!document || !tabsRef.current || !isTabFlow) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
var key = pressedKey(event);
|
|
69
|
+
|
|
70
|
+
switch (key) {
|
|
71
|
+
case "ArrowLeft":
|
|
72
|
+
case "ArrowRight":
|
|
73
|
+
case "End":
|
|
74
|
+
case "Home":
|
|
75
|
+
{
|
|
76
|
+
var tabEls = getTabEls();
|
|
77
|
+
var currentFocusedElIndex = tabEls.findIndex(function (el) {
|
|
78
|
+
return document.activeElement === el;
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
if (currentFocusedElIndex === -1) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
var nextIndex = 0;
|
|
86
|
+
|
|
87
|
+
if (key === "Home") {
|
|
88
|
+
nextIndex = 0;
|
|
89
|
+
} else if (key === "End") {
|
|
90
|
+
nextIndex = tabEls.length - 1;
|
|
91
|
+
} else {
|
|
92
|
+
var offset = key === "ArrowRight" ? 1 : -1;
|
|
93
|
+
nextIndex = currentFocusedElIndex + offset;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var nextTabEl = tabEls[nextIndex];
|
|
97
|
+
|
|
98
|
+
if (nextTabEl) {
|
|
99
|
+
event.preventDefault();
|
|
100
|
+
nextTabEl.focus();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
В JAWS и NVDA стрелка вниз активирует контент.
|
|
108
|
+
Это не прописано в стандартах, но по ссылке ниже это рекомендуется делать.
|
|
109
|
+
https://inclusive-components.design/tabbed-interfaces/
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
case "ArrowDown":
|
|
113
|
+
{
|
|
114
|
+
var _tabEls = getTabEls();
|
|
115
|
+
|
|
116
|
+
var currentFocusedEl = _tabEls.find(function (el) {
|
|
117
|
+
return document.activeElement === el;
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
if (!currentFocusedEl || currentFocusedEl.getAttribute("aria-selected") !== "true") {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
var relatedContentElId = currentFocusedEl.getAttribute("aria-controls");
|
|
125
|
+
|
|
126
|
+
if (!relatedContentElId) {
|
|
127
|
+
return;
|
|
128
|
+
} // eslint-disable-next-line no-restricted-properties
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
var relatedContentEl = document.getElementById(relatedContentElId);
|
|
132
|
+
|
|
133
|
+
if (!relatedContentEl) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
event.preventDefault();
|
|
138
|
+
relatedContentEl.focus();
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
case "Space":
|
|
143
|
+
case "Enter":
|
|
144
|
+
{
|
|
145
|
+
var _tabEls2 = getTabEls();
|
|
146
|
+
|
|
147
|
+
var _currentFocusedEl = _tabEls2.find(function (el) {
|
|
148
|
+
return document.activeElement === el;
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
if (_currentFocusedEl) {
|
|
152
|
+
_currentFocusedEl.click();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
useGlobalEventListener(document, "keydown", handleDocumentKeydown, {
|
|
159
|
+
capture: true
|
|
160
|
+
});
|
|
42
161
|
return createScopedElement("div", _extends({}, restProps, {
|
|
43
162
|
ref: getRootRef,
|
|
44
163
|
vkuiClass: classNames("Tabs", (platform === IOS || platform === VKCOM) && "Tabs--".concat(platform), "Tabs--".concat(mode), withGaps && "Tabs--withGaps", // TODO v5.0.0 новая адаптивность
|
|
45
|
-
"Tabs--sizeX-".concat(sizeX))
|
|
164
|
+
"Tabs--sizeX-".concat(sizeX)),
|
|
165
|
+
role: role
|
|
46
166
|
}), createScopedElement("div", {
|
|
47
|
-
vkuiClass: "Tabs__in"
|
|
167
|
+
vkuiClass: "Tabs__in",
|
|
168
|
+
ref: tabsRef
|
|
48
169
|
}, createScopedElement(TabsModeContext.Provider, {
|
|
49
170
|
value: {
|
|
50
171
|
mode: mode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":["React","classNames","usePlatform","IOS","VKCOM","withAdaptivity","warnOnce","warn","TabsModeContext","createContext","mode","withGaps","TabsComponent","children","getRootRef","sizeX","restProps","platform","process","env","NODE_ENV","expectedValueText","Tabs","displayName"],"sources":["../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNames } from \"../../lib/classNames\";\nimport { HasRootRef } from \"../../types\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { IOS, VKCOM } from \"../../lib/platform\";\nimport { withAdaptivity, AdaptivityProps } from \"../../hoc/withAdaptivity\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport \"./Tabs.css\";\n\nexport interface TabsProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement>,\n AdaptivityProps {\n /**\n * Задаёт вид кнопок.\n *\n * > ⚠️ Значения `\"buttons\"`, `\"segmented\"` устарели и будут удалены в 5.0.0. Вместо `\"buttons\"` используйте `\"secondary\"`.\n * > Режим `\"segmented\"` переехал в отдельный компонент [`SegmentedControl`](https://vkcom.github.io/VKUI#/SegmentedControl),\n * > поэтому используйте его вместо `Tabs`.\n */\n mode?: \"buttons\" | \"segmented\" | \"default\" | \"accent\" | \"secondary\";\n}\n\nconst warn = warnOnce(\"Tabs\");\n\nexport interface TabsContextProps {\n mode: TabsProps[\"mode\"];\n withGaps: boolean;\n}\n\nexport const TabsModeContext = React.createContext<TabsContextProps>({\n mode: \"default\",\n withGaps: false,\n});\n\nconst TabsComponent = ({\n children,\n mode = \"default\",\n getRootRef,\n sizeX,\n ...restProps\n}: TabsProps) => {\n const platform = usePlatform();\n\n if (\n (mode === \"buttons\" || mode === \"segmented\") &&\n process.env.NODE_ENV === \"development\"\n ) {\n const expectedValueText =\n mode === \"buttons\"\n ? `значения \"secondary\"`\n : \"компонент SegmentedControl\";\n warn(\n `mode=\"${mode}\" устарело и будет удалено в 5.0.0. Используйте ${expectedValueText}`\n );\n }\n\n if (platform !== IOS && mode === \"segmented\") {\n mode = \"default\";\n }\n\n if (mode === \"buttons\") {\n mode = \"secondary\";\n }\n\n const withGaps = mode === \"accent\" || mode === \"secondary\";\n\n return (\n <div\n {...restProps}\n ref={getRootRef}\n vkuiClass={classNames(\n \"Tabs\",\n (platform === IOS || platform === VKCOM) && `Tabs--${platform}`,\n `Tabs--${mode}`,\n withGaps && \"Tabs--withGaps\",\n // TODO v5.0.0 новая адаптивность\n `Tabs--sizeX-${sizeX}`\n )}\n >\n <div vkuiClass=\"Tabs__in\">\n <TabsModeContext.Provider value={{ mode, withGaps }}>\n {children}\n </TabsModeContext.Provider>\n </div>\n </div>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tabs\n */\nexport const Tabs = withAdaptivity(TabsComponent, { sizeX: true });\n\nTabs.displayName = \"Tabs\";\n"],"mappings":";;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT;AAEA,SAASC,WAAT;AACA,SAASC,GAAT,EAAcC,KAAd;AACA,SAASC,cAAT;AACA,SAASC,QAAT;AACA;AAgBA,IAAMC,IAAI,GAAGD,QAAQ,CAAC,MAAD,CAArB;AAOA,OAAO,IAAME,eAAe,gBAAGR,KAAK,CAACS,aAAN,CAAsC;EACnEC,IAAI,EAAE,SAD6D;EAEnEC,QAAQ,EAAE;AAFyD,CAAtC,CAAxB;;AAKP,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,OAML;EAAA,IALfC,QAKe,QALfA,QAKe;EAAA,qBAJfH,IAIe;EAAA,IAJfA,IAIe,0BAJR,SAIQ;EAAA,IAHfI,UAGe,QAHfA,UAGe;EAAA,IAFfC,KAEe,QAFfA,KAEe;EAAA,IADZC,SACY;;EACf,IAAMC,QAAQ,GAAGf,WAAW,EAA5B;;EAEA,IACE,CAACQ,IAAI,KAAK,SAAT,IAAsBA,IAAI,KAAK,WAAhC,KACAQ,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,aAF3B,EAGE;IACA,IAAMC,iBAAiB,GACrBX,IAAI,KAAK,SAAT,sEAEI,4BAHN;IAIAH,IAAI,kBACOG,IADP,mOAC8DW,iBAD9D,EAAJ;EAGD;;EAED,IAAIJ,QAAQ,KAAKd,GAAb,IAAoBO,IAAI,KAAK,WAAjC,EAA8C;IAC5CA,IAAI,GAAG,SAAP;EACD;;EAED,IAAIA,IAAI,KAAK,SAAb,EAAwB;IACtBA,IAAI,GAAG,WAAP;EACD;;EAED,IAAMC,QAAQ,GAAGD,IAAI,KAAK,QAAT,IAAqBA,IAAI,KAAK,WAA/C;EAEA,OACE,wCACMM,SADN;IAEE,GAAG,EAAEF,UAFP;IAGE,SAAS,EAAEb,UAAU,CACnB,MADmB,EAEnB,CAACgB,QAAQ,KAAKd,GAAb,IAAoBc,QAAQ,KAAKb,KAAlC,qBAAqDa,QAArD,CAFmB,kBAGVP,IAHU,GAInBC,QAAQ,IAAI,gBAJO,EAKnB;IALmB,sBAMJI,KANI;EAHvB,IAYE;IAAK,SAAS,EAAC;EAAf,GACE,oBAAC,eAAD,CAAiB,QAAjB;IAA0B,KAAK,EAAE;MAAEL,IAAI,EAAJA,IAAF;MAAQC,QAAQ,EAARA;IAAR;EAAjC,GACGE,QADH,CADF,CAZF,CADF;AAoBD,CApDD;AAsDA;AACA;AACA;;;AACA,OAAO,IAAMS,IAAI,GAAGjB,cAAc,CAACO,aAAD,EAAgB;EAAEG,KAAK,EAAE;AAAT,CAAhB,CAA3B;AAEPO,IAAI,CAACC,WAAL,GAAmB,MAAnB"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":["React","classNames","usePlatform","IOS","VKCOM","withAdaptivity","warnOnce","useGlobalEventListener","useDOM","pressedKey","warn","TabsModeContext","createContext","mode","withGaps","TabsComponent","children","getRootRef","sizeX","role","restProps","platform","document","isTabFlow","tabsRef","useRef","process","env","NODE_ENV","expectedValueText","getTabEls","current","Array","from","querySelectorAll","handleDocumentKeydown","event","key","tabEls","currentFocusedElIndex","findIndex","el","activeElement","nextIndex","length","offset","nextTabEl","preventDefault","focus","currentFocusedEl","find","getAttribute","relatedContentElId","relatedContentEl","getElementById","click","capture","Tabs","displayName"],"sources":["../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNames } from \"../../lib/classNames\";\nimport { HasRootRef } from \"../../types\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { IOS, VKCOM } from \"../../lib/platform\";\nimport { withAdaptivity, AdaptivityProps } from \"../../hoc/withAdaptivity\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { useDOM } from \"../../lib/dom\";\nimport { pressedKey } from \"../../lib/accessibility\";\nimport \"./Tabs.css\";\n\nexport interface TabsProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement>,\n AdaptivityProps {\n /**\n * Задаёт вид кнопок.\n *\n * > ⚠️ Значения `\"buttons\"`, `\"segmented\"` устарели и будут удалены в 5.0.0. Вместо `\"buttons\"` используйте `\"secondary\"`.\n * > Режим `\"segmented\"` переехал в отдельный компонент [`SegmentedControl`](https://vkcom.github.io/VKUI#/SegmentedControl),\n * > поэтому используйте его вместо `Tabs`.\n */\n mode?: \"buttons\" | \"segmented\" | \"default\" | \"accent\" | \"secondary\";\n}\n\nconst warn = warnOnce(\"Tabs\");\n\nexport interface TabsContextProps {\n mode: TabsProps[\"mode\"];\n withGaps: boolean;\n}\n\nexport const TabsModeContext = React.createContext<TabsContextProps>({\n mode: \"default\",\n withGaps: false,\n});\n\nconst TabsComponent = ({\n children,\n mode = \"default\",\n getRootRef,\n sizeX,\n role = \"tablist\",\n ...restProps\n}: TabsProps) => {\n const platform = usePlatform();\n const { document } = useDOM();\n\n const isTabFlow = role === \"tablist\";\n\n const tabsRef = React.useRef<HTMLDivElement>(null);\n\n if (\n (mode === \"buttons\" || mode === \"segmented\") &&\n process.env.NODE_ENV === \"development\"\n ) {\n const expectedValueText =\n mode === \"buttons\"\n ? `значения \"secondary\"`\n : \"компонент SegmentedControl\";\n warn(\n `mode=\"${mode}\" устарело и будет удалено в 5.0.0. Используйте ${expectedValueText}`\n );\n }\n\n if (platform !== IOS && mode === \"segmented\") {\n mode = \"default\";\n }\n\n if (mode === \"buttons\") {\n mode = \"secondary\";\n }\n\n const withGaps = mode === \"accent\" || mode === \"secondary\";\n\n const getTabEls = () => {\n if (!tabsRef.current) {\n return [];\n }\n\n return Array.from(\n // eslint-disable-next-line no-restricted-properties\n tabsRef.current.querySelectorAll<HTMLDivElement>(\n \"[role=tab]:not([disabled])\"\n )\n );\n };\n\n const handleDocumentKeydown = (event: KeyboardEvent) => {\n if (!document || !tabsRef.current || !isTabFlow) {\n return;\n }\n\n const key = pressedKey(event);\n\n switch (key) {\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"End\":\n case \"Home\": {\n const tabEls = getTabEls();\n const currentFocusedElIndex = tabEls.findIndex(\n (el) => document.activeElement === el\n );\n if (currentFocusedElIndex === -1) {\n return;\n }\n\n let nextIndex = 0;\n if (key === \"Home\") {\n nextIndex = 0;\n } else if (key === \"End\") {\n nextIndex = tabEls.length - 1;\n } else {\n const offset = key === \"ArrowRight\" ? 1 : -1;\n nextIndex = currentFocusedElIndex + offset;\n }\n\n const nextTabEl = tabEls[nextIndex];\n\n if (nextTabEl) {\n event.preventDefault();\n nextTabEl.focus();\n }\n\n break;\n }\n /*\n В JAWS и NVDA стрелка вниз активирует контент.\n Это не прописано в стандартах, но по ссылке ниже это рекомендуется делать.\n https://inclusive-components.design/tabbed-interfaces/\n */\n case \"ArrowDown\": {\n const tabEls = getTabEls();\n const currentFocusedEl = tabEls.find(\n (el) => document.activeElement === el\n );\n\n if (\n !currentFocusedEl ||\n currentFocusedEl.getAttribute(\"aria-selected\") !== \"true\"\n ) {\n return;\n }\n\n const relatedContentElId =\n currentFocusedEl.getAttribute(\"aria-controls\");\n if (!relatedContentElId) {\n return;\n }\n\n // eslint-disable-next-line no-restricted-properties\n const relatedContentEl = document.getElementById(relatedContentElId);\n if (!relatedContentEl) {\n return;\n }\n\n event.preventDefault();\n relatedContentEl.focus();\n\n break;\n }\n case \"Space\":\n case \"Enter\": {\n const tabEls = getTabEls();\n const currentFocusedEl = tabEls.find(\n (el) => document.activeElement === el\n );\n if (currentFocusedEl) {\n currentFocusedEl.click();\n }\n }\n }\n };\n\n useGlobalEventListener(document, \"keydown\", handleDocumentKeydown, {\n capture: true,\n });\n\n return (\n <div\n {...restProps}\n ref={getRootRef}\n vkuiClass={classNames(\n \"Tabs\",\n (platform === IOS || platform === VKCOM) && `Tabs--${platform}`,\n `Tabs--${mode}`,\n withGaps && \"Tabs--withGaps\",\n // TODO v5.0.0 новая адаптивность\n `Tabs--sizeX-${sizeX}`\n )}\n role={role}\n >\n <div vkuiClass=\"Tabs__in\" ref={tabsRef}>\n <TabsModeContext.Provider value={{ mode, withGaps }}>\n {children}\n </TabsModeContext.Provider>\n </div>\n </div>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tabs\n */\nexport const Tabs = withAdaptivity(TabsComponent, { sizeX: true });\n\nTabs.displayName = \"Tabs\";\n"],"mappings":"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"}
|
|
@@ -28,4 +28,4 @@ export interface TabsItemProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
28
28
|
/**
|
|
29
29
|
* @see https://vkcom.github.io/VKUI/#/TabsItem
|
|
30
30
|
*/
|
|
31
|
-
export declare const TabsItem: ({ before, children, status, after, selected, ...restProps }: TabsItemProps) => JSX.Element;
|
|
31
|
+
export declare const TabsItem: ({ before, children, status, after, selected, role, tabIndex: tabIndexProp, ...restProps }: TabsItemProps) => JSX.Element;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["before", "children", "status", "after", "selected"];
|
|
3
|
+
var _excluded = ["before", "children", "status", "after", "selected", "role", "tabIndex"];
|
|
4
4
|
import { createScopedElement } from "../../lib/jsxRuntime";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { Tappable } from "../Tappable/Tappable";
|
|
@@ -11,11 +11,13 @@ import { useAdaptivity } from "../../hooks/useAdaptivity";
|
|
|
11
11
|
import { TabsModeContext } from "../Tabs/Tabs";
|
|
12
12
|
import { Headline } from "../Typography/Headline/Headline";
|
|
13
13
|
import { Subhead } from "../Typography/Subhead/Subhead";
|
|
14
|
+
import { warnOnce } from "../../lib/warnOnce";
|
|
14
15
|
import "./TabsItem.css";
|
|
15
|
-
|
|
16
|
+
var warn = warnOnce("TabsItem");
|
|
16
17
|
/**
|
|
17
18
|
* @see https://vkcom.github.io/VKUI/#/TabsItem
|
|
18
19
|
*/
|
|
20
|
+
|
|
19
21
|
export var TabsItem = function TabsItem(_ref) {
|
|
20
22
|
var before = _ref.before,
|
|
21
23
|
children = _ref.children,
|
|
@@ -23,6 +25,9 @@ export var TabsItem = function TabsItem(_ref) {
|
|
|
23
25
|
after = _ref.after,
|
|
24
26
|
_ref$selected = _ref.selected,
|
|
25
27
|
selected = _ref$selected === void 0 ? false : _ref$selected,
|
|
28
|
+
_ref$role = _ref.role,
|
|
29
|
+
role = _ref$role === void 0 ? "tab" : _ref$role,
|
|
30
|
+
tabIndexProp = _ref.tabIndex,
|
|
26
31
|
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
27
32
|
|
|
28
33
|
var platform = usePlatform();
|
|
@@ -35,6 +40,7 @@ export var TabsItem = function TabsItem(_ref) {
|
|
|
35
40
|
withGaps = _React$useContext.withGaps;
|
|
36
41
|
|
|
37
42
|
var statusComponent = null;
|
|
43
|
+
var isTabFlow = role === "tab";
|
|
38
44
|
|
|
39
45
|
if (status) {
|
|
40
46
|
statusComponent = typeof status === "number" ? createScopedElement(Subhead, {
|
|
@@ -46,13 +52,30 @@ export var TabsItem = function TabsItem(_ref) {
|
|
|
46
52
|
}, status);
|
|
47
53
|
}
|
|
48
54
|
|
|
55
|
+
if (process.env.NODE_ENV === "development" && isTabFlow) {
|
|
56
|
+
if (!restProps["aria-controls"]) {
|
|
57
|
+
warn("\u041F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u0432 \"aria-controls\" id \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u0438\u0440\u0443\u0435\u043C\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430", "warn");
|
|
58
|
+
} else if (!restProps["id"]) {
|
|
59
|
+
warn("\u041F\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \"id\" \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0443 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0432 \"aria-labelledby\" \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u0438\u0440\u0443\u0435\u043C\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430", "warn");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
var tabIndex = tabIndexProp;
|
|
64
|
+
|
|
65
|
+
if (isTabFlow && tabIndex === undefined) {
|
|
66
|
+
tabIndex = selected ? 0 : -1;
|
|
67
|
+
}
|
|
68
|
+
|
|
49
69
|
return createScopedElement(Tappable, _extends({}, restProps, {
|
|
50
70
|
vkuiClass: classNames("TabsItem", (platform === IOS || platform === VKCOM) && "TabsItem--".concat(platform), mode && "TabsItem--".concat(mode), selected && "TabsItem--selected", // TODO v5.0.0 новая адаптивность
|
|
51
71
|
sizeY && "TabsItem--sizeY-".concat(sizeY), withGaps && "TabsItem--withGaps"),
|
|
52
72
|
hoverMode: "TabsItem--hover",
|
|
53
73
|
activeMode: "TabsItem--active",
|
|
54
74
|
focusVisibleMode: mode === "segmented" ? "outside" : "inside",
|
|
55
|
-
hasActive: mode === "segmented"
|
|
75
|
+
hasActive: mode === "segmented",
|
|
76
|
+
role: role,
|
|
77
|
+
"aria-selected": selected,
|
|
78
|
+
tabIndex: tabIndex
|
|
56
79
|
}), before && createScopedElement("div", {
|
|
57
80
|
vkuiClass: "TabsItem__before"
|
|
58
81
|
}, before), createScopedElement(Headline, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsItem.js","names":["React","Tappable","classNames","IOS","VKCOM","usePlatform","useAdaptivity","TabsModeContext","Headline","Subhead","TabsItem","before","children","status","after","selected","restProps","platform","sizeY","useContext","mode","withGaps","statusComponent"],"sources":["../../../../src/components/TabsItem/TabsItem.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Tappable } from \"../Tappable/Tappable\";\nimport { classNames } from \"../../lib/classNames\";\nimport { IOS, VKCOM } from \"../../lib/platform\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { TabsModeContext, TabsContextProps } from \"../Tabs/Tabs\";\nimport { Headline } from \"../Typography/Headline/Headline\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport \"./TabsItem.css\";\n\nexport interface TabsItemProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Добавляет иконку слева.\n *\n * - Для `mode=\"default\"` используйте иконки размером 24.\n * - Для всех остальных `mode` используйте иконки размером 20.\n */\n before?: React.ReactNode;\n /**\n * Добавляет элемент слева от `after`.\n *\n * - `React.ReactElement` – либо [`Badge`](https://vkcom.github.io/VKUI/#/Badge) с параметром `mode=\"prominent\"`.\n * либо [`Counter`](https://vkcom.github.io/VKUI/#/Counter) с параметрами `mode=\"prominent\" size=\"s\"`.\n * - `number` – для показа текстового блока с переданным числом.\n */\n status?: React.ReactElement | number;\n /**\n * Добавляет иконку справа.\n *\n * Например, `<Icon16Dropdown />`\n */\n after?: React.ReactNode;\n selected?: boolean;\n disabled?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/TabsItem\n */\nexport const TabsItem = ({\n before,\n children,\n status,\n after,\n selected = false,\n ...restProps\n}: TabsItemProps) => {\n const platform = usePlatform();\n const { sizeY } = useAdaptivity();\n const { mode, withGaps }: TabsContextProps =\n React.useContext(TabsModeContext);\n let statusComponent = null;\n\n if (status) {\n statusComponent =\n typeof status === \"number\" ? (\n <Subhead\n Component=\"span\"\n vkuiClass=\"TabsItem__status TabsItem__status--count\"\n weight=\"2\"\n >\n {status}\n </Subhead>\n ) : (\n <span vkuiClass=\"TabsItem__status\">{status}</span>\n );\n }\n\n return (\n <Tappable\n {...restProps}\n vkuiClass={classNames(\n \"TabsItem\",\n (platform === IOS || platform === VKCOM) && `TabsItem--${platform}`,\n mode && `TabsItem--${mode}`,\n selected && \"TabsItem--selected\",\n // TODO v5.0.0 новая адаптивность\n sizeY && `TabsItem--sizeY-${sizeY}`,\n withGaps && \"TabsItem--withGaps\"\n )}\n hoverMode=\"TabsItem--hover\"\n activeMode=\"TabsItem--active\"\n focusVisibleMode={mode === \"segmented\" ? \"outside\" : \"inside\"}\n hasActive={mode === \"segmented\"}\n >\n {before && <div vkuiClass=\"TabsItem__before\">{before}</div>}\n <Headline\n Component=\"span\"\n vkuiClass=\"TabsItem__label\"\n level={mode === \"default\" ? \"1\" : \"2\"}\n weight=\"2\"\n >\n {children}\n </Headline>\n {statusComponent}\n {after && <div vkuiClass=\"TabsItem__after\">{after}</div>}\n {mode === \"default\" && (\n <div\n vkuiClass=\"TabsItem__underline\"\n aria-hidden\n data-selected={selected}\n />\n )}\n </Tappable>\n );\n};\n"],"mappings":";;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT;AACA,SAASC,UAAT;AACA,SAASC,GAAT,EAAcC,KAAd;AACA,SAASC,WAAT;AACA,SAASC,aAAT;AACA,SAASC,eAAT;AACA,SAASC,QAAT;AACA,SAASC,OAAT;AACA
|
|
1
|
+
{"version":3,"file":"TabsItem.js","names":["React","Tappable","classNames","IOS","VKCOM","usePlatform","useAdaptivity","TabsModeContext","Headline","Subhead","warnOnce","warn","TabsItem","before","children","status","after","selected","role","tabIndexProp","tabIndex","restProps","platform","sizeY","useContext","mode","withGaps","statusComponent","isTabFlow","process","env","NODE_ENV","undefined"],"sources":["../../../../src/components/TabsItem/TabsItem.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Tappable } from \"../Tappable/Tappable\";\nimport { classNames } from \"../../lib/classNames\";\nimport { IOS, VKCOM } from \"../../lib/platform\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { TabsModeContext, TabsContextProps } from \"../Tabs/Tabs\";\nimport { Headline } from \"../Typography/Headline/Headline\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport \"./TabsItem.css\";\n\nexport interface TabsItemProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Добавляет иконку слева.\n *\n * - Для `mode=\"default\"` используйте иконки размером 24.\n * - Для всех остальных `mode` используйте иконки размером 20.\n */\n before?: React.ReactNode;\n /**\n * Добавляет элемент слева от `after`.\n *\n * - `React.ReactElement` – либо [`Badge`](https://vkcom.github.io/VKUI/#/Badge) с параметром `mode=\"prominent\"`.\n * либо [`Counter`](https://vkcom.github.io/VKUI/#/Counter) с параметрами `mode=\"prominent\" size=\"s\"`.\n * - `number` – для показа текстового блока с переданным числом.\n */\n status?: React.ReactElement | number;\n /**\n * Добавляет иконку справа.\n *\n * Например, `<Icon16Dropdown />`\n */\n after?: React.ReactNode;\n selected?: boolean;\n disabled?: boolean;\n}\n\nconst warn = warnOnce(\"TabsItem\");\n\n/**\n * @see https://vkcom.github.io/VKUI/#/TabsItem\n */\nexport const TabsItem = ({\n before,\n children,\n status,\n after,\n selected = false,\n role = \"tab\",\n tabIndex: tabIndexProp,\n ...restProps\n}: TabsItemProps) => {\n const platform = usePlatform();\n const { sizeY } = useAdaptivity();\n const { mode, withGaps }: TabsContextProps =\n React.useContext(TabsModeContext);\n let statusComponent = null;\n\n const isTabFlow = role === \"tab\";\n\n if (status) {\n statusComponent =\n typeof status === \"number\" ? (\n <Subhead\n Component=\"span\"\n vkuiClass=\"TabsItem__status TabsItem__status--count\"\n weight=\"2\"\n >\n {status}\n </Subhead>\n ) : (\n <span vkuiClass=\"TabsItem__status\">{status}</span>\n );\n }\n\n if (process.env.NODE_ENV === \"development\" && isTabFlow) {\n if (!restProps[\"aria-controls\"]) {\n warn(`Передайте в \"aria-controls\" id контролируемого блока`, \"warn\");\n } else if (!restProps[\"id\"]) {\n warn(\n `Передайте \"id\" компоненту для использования в \"aria-labelledby\" контролируемого блока`,\n \"warn\"\n );\n }\n }\n\n let tabIndex = tabIndexProp;\n if (isTabFlow && tabIndex === undefined) {\n tabIndex = selected ? 0 : -1;\n }\n\n return (\n <Tappable\n {...restProps}\n vkuiClass={classNames(\n \"TabsItem\",\n (platform === IOS || platform === VKCOM) && `TabsItem--${platform}`,\n mode && `TabsItem--${mode}`,\n selected && \"TabsItem--selected\",\n // TODO v5.0.0 новая адаптивность\n sizeY && `TabsItem--sizeY-${sizeY}`,\n withGaps && \"TabsItem--withGaps\"\n )}\n hoverMode=\"TabsItem--hover\"\n activeMode=\"TabsItem--active\"\n focusVisibleMode={mode === \"segmented\" ? \"outside\" : \"inside\"}\n hasActive={mode === \"segmented\"}\n role={role}\n aria-selected={selected}\n tabIndex={tabIndex}\n >\n {before && <div vkuiClass=\"TabsItem__before\">{before}</div>}\n <Headline\n Component=\"span\"\n vkuiClass=\"TabsItem__label\"\n level={mode === \"default\" ? \"1\" : \"2\"}\n weight=\"2\"\n >\n {children}\n </Headline>\n {statusComponent}\n {after && <div vkuiClass=\"TabsItem__after\">{after}</div>}\n {mode === \"default\" && (\n <div\n vkuiClass=\"TabsItem__underline\"\n aria-hidden\n data-selected={selected}\n />\n )}\n </Tappable>\n );\n};\n"],"mappings":"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"}
|
|
@@ -43,4 +43,4 @@ export declare const ACTIVE_EFFECT_DELAY = 600;
|
|
|
43
43
|
/**
|
|
44
44
|
* @see https://vkcom.github.io/VKUI/#/Tappable
|
|
45
45
|
*/
|
|
46
|
-
export declare const Tappable: React.FC<Pick<TappableProps, "
|
|
46
|
+
export declare const Tappable: React.FC<Pick<TappableProps, "cite" | "data" | "form" | "label" | "slot" | "span" | "style" | "summary" | "title" | "pattern" | "value" | "children" | "alt" | "crossOrigin" | "height" | "sizes" | "src" | "srcSet" | "useMap" | "width" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDownCapture" | "onMouseEnter" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancelCapture" | "onTouchEndCapture" | "onTouchMoveCapture" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "start" | "content" | "size" | "default" | "wrap" | "open" | "multiple" | "disabled" | "list" | "step" | "onStart" | "onMove" | "onLeave" | "onEnter" | "onEnd" | "Component" | "getRootRef" | "stopPropagation" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "dateTime" | "defer" | "download" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "muted" | "name" | "nonce" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "srcDoc" | "srcLang" | "target" | "type" | "wmode" | "activeEffectDelay" | "hasHover" | "hoverMode" | "hasActive" | "activeMode" | "focusVisibleMode"> & import("../AdaptivityProvider/AdaptivityContext").SizeProps>;
|
|
@@ -11,4 +11,4 @@ export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextArea
|
|
|
11
11
|
/**
|
|
12
12
|
* @see https://vkcom.github.io/VKUI/#/Textarea
|
|
13
13
|
*/
|
|
14
|
-
export declare const Textarea: React.FC<Pick<TextareaProps, "
|
|
14
|
+
export declare const Textarea: React.FC<Pick<TextareaProps, "form" | "slot" | "style" | "title" | "value" | "children" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "wrap" | "disabled" | "status" | "getRootRef" | "autoComplete" | "autoFocus" | "cols" | "maxLength" | "minLength" | "name" | "readOnly" | "required" | "rows" | "getRef" | "maxHeight" | "dirName" | "grow" | "onResize"> & import("../AdaptivityProvider/AdaptivityContext").SizeProps>;
|
|
@@ -62,5 +62,5 @@ export interface ViewInfiniteState {
|
|
|
62
62
|
swipeBackResult: SwipeBackResults | null;
|
|
63
63
|
browserSwipe: boolean;
|
|
64
64
|
}
|
|
65
|
-
export declare const ViewInfinite: React.FC<Pick<ViewInfiniteProps, "
|
|
65
|
+
export declare const ViewInfinite: React.FC<Pick<ViewInfiniteProps, "nav" | "slot" | "style" | "title" | "children" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "scroll" | "popout" | "modal" | "onTransition" | "activePanel" | "history" | "onSwipeBack" | "onSwipeBackStart" | "onSwipeBackCancel" | "configProvider" | "isBackCheck" | "splitCol">>;
|
|
66
66
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { useDOM } from "../lib/dom";
|
|
3
|
+
import { noop } from "../lib/utils";
|
|
3
4
|
import { transitionEvent } from "../lib/supportEvents";
|
|
4
5
|
export var useWaitTransitionFinish = function useWaitTransitionFinish() {
|
|
5
6
|
var timeoutRef = React.useRef(null);
|
|
@@ -7,11 +8,22 @@ export var useWaitTransitionFinish = function useWaitTransitionFinish() {
|
|
|
7
8
|
var _useDOM = useDOM(),
|
|
8
9
|
document = _useDOM.document;
|
|
9
10
|
|
|
11
|
+
var detach = React.useRef(noop);
|
|
12
|
+
var remove = React.useCallback(function () {
|
|
13
|
+
detach.current();
|
|
14
|
+
detach.current = noop;
|
|
15
|
+
}, []);
|
|
10
16
|
var waitTransitionFinish = React.useCallback(function (element, eventHandler, durationFallback) {
|
|
11
17
|
if (element) {
|
|
12
18
|
if (!(document !== null && document !== void 0 && document.hidden) && transitionEvent.supported && transitionEvent.name) {
|
|
13
|
-
|
|
19
|
+
remove();
|
|
14
20
|
element.addEventListener(transitionEvent.name, eventHandler);
|
|
21
|
+
|
|
22
|
+
detach.current = function () {
|
|
23
|
+
if (transitionEvent.name) {
|
|
24
|
+
element.removeEventListener(transitionEvent.name, eventHandler);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
15
27
|
} else {
|
|
16
28
|
if (timeoutRef !== null && timeoutRef !== void 0 && timeoutRef.current) {
|
|
17
29
|
clearTimeout(timeoutRef.current);
|
|
@@ -20,7 +32,7 @@ export var useWaitTransitionFinish = function useWaitTransitionFinish() {
|
|
|
20
32
|
timeoutRef.current = setTimeout(eventHandler, durationFallback);
|
|
21
33
|
}
|
|
22
34
|
}
|
|
23
|
-
}, [document, timeoutRef]);
|
|
35
|
+
}, [document, remove, timeoutRef]);
|
|
24
36
|
return {
|
|
25
37
|
waitTransitionFinish: waitTransitionFinish
|
|
26
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWaitTransitionFinish.js","names":["React","useDOM","transitionEvent","useWaitTransitionFinish","timeoutRef","useRef","document","
|
|
1
|
+
{"version":3,"file":"useWaitTransitionFinish.js","names":["React","useDOM","noop","transitionEvent","useWaitTransitionFinish","timeoutRef","useRef","document","detach","remove","useCallback","current","waitTransitionFinish","element","eventHandler","durationFallback","hidden","supported","name","addEventListener","removeEventListener","clearTimeout","setTimeout"],"sources":["../../../src/hooks/useWaitTransitionFinish.ts"],"sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../lib/dom\";\nimport { noop } from \"../lib/utils\";\nimport { transitionEvent } from \"../lib/supportEvents\";\n\nexport const useWaitTransitionFinish = () => {\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { document } = useDOM();\n const detach = React.useRef(noop);\n\n const remove = React.useCallback(() => {\n detach.current();\n detach.current = noop;\n }, []);\n\n const waitTransitionFinish = React.useCallback(\n (\n element: HTMLElement | null,\n eventHandler: VoidFunction,\n durationFallback: number\n ) => {\n if (element) {\n if (\n !document?.hidden &&\n transitionEvent.supported &&\n transitionEvent.name\n ) {\n remove();\n element.addEventListener(transitionEvent.name, eventHandler);\n detach.current = () => {\n if (transitionEvent.name) {\n element.removeEventListener(transitionEvent.name, eventHandler);\n }\n };\n } else {\n if (timeoutRef?.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(eventHandler, durationFallback);\n }\n }\n },\n [document, remove, timeoutRef]\n );\n\n return {\n waitTransitionFinish,\n };\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,MAAT;AACA,SAASC,IAAT;AACA,SAASC,eAAT;AAEA,OAAO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAA0B,GAAM;EAC3C,IAAMC,UAAU,GAAGL,KAAK,CAACM,MAAN,CAAmD,IAAnD,CAAnB;;EACA,cAAqBL,MAAM,EAA3B;EAAA,IAAQM,QAAR,WAAQA,QAAR;;EACA,IAAMC,MAAM,GAAGR,KAAK,CAACM,MAAN,CAAaJ,IAAb,CAAf;EAEA,IAAMO,MAAM,GAAGT,KAAK,CAACU,WAAN,CAAkB,YAAM;IACrCF,MAAM,CAACG,OAAP;IACAH,MAAM,CAACG,OAAP,GAAiBT,IAAjB;EACD,CAHc,EAGZ,EAHY,CAAf;EAKA,IAAMU,oBAAoB,GAAGZ,KAAK,CAACU,WAAN,CAC3B,UACEG,OADF,EAEEC,YAFF,EAGEC,gBAHF,EAIK;IACH,IAAIF,OAAJ,EAAa;MACX,IACE,EAACN,QAAD,aAACA,QAAD,eAACA,QAAQ,CAAES,MAAX,KACAb,eAAe,CAACc,SADhB,IAEAd,eAAe,CAACe,IAHlB,EAIE;QACAT,MAAM;QACNI,OAAO,CAACM,gBAAR,CAAyBhB,eAAe,CAACe,IAAzC,EAA+CJ,YAA/C;;QACAN,MAAM,CAACG,OAAP,GAAiB,YAAM;UACrB,IAAIR,eAAe,CAACe,IAApB,EAA0B;YACxBL,OAAO,CAACO,mBAAR,CAA4BjB,eAAe,CAACe,IAA5C,EAAkDJ,YAAlD;UACD;QACF,CAJD;MAKD,CAZD,MAYO;QACL,IAAIT,UAAJ,aAAIA,UAAJ,eAAIA,UAAU,CAAEM,OAAhB,EAAyB;UACvBU,YAAY,CAAChB,UAAU,CAACM,OAAZ,CAAZ;QACD;;QACDN,UAAU,CAACM,OAAX,GAAqBW,UAAU,CAACR,YAAD,EAAeC,gBAAf,CAA/B;MACD;IACF;EACF,CA1B0B,EA2B3B,CAACR,QAAD,EAAWE,MAAX,EAAmBJ,UAAnB,CA3B2B,CAA7B;EA8BA,OAAO;IACLO,oBAAoB,EAApBA;EADK,CAAP;AAGD,CA3CM"}
|
package/dist/cssm/index.d.ts
CHANGED
|
@@ -300,6 +300,7 @@ export { ViewWidth, ViewHeight, SizeType, } from "./components/AdaptivityProvide
|
|
|
300
300
|
export { calcInitialsAvatarColor } from "./helpers/avatar";
|
|
301
301
|
export { Popper } from "./components/Popper/Popper";
|
|
302
302
|
export type { PopperProps } from "./components/Popper/Popper";
|
|
303
|
+
export { CustomScrollView } from "./components/CustomScrollView/CustomScrollView";
|
|
303
304
|
/**
|
|
304
305
|
* Types
|
|
305
306
|
*/
|
package/dist/cssm/index.js
CHANGED
|
@@ -194,4 +194,8 @@ export { getClassName } from "./helpers/getClassName";
|
|
|
194
194
|
export { ViewWidth, ViewHeight, SizeType } from "./components/AdaptivityProvider/AdaptivityContext";
|
|
195
195
|
export { calcInitialsAvatarColor } from "./helpers/avatar";
|
|
196
196
|
export { Popper } from "./components/Popper/Popper";
|
|
197
|
+
export { CustomScrollView } from "./components/CustomScrollView/CustomScrollView";
|
|
198
|
+
/**
|
|
199
|
+
* Types
|
|
200
|
+
*/
|
|
197
201
|
//# sourceMappingURL=index.js.map
|