@vkontakte/vkui 4.34.1 → 4.35.1
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/.browserslistrc +5 -0
- package/.cache/.eslintcache +1 -1
- package/.cache/.stylelintcache +1 -1
- package/.cache/.tsbuildinfo +256 -229
- package/.cache/ts/src/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
- package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/.cache/ts/src/components/Dropdown/Dropdown.d.ts +46 -5
- package/.cache/ts/src/components/FocusTrap/FocusTrap.d.ts +1 -1
- package/.cache/ts/src/components/ModalRoot/ModalRoot.d.ts +1 -1
- package/.cache/ts/src/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
- package/.cache/ts/src/components/Popper/Popper.d.ts +18 -1
- package/.cache/ts/src/components/PopperArrow/PopperArrow.d.ts +8 -0
- package/.cache/ts/src/components/RichTooltip/RichTooltip.d.ts +7 -2
- package/.cache/ts/src/components/Snackbar/Snackbar.d.ts +5 -1
- package/.cache/ts/src/components/SplitCol/SplitCol.d.ts +1 -0
- package/.cache/ts/src/components/Tabbar/Tabbar.d.ts +8 -1
- package/.cache/ts/src/components/Tabs/Tabs.d.ts +13 -2
- package/.cache/ts/src/components/TabsItem/TabsItem.d.ts +22 -1
- package/.cache/ts/src/components/TextTooltip/TextTooltip.d.ts +5 -1
- package/.cache/ts/src/components/Textarea/Textarea.d.ts +3 -0
- package/.cache/ts/src/components/Tooltip/Tooltip.d.ts +18 -1
- package/.cache/ts/src/components/Typography/Headline/Headline.d.ts +3 -3
- package/.cache/ts/src/components/View/View.d.ts +2 -18
- package/.cache/ts/src/components/View/ViewInfinite.d.ts +1 -1
- package/.cache/ts/src/components/WriteBar/WriteBar.d.ts +5 -1
- package/.cache/ts/src/tokenized/index.d.ts +26 -0
- package/.eslintrc.json +14 -4
- package/dist/cjs/components/AppRoot/AppRoot.js +1 -0
- package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/cjs/components/Button/Button.js +6 -4
- package/dist/cjs/components/Button/Button.js.map +1 -1
- package/dist/cjs/components/CardScroll/CardScroll.js +3 -1
- package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -0
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/ConfigProvider/ConfigProviderContext.js +7 -1
- package/dist/cjs/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js +477 -554
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/Dropdown/Dropdown.js +147 -26
- package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/cjs/components/Epic/Epic.js +1 -6
- package/dist/cjs/components/Epic/Epic.js.map +1 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.js +9 -10
- package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cjs/components/HorizontalCell/HorizontalCell.js +4 -7
- package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +1 -0
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScrollArrow.js +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScrollArrow.js.map +1 -1
- package/dist/cjs/components/Input/Input.js +1 -0
- package/dist/cjs/components/Input/Input.js.map +1 -1
- package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js +2 -2
- package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/cjs/components/ModalCardBase/ModalCardBase.js +1 -0
- package/dist/cjs/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/cjs/components/NativeSelect/NativeSelect.js +1 -0
- package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cjs/components/Panel/Panel.js +1 -0
- package/dist/cjs/components/Panel/Panel.js.map +1 -1
- package/dist/cjs/components/PanelHeader/PanelHeader.js +1 -0
- package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cjs/components/Popper/Popper.js +16 -22
- package/dist/cjs/components/Popper/Popper.js.map +1 -1
- package/dist/cjs/components/PopperArrow/PopperArrow.js +40 -0
- package/dist/cjs/components/PopperArrow/PopperArrow.js.map +1 -0
- package/dist/cjs/components/Radio/Radio.js +1 -0
- package/dist/cjs/components/Radio/Radio.js.map +1 -1
- package/dist/cjs/components/RangeSlider/UniversalSlider.js +1 -0
- package/dist/cjs/components/RangeSlider/UniversalSlider.js.map +1 -1
- package/dist/cjs/components/RichTooltip/RichTooltip.js +6 -15
- package/dist/cjs/components/RichTooltip/RichTooltip.js.map +1 -1
- package/dist/cjs/components/Select/Select.js +1 -0
- package/dist/cjs/components/Select/Select.js.map +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js +1 -0
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cjs/components/SimpleCell/SimpleCell.js +21 -31
- package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cjs/components/Snackbar/Snackbar.js +7 -11
- package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/cjs/components/SplitCol/SplitCol.js +7 -1
- package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cjs/components/SplitLayout/SplitLayout.js +5 -8
- package/dist/cjs/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/cjs/components/Tabbar/Tabbar.js +15 -14
- package/dist/cjs/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/cjs/components/TabbarItem/TabbarItem.js +8 -10
- package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/cjs/components/Tabs/Tabs.js +23 -5
- package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
- package/dist/cjs/components/TabsItem/TabsItem.js +39 -22
- package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cjs/components/TextTooltip/TextTooltip.js +6 -9
- package/dist/cjs/components/TextTooltip/TextTooltip.js.map +1 -1
- package/dist/cjs/components/Textarea/Textarea.js +5 -4
- package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.js +94 -71
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/components/Typography/Headline/Headline.js +11 -2
- package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cjs/components/View/View.js +388 -453
- package/dist/cjs/components/View/View.js.map +1 -1
- package/dist/cjs/components/WriteBar/WriteBar.js +12 -5
- package/dist/cjs/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js +3 -8
- package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
- package/dist/cjs/hooks/useOrientationChange.js +2 -1
- package/dist/cjs/hooks/useOrientationChange.js.map +1 -1
- package/dist/cjs/tokenized/index.js +104 -0
- package/dist/cjs/tokenized/index.js.map +1 -1
- package/dist/components/AppRoot/AppRoot.js +1 -0
- package/dist/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/components/Button/Button.js +6 -4
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/CardScroll/CardScroll.js +3 -1
- package/dist/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +1 -0
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
- package/dist/components/ConfigProvider/ConfigProviderContext.js +3 -0
- package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +473 -580
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/Dropdown/Dropdown.d.ts +46 -5
- package/dist/components/Dropdown/Dropdown.js +137 -27
- package/dist/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/components/Epic/Epic.js +1 -4
- package/dist/components/Epic/Epic.js.map +1 -1
- package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
- package/dist/components/FocusTrap/FocusTrap.js +9 -9
- package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/components/HorizontalCell/HorizontalCell.js +3 -5
- package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.js +1 -0
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScrollArrow.js +2 -2
- package/dist/components/HorizontalScroll/HorizontalScrollArrow.js.map +1 -1
- package/dist/components/Input/Input.js +1 -0
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/MiniInfoCell/MiniInfoCell.js +2 -2
- package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/components/ModalCardBase/ModalCardBase.js +1 -0
- package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
- package/dist/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
- package/dist/components/NativeSelect/NativeSelect.js +1 -0
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/components/Panel/Panel.js +1 -0
- package/dist/components/Panel/Panel.js.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.js +1 -0
- package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/components/Popper/Popper.d.ts +18 -1
- package/dist/components/Popper/Popper.js +15 -22
- package/dist/components/Popper/Popper.js.map +1 -1
- package/dist/components/PopperArrow/PopperArrow.d.ts +8 -0
- package/dist/components/PopperArrow/PopperArrow.js +27 -0
- package/dist/components/PopperArrow/PopperArrow.js.map +1 -0
- package/dist/components/Radio/Radio.js +1 -0
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/RangeSlider/UniversalSlider.js +1 -0
- package/dist/components/RangeSlider/UniversalSlider.js.map +1 -1
- package/dist/components/RichTooltip/RichTooltip.d.ts +7 -2
- package/dist/components/RichTooltip/RichTooltip.js +5 -10
- package/dist/components/RichTooltip/RichTooltip.js.map +1 -1
- package/dist/components/Select/Select.js +1 -0
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.js +1 -0
- package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.js +19 -28
- package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/components/Snackbar/Snackbar.d.ts +5 -1
- package/dist/components/Snackbar/Snackbar.js +8 -11
- package/dist/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/components/SplitCol/SplitCol.d.ts +1 -0
- package/dist/components/SplitCol/SplitCol.js +3 -0
- package/dist/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/components/SplitLayout/SplitLayout.js +4 -7
- package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/components/Tabbar/Tabbar.d.ts +8 -1
- package/dist/components/Tabbar/Tabbar.js +15 -14
- package/dist/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/components/TabbarItem/TabbarItem.js +7 -9
- package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +13 -2
- package/dist/components/Tabs/Tabs.js +23 -5
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/TabsItem/TabsItem.d.ts +22 -1
- package/dist/components/TabsItem/TabsItem.js +40 -21
- package/dist/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/components/TextTooltip/TextTooltip.d.ts +5 -1
- package/dist/components/TextTooltip/TextTooltip.js +5 -7
- package/dist/components/TextTooltip/TextTooltip.js.map +1 -1
- package/dist/components/Textarea/Textarea.d.ts +3 -0
- package/dist/components/Textarea/Textarea.js +5 -4
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +18 -1
- package/dist/components/Tooltip/Tooltip.js +89 -68
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Typography/Headline/Headline.d.ts +3 -3
- package/dist/components/Typography/Headline/Headline.js +10 -2
- package/dist/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/components/View/View.d.ts +2 -18
- package/dist/components/View/View.js +384 -462
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.d.ts +1 -1
- package/dist/components/WriteBar/WriteBar.d.ts +5 -1
- package/dist/components/WriteBar/WriteBar.js +10 -5
- package/dist/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/components/WriteBarIcon/WriteBarIcon.js +3 -6
- package/dist/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
- package/dist/components.css +143 -127
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.css +1 -1
- package/dist/cssm/components/ActionSheetItem/ActionSheetItem.css +1 -1
- package/dist/cssm/components/Alert/Alert.css +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.css +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.js +1 -0
- package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/cssm/components/Avatar/Avatar.css +3 -5
- package/dist/cssm/components/Badge/Badge.css +3 -3
- package/dist/cssm/components/Banner/Banner.css +5 -5
- package/dist/cssm/components/BaseGallery/BaseGallery.css +1 -1
- package/dist/cssm/components/Button/Button.css +53 -35
- package/dist/cssm/components/Button/Button.js +6 -4
- package/dist/cssm/components/Button/Button.js.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.css +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.css +1 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.css +1 -1
- package/dist/cssm/components/CalendarHeader/CalendarHeader.css +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.css +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.css +1 -1
- package/dist/cssm/components/Card/Card.css +5 -6
- package/dist/cssm/components/CardGrid/CardGrid.css +1 -1
- package/dist/cssm/components/CardScroll/CardScroll.css +1 -1
- package/dist/cssm/components/CardScroll/CardScroll.js +3 -1
- package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/cssm/components/Cell/Cell.css +3 -3
- package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -1
- package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -1
- package/dist/cssm/components/CellButton/CellButton.css +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.css +1 -1
- package/dist/cssm/components/Chip/Chip.css +1 -1
- package/dist/cssm/components/ChipsInput/ChipsInput.css +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.css +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -0
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
- package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js +3 -0
- package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
- package/dist/cssm/components/ContentCard/ContentCard.css +1 -1
- package/dist/cssm/components/Counter/Counter.css +31 -31
- package/dist/cssm/components/CustomScrollView/CustomScrollView.css +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.css +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +473 -580
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.css +3 -3
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.css +3 -3
- package/dist/cssm/components/DateInput/DateInput.css +1 -1
- package/dist/cssm/components/DatePicker/DatePicker.css +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.css +1 -1
- package/dist/cssm/components/Dropdown/Dropdown.css +1 -1
- package/dist/cssm/components/Dropdown/Dropdown.d.ts +46 -5
- package/dist/cssm/components/Dropdown/Dropdown.js +137 -27
- package/dist/cssm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/cssm/components/Epic/Epic.css +1 -1
- package/dist/cssm/components/Epic/Epic.js +1 -4
- package/dist/cssm/components/Epic/Epic.js.map +1 -1
- package/dist/cssm/components/FixedLayout/FixedLayout.css +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.d.ts +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.js +9 -9
- package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cssm/components/FocusVisible/FocusVisible.css +1 -1
- package/dist/cssm/components/Footer/Footer.css +1 -1
- package/dist/cssm/components/FormField/FormField.css +9 -9
- package/dist/cssm/components/FormItem/FormItem.css +1 -1
- package/dist/cssm/components/FormLayout/FormLayout.css +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
- package/dist/cssm/components/FormStatus/FormStatus.css +1 -1
- package/dist/cssm/components/Gradient/Gradient.css +1 -1
- package/dist/cssm/components/GridAvatar/GridAvatar.css +1 -1
- package/dist/cssm/components/Group/Group.css +1 -1
- package/dist/cssm/components/Header/Header.css +1 -1
- package/dist/cssm/components/HorizontalCell/HorizontalCell.css +1 -1
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js +3 -5
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.css +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +1 -0
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.css +3 -3
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.js +2 -2
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.js.map +1 -1
- package/dist/cssm/components/IconButton/IconButton.css +1 -1
- package/dist/cssm/components/InfoRow/InfoRow.css +1 -1
- package/dist/cssm/components/InitialsAvatar/InitialsAvatar.css +1 -1
- package/dist/cssm/components/Input/Input.css +1 -1
- package/dist/cssm/components/Input/Input.js +1 -0
- package/dist/cssm/components/Input/Input.js.map +1 -1
- package/dist/cssm/components/InputLike/InputLike.css +1 -1
- package/dist/cssm/components/InputLike/InputLikeDivider.css +1 -1
- package/dist/cssm/components/Link/Link.css +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.css +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js +2 -2
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/cssm/components/ModalCard/ModalCard.css +1 -1
- package/dist/cssm/components/ModalCardBase/ModalCardBase.css +3 -3
- package/dist/cssm/components/ModalCardBase/ModalCardBase.js +1 -0
- package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/cssm/components/ModalDismissButton/ModalDismissButton.css +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.css +1 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.css +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.css +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.d.ts +1 -1
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js +1 -0
- package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cssm/components/Pagination/Pagination.css +1 -1
- package/dist/cssm/components/Panel/Panel.css +1 -1
- package/dist/cssm/components/Panel/Panel.js +1 -0
- package/dist/cssm/components/Panel/Panel.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.css +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.js +1 -0
- package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.css +1 -1
- package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.css +1 -1
- package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.css +1 -1
- package/dist/cssm/components/Placeholder/Placeholder.css +3 -3
- package/dist/cssm/components/PopoutRoot/PopoutRoot.css +1 -1
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.css +1 -1
- package/dist/cssm/components/Popper/Popper.css +1 -1
- package/dist/cssm/components/Popper/Popper.d.ts +18 -1
- package/dist/cssm/components/Popper/Popper.js +15 -22
- package/dist/cssm/components/Popper/Popper.js.map +1 -1
- package/dist/cssm/components/PopperArrow/PopperArrow.css +1 -0
- package/dist/cssm/components/PopperArrow/PopperArrow.d.ts +8 -0
- package/dist/cssm/components/PopperArrow/PopperArrow.js +28 -0
- package/dist/cssm/components/PopperArrow/PopperArrow.js.map +1 -0
- package/dist/cssm/components/Progress/Progress.css +1 -1
- package/dist/cssm/components/PromoBanner/PromoBanner.css +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.css +3 -3
- package/dist/cssm/components/Radio/Radio.css +1 -1
- package/dist/cssm/components/Radio/Radio.js +1 -0
- package/dist/cssm/components/Radio/Radio.js.map +1 -1
- package/dist/cssm/components/RadioGroup/RadioGroup.css +1 -1
- package/dist/cssm/components/RangeSlider/UniversalSlider.js +1 -0
- package/dist/cssm/components/RangeSlider/UniversalSlider.js.map +1 -1
- package/dist/cssm/components/Removable/Removable.css +1 -1
- package/dist/cssm/components/RichCell/RichCell.css +3 -3
- package/dist/cssm/components/RichTooltip/RichTooltip.css +3 -1
- package/dist/cssm/components/RichTooltip/RichTooltip.d.ts +7 -2
- package/dist/cssm/components/RichTooltip/RichTooltip.js +5 -10
- package/dist/cssm/components/RichTooltip/RichTooltip.js.map +1 -1
- package/dist/cssm/components/Root/Root.css +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.css +1 -1
- package/dist/cssm/components/Search/Search.css +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControl.css +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.css +1 -1
- package/dist/cssm/components/Select/Select.css +1 -1
- package/dist/cssm/components/Select/Select.js +1 -0
- package/dist/cssm/components/Select/Select.js.map +1 -1
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js +1 -0
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cssm/components/Separator/Separator.css +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.css +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.js +19 -28
- package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cssm/components/SimpleCheckbox/SimpleCheckbox.css +1 -1
- package/dist/cssm/components/Slider/Slider.css +3 -3
- package/dist/cssm/components/SliderSwitch/SliderSwitch.css +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.css +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.d.ts +5 -1
- package/dist/cssm/components/Snackbar/Snackbar.js +8 -11
- package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/cssm/components/Spacing/Spacing.css +1 -1
- package/dist/cssm/components/Spinner/Spinner.css +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.css +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.d.ts +1 -0
- package/dist/cssm/components/SplitCol/SplitCol.js +3 -0
- package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cssm/components/SplitLayout/SplitLayout.css +1 -1
- package/dist/cssm/components/SplitLayout/SplitLayout.js +4 -7
- package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/cssm/components/SubnavigationBar/SubnavigationBar.css +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.css +1 -1
- package/dist/cssm/components/Switch/Switch.css +3 -3
- package/dist/cssm/components/Tabbar/Tabbar.css +5 -3
- package/dist/cssm/components/Tabbar/Tabbar.d.ts +8 -1
- package/dist/cssm/components/Tabbar/Tabbar.js +15 -14
- 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 +7 -9
- package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/cssm/components/Tabs/Tabs.css +1 -1
- package/dist/cssm/components/Tabs/Tabs.d.ts +13 -2
- package/dist/cssm/components/Tabs/Tabs.js +23 -5
- package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.css +5 -1
- package/dist/cssm/components/TabsItem/TabsItem.d.ts +22 -1
- package/dist/cssm/components/TabsItem/TabsItem.js +40 -21
- package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.css +5 -5
- package/dist/cssm/components/TextTooltip/TextTooltip.css +1 -1
- package/dist/cssm/components/TextTooltip/TextTooltip.d.ts +5 -1
- package/dist/cssm/components/TextTooltip/TextTooltip.js +5 -7
- package/dist/cssm/components/TextTooltip/TextTooltip.js.map +1 -1
- package/dist/cssm/components/Textarea/Textarea.css +1 -1
- package/dist/cssm/components/Textarea/Textarea.d.ts +3 -0
- package/dist/cssm/components/Textarea/Textarea.js +5 -4
- package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.css +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.d.ts +18 -1
- package/dist/cssm/components/Tooltip/Tooltip.js +89 -68
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/components/Typography/Caption/Caption.css +1 -1
- package/dist/cssm/components/Typography/Footnote/Footnote.css +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.css +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.d.ts +3 -3
- package/dist/cssm/components/Typography/Headline/Headline.js +10 -2
- package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cssm/components/Typography/Paragraph/Paragraph.css +1 -1
- package/dist/cssm/components/Typography/Subhead/Subhead.css +1 -1
- package/dist/cssm/components/Typography/Text/Text.css +1 -1
- package/dist/cssm/components/Typography/Title/Title.css +1 -1
- package/dist/cssm/components/UsersStack/UsersStack.css +5 -5
- package/dist/cssm/components/View/View.css +1 -1
- package/dist/cssm/components/View/View.d.ts +2 -18
- package/dist/cssm/components/View/View.js +384 -462
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/ViewIOS.css +1 -1
- package/dist/cssm/components/View/ViewInfinite.d.ts +1 -1
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.css +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.css +3 -1
- package/dist/cssm/components/WriteBar/WriteBar.d.ts +5 -1
- package/dist/cssm/components/WriteBar/WriteBar.js +10 -5
- package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/cssm/components/WriteBarIcon/WriteBarIcon.css +1 -1
- package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js +3 -6
- package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
- package/dist/cssm/fonts/fonts.css +1 -1
- package/dist/cssm/hooks/useOrientationChange.js +2 -1
- package/dist/cssm/hooks/useOrientationChange.js.map +1 -1
- package/dist/cssm/lib/calendar.d.ts +2 -2
- package/dist/cssm/styles/animations.css +1 -1
- package/dist/cssm/styles/bright_light.css +1 -1
- package/dist/cssm/styles/common.css +1 -1
- package/dist/cssm/styles/components.css +143 -127
- package/dist/cssm/styles/constants.css +3 -10
- package/dist/cssm/styles/space_gray.css +1 -1
- package/dist/cssm/styles/themes.css +1 -16
- package/dist/cssm/styles/unstable.css +3 -1
- package/dist/cssm/styles/vkcom_dark.css +1 -6
- package/dist/cssm/styles/vkcom_light.css +1 -11
- package/dist/cssm/tokenized/index.d.ts +26 -0
- package/dist/cssm/tokenized/index.js +13 -0
- package/dist/cssm/tokenized/index.js.map +1 -1
- package/dist/default_scheme.css +1 -1
- package/dist/default_scheme.css.map +1 -1
- package/dist/fonts.css +1 -1
- package/dist/fonts.css.map +1 -1
- package/dist/hooks/useOrientationChange.js +2 -1
- package/dist/hooks/useOrientationChange.js.map +1 -1
- package/dist/lib/calendar.d.ts +2 -2
- package/dist/tokenized/index.d.ts +26 -0
- package/dist/tokenized/index.js +13 -0
- package/dist/tokenized/index.js.map +1 -1
- package/dist/unstable.css +3 -1
- package/dist/unstable.css.map +1 -1
- package/dist/vkui.css +144 -143
- package/dist/vkui.css.map +1 -1
- package/package.json +6 -5
- package/src/components/AppRoot/AppRoot.tsx +2 -0
- package/src/components/Badge/Badge.css +0 -5
- package/src/components/Button/Button.css +0 -4
- package/src/components/Button/Button.tsx +4 -2
- package/src/components/Button/Readme.md +30 -59
- package/src/components/CardScroll/CardScroll.tsx +1 -1
- package/src/components/Cell/Cell.css +3 -2
- package/src/components/ChipsInput/ChipsInput.css +2 -0
- package/src/components/ChipsSelect/ChipsSelect.tsx +2 -0
- package/src/components/ConfigProvider/ConfigProviderContext.tsx +2 -0
- package/src/components/Counter/Counter.css +30 -0
- package/src/components/CustomScrollView/CustomScrollView.css +10 -5
- package/src/components/CustomSelect/CustomSelect.tsx +543 -574
- package/src/components/Dropdown/Dropdown.css +12 -0
- package/src/components/Dropdown/Dropdown.tsx +174 -20
- package/src/components/Dropdown/Readme.md +1 -0
- package/src/components/Epic/Epic.tsx +1 -4
- package/src/components/FixedLayout/Readme.md +103 -109
- package/src/components/FocusTrap/FocusTrap.tsx +10 -10
- package/src/components/Group/Group.css +1 -1
- package/src/components/Group/Readme.md +1 -1
- package/src/components/HorizontalCell/HorizontalCell.css +25 -43
- package/src/components/HorizontalCell/HorizontalCell.tsx +3 -9
- package/src/components/HorizontalScroll/HorizontalScroll.css +23 -0
- package/src/components/HorizontalScroll/HorizontalScroll.tsx +2 -0
- package/src/components/HorizontalScroll/HorizontalScrollArrow.tsx +2 -2
- package/src/components/Input/Input.css +2 -0
- package/src/components/Input/Input.tsx +2 -0
- package/src/components/MiniInfoCell/MiniInfoCell.css +13 -3
- package/src/components/MiniInfoCell/MiniInfoCell.tsx +3 -3
- package/src/components/ModalCardBase/ModalCardBase.tsx +2 -0
- package/src/components/NativeSelect/NativeSelect.tsx +2 -0
- package/src/components/Panel/Panel.tsx +2 -0
- package/src/components/PanelHeader/PanelHeader.tsx +2 -0
- package/src/components/Popper/Popper.css +0 -35
- package/src/components/Popper/Popper.tsx +33 -25
- package/src/components/PopperArrow/PopperArrow.css +34 -0
- package/src/components/PopperArrow/PopperArrow.tsx +40 -0
- package/src/components/Radio/Radio.tsx +2 -0
- package/src/components/RangeSlider/UniversalSlider.tsx +2 -0
- package/src/components/RichTooltip/RichTooltip.css +44 -4
- package/src/components/RichTooltip/RichTooltip.tsx +9 -11
- package/src/components/Select/Select.tsx +2 -0
- package/src/components/SelectMimicry/SelectMimicry.tsx +2 -0
- package/src/components/SimpleCell/Readme.md +115 -129
- package/src/components/SimpleCell/SimpleCell.css +30 -68
- package/src/components/SimpleCell/SimpleCell.tsx +23 -25
- package/src/components/Snackbar/Readme.md +95 -123
- package/src/components/Snackbar/Snackbar.css +18 -27
- package/src/components/Snackbar/Snackbar.tsx +17 -11
- package/src/components/SplitCol/SplitCol.tsx +2 -0
- package/src/components/SplitLayout/SplitLayout.css +3 -7
- package/src/components/SplitLayout/SplitLayout.tsx +9 -6
- package/src/components/Switch/Switch.css +6 -2
- package/src/components/Tabbar/Tabbar.css +4 -1
- package/src/components/Tabbar/Tabbar.tsx +23 -12
- package/src/components/TabbarItem/TabbarItem.css +7 -5
- package/src/components/TabbarItem/TabbarItem.tsx +13 -7
- package/src/components/Tabs/Readme.md +191 -251
- package/src/components/Tabs/Tabs.css +27 -80
- package/src/components/Tabs/Tabs.tsx +45 -7
- package/src/components/TabsItem/Readme.md +1 -0
- package/src/components/TabsItem/TabsItem.css +191 -106
- package/src/components/TabsItem/TabsItem.tsx +72 -20
- package/src/components/TextTooltip/TextTooltip.css +41 -11
- package/src/components/TextTooltip/TextTooltip.tsx +9 -13
- package/src/components/Textarea/Textarea.css +2 -0
- package/src/components/Textarea/Textarea.tsx +5 -4
- package/src/components/Tooltip/Readme.md +128 -101
- package/src/components/Tooltip/Tooltip.css +29 -40
- package/src/components/Tooltip/Tooltip.tsx +98 -66
- package/src/components/Typography/Headline/Headline.tsx +15 -1
- package/src/components/View/Readme.md +2 -0
- package/src/components/View/View.tsx +451 -514
- package/src/components/WriteBar/WriteBar.css +27 -33
- package/src/components/WriteBar/WriteBar.tsx +16 -5
- package/src/components/WriteBarIcon/WriteBarIcon.css +6 -19
- package/src/components/WriteBarIcon/WriteBarIcon.tsx +6 -6
- package/src/hooks/useOrientationChange.ts +1 -0
- package/src/styles/components.css +1 -0
- package/src/styles/constants.css +8 -0
- package/src/tokenized/index.ts +39 -0
- package/tsconfig.json +1 -1
- package/.cache/ts/src/components/ClickPopper/ClickPopper.d.ts +0 -21
- package/dist/cjs/components/ClickPopper/ClickPopper.js +0 -96
- package/dist/cjs/components/ClickPopper/ClickPopper.js.map +0 -1
- package/dist/components/ClickPopper/ClickPopper.d.ts +0 -21
- package/dist/components/ClickPopper/ClickPopper.js +0 -71
- package/dist/components/ClickPopper/ClickPopper.js.map +0 -1
- package/dist/cssm/components/ClickPopper/ClickPopper.d.ts +0 -21
- package/dist/cssm/components/ClickPopper/ClickPopper.js +0 -71
- package/dist/cssm/components/ClickPopper/ClickPopper.js.map +0 -1
- package/src/components/ClickPopper/ClickPopper.tsx +0 -86
|
@@ -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","CustomSelectComponent","props","React","createRef","keyboardInput","state","selectedOptionIndex","undefined","inputValue","filterFn","filter","setState","opened","focusedOptionIndex","isValidIndex","scrollToElement","onOpen","resetKeyboardInput","onClose","select","index","nativeSelectValue","event","Event","bubbles","selectEl","dispatchEvent","close","open","scrollTo","prevState","type","nextIndex","beforeIndex","focusOptionByIndex","e","Array","prototype","indexOf","call","currentTarget","parentNode","children","preventDefault","selectFocused","key","fullInput","optionIndex","label","toLowerCase","includes","scrollBoxRef","current","contains","target","newSelectedOptionIndex","findSelectedIndex","isControlledOutside","onChange","onInputChange","process","env","NODE_ENV","areOptionsShown","focusOption","onKeyboardInput","renderOption","hovered","selected","onClick","handleOptionClick","onMouseDown","handleOptionDown","onMouseOver","handleOptionHover","element","getRef","placement","popperPlacement","defaultValue","initialValue","Number","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","prevProps","searchable","stateOptions","before","name","className","getRootRef","popupDirection","sizeY","platform","style","onBlur","onFocus","emptyText","renderDropdown","fetching","icon","dropdownOffsetDistance","fixDropdownWidth","forceDropdownPortal","selectType","SelectType","default","autoHideScrollbar","autoHideScrollbarDelay","restProps","getSelectedItem","defaultDropdownContent","resolvedContent","openedClassNames","containerRef","onLabelClick","onInputKeyDown","placeholder","handleKeyDownSelect","handleKeyUp","selectRef","onNativeSelectChange","onPlacementChange","resetFocusedOption","Component","defaultFilterFn","CustomSelect"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport {\n debounce,\n setRef,\n multiRef,\n getTitleFromChildren,\n} from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport { withAdaptivity } from \"../../hoc/withAdaptivity\";\nimport { withPlatform } from \"../../hoc/withPlatform\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} 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 {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { is } from \"../../lib/is\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport \"./CustomSelect.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\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(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | 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 popperPlacement?: Placement;\n}\n\nexport interface CustomSelectProps\n extends NativeSelectProps,\n HasPlatform,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: keyof typeof SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nclass CustomSelectComponent extends React.Component<\n CustomSelectProps,\n CustomSelectState\n> {\n static defaultProps: Partial<CustomSelectProps> = {\n searchable: false,\n renderOption({ option, ...props }): React.ReactNode {\n return <CustomSelectOption {...props} />;\n },\n options: [],\n emptyText: \"Ничего не найдено\",\n filterFn: defaultFilterFn,\n icon: <DropdownIcon />,\n dropdownOffsetDistance: 0,\n fixDropdownWidth: true,\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 = false;\n private selectEl: HTMLSelectElement | null = null;\n private readonly scrollBoxRef = React.createRef<HTMLDivElement>();\n private readonly containerRef = React.createRef<HTMLLabelElement>();\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 selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n };\n\n get areOptionsShown() {\n return this.scrollBoxRef.current !== null;\n }\n\n filter = (\n options: CustomSelectProps[\"options\"],\n inputValue: string,\n filterFn: CustomSelectProps[\"filterFn\"]\n ) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n };\n\n findSelectedIndex(\n options: CustomSelectOptionInterface[] | undefined,\n value: SelectValue\n ) {\n return (\n options?.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n }\n\n open = () => {\n this.setState(\n ({ selectedOptionIndex }) => ({\n opened: true,\n focusedOptionIndex: selectedOptionIndex,\n }),\n () => {\n const { selectedOptionIndex } = this.state;\n\n if (\n selectedOptionIndex !== undefined &&\n this.isValidIndex(selectedOptionIndex)\n ) {\n this.scrollToElement(selectedOptionIndex, true);\n }\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 ?? 0);\n }\n\n selectFocused = () => {\n const { focusedOptionIndex } = this.state;\n\n if (focusedOptionIndex !== undefined) {\n this.select(focusedOptionIndex);\n }\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 {\n nativeSelectValue: item?.value,\n },\n () => {\n const event = new Event(\"change\", { bubbles: true });\n this.selectEl?.dispatchEvent(event);\n }\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 || !dropdown) {\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 | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (this.state.options?.length ?? 0) - 1\n ) {\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((prevState) =>\n // Это оптимизация, прежде всего, под `onMouseOver`\n prevState.focusedOptionIndex !== index\n ? {\n focusedOptionIndex: index,\n }\n : null\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 =\n 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(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\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(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\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 getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && 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 newSelectedOptionIndex = this.findSelectedIndex(\n this.state.options,\n e.currentTarget.value\n );\n\n if (this.state.selectedOptionIndex !== newSelectedOptionIndex) {\n if (!this.isControlledOutside) {\n this.setState({\n selectedOptionIndex: newSelectedOptionIndex,\n });\n }\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(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(\n options,\n this.state.nativeSelectValue\n ),\n inputValue: e.target.value,\n });\n } else {\n this.setState({ inputValue: e.target.value });\n }\n } else {\n const options = this.filter(\n this.props.options,\n e.target.value,\n this.props.filterFn\n );\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(\n options,\n this.state.nativeSelectValue\n ),\n inputValue: e.target.value,\n });\n }\n };\n\n onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n this.areOptionsShown &&\n 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) &&\n this.areOptionsShown &&\n 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 (\n !is(prevProps.value, this.props.value) ||\n prevProps.options !== this.props.options\n ) {\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(this.props.options);\n }\n\n this.isControlledOutside = this.props.value !== undefined;\n const value =\n this.props.value === undefined\n ? this.state.nativeSelectValue\n : this.props.value;\n const options =\n this.props.searchable && this.state.inputValue !== undefined\n ? this.filter(\n this.props.options,\n this.state.inputValue,\n this.props.filterFn\n )\n : 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 // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: this.handleOptionHover,\n })}\n </React.Fragment>\n );\n };\n\n selectRef = (element: HTMLSelectElement) => {\n this.selectEl = element;\n if (this.props.getRef) {\n setRef(element, this.props.getRef);\n }\n };\n\n onPlacementChange = (placement?: Placement) => {\n this.setState(() => ({\n popperPlacement: placement,\n }));\n };\n\n render() {\n const { opened, nativeSelectValue, options: stateOptions } = this.state;\n const {\n before,\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 icon,\n dropdownOffsetDistance,\n fixDropdownWidth,\n forceDropdownPortal,\n selectType = SelectType.default,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n ...restProps\n } = this.props;\n const selected = this.getSelectedItem();\n const label = selected ? selected.label : undefined;\n\n const defaultDropdownContent =\n stateOptions !== undefined && stateOptions.length > 0 ? (\n stateOptions.map(this.renderOption)\n ) : (\n <Caption vkuiClass=\"CustomSelect__empty\">\n {this.props.emptyText}\n </Caption>\n );\n\n let resolvedContent;\n\n if (typeof renderDropdown === \"function\") {\n resolvedContent = renderDropdown({ defaultDropdownContent });\n } else {\n resolvedContent = defaultDropdownContent;\n }\n\n const openedClassNames = classNames(\n opened && \"Select--open\",\n opened &&\n (dropdownOffsetDistance as number) === 0 &&\n (this.state.popperPlacement?.includes(\"top\")\n ? \"Select--pop-up\"\n : \"Select--pop-down\")\n );\n\n return (\n <label\n vkuiClass={getClassName(\"CustomSelect\", platform)}\n className={className}\n style={style}\n ref={multiRef(this.containerRef, getRootRef)}\n onClick={this.onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={this.onBlur}\n vkuiClass={openedClassNames}\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 before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\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={openedClassNames}\n after={icon}\n selectType={selectType}\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) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={this.containerRef}\n placement={popupDirection}\n scrollBoxRef={this.scrollBoxRef}\n onPlacementChange={this.onPlacementChange}\n onMouseLeave={this.resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={this.scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n }\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport const CustomSelect = withPlatform(\n withAdaptivity(CustomSelectComponent, {\n sizeY: true,\n })\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","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","Number","filter","inputValue","filterFn","defaultOptions","defaultIcon","CustomSelectComponent","before","name","className","getRef","getRootRef","popupDirection","sizeY","platform","style","onChange","children","onInputChangeProp","onInputChange","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","SelectType","default","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","containerRef","React","useRef","scrollBoxRef","selectElRef","useState","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","opened","setOpened","useEffect","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","onKeyboardInput","key","fullInput","optionIndex","label","toLowerCase","close","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","placeholder","CustomSelect"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { SelectMimicry } from \"../SelectMimicry/SelectMimicry\";\nimport { debounce, multiRef, getTitleFromChildren } from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { NativeSelectProps } from \"../NativeSelect/NativeSelect\";\nimport { withAdaptivity } from \"../../hoc/withAdaptivity\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\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 {\n defaultFilterFn,\n getFormFieldModeFromSelectType,\n} from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { TrackerOptionsProps } from \"../CustomScrollView/useTrackerVisibility\";\nimport { SelectType } from \"../Select/Select\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport \"./CustomSelect.css\";\n\nconst findIndexAfter = (\n options: CustomSelectOptionInterface[] = [],\n startIndex = -1\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length\n) => {\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(\n \"Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.\",\n \"error\"\n );\n }\n};\n\nfunction defaultRenderOptionFn({\n option,\n ...props\n}: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (\n e: React.MouseEvent<HTMLElement>\n) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue\n) {\n return (\n options.findIndex((item) => {\n value = typeof item.value === \"number\" ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: CustomSelectProps[\"options\"],\n inputValue: string,\n filterFn: CustomSelectProps[\"filterFn\"]\n) => {\n return typeof filterFn === \"function\"\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\nconst defaultIcon = <DropdownIcon />;\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>[\"value\"];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectProps\n extends NativeSelectProps,\n HasPlatform,\n FormFieldProps,\n TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[]\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (\n option: Partial<CustomSelectOptionInterface>\n ) => string\n ) => boolean);\n popupDirection?: \"top\" | \"bottom\";\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n icon?: React.ReactNode;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: keyof typeof SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nfunction CustomSelectComponent(props: CustomSelectProps) {\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n sizeY,\n platform,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = SelectType.default,\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = \"Ничего не найдено\",\n filterFn = defaultFilterFn,\n icon = defaultIcon,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === \"development\") {\n checkOptionsValueType(optionsProp);\n }\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const selectElRef = React.useRef<HTMLSelectElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<\n number | undefined\n >(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(\n props.value !== undefined\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n props.value ?? props.defaultValue\n );\n const [keyboardInput, setKeyboardInput] = React.useState(\"\");\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<\n number | undefined\n >(findSelectedIndex(optionsProp, props.value ?? props.defaultValue));\n const [opened, setOpened] = React.useState(false);\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue(\n (nativeSelectValue) => props.value ?? nativeSelectValue\n );\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (nativeSelectValue) {\n const event = new Event(\"change\", { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined\n ? options[selectedOptionIndex]\n : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n classNames(\n opened && \"Select--open\",\n opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes(\"top\")\n ? \"Select--pop-up\"\n : \"Select--pop-down\")\n ),\n [dropdownOffsetDistance, opened, popperPlacement]\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput(\"\");\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\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 isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length]\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (\n index === undefined ||\n index < 0 ||\n index > (options.length ?? 0) - 1\n ) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex\n );\n },\n [options, scrollToElement]\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label)\n .toLowerCase()\n .includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options]\n );\n\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue(\"\");\n setOpened(false);\n setFocusedOptionIndex(-1);\n setOptions(optionsProp);\n onClose?.();\n }, [onClose, optionsProp, resetKeyboardInput]);\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {\n const item = options[focusedOptionIndex];\n\n setNativeSelectValue(item?.value);\n close();\n }\n }, [close, focusedOptionIndex, isValidIndex, options]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === \"function\") {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n React.useEffect(() => {\n if (\n opened &&\n selectedOptionIndex !== undefined &&\n isValidIndex(selectedOptionIndex)\n ) {\n scrollToElement(selectedOptionIndex, true);\n }\n }, [isValidIndex, opened, scrollToElement, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event(\"blur\");\n selectElRef.current?.dispatchEvent(event);\n }, [close]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event(\"focus\");\n selectElRef.current?.dispatchEvent(event);\n }, []);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(\n () => debounce(resetKeyboardInput, 1000),\n [resetKeyboardInput]\n );\n\n const focusOption = React.useCallback(\n (type: \"next\" | \"prev\") => {\n let index = focusedOptionIndex;\n\n if (type === \"next\") {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === \"prev\") {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options]\n );\n\n React.useEffect(() => {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n }, [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n ]);\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback(\n (e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n },\n []\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> =\n React.useCallback(\n (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n },\n [isControlledOutside, onChange, options, selectedOptionIndex]\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> =\n React.useCallback(\n (event) => {\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n areOptionsShown() && focusOption(\"prev\");\n break;\n case \"ArrowDown\":\n areOptionsShown() && focusOption(\"next\");\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused]\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> =\n React.useCallback(\n (e) => {\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === \"development\") {\n warn(\n \"Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет \" +\n \"проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.\"\n );\n }\n setOptions(options);\n setSelectedOptionIndex(\n findSelectedIndex(options, nativeSelectValue)\n );\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== \" \") {\n onKeyboardInput(event.key);\n return;\n }\n\n [\"ArrowUp\", \"ArrowDown\", \"Escape\", \"Enter\"].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case \"ArrowUp\":\n if (opened) {\n areOptionsShown() && focusOption(\"prev\");\n } else {\n open();\n }\n break;\n case \"ArrowDown\":\n if (opened) {\n areOptionsShown() && focusOption(\"next\");\n } else {\n open();\n }\n break;\n case \"Escape\":\n close();\n break;\n case \"Enter\":\n case \"Spacebar\":\n case \" \":\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n ]\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectFocused();\n }\n },\n [options, selectFocused]\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget\n ),\n false\n );\n },\n [focusOptionByIndex]\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ]\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Caption vkuiClass=\"CustomSelect__empty\">{emptyText}</Caption>\n );\n\n if (typeof renderDropdown === \"function\") {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n return (\n <label\n vkuiClass=\"CustomSelect\"\n className={className}\n style={style}\n ref={multiRef(containerRef, getRootRef)}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={props.onClick}\n before={before}\n after={icon}\n placeholder={restProps.placeholder}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n vkuiClass={openedClassNames}\n after={icon}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n observableRefs={scrollBoxRef}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport const CustomSelect = withAdaptivity(CustomSelectComponent, {\n sizeY: true,\n});\n"],"file":"CustomSelect.js"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
4
|
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
@@ -11,43 +13,162 @@ var _jsxRuntime = require("../../lib/jsxRuntime");
|
|
|
11
13
|
|
|
12
14
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
15
|
|
|
16
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
17
|
+
|
|
18
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
19
|
+
|
|
14
20
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
15
21
|
|
|
16
|
-
var
|
|
22
|
+
var React = _interopRequireWildcard(require("react"));
|
|
23
|
+
|
|
24
|
+
var _dom = require("../../lib/dom");
|
|
25
|
+
|
|
26
|
+
var _Popper = require("../Popper/Popper");
|
|
27
|
+
|
|
28
|
+
var _FocusTrap = require("../FocusTrap/FocusTrap");
|
|
29
|
+
|
|
30
|
+
var _useTimeout = require("../../hooks/useTimeout");
|
|
31
|
+
|
|
32
|
+
var _useExternRef = require("../../hooks/useExternRef");
|
|
17
33
|
|
|
18
|
-
var
|
|
34
|
+
var _useEventListener = require("../../hooks/useEventListener");
|
|
19
35
|
|
|
20
|
-
var
|
|
36
|
+
var _useGlobalEventListener = require("../../hooks/useGlobalEventListener");
|
|
37
|
+
|
|
38
|
+
var _usePatchChildrenRef3 = require("../../hooks/usePatchChildrenRef");
|
|
39
|
+
|
|
40
|
+
var _excluded = ["action", "shown", "showDelay", "hideDelay", "offsetDistance", "content", "children", "style", "getRef", "onShownChange"];
|
|
21
41
|
|
|
22
42
|
/**
|
|
23
43
|
* @see https://vkcom.github.io/VKUI/#/Dropdown
|
|
44
|
+
*
|
|
45
|
+
* TODO v5.0.0 Переименовать в `Popover` (см. https://github.com/VKCOM/VKUI/issues/2523)
|
|
24
46
|
*/
|
|
25
47
|
var Dropdown = function Dropdown(_ref) {
|
|
26
48
|
var _ref$action = _ref.action,
|
|
27
49
|
action = _ref$action === void 0 ? "click" : _ref$action,
|
|
28
|
-
|
|
29
|
-
showDelay = _ref.showDelay,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
shownProp = _ref.shown,
|
|
51
|
+
_ref$showDelay = _ref.showDelay,
|
|
52
|
+
showDelay = _ref$showDelay === void 0 ? 150 : _ref$showDelay,
|
|
53
|
+
_ref$hideDelay = _ref.hideDelay,
|
|
54
|
+
hideDelay = _ref$hideDelay === void 0 ? 150 : _ref$hideDelay,
|
|
55
|
+
_ref$offsetDistance = _ref.offsetDistance,
|
|
56
|
+
offsetDistance = _ref$offsetDistance === void 0 ? 8 : _ref$offsetDistance,
|
|
57
|
+
content = _ref.content,
|
|
58
|
+
children = _ref.children,
|
|
59
|
+
style = _ref.style,
|
|
60
|
+
getRef = _ref.getRef,
|
|
61
|
+
onShownChange = _ref.onShownChange,
|
|
62
|
+
restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
63
|
+
|
|
64
|
+
var _useDOM = (0, _dom.useDOM)(),
|
|
65
|
+
document = _useDOM.document;
|
|
66
|
+
|
|
67
|
+
var hoverable = action === "hover";
|
|
68
|
+
var hovered = React.useRef(false);
|
|
69
|
+
|
|
70
|
+
var _React$useState = React.useState(shownProp || false),
|
|
71
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
72
|
+
computedShown = _React$useState2[0],
|
|
73
|
+
setComputedShown = _React$useState2[1];
|
|
74
|
+
|
|
75
|
+
var _React$useState3 = React.useState(null),
|
|
76
|
+
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
|
|
77
|
+
dropdownNode = _React$useState4[0],
|
|
78
|
+
setPopperNode = _React$useState4[1]; // Reason: Typescript ругается на CSS Custom Properties в объекте
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
var styles = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, style), {}, {
|
|
83
|
+
"--popover-safe-zone-padding": "".concat(offsetDistance, "px")
|
|
84
|
+
});
|
|
85
|
+
var shown = typeof shownProp === "boolean" ? shownProp : computedShown;
|
|
86
|
+
var patchedPopperRef = (0, _useExternRef.useExternRef)(setPopperNode, getRef);
|
|
87
|
+
|
|
88
|
+
var _usePatchChildrenRef = (0, _usePatchChildrenRef3.usePatchChildrenRef)(children),
|
|
89
|
+
_usePatchChildrenRef2 = (0, _slicedToArray2.default)(_usePatchChildrenRef, 2),
|
|
90
|
+
childRef = _usePatchChildrenRef2[0],
|
|
91
|
+
child = _usePatchChildrenRef2[1];
|
|
92
|
+
|
|
93
|
+
var setShown = function setShown(value) {
|
|
94
|
+
if (typeof shownProp !== "boolean") {
|
|
95
|
+
setComputedShown(value);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
typeof onShownChange === "function" && onShownChange(value);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
var showTimeout = (0, _useTimeout.useTimeout)(function () {
|
|
102
|
+
return setShown(true);
|
|
103
|
+
}, showDelay);
|
|
104
|
+
var hideTimeout = (0, _useTimeout.useTimeout)(function () {
|
|
105
|
+
return setShown(false);
|
|
106
|
+
}, hideDelay);
|
|
107
|
+
|
|
108
|
+
var handleTargetEnter = function handleTargetEnter() {
|
|
109
|
+
hovered.current = true;
|
|
110
|
+
hideTimeout.clear();
|
|
111
|
+
showTimeout.set();
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
var handleTargetClick = function handleTargetClick() {
|
|
115
|
+
if (hovered.current && shown) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
setShown(!shown);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
var handleTargetLeave = function handleTargetLeave() {
|
|
123
|
+
hovered.current = false;
|
|
124
|
+
showTimeout.clear();
|
|
125
|
+
hideTimeout.set();
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
var handleContentKeyDownEscape = function handleContentKeyDownEscape() {
|
|
129
|
+
setShown(false);
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
var handleOutsideClick = function handleOutsideClick(e) {
|
|
133
|
+
var _childRef$current;
|
|
134
|
+
|
|
135
|
+
if (dropdownNode && !((_childRef$current = childRef.current) !== null && _childRef$current !== void 0 && _childRef$current.contains(e.target)) && !dropdownNode.contains(e.target)) {
|
|
136
|
+
setShown(false);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
(0, _useGlobalEventListener.useGlobalEventListener)(document, "click", handleOutsideClick);
|
|
141
|
+
var targetEnterListener = (0, _useEventListener.useEventListener)("mouseenter", handleTargetEnter);
|
|
142
|
+
var targetClickEvent = (0, _useEventListener.useEventListener)("click", handleTargetClick);
|
|
143
|
+
var targetLeaveListener = (0, _useEventListener.useEventListener)("mouseleave", handleTargetLeave);
|
|
144
|
+
React.useEffect(function () {
|
|
145
|
+
if (!childRef.current) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
targetClickEvent.add(childRef.current);
|
|
150
|
+
|
|
151
|
+
if (hoverable) {
|
|
152
|
+
targetEnterListener.add(childRef.current);
|
|
153
|
+
targetLeaveListener.add(childRef.current);
|
|
154
|
+
}
|
|
155
|
+
}, [childRef, hoverable, targetClickEvent, targetEnterListener, targetLeaveListener]);
|
|
156
|
+
return (0, _jsxRuntime.createScopedElement)(React.Fragment, null, child, shown && (0, _jsxRuntime.createScopedElement)(_Popper.Popper, (0, _extends2.default)({}, restProps, {
|
|
157
|
+
vkuiClass: "Dropdown",
|
|
158
|
+
targetRef: childRef,
|
|
159
|
+
getRef: patchedPopperRef,
|
|
160
|
+
offsetDistance: offsetDistance,
|
|
161
|
+
style: styles,
|
|
162
|
+
renderContent: function renderContent(_ref2) {
|
|
163
|
+
var className = _ref2.className;
|
|
164
|
+
return (0, _jsxRuntime.createScopedElement)(_FocusTrap.FocusTrap, {
|
|
165
|
+
vkuiClass: className,
|
|
166
|
+
onClose: handleContentKeyDownEscape
|
|
167
|
+
}, content);
|
|
168
|
+
},
|
|
169
|
+
onMouseOver: hoverable ? hideTimeout.clear : undefined,
|
|
170
|
+
onMouseOut: hoverable ? handleTargetLeave : undefined
|
|
171
|
+
})));
|
|
51
172
|
};
|
|
52
173
|
|
|
53
174
|
exports.Dropdown = Dropdown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"names":["Dropdown","action","hideDelay","showDelay","popperProps","Component","actionSpecificProps","ClickPopper","HoverPopper"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;;;AASA;AACA;AACA;AACO,IAAMA,QAAQ,GAAG,SAAXA,QAAW,OAKH;AAAA,yBAJnBC,MAImB;AAAA,MAJnBA,MAImB,4BAJV,OAIU;AAAA,MAHnBC,SAGmB,QAHnBA,SAGmB;AAAA,MAFnBC,SAEmB,QAFnBA,SAEmB;AAAA,MADhBC,WACgB;AACnB,MAAIC,SAAJ;AACA,MAAIC,mBAA2C,GAAG,EAAlD;;AAEA,UAAQL,MAAR;AACE,SAAK,OAAL;AACEI,MAAAA,SAAS,GAAGE,wBAAZ;AACA;;AACF,SAAK,OAAL;AACED,MAAAA,mBAAmB,GAAG;AAAEJ,QAAAA,SAAS,EAATA,SAAF;AAAaC,QAAAA,SAAS,EAATA;AAAb,OAAtB;AACAE,MAAAA,SAAS,GAAGG,wBAAZ;AACA;AAPJ;;AAUA,SACE,qCAAC,SAAD;AAAW,IAAA,SAAS,EAAC;AAArB,KAAoCF,mBAApC,EAA6DF,WAA7D,EADF;AAGD,CAtBM","sourcesContent":["import { HoverPopper, HoverPopperProps } from \"../HoverPopper/HoverPopper\";\nimport { ClickPopper, ClickPopperProps } from \"../ClickPopper/ClickPopper\";\nimport \"./Dropdown.css\";\n\nexport interface DropdownProps\n extends Omit<ClickPopperProps, \"arrow\" | \"arrowClassName\">,\n Omit<HoverPopperProps, \"arrow\" | \"arrowClassName\"> {\n action?: \"click\" | \"hover\";\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Dropdown\n */\nexport const Dropdown = ({\n action = \"click\",\n hideDelay,\n showDelay,\n ...popperProps\n}: DropdownProps) => {\n let Component;\n let actionSpecificProps: Partial<DropdownProps> = {};\n\n switch (action) {\n case \"click\":\n Component = ClickPopper;\n break;\n case \"hover\":\n actionSpecificProps = { hideDelay, showDelay };\n Component = HoverPopper;\n break;\n }\n\n return (\n <Component vkuiClass=\"Dropdown\" {...actionSpecificProps} {...popperProps} />\n );\n};\n"],"file":"Dropdown.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Dropdown/Dropdown.tsx"],"names":["Dropdown","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","style","getRef","onShownChange","restProps","document","hoverable","hovered","React","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","styles","patchedPopperRef","childRef","child","setShown","value","showTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","targetEnterListener","targetClickEvent","targetLeaveListener","useEffect","add","className","undefined"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { useDOM } from \"../../lib/dom\";\nimport { PopperCommonProps, Popper } from \"../Popper/Popper\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { usePatchChildrenRef } from \"../../hooks/usePatchChildrenRef\";\nimport \"./Dropdown.css\";\n\nexport interface DropdownProps\n extends Omit<PopperCommonProps, \"arrow\" | \"arrowClassName\"> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: \"click\" | \"hover\";\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Dropdown\n *\n * TODO v5.0.0 Переименовать в `Popover` (см. https://github.com/VKCOM/VKUI/issues/2523)\n */\nexport const Dropdown = ({\n action = \"click\",\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style,\n getRef,\n onShownChange,\n ...restProps\n}: DropdownProps) => {\n const { document } = useDOM();\n\n const hoverable = action === \"hover\";\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(\n null\n );\n\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const styles = {\n ...style,\n \"--popover-safe-zone-padding\": `${offsetDistance}px`,\n } as React.CSSProperties;\n\n const shown = typeof shownProp === \"boolean\" ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== \"boolean\") {\n setComputedShown(value);\n }\n typeof onShownChange === \"function\" && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, \"click\", handleOutsideClick);\n const targetEnterListener = useEventListener(\"mouseenter\", handleTargetEnter);\n const targetClickEvent = useEventListener(\"click\", handleTargetClick);\n const targetLeaveListener = useEventListener(\"mouseleave\", handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n }, [\n childRef,\n hoverable,\n targetClickEvent,\n targetEnterListener,\n targetLeaveListener,\n ]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n vkuiClass=\"Dropdown\"\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={styles}\n renderContent={({ className }) => (\n <FocusTrap\n vkuiClass={className}\n onClose={handleContentKeyDownEscape}\n >\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"file":"Dropdown.js"}
|
|
@@ -17,10 +17,6 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
17
17
|
|
|
18
18
|
var React = _interopRequireWildcard(require("react"));
|
|
19
19
|
|
|
20
|
-
var _getClassName = require("../../helpers/getClassName");
|
|
21
|
-
|
|
22
|
-
var _usePlatform = require("../../hooks/usePlatform");
|
|
23
|
-
|
|
24
20
|
var _withAdaptivity = require("../../hoc/withAdaptivity");
|
|
25
21
|
|
|
26
22
|
var _ScrollSaver = require("./ScrollSaver");
|
|
@@ -42,7 +38,6 @@ var EpicComponent = function EpicComponent(_ref) {
|
|
|
42
38
|
children = _ref.children,
|
|
43
39
|
viewWidth = _ref.viewWidth,
|
|
44
40
|
restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
45
|
-
var platform = (0, _usePlatform.usePlatform)();
|
|
46
41
|
var scroll = React.useRef({}).current;
|
|
47
42
|
|
|
48
43
|
if (process.env.NODE_ENV === "development" && !tabbar && viewWidth < _withAdaptivity.ViewWidth.SMALL_TABLET) {
|
|
@@ -53,7 +48,7 @@ var EpicComponent = function EpicComponent(_ref) {
|
|
|
53
48
|
return /*#__PURE__*/React.isValidElement(story) && (0, _getNavId.getNavId)(story.props, warn) === activeStory;
|
|
54
49
|
})) !== null && _ref2 !== void 0 ? _ref2 : null;
|
|
55
50
|
return (0, _jsxRuntime.createScopedElement)("div", (0, _extends2.default)({}, restProps, {
|
|
56
|
-
vkuiClass:
|
|
51
|
+
vkuiClass: "Epic"
|
|
57
52
|
}), (0, _jsxRuntime.createScopedElement)(_ScrollSaver.ScrollSaver, {
|
|
58
53
|
key: activeStory,
|
|
59
54
|
initialScroll: scroll[activeStory] || 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Epic/Epic.tsx"],"names":["warn","EpicComponent","activeStory","tabbar","children","viewWidth","restProps","
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Epic/Epic.tsx"],"names":["warn","EpicComponent","activeStory","tabbar","children","viewWidth","restProps","scroll","React","useRef","current","process","env","NODE_ENV","ViewWidth","SMALL_TABLET","SMALL_TABLET_SIZE","story","Children","toArray","find","isValidElement","props","value","Epic","displayName"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAKA;;;AAUA,IAAMA,IAAI,GAAG,wBAAS,MAAT,CAAb;;AAEA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,OAMwB;AAAA;;AAAA,MAL5CC,WAK4C,QAL5CA,WAK4C;AAAA,MAJ5CC,MAI4C,QAJ5CA,MAI4C;AAAA,MAH5CC,QAG4C,QAH5CA,QAG4C;AAAA,MAF5CC,SAE4C,QAF5CA,SAE4C;AAAA,MADzCC,SACyC;AAC5C,MAAMC,MAAM,GAAGC,KAAK,CAACC,MAAN,CAAwC,EAAxC,EAA4CC,OAA3D;;AAEA,MACEC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,aAAzB,IACA,CAACV,MADD,IAEAE,SAAS,GAAGS,0BAAUC,YAHxB,EAIE;AACAf,IAAAA,IAAI,qUACsEgB,qCADtE,QAAJ;AAGD;;AACD,MAAMC,KAAK,YACRT,KAAK,CAACU,QAAN,CAAeC,OAAf,CAAuBf,QAAvB,EAAiCgB,IAAjC,CACC,UAACH,KAAD;AAAA,WACE,aAAAT,KAAK,CAACa,cAAN,CAAqBJ,KAArB,KACA,wBAASA,KAAK,CAACK,KAAf,EAAsBtB,IAAtB,MAAgCE,WAFlC;AAAA,GADD,CADQ,yCAK+B,IAL1C;AAOA,SACE,uEAASI,SAAT;AAAoB,IAAA,SAAS,EAAC;AAA9B,MACE,qCAAC,wBAAD;AACE,IAAA,GAAG,EAAEJ,WADP;AAEE,IAAA,aAAa,EAAEK,MAAM,CAACL,WAAD,CAAN,IAAuB,CAFxC;AAGE,IAAA,UAAU,EAAE,oBAACqB,KAAD;AAAA,aAAYhB,MAAM,CAACL,WAAD,CAAN,GAAsBqB,KAAlC;AAAA;AAHd,KAKGN,KALH,CADF,EAQGd,MARH,CADF;AAYD,CArCD;AAuCA;AACA;AACA;;;AACO,IAAMqB,IAAI,GAAG,oCAAevB,aAAf,EAA8B;AAChDI,EAAAA,SAAS,EAAE;AADqC,CAA9B,CAAb;;AAIPmB,IAAI,CAACC,WAAL,GAAmB,MAAnB","sourcesContent":["import * as React from \"react\";\nimport { withAdaptivity, ViewWidth } from \"../../hoc/withAdaptivity\";\nimport { ScrollSaver } from \"./ScrollSaver\";\nimport { getNavId } from \"../../lib/getNavId\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport {\n AdaptivityContextInterface,\n AdaptivityProps,\n} from \"../AdaptivityProvider/AdaptivityContext\";\nimport { SMALL_TABLET_SIZE } from \"../AdaptivityProvider/AdaptivityProvider\";\nimport \"./Epic.css\";\n\nexport interface EpicProps\n extends React.HTMLAttributes<HTMLDivElement>,\n AdaptivityProps {\n tabbar?: React.ReactNode;\n activeStory: string;\n}\n\nconst warn = warnOnce(\"Epic\");\n\nconst EpicComponent = ({\n activeStory,\n tabbar,\n children,\n viewWidth,\n ...restProps\n}: EpicProps & AdaptivityContextInterface) => {\n const scroll = React.useRef<{ [key: string]: number }>({}).current;\n\n if (\n process.env.NODE_ENV === \"development\" &&\n !tabbar &&\n viewWidth < ViewWidth.SMALL_TABLET\n ) {\n warn(\n `Не рекомендуется использовать Epic без Tabbar при ширине окна меньше ${SMALL_TABLET_SIZE}px`\n );\n }\n const story =\n (React.Children.toArray(children).find(\n (story) =>\n React.isValidElement(story) &&\n getNavId(story.props, warn) === activeStory\n ) as React.ReactElement | undefined) ?? null;\n\n return (\n <div {...restProps} vkuiClass=\"Epic\">\n <ScrollSaver\n key={activeStory}\n initialScroll={scroll[activeStory] || 0}\n saveScroll={(value) => (scroll[activeStory] = value)}\n >\n {story}\n </ScrollSaver>\n {tabbar}\n </div>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Epic\n */\nexport const Epic = withAdaptivity(EpicComponent, {\n viewWidth: true,\n});\n\nEpic.displayName = \"Epic\";\n"],"file":"Epic.js"}
|
|
@@ -31,8 +31,6 @@ var _dom = require("../../lib/dom");
|
|
|
31
31
|
|
|
32
32
|
var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
|
|
33
33
|
|
|
34
|
-
var _utils = require("../../lib/utils");
|
|
35
|
-
|
|
36
34
|
var _AppRootContext = require("../AppRoot/AppRootContext");
|
|
37
35
|
|
|
38
36
|
var _excluded = ["Component", "onClose", "restoreFocus", "timeout", "getRootRef", "children"];
|
|
@@ -45,8 +43,7 @@ var FOCUSABLE_ELEMENTS = _accessibility.FOCUSABLE_ELEMENTS_LIST.join();
|
|
|
45
43
|
var FocusTrap = function FocusTrap(_ref) {
|
|
46
44
|
var _ref$Component = _ref.Component,
|
|
47
45
|
Component = _ref$Component === void 0 ? "div" : _ref$Component,
|
|
48
|
-
|
|
49
|
-
onClose = _ref$onClose === void 0 ? _utils.noop : _ref$onClose,
|
|
46
|
+
onClose = _ref.onClose,
|
|
50
47
|
_ref$restoreFocus = _ref.restoreFocus,
|
|
51
48
|
restoreFocus = _ref$restoreFocus === void 0 ? true : _ref$restoreFocus,
|
|
52
49
|
_ref$timeout = _ref.timeout,
|
|
@@ -87,7 +84,7 @@ var FocusTrap = function FocusTrap(_ref) {
|
|
|
87
84
|
|
|
88
85
|
(0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
|
|
89
86
|
if (!ref.current) {
|
|
90
|
-
return
|
|
87
|
+
return;
|
|
91
88
|
}
|
|
92
89
|
|
|
93
90
|
var nodes = [];
|
|
@@ -102,11 +99,12 @@ var FocusTrap = function FocusTrap(_ref) {
|
|
|
102
99
|
}
|
|
103
100
|
});
|
|
104
101
|
|
|
105
|
-
if (nodes
|
|
106
|
-
|
|
102
|
+
if (nodes.length === 0) {
|
|
103
|
+
// Чтобы фокус был хотя бы на родителе
|
|
104
|
+
nodes.push(ref.current);
|
|
107
105
|
}
|
|
108
106
|
|
|
109
|
-
|
|
107
|
+
setFocusableNodes(nodes);
|
|
110
108
|
}, [children]); // HANDLE TRAP UNMOUNT
|
|
111
109
|
|
|
112
110
|
var focusOnTrapUnmount = (0, _useTimeout.useTimeout)(function () {
|
|
@@ -122,7 +120,7 @@ var FocusTrap = function FocusTrap(_ref) {
|
|
|
122
120
|
};
|
|
123
121
|
}
|
|
124
122
|
|
|
125
|
-
return
|
|
123
|
+
return;
|
|
126
124
|
}, [restoreFocus]);
|
|
127
125
|
|
|
128
126
|
var onDocumentKeydown = function onDocumentKeydown(e) {
|
|
@@ -145,7 +143,7 @@ var FocusTrap = function FocusTrap(_ref) {
|
|
|
145
143
|
}
|
|
146
144
|
}
|
|
147
145
|
|
|
148
|
-
if ((0, _accessibility.pressedKey)(e) === _accessibility.Keys.ESCAPE) {
|
|
146
|
+
if (onClose && (0, _accessibility.pressedKey)(e) === _accessibility.Keys.ESCAPE) {
|
|
149
147
|
onClose();
|
|
150
148
|
}
|
|
151
149
|
|
|
@@ -156,6 +154,7 @@ var FocusTrap = function FocusTrap(_ref) {
|
|
|
156
154
|
capture: true
|
|
157
155
|
});
|
|
158
156
|
return (0, _jsxRuntime.createScopedElement)(Component, (0, _extends2.default)({
|
|
157
|
+
tabIndex: -1,
|
|
159
158
|
ref: ref
|
|
160
159
|
}, restProps), children);
|
|
161
160
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/FocusTrap/FocusTrap.tsx"],"names":["FOCUSABLE_ELEMENTS","FOCUSABLE_ELEMENTS_LIST","join","FocusTrap","Component","onClose","
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/FocusTrap/FocusTrap.tsx"],"names":["FOCUSABLE_ELEMENTS","FOCUSABLE_ELEMENTS_LIST","join","FocusTrap","Component","onClose","restoreFocus","timeout","getRootRef","children","restProps","ref","document","window","React","useState","focusableNodes","setFocusableNodes","restoreFocusTo","setRestoreFocusTo","useContext","AppRootContext","keyboardInput","focusOnTrapMount","current","contains","activeElement","length","focus","set","nodes","Array","prototype","forEach","call","querySelectorAll","focusableEl","getComputedStyle","display","visibility","push","focusOnTrapUnmount","onDocumentKeydown","e","Keys","TAB","lastIdx","targetIdx","findIndex","node","target","shouldFocusFirstNode","shiftKey","preventDefault","ESCAPE","capture"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport {\n FOCUSABLE_ELEMENTS_LIST,\n Keys,\n pressedKey,\n} from \"../../lib/accessibility\";\nimport { useDOM } from \"../../lib/dom\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { HasComponent, HasRootRef } from \"../../types\";\nimport { AppRootContext } from \"../AppRoot/AppRootContext\";\n\nconst FOCUSABLE_ELEMENTS: string = FOCUSABLE_ELEMENTS_LIST.join();\n\nexport interface FocusTrapProps\n extends React.AllHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLElement>,\n HasComponent {\n restoreFocus?: boolean;\n timeout?: number;\n onClose?(): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FocusTrap\n */\nexport const FocusTrap = ({\n Component = \"div\",\n onClose,\n restoreFocus = true,\n timeout = 0,\n getRootRef,\n children,\n ...restProps\n}: FocusTrapProps) => {\n const ref = useExternRef<HTMLElement>(getRootRef);\n\n const { document, window } = useDOM();\n\n const [focusableNodes, setFocusableNodes] = React.useState<\n HTMLElement[] | null\n >(null);\n const [restoreFocusTo, setRestoreFocusTo] =\n React.useState<HTMLElement | null>(null);\n\n // HANDLE TRAP MOUNT\n\n const { keyboardInput } = React.useContext(AppRootContext);\n const focusOnTrapMount = useTimeout(() => {\n if (\n keyboardInput &&\n !ref.current?.contains(document!.activeElement) &&\n focusableNodes?.length\n ) {\n focusableNodes[0].focus();\n }\n }, timeout);\n useIsomorphicLayoutEffect(() => {\n focusOnTrapMount.set();\n }, []);\n\n // HANDLE FOCUSABLE NODES\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const nodes: HTMLElement[] = [];\n Array.prototype.forEach.call(\n // eslint-disable-next-line no-restricted-properties\n ref.current.querySelectorAll(FOCUSABLE_ELEMENTS),\n (focusableEl: Element) => {\n const { display, visibility } = window!.getComputedStyle(focusableEl);\n\n if (display !== \"none\" && visibility !== \"hidden\") {\n nodes.push(focusableEl as HTMLElement);\n }\n }\n );\n\n if (nodes.length === 0) {\n // Чтобы фокус был хотя бы на родителе\n nodes.push(ref.current);\n }\n\n setFocusableNodes(nodes);\n }, [children]);\n\n // HANDLE TRAP UNMOUNT\n\n const focusOnTrapUnmount = useTimeout(() => {\n if (restoreFocusTo) {\n restoreFocusTo.focus();\n }\n }, timeout);\n useIsomorphicLayoutEffect(() => {\n if (restoreFocus && document!.activeElement) {\n setRestoreFocusTo(document!.activeElement as HTMLElement);\n\n return () => {\n focusOnTrapUnmount.set();\n };\n }\n\n return;\n }, [restoreFocus]);\n\n const onDocumentKeydown = (e: KeyboardEvent) => {\n if (pressedKey(e) === Keys.TAB && focusableNodes?.length) {\n const lastIdx = focusableNodes.length - 1;\n const targetIdx = focusableNodes.findIndex((node) => node === e.target);\n\n const shouldFocusFirstNode =\n targetIdx === -1 || (targetIdx === lastIdx && !e.shiftKey);\n\n if (shouldFocusFirstNode || (targetIdx === 0 && e.shiftKey)) {\n e.preventDefault();\n\n const node = focusableNodes[shouldFocusFirstNode ? 0 : lastIdx];\n\n if (node !== document!.activeElement) {\n node.focus();\n }\n\n return false;\n }\n }\n\n if (onClose && pressedKey(e) === Keys.ESCAPE) {\n onClose();\n }\n\n return true;\n };\n useGlobalEventListener(document, \"keydown\", onDocumentKeydown, {\n capture: true,\n });\n\n return (\n <Component tabIndex={-1} ref={ref} {...restProps}>\n {children}\n </Component>\n );\n};\n"],"file":"FocusTrap.js"}
|