@vkontakte/vkui 7.0.1 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ActionSheet/types.d.ts +1 -1
- package/dist/components/ActionSheet/types.d.ts.map +1 -1
- package/dist/components/ActionSheet/types.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +1 -1
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/AppRoot/AppRoot.d.ts +1 -1
- package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/components/AppRoot/AppRootContext.d.ts +2 -2
- package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRootContext.js.map +1 -1
- package/dist/components/AppRoot/AppRootPortal.d.ts +1 -1
- package/dist/components/AppRoot/AppRootPortal.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
- package/dist/components/AppRoot/ScrollContext.d.ts +1 -1
- package/dist/components/AppRoot/ScrollContext.d.ts.map +1 -1
- package/dist/components/AppRoot/ScrollContext.js.map +1 -1
- package/dist/components/AspectRatio/AspectRatio.d.ts +7 -3
- package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/components/AspectRatio/AspectRatio.js +1 -1
- package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +3 -4
- package/dist/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/components/Calendar/Calendar.js +81 -64
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.d.ts +3 -0
- package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.js +3 -1
- package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.d.ts +3 -0
- package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/components/CalendarHeader/CalendarHeader.d.ts +12 -0
- package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
- package/dist/components/CalendarHeader/CalendarHeader.js +4 -2
- package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts +7 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +108 -93
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.d.ts +20 -4
- package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.js +68 -9
- package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/components/CardScroll/CardScroll.d.ts +2 -3
- package/dist/components/CardScroll/CardScroll.d.ts.map +1 -1
- package/dist/components/CardScroll/CardScroll.js +6 -2
- package/dist/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/components/CarouselBase/Bullets.d.ts +16 -0
- package/dist/components/CarouselBase/Bullets.d.ts.map +1 -0
- package/dist/components/CarouselBase/Bullets.js +21 -0
- package/dist/components/CarouselBase/Bullets.js.map +1 -0
- package/dist/components/CarouselBase/CarouselBase.d.ts +4 -0
- package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -0
- package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +175 -98
- package/dist/components/CarouselBase/CarouselBase.js.map +1 -0
- package/dist/components/CarouselBase/CarouselViewPort.d.ts +14 -0
- package/dist/components/CarouselBase/CarouselViewPort.d.ts.map +1 -0
- package/dist/components/CarouselBase/CarouselViewPort.js +29 -0
- package/dist/components/CarouselBase/CarouselViewPort.js.map +1 -0
- package/dist/components/CarouselBase/ScrollArrows.d.ts +23 -0
- package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -0
- package/dist/components/CarouselBase/ScrollArrows.js +34 -0
- package/dist/components/CarouselBase/ScrollArrows.js.map +1 -0
- package/dist/components/CarouselBase/constants.d.ts.map +1 -0
- package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
- package/dist/components/CarouselBase/constants.js.map +1 -0
- package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.d.ts +13 -4
- package/dist/components/CarouselBase/helpers.d.ts.map +1 -0
- package/dist/{cssm/components/BaseGallery → components}/CarouselBase/helpers.js +41 -5
- package/dist/components/CarouselBase/helpers.js.map +1 -0
- package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.d.ts +1 -1
- package/dist/components/CarouselBase/hooks.d.ts.map +1 -0
- package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
- package/dist/components/CarouselBase/hooks.js.map +1 -0
- package/dist/components/CarouselBase/types.d.ts +125 -0
- package/dist/components/CarouselBase/types.d.ts.map +1 -0
- package/dist/components/CarouselBase/types.js.map +1 -0
- package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
- package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
- package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
- package/dist/components/ChipsInput/useChipsInput.d.ts +1 -1
- package/dist/components/ChipsInput/useChipsInput.d.ts.map +1 -1
- package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/ChipsSelect/useChipsSelect.d.ts +1 -1
- package/dist/components/ChipsSelect/useChipsSelect.d.ts.map +1 -1
- package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
- package/dist/components/Clickable/useState.js.map +1 -1
- package/dist/components/Clickable/useStateWithDelay.js +1 -1
- package/dist/components/Clickable/useStateWithDelay.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
- package/dist/components/ConfigProvider/ConfigProvider.js +8 -23
- package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
- package/dist/components/ConfigProvider/ConfigProviderContext.d.ts.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderContext.js +22 -0
- package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderOverride.d.ts.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderOverride.js +2 -3
- package/dist/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.d.ts +5 -1
- package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +9 -4
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +6 -2
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +8 -4
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
- package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
- package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
- package/dist/components/DateInput/DateInput.d.ts +24 -2
- package/dist/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/components/DateInput/DateInput.js +41 -6
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.d.ts +19 -1
- package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.js +6 -4
- package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/components/Epic/Epic.d.ts.map +1 -1
- package/dist/components/Epic/Epic.js.map +1 -1
- package/dist/components/FixedLayout/FixedLayout.d.ts.map +1 -1
- package/dist/components/FixedLayout/FixedLayout.js +1 -2
- package/dist/components/FixedLayout/FixedLayout.js.map +1 -1
- package/dist/components/Gallery/Gallery.d.ts +2 -3
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +3 -6
- package/dist/components/Gallery/Gallery.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +9 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.js +6 -4
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/Image/Image.d.ts +1 -0
- package/dist/components/Image/Image.d.ts.map +1 -1
- package/dist/components/Image/Image.js +2 -0
- package/dist/components/Image/Image.js.map +1 -1
- package/dist/components/ImageBase/ImageBase.d.ts +8 -1
- package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
- package/dist/components/ImageBase/ImageBase.js +39 -11
- package/dist/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts +29 -0
- package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts.map +1 -0
- package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +96 -0
- package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
- package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts +4 -0
- package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts.map +1 -0
- package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
- package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
- package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts +1 -1
- package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -1
- package/dist/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
- package/dist/components/ImageBase/context.d.ts.map +1 -1
- package/dist/components/ImageBase/context.js +3 -1
- package/dist/components/ImageBase/context.js.map +1 -1
- package/dist/components/ImageBase/types.d.ts +2 -0
- package/dist/components/ImageBase/types.d.ts.map +1 -1
- package/dist/components/ImageBase/types.js.map +1 -1
- package/dist/components/ImageBase/validators.d.ts +2 -1
- package/dist/components/ImageBase/validators.d.ts.map +1 -1
- package/dist/components/ImageBase/validators.js.map +1 -1
- package/dist/components/ModalCardBase/ModalCardBase.d.ts +1 -1
- package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/components/ModalRoot/ModalRootContext.d.ts +1 -1
- package/dist/components/ModalRoot/ModalRootContext.d.ts.map +1 -1
- package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts +14 -1
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.js +13 -4
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts +2 -0
- package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts.map +1 -1
- package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
- package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts +2 -2
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/Popover.js +6 -126
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/Popover/usePopover.d.ts +14 -0
- package/dist/components/Popover/usePopover.d.ts.map +1 -0
- package/dist/components/Popover/usePopover.js +138 -0
- package/dist/components/Popover/usePopover.js.map +1 -0
- package/dist/components/Popper/Popper.d.ts +1 -1
- package/dist/components/Popper/Popper.d.ts.map +1 -1
- package/dist/components/Popper/Popper.js.map +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.js +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/components/Removable/Removable.d.ts +2 -2
- package/dist/components/Removable/Removable.js.map +1 -1
- package/dist/components/RichCell/RichCell.d.ts +11 -1
- package/dist/components/RichCell/RichCell.d.ts.map +1 -1
- package/dist/components/RichCell/RichCell.js +15 -8
- package/dist/components/RichCell/RichCell.js.map +1 -1
- package/dist/components/Root/Root.d.ts.map +1 -1
- package/dist/components/Root/Root.js +3 -1
- package/dist/components/Root/Root.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.d.ts +2 -2
- package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +30 -10
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts +5 -3
- package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +6 -17
- package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +3 -2
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +2 -2
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Slider/Slider.d.ts +9 -1
- package/dist/components/Slider/Slider.d.ts.map +1 -1
- package/dist/components/Slider/Slider.js +5 -1
- package/dist/components/Slider/Slider.js.map +1 -1
- package/dist/components/Snackbar/Snackbar.js +1 -1
- package/dist/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/components/SplitCol/SplitColContext.d.ts +1 -1
- package/dist/components/SplitCol/SplitColContext.d.ts.map +1 -1
- package/dist/components/SplitCol/SplitColContext.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +2 -82
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Textarea/Textarea.js +2 -2
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Textarea/useResizeTextarea.d.ts +1 -1
- package/dist/components/Textarea/useResizeTextarea.d.ts.map +1 -1
- package/dist/components/Textarea/useResizeTextarea.js +1 -1
- package/dist/components/Textarea/useResizeTextarea.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +2 -2
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.js +4 -2
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/UsersStack/UsersStack.d.ts +1 -1
- package/dist/components/UsersStack/UsersStack.d.ts.map +1 -1
- package/dist/components/UsersStack/UsersStack.js +16 -5
- package/dist/components/UsersStack/UsersStack.js.map +1 -1
- package/dist/components/View/View.d.ts.map +1 -1
- package/dist/components/View/View.js +3 -1
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.d.ts.map +1 -1
- package/dist/components/View/ViewInfinite.js +3 -1
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/context/CalendarDirectionContext.d.ts +7 -0
- package/dist/context/CalendarDirectionContext.d.ts.map +1 -0
- package/dist/context/CalendarDirectionContext.js +7 -0
- package/dist/context/CalendarDirectionContext.js.map +1 -0
- package/dist/cssm/components/ActionSheet/types.js.map +1 -1
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
- package/dist/cssm/components/AppRoot/ScrollContext.js.map +1 -1
- package/dist/cssm/components/AspectRatio/AspectRatio.js +1 -1
- package/dist/cssm/components/AspectRatio/AspectRatio.js.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.js +79 -64
- package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.js +3 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.module.css +4 -0
- package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/cssm/components/CalendarHeader/CalendarHeader.js +4 -2
- package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +108 -94
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.js +67 -9
- package/dist/cssm/components/CalendarTime/CalendarTime.js.map +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/CarouselBase/Bullets.js +22 -0
- package/dist/cssm/components/CarouselBase/Bullets.js.map +1 -0
- package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +164 -97
- package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -0
- package/dist/cssm/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +21 -1
- package/dist/cssm/components/CarouselBase/CarouselViewPort.js +30 -0
- package/dist/cssm/components/CarouselBase/CarouselViewPort.js.map +1 -0
- package/dist/cssm/components/CarouselBase/ScrollArrows.js +35 -0
- package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -0
- package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
- package/dist/cssm/components/CarouselBase/constants.js.map +1 -0
- package/dist/{components/BaseGallery → cssm/components}/CarouselBase/helpers.js +39 -5
- package/dist/cssm/components/CarouselBase/helpers.js.map +1 -0
- package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
- package/dist/cssm/components/CarouselBase/hooks.js.map +1 -0
- package/dist/cssm/components/CarouselBase/types.js.map +1 -0
- package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
- package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
- package/dist/cssm/components/Clickable/useState.js.map +1 -1
- package/dist/cssm/components/Clickable/useStateWithDelay.js +1 -1
- package/dist/cssm/components/Clickable/useStateWithDelay.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProvider.js +8 -23
- package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js +22 -0
- package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js +2 -3
- package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +8 -4
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +6 -2
- package/dist/cssm/components/CustomSelect/CustomSelect.js +6 -3
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.js +37 -5
- package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -3
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cssm/components/Epic/Epic.js.map +1 -1
- package/dist/cssm/components/FixedLayout/FixedLayout.js +1 -2
- package/dist/cssm/components/FixedLayout/FixedLayout.js.map +1 -1
- package/dist/cssm/components/FormField/FormField.module.css +11 -11
- package/dist/cssm/components/Gallery/Gallery.js +3 -5
- package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +3 -3
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/Image/Image.js +2 -0
- package/dist/cssm/components/Image/Image.js.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBase.js +35 -9
- package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBase.module.css +9 -0
- package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +91 -0
- package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
- package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
- package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
- package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
- package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
- package/dist/cssm/components/ImageBase/context.js +3 -1
- package/dist/cssm/components/ImageBase/context.js.map +1 -1
- package/dist/cssm/components/ImageBase/types.js.map +1 -1
- package/dist/cssm/components/ImageBase/validators.js.map +1 -1
- package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/cssm/components/Pagination/Pagination.js +10 -4
- package/dist/cssm/components/Pagination/Pagination.js.map +1 -1
- package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
- package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
- package/dist/cssm/components/Popover/Popover.js +5 -93
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/components/Popover/usePopover.js +102 -0
- package/dist/cssm/components/Popover/usePopover.js.map +1 -0
- package/dist/cssm/components/Popper/Popper.js.map +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/cssm/components/Removable/Removable.js.map +1 -1
- package/dist/cssm/components/RichCell/RichCell.js +13 -8
- package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
- package/dist/cssm/components/RichCell/RichCell.module.css +17 -3
- package/dist/cssm/components/Root/Root.js +3 -1
- package/dist/cssm/components/Root/Root.js.map +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js +27 -7
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +5 -5
- package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
- package/dist/cssm/components/Select/Select.js +1 -1
- package/dist/cssm/components/Select/Select.js.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.js +2 -2
- package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/cssm/components/Slider/Slider.js +3 -1
- package/dist/cssm/components/Slider/Slider.js.map +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.js +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
- package/dist/cssm/components/SplitCol/SplitColContext.js.map +1 -1
- package/dist/cssm/components/Tabs/Tabs.js +2 -82
- package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
- package/dist/cssm/components/Textarea/Textarea.js +2 -2
- package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
- package/dist/cssm/components/Textarea/useResizeTextarea.js +1 -1
- package/dist/cssm/components/Textarea/useResizeTextarea.js.map +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/components/UsersStack/UsersStack.js +15 -4
- package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
- package/dist/cssm/components/UsersStack/UsersStack.module.css +27 -17
- package/dist/cssm/components/View/View.js +3 -1
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/ViewInfinite.js +3 -1
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/context/CalendarDirectionContext.js +7 -0
- package/dist/cssm/context/CalendarDirectionContext.js.map +1 -0
- package/dist/cssm/helpers/getMergedSameEventsByProps.js.map +1 -1
- package/dist/cssm/hooks/useDateInput.js.map +1 -1
- package/dist/cssm/hooks/useDirection.js.map +1 -1
- package/dist/cssm/hooks/useDraggableWithDomApi/types.js.map +1 -1
- package/dist/cssm/hooks/useEnsuredControl.js +1 -1
- package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
- package/dist/cssm/hooks/useExternRef.js.map +1 -1
- package/dist/cssm/hooks/useFocusTrap.js.map +1 -1
- package/dist/cssm/hooks/useGlobalOnClickOutside.js.map +1 -1
- package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
- package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
- package/dist/cssm/hooks/useNativeFormResetListener.js.map +1 -1
- package/dist/cssm/hooks/usePatchChildren.js.map +1 -1
- package/dist/cssm/hooks/usePrevious.js +1 -1
- package/dist/cssm/hooks/usePrevious.js.map +1 -1
- package/dist/cssm/hooks/useResizeObserver.js +20 -4
- package/dist/cssm/hooks/useResizeObserver.js.map +1 -1
- package/dist/cssm/hooks/useStateWithPrev.js.map +1 -1
- package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
- package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -1
- package/dist/cssm/hooks/useTabsNavigation.js +90 -0
- package/dist/cssm/hooks/useTabsNavigation.js.map +1 -0
- package/dist/cssm/index.js +4 -0
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
- package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/cssm/lib/utils.js.map +1 -1
- package/dist/cssm/styles/constants.css +1 -0
- package/dist/helpers/getMergedSameEventsByProps.d.ts +1 -1
- package/dist/helpers/getMergedSameEventsByProps.d.ts.map +1 -1
- package/dist/helpers/getMergedSameEventsByProps.js.map +1 -1
- package/dist/hooks/useDateInput.d.ts +3 -3
- package/dist/hooks/useDateInput.d.ts.map +1 -1
- package/dist/hooks/useDateInput.js.map +1 -1
- package/dist/hooks/useDirection.d.ts +2 -2
- package/dist/hooks/useDirection.d.ts.map +1 -1
- package/dist/hooks/useDirection.js.map +1 -1
- package/dist/hooks/useDraggableWithDomApi/types.d.ts +1 -1
- package/dist/hooks/useDraggableWithDomApi/types.d.ts.map +1 -1
- package/dist/hooks/useDraggableWithDomApi/types.js.map +1 -1
- package/dist/hooks/useEnsuredControl.js +1 -1
- package/dist/hooks/useEnsuredControl.js.map +1 -1
- package/dist/hooks/useExternRef.d.ts +1 -1
- package/dist/hooks/useExternRef.d.ts.map +1 -1
- package/dist/hooks/useExternRef.js.map +1 -1
- package/dist/hooks/useFocusTrap.d.ts +1 -1
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js.map +1 -1
- package/dist/hooks/useGlobalOnClickOutside.d.ts +1 -1
- package/dist/hooks/useGlobalOnClickOutside.d.ts.map +1 -1
- package/dist/hooks/useGlobalOnClickOutside.js.map +1 -1
- package/dist/hooks/useKeyboardInputTracker.d.ts +1 -1
- package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
- package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
- package/dist/hooks/useMutationObserver.d.ts +1 -1
- package/dist/hooks/useMutationObserver.d.ts.map +1 -1
- package/dist/hooks/useMutationObserver.js.map +1 -1
- package/dist/hooks/useNativeFormResetListener.d.ts +1 -1
- package/dist/hooks/useNativeFormResetListener.d.ts.map +1 -1
- package/dist/hooks/useNativeFormResetListener.js.map +1 -1
- package/dist/hooks/usePatchChildren.d.ts +2 -2
- package/dist/hooks/usePatchChildren.d.ts.map +1 -1
- package/dist/hooks/usePatchChildren.js.map +1 -1
- package/dist/hooks/usePrevious.js +1 -1
- package/dist/hooks/usePrevious.js.map +1 -1
- package/dist/hooks/useResizeObserver.d.ts +1 -1
- package/dist/hooks/useResizeObserver.d.ts.map +1 -1
- package/dist/hooks/useResizeObserver.js +20 -4
- package/dist/hooks/useResizeObserver.js.map +1 -1
- package/dist/hooks/useStateWithPrev.d.ts.map +1 -1
- package/dist/hooks/useStateWithPrev.js.map +1 -1
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +1 -1
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
- package/dist/hooks/useSyncHTMLWithTokens.d.ts +1 -1
- package/dist/hooks/useSyncHTMLWithTokens.d.ts.map +1 -1
- package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -1
- package/dist/hooks/useTabsNavigation.d.ts +5 -0
- package/dist/hooks/useTabsNavigation.d.ts.map +1 -0
- package/dist/hooks/useTabsNavigation.js +90 -0
- package/dist/hooks/useTabsNavigation.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/animation/useCSSTransition.d.ts +1 -1
- package/dist/lib/animation/useCSSTransition.d.ts.map +1 -1
- package/dist/lib/animation/useCSSTransition.js.map +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +10 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/lib/utils.d.ts +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +6 -6
- package/src/components/ActionSheet/types.ts +1 -1
- package/src/components/Alert/Alert.tsx +1 -1
- package/src/components/AppRoot/AppRoot.tsx +1 -1
- package/src/components/AppRoot/AppRootContext.ts +2 -2
- package/src/components/AppRoot/AppRootPortal.tsx +1 -1
- package/src/components/AppRoot/ScrollContext.tsx +1 -1
- package/src/components/AspectRatio/AspectRatio.tsx +11 -4
- package/src/components/Calendar/Calendar.tsx +90 -72
- package/src/components/CalendarDay/CalendarDay.module.css +4 -0
- package/src/components/CalendarDay/CalendarDay.tsx +10 -1
- package/src/components/CalendarDays/CalendarDays.tsx +3 -0
- package/src/components/CalendarHeader/CalendarHeader.tsx +17 -2
- package/src/components/CalendarRange/CalendarRange.tsx +110 -84
- package/src/components/CalendarTime/CalendarTime.tsx +104 -16
- package/src/components/CardScroll/CardScroll.tsx +8 -2
- package/src/components/CarouselBase/Bullets.tsx +36 -0
- package/src/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +19 -1
- package/src/components/CarouselBase/CarouselBase.tsx +502 -0
- package/src/components/CarouselBase/CarouselViewPort.tsx +54 -0
- package/src/components/CarouselBase/ScrollArrows.tsx +80 -0
- package/src/components/{BaseGallery/CarouselBase → CarouselBase}/constants.ts +4 -0
- package/src/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.ts +67 -7
- package/src/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.ts +2 -2
- package/src/components/CarouselBase/types.ts +135 -0
- package/src/components/ChipsInput/ChipsInput.tsx +1 -1
- package/src/components/ChipsInput/useChipsInput.ts +2 -2
- package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
- package/src/components/ChipsSelect/useChipsSelect.ts +1 -1
- package/src/components/Clickable/useState.tsx +2 -2
- package/src/components/Clickable/useStateWithDelay.tsx +1 -1
- package/src/components/ConfigProvider/ConfigProvider.tsx +8 -35
- package/src/components/ConfigProvider/ConfigProviderContext.tsx +36 -0
- package/src/components/ConfigProvider/ConfigProviderOverride.tsx +2 -5
- package/src/components/CustomScrollView/CustomScrollView.module.css +6 -2
- package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
- package/src/components/CustomSelect/CustomSelect.tsx +12 -4
- package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -1
- package/src/components/DateInput/DateInput.tsx +62 -5
- package/src/components/DateRangeInput/DateRangeInput.tsx +22 -2
- package/src/components/Epic/Epic.tsx +5 -3
- package/src/components/FixedLayout/FixedLayout.tsx +1 -2
- package/src/components/FormField/FormField.module.css +11 -11
- package/src/components/Gallery/Gallery.tsx +4 -10
- package/src/components/HorizontalScroll/HorizontalScroll.tsx +12 -2
- package/src/components/Image/Image.tsx +4 -0
- package/src/components/ImageBase/ImageBase.module.css +9 -0
- package/src/components/ImageBase/ImageBase.tsx +69 -10
- package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
- package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx +168 -0
- package/src/components/ImageBase/ImageBaseFloatElement/helpers.ts +44 -0
- package/src/components/ImageBase/ImageBaseOverlay/hooks.ts +1 -1
- package/src/components/ImageBase/context.ts +2 -0
- package/src/components/ImageBase/types.ts +2 -0
- package/src/components/ImageBase/validators.ts +5 -4
- package/src/components/ModalCardBase/ModalCardBase.tsx +1 -1
- package/src/components/ModalRoot/ModalRootContext.tsx +3 -1
- package/src/components/Pagination/Pagination.tsx +23 -4
- package/src/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.tsx +4 -2
- package/src/components/Popover/Popover.tsx +6 -166
- package/src/components/Popover/usePopover.tsx +183 -0
- package/src/components/Popper/Popper.tsx +1 -1
- package/src/components/PullToRefresh/PullToRefresh.tsx +1 -1
- package/src/components/Removable/Removable.tsx +2 -2
- package/src/components/RichCell/RichCell.module.css +17 -3
- package/src/components/RichCell/RichCell.tsx +28 -8
- package/src/components/Root/Root.tsx +4 -2
- package/src/components/SegmentedControl/SegmentedControl.tsx +46 -14
- package/src/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.tsx +14 -10
- package/src/components/Select/Select.tsx +1 -0
- package/src/components/Skeleton/Skeleton.tsx +3 -3
- package/src/components/Slider/Slider.tsx +12 -0
- package/src/components/Snackbar/Snackbar.tsx +1 -1
- package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
- package/src/components/SplitCol/SplitColContext.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +2 -99
- package/src/components/Textarea/Textarea.tsx +2 -2
- package/src/components/Textarea/useResizeTextarea.ts +3 -3
- package/src/components/Tooltip/Tooltip.tsx +3 -0
- package/src/components/UsersStack/UsersStack.module.css +27 -17
- package/src/components/UsersStack/UsersStack.tsx +24 -3
- package/src/components/View/View.tsx +9 -5
- package/src/components/View/ViewInfinite.tsx +5 -3
- package/src/context/CalendarDirectionContext.ts +12 -0
- package/src/helpers/getMergedSameEventsByProps.ts +1 -1
- package/src/hooks/useDateInput.ts +5 -5
- package/src/hooks/useDirection.ts +3 -3
- package/src/hooks/useDraggableWithDomApi/types.ts +1 -1
- package/src/hooks/useEnsuredControl.ts +1 -1
- package/src/hooks/useExternRef.ts +2 -2
- package/src/hooks/useFocusTrap.ts +1 -1
- package/src/hooks/useGlobalOnClickOutside.ts +1 -1
- package/src/hooks/useKeyboardInputTracker.ts +1 -1
- package/src/hooks/useMutationObserver.ts +1 -1
- package/src/hooks/useNativeFormResetListener.ts +1 -1
- package/src/hooks/usePatchChildren.ts +2 -9
- package/src/hooks/usePrevious.ts +1 -1
- package/src/hooks/useResizeObserver.ts +30 -6
- package/src/hooks/useStateWithPrev.ts +1 -5
- package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +1 -1
- package/src/hooks/useSyncHTMLWithTokens.ts +1 -1
- package/src/hooks/useTabsNavigation.ts +104 -0
- package/src/index.ts +7 -0
- package/src/lib/animation/useCSSTransition.ts +1 -1
- package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +9 -9
- package/src/lib/floating/useFloatingWithInteractions/types.ts +15 -5
- package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +7 -2
- package/src/lib/utils.ts +2 -2
- package/src/styles/constants.css +1 -0
- package/dist/components/BaseGallery/BaseGallery.d.ts +0 -4
- package/dist/components/BaseGallery/BaseGallery.d.ts.map +0 -1
- package/dist/components/BaseGallery/BaseGallery.js +0 -321
- package/dist/components/BaseGallery/BaseGallery.js.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts +0 -4
- package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/constants.d.ts.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/constants.js.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/helpers.d.ts.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/hooks.d.ts.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/types.d.ts +0 -54
- package/dist/components/BaseGallery/CarouselBase/types.d.ts.map +0 -1
- package/dist/components/BaseGallery/CarouselBase/types.js.map +0 -1
- package/dist/components/BaseGallery/helpers.d.ts +0 -13
- package/dist/components/BaseGallery/helpers.d.ts.map +0 -1
- package/dist/components/BaseGallery/helpers.js +0 -24
- package/dist/components/BaseGallery/helpers.js.map +0 -1
- package/dist/components/BaseGallery/types.d.ts +0 -55
- package/dist/components/BaseGallery/types.d.ts.map +0 -1
- package/dist/components/BaseGallery/types.js.map +0 -1
- package/dist/cssm/components/BaseGallery/BaseGallery.js +0 -293
- package/dist/cssm/components/BaseGallery/BaseGallery.js.map +0 -1
- package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
- package/dist/cssm/components/BaseGallery/CarouselBase/constants.js.map +0 -1
- package/dist/cssm/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
- package/dist/cssm/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
- package/dist/cssm/components/BaseGallery/CarouselBase/types.js +0 -3
- package/dist/cssm/components/BaseGallery/CarouselBase/types.js.map +0 -1
- package/dist/cssm/components/BaseGallery/helpers.js +0 -24
- package/dist/cssm/components/BaseGallery/helpers.js.map +0 -1
- package/dist/cssm/components/BaseGallery/types.js +0 -3
- package/dist/cssm/components/BaseGallery/types.js.map +0 -1
- package/dist/cssm/hooks/useObjectMemo.js +0 -15
- package/dist/cssm/hooks/useObjectMemo.js.map +0 -1
- package/dist/hooks/useObjectMemo.d.ts +0 -5
- package/dist/hooks/useObjectMemo.d.ts.map +0 -1
- package/dist/hooks/useObjectMemo.js +0 -15
- package/dist/hooks/useObjectMemo.js.map +0 -1
- package/src/components/BaseGallery/BaseGallery.tsx +0 -380
- package/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +0 -399
- package/src/components/BaseGallery/CarouselBase/types.ts +0 -56
- package/src/components/BaseGallery/helpers.ts +0 -46
- package/src/components/BaseGallery/types.ts +0 -61
- package/src/hooks/useObjectMemo.ts +0 -16
- /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.d.ts +0 -0
- /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/types.js +0 -0
- /package/dist/{components/BaseGallery → cssm/components/CarouselBase}/types.js +0 -0
|
@@ -16,7 +16,7 @@ const whileElementsMounted = (...args)=>/* istanbul ignore next: не знаю
|
|
|
16
16
|
/**
|
|
17
17
|
* @private
|
|
18
18
|
*/ export const useFloatingWithInteractions = ({ trigger = DEFAULT_TRIGGER, // UseFloating
|
|
19
|
-
placement: placementProp = 'bottom', middlewares, hoverDelay = 0, closeAfterClick = false, // disables
|
|
19
|
+
placement: placementProp = 'bottom', strategy: strategyProp = 'fixed', middlewares, hoverDelay = 0, closeAfterClick = false, // disables
|
|
20
20
|
disabled = false, disableInteractive = false, disableCloseOnClickOutside = false, disableCloseOnEscKey = false, // uncontrolled
|
|
21
21
|
defaultShown = false, // controlled
|
|
22
22
|
shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChangedProp })=>{
|
|
@@ -43,13 +43,13 @@ shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChang
|
|
|
43
43
|
const hasCSSAnimation = React.useRef(false);
|
|
44
44
|
const blockMouseEnterRef = React.useRef(false);
|
|
45
45
|
const blockFocusRef = React.useRef(false);
|
|
46
|
-
const blurTimeoutRef = React.useRef();
|
|
46
|
+
const blurTimeoutRef = React.useRef(undefined);
|
|
47
47
|
const handleCloseOnReferenceClickOutsideDisabled = disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;
|
|
48
48
|
const handleCloseOnFloatingClickOutsideDisabled = disableInteractive || handleCloseOnReferenceClickOutsideDisabled;
|
|
49
49
|
const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);
|
|
50
50
|
// Библиотека `floating-ui`
|
|
51
51
|
const { placement, x, y, strategy, refs, middlewareData } = useFloating({
|
|
52
|
-
strategy:
|
|
52
|
+
strategy: strategyProp,
|
|
53
53
|
placement: placementProp,
|
|
54
54
|
middleware: middlewares,
|
|
55
55
|
whileElementsMounted
|
|
@@ -247,6 +247,13 @@ shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChang
|
|
|
247
247
|
const floatingPropsRef = React.useRef({
|
|
248
248
|
style: {}
|
|
249
249
|
});
|
|
250
|
+
useIsomorphicLayoutEffect(()=>{
|
|
251
|
+
referencePropsRef.current = {};
|
|
252
|
+
}, [
|
|
253
|
+
triggerOnHover,
|
|
254
|
+
triggerOnFocus,
|
|
255
|
+
triggerOnClick
|
|
256
|
+
]);
|
|
250
257
|
if (shownFinalState) {
|
|
251
258
|
floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(strategy, x, y, undefined, middlewareData);
|
|
252
259
|
if (disableInteractive) {
|
package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus: UseFloatingWithInteractionsReturn['onRestoreFocus'] = React.useCallback(\n (restoreFocus = true) => {\n if (!restoreFocus) {\n return false;\n }\n if (restoreFocus === true) {\n return triggerOnFocus ? blockFocusRef.current : true;\n } else if (restoreFocus === 'anchor-element') {\n return refs.reference.current as HTMLElement;\n } else if (restoreFocus instanceof HTMLElement) {\n return restoreFocus;\n }\n return false;\n },\n [refs.reference, triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","noop","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","strategy","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","restoreFocus","HTMLElement","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n strategy: strategyProp = 'fixed',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: strategyProp,\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus: UseFloatingWithInteractionsReturn['onRestoreFocus'] = React.useCallback(\n (restoreFocus = true) => {\n if (!restoreFocus) {\n return false;\n }\n if (restoreFocus === true) {\n return triggerOnFocus ? blockFocusRef.current : true;\n } else if (restoreFocus === 'anchor-element') {\n return refs.reference.current as HTMLElement;\n } else if (restoreFocus instanceof HTMLElement) {\n return restoreFocus;\n }\n return false;\n },\n [refs.reference, triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n useIsomorphicLayoutEffect(() => {\n referencePropsRef.current = {};\n }, [triggerOnHover, triggerOnFocus, triggerOnClick]);\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","noop","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","strategy","strategyProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","restoreFocus","HTMLElement","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils.ts"],"sourcesContent":["import * as React from 'react';\nimport { shouldTriggerClickOnEnterOrSpace } from './accessibility';\nimport { isHTMLElement } from './dom';\n\nexport type ImgOnlyAttributes = {\n [index in Exclude<\n keyof React.ImgHTMLAttributes<HTMLImageElement>,\n keyof React.HTMLAttributes<HTMLImageElement>\n >]: React.ImgHTMLAttributes<HTMLImageElement>[index];\n};\n\nexport function setRef<T>(element: T, ref?: React.Ref<T>): void {\n if (ref) {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n (ref as React.
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts"],"sourcesContent":["import * as React from 'react';\nimport { shouldTriggerClickOnEnterOrSpace } from './accessibility';\nimport { isHTMLElement } from './dom';\n\nexport type ImgOnlyAttributes = {\n [index in Exclude<\n keyof React.ImgHTMLAttributes<HTMLImageElement>,\n keyof React.HTMLAttributes<HTMLImageElement>\n >]: React.ImgHTMLAttributes<HTMLImageElement>[index];\n};\n\nexport function setRef<T>(element: T, ref?: React.Ref<T>): void {\n if (ref) {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n (ref as React.RefObject<T>).current = element;\n }\n }\n}\n\nexport function multiRef<T>(...refs: Array<React.Ref<T> | undefined>): React.RefObject<T | null> {\n let current: T | null = null;\n return {\n get current() {\n return current;\n },\n set current(element) {\n current = element;\n refs.forEach((ref) => ref && setRef(element, ref));\n },\n };\n}\n\nexport const stopPropagation = <T extends React.SyntheticEvent>(event: T): void =>\n event.stopPropagation();\n\nexport function addClassNameToElement(element: HTMLElement, className: string): void {\n const elementClassName = element.getAttribute('class') || '';\n const updatedClassName = `${elementClassName}${elementClassName ? ' ' : ''}${className}`;\n\n element.setAttribute('class', updatedClassName);\n}\n\nexport function removeClassNameFromElement(element: HTMLElement, classNameToRemove: string): void {\n const classNamesArray = (element.getAttribute('class') || '').split(/\\s+/);\n const elementIndexToRemove = classNamesArray.findIndex(\n (className) => className === classNameToRemove,\n );\n if (elementIndexToRemove === -1) {\n return;\n }\n classNamesArray.splice(elementIndexToRemove, 1);\n\n element.setAttribute('class', classNamesArray.join(' '));\n}\n\ntype ExcludeKeysWithUndefined<T> = {\n [P in keyof T]?: Exclude<T[P], undefined>;\n};\n\nexport const excludeKeysWithUndefined = <T extends Record<string | number | symbol, any>>(\n obj: T,\n): ExcludeKeysWithUndefined<T> => {\n const filteredObj: ExcludeKeysWithUndefined<T> = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] !== undefined) {\n filteredObj[key] = obj[key];\n }\n }\n return filteredObj;\n};\n\nexport const isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n element: React.ReactElement,\n): element is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } =>\n typeof element.type === 'string';\n\nexport function isValidNotReactFragmentElement(\n children: Parameters<typeof React.isValidElement>[0],\n): children is React.ReactElement<Record<PropertyKey, any>> {\n return (\n React.isValidElement(children) &&\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n children.$$typeof !== Symbol.for('react.fragment')\n );\n}\n\nexport function isForwardRefElement<\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n children: Parameters<typeof React.isValidElement>[0],\n): children is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } {\n if (!React.isValidElement(children)) {\n return false;\n }\n\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n // черпаем вдохновение из react-is https://github.com/facebook/react/blob/d48dbb824985166ecb7b2959db03090a8593dce0/packages/react-is/src/ReactIs.js#L119-L121\n const typeOfOfType = children.type && children.type.$$typeof;\n return typeOfOfType === Symbol.for('react.forward_ref');\n}\n\n/**\n * При использовании пропа fetchPriority генерируется warning \"Invalid DOM property\" (версия React 18.*)\n * Ворнинга нет в React версии 19.*, поэтому пока поддерживаем 2 версии наименования\n */\nexport function getFetchPriorityProp(value: React.ImgHTMLAttributes<HTMLElement>['fetchPriority']):\n | {\n fetchPriority: 'high' | 'low' | 'auto' | undefined;\n }\n | {\n fetchpriority: 'high' | 'low' | 'auto' | undefined;\n } {\n if (React.version.startsWith('19')) {\n return { fetchPriority: value };\n }\n return { fetchpriority: value };\n}\n\n/*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\nexport function clickByKeyboardHandler(event: React.KeyboardEvent<HTMLDivElement>): void {\n if (!isHTMLElement(event.target) || !shouldTriggerClickOnEnterOrSpace(event)) {\n return;\n }\n\n event.preventDefault();\n event.target.click?.();\n}\n"],"names":["React","shouldTriggerClickOnEnterOrSpace","isHTMLElement","setRef","element","ref","current","multiRef","refs","forEach","stopPropagation","event","addClassNameToElement","className","elementClassName","getAttribute","updatedClassName","setAttribute","removeClassNameFromElement","classNameToRemove","classNamesArray","split","elementIndexToRemove","findIndex","splice","join","excludeKeysWithUndefined","obj","filteredObj","key","hasOwnProperty","undefined","isDOMTypeElement","type","isValidNotReactFragmentElement","children","isValidElement","$$typeof","Symbol","for","isForwardRefElement","typeOfOfType","getFetchPriorityProp","value","version","startsWith","fetchPriority","fetchpriority","clickByKeyboardHandler","target","preventDefault","click"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gCAAgC,QAAQ,qBAAkB;AACnE,SAASC,aAAa,QAAQ,WAAQ;AAStC,OAAO,SAASC,OAAUC,QAAU,EAAEC,GAAkB;IACtD,IAAIA,KAAK;QACP,IAAI,OAAOA,QAAQ,YAAY;YAC7BA,IAAID;QACN,OAAO;YACJC,IAA2BC,OAAO,GAAGF;QACxC;IACF;AACF;AAEA,OAAO,SAASG,SAAY,GAAGC,IAAqC;IAClE,IAAIF,UAAoB;IACxB,OAAO;QACL,IAAIA,WAAU;YACZ,OAAOA;QACT;QACA,IAAIA,SAAQF,QAAS;YACnBE,UAAUF;YACVI,KAAKC,OAAO,CAAC,CAACJ,MAAQA,OAAOF,OAAOC,SAASC;QAC/C;IACF;AACF;AAEA,OAAO,MAAMK,kBAAkB,CAAiCC,QAC9DA,MAAMD,eAAe,GAAG;AAE1B,OAAO,SAASE,sBAAsBR,QAAoB,EAAES,SAAiB;IAC3E,MAAMC,mBAAmBV,SAAQW,YAAY,CAAC,YAAY;IAC1D,MAAMC,mBAAmB,GAAGF,mBAAmBA,mBAAmB,MAAM,KAAKD,WAAW;IAExFT,SAAQa,YAAY,CAAC,SAASD;AAChC;AAEA,OAAO,SAASE,2BAA2Bd,QAAoB,EAAEe,iBAAyB;IACxF,MAAMC,kBAAkB,AAAChB,CAAAA,SAAQW,YAAY,CAAC,YAAY,EAAC,EAAGM,KAAK,CAAC;IACpE,MAAMC,uBAAuBF,gBAAgBG,SAAS,CACpD,CAACV,YAAcA,cAAcM;IAE/B,IAAIG,yBAAyB,CAAC,GAAG;QAC/B;IACF;IACAF,gBAAgBI,MAAM,CAACF,sBAAsB;IAE7ClB,SAAQa,YAAY,CAAC,SAASG,gBAAgBK,IAAI,CAAC;AACrD;AAMA,OAAO,MAAMC,2BAA2B,CACtCC;IAEA,MAAMC,cAA2C,CAAC;IAClD,IAAK,MAAMC,OAAOF,IAAK;QACrB,IAAIA,IAAIG,cAAc,CAACD,QAAQF,GAAG,CAACE,IAAI,KAAKE,WAAW;YACrDH,WAAW,CAACC,IAAI,GAAGF,GAAG,CAACE,IAAI;QAC7B;IACF;IACA,OAAOD;AACT,EAAE;AAEF,OAAO,MAAMI,mBAAmB,CAI9B5B,WAEA,OAAOA,SAAQ6B,IAAI,KAAK,SAAS;AAEnC,OAAO,SAASC,+BACdC,QAAoD;IAEpD,OACEnC,MAAMoC,cAAc,CAACD,aACrB,yHAAyH;IACzHA,SAASE,QAAQ,KAAKC,OAAOC,GAAG,CAAC;AAErC;AAEA,OAAO,SAASC,oBAIdL,QAAoD;IAEpD,IAAI,CAACnC,MAAMoC,cAAc,CAACD,WAAW;QACnC,OAAO;IACT;IAEA,yHAAyH;IACzH,6JAA6J;IAC7J,MAAMM,eAAeN,SAASF,IAAI,IAAIE,SAASF,IAAI,CAACI,QAAQ;IAC5D,OAAOI,iBAAiBH,OAAOC,GAAG,CAAC;AACrC;AAEA;;;CAGC,GACD,OAAO,SAASG,qBAAqBC,KAA4D;IAO/F,IAAI3C,MAAM4C,OAAO,CAACC,UAAU,CAAC,OAAO;QAClC,OAAO;YAAEC,eAAeH;QAAM;IAChC;IACA,OAAO;QAAEI,eAAeJ;IAAM;AAChC;AAEA;;;;;;CAMC,GACD,OAAO,SAASK,uBAAuBrC,KAA0C;IAC/E,IAAI,CAACT,cAAcS,MAAMsC,MAAM,KAAK,CAAChD,iCAAiCU,QAAQ;QAC5E;IACF;IAEAA,MAAMuC,cAAc;IACpBvC,MAAMsC,MAAM,CAACE,KAAK;AACpB"}
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
--vkui_internal--z_index_image_base_overlay: 0;
|
|
78
78
|
--vkui_internal--z_index_image_base_border: 1;
|
|
79
79
|
--vkui_internal--z_index_image_base_badge: 2;
|
|
80
|
+
--vkui_internal--z_index_image_base_positioned_element: 3;
|
|
80
81
|
|
|
81
82
|
/* z_index HorizontalScroll isolate */
|
|
82
83
|
--vkui_internal--z_index_horizontal_scroll_arrow: 1;
|
|
@@ -8,5 +8,5 @@ import type { PickOnlyFunctionProps } from '../types';
|
|
|
8
8
|
*
|
|
9
9
|
* @private
|
|
10
10
|
*/
|
|
11
|
-
export declare const getMergedSameEventsByProps: <T extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<any>, MainProps extends React.ComponentProps<T>, OnlyFnPropsByMain extends PickOnlyFunctionProps<MainProps>>(mainProps: MainProps, secondProps: React.ComponentProps<T>) => { [K in keyof OnlyFnPropsByMain]?: ((this: any, ...args: Parameters<OnlyFnPropsByMain[K]>) => void) | undefined; };
|
|
11
|
+
export declare const getMergedSameEventsByProps: <T extends keyof React.JSX.IntrinsicElements | React.JSXElementConstructor<any>, MainProps extends React.ComponentProps<T>, OnlyFnPropsByMain extends PickOnlyFunctionProps<MainProps>>(mainProps: MainProps, secondProps: React.ComponentProps<T>) => { [K in keyof OnlyFnPropsByMain]?: ((this: any, ...args: Parameters<OnlyFnPropsByMain[K]>) => void) | undefined; };
|
|
12
12
|
//# sourceMappingURL=getMergedSameEventsByProps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMergedSameEventsByProps.d.ts","sourceRoot":"","sources":["../../src/helpers/getMergedSameEventsByProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOtD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GACrC,CAAC,SAAS,MAAM,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"getMergedSameEventsByProps.d.ts","sourceRoot":"","sources":["../../src/helpers/getMergedSameEventsByProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOtD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GACrC,CAAC,SAAS,MAAM,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAC9E,SAAS,SAAS,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EACzC,iBAAiB,SAAS,qBAAqB,CAAC,SAAS,CAAC,aAE/C,SAAS,eACP,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KACnC,GACA,CAAC,IAAI,MAAM,iBAAiB,CAAC,CAAC,EAC3B,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAChE,SAAS,GAwBd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/helpers/getMergedSameEventsByProps.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { AnyFunction } from '@vkontakte/vkjs';\nimport type { PickOnlyFunctionProps } from '../types';\n\nconst isFunctionExistInProps = <Props extends Record<PropertyKey, any>>(\n props: Props,\n key: PropertyKey,\n): key is Extract<keyof Props, AnyFunction> => typeof props[key] === 'function';\n\n/**\n * Полезен, когда нужно сохранить пользовательские события.\n *\n * Приоритет даём пользовательскому событию. Например, можно будет отловить был ли вызван\n * `event.preventDefault()` через `event.defaultPrevented`.\n *\n * @private\n */\nexport const getMergedSameEventsByProps = <\n T extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<any>,\n MainProps extends React.ComponentProps<T>,\n OnlyFnPropsByMain extends PickOnlyFunctionProps<MainProps>,\n>(\n mainProps: MainProps,\n secondProps: React.ComponentProps<T>,\n): {\n [K in keyof OnlyFnPropsByMain]?:\n | ((this: any, ...args: Parameters<OnlyFnPropsByMain[K]>) => void)\n | undefined;\n} => {\n const result: {\n [K in keyof OnlyFnPropsByMain]?:\n | ((this: any, ...args: Parameters<OnlyFnPropsByMain[K]>) => void)\n | undefined;\n } = {};\n\n for (const eventName in mainProps) {\n if (\n mainProps.hasOwnProperty(eventName) &&\n secondProps.hasOwnProperty(eventName) &&\n isFunctionExistInProps(mainProps, eventName) &&\n isFunctionExistInProps(secondProps, eventName)\n ) {\n result[eventName] = function mergeSameEventsByProps(\n ...args: Parameters<OnlyFnPropsByMain[typeof eventName]>\n ) {\n secondProps[eventName].apply(this, args);\n mainProps[eventName].apply(this, args);\n };\n }\n }\n return result;\n};\n"],"names":["isFunctionExistInProps","props","key","getMergedSameEventsByProps","mainProps","secondProps","result","eventName","hasOwnProperty","mergeSameEventsByProps","args","apply"],"mappings":"AAIA,MAAMA,yBAAyB,CAC7BC,OACAC,MAC6C,OAAOD,KAAK,CAACC,IAAI,KAAK;AAErE;;;;;;;CAOC,GACD,OAAO,MAAMC,6BAA6B,CAKxCC,WACAC;IAMA,MAAMC,SAIF,CAAC;IAEL,IAAK,MAAMC,aAAaH,UAAW;QACjC,IACEA,UAAUI,cAAc,CAACD,cACzBF,YAAYG,cAAc,CAACD,cAC3BP,uBAAuBI,WAAWG,cAClCP,uBAAuBK,aAAaE,YACpC;YACAD,MAAM,CAACC,UAAU,GAAG,SAASE,uBAC3B,GAAGC,IAAqD;gBAExDL,WAAW,CAACE,UAAU,CAACI,KAAK,CAAC,IAAI,EAAED;gBACnCN,SAAS,CAACG,UAAU,CAACI,KAAK,CAAC,IAAI,EAAED;YACnC;QACF;IACF;IACA,OAAOJ;AACT,EAAE"}
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/getMergedSameEventsByProps.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { AnyFunction } from '@vkontakte/vkjs';\nimport type { PickOnlyFunctionProps } from '../types';\n\nconst isFunctionExistInProps = <Props extends Record<PropertyKey, any>>(\n props: Props,\n key: PropertyKey,\n): key is Extract<keyof Props, AnyFunction> => typeof props[key] === 'function';\n\n/**\n * Полезен, когда нужно сохранить пользовательские события.\n *\n * Приоритет даём пользовательскому событию. Например, можно будет отловить был ли вызван\n * `event.preventDefault()` через `event.defaultPrevented`.\n *\n * @private\n */\nexport const getMergedSameEventsByProps = <\n T extends keyof React.JSX.IntrinsicElements | React.JSXElementConstructor<any>,\n MainProps extends React.ComponentProps<T>,\n OnlyFnPropsByMain extends PickOnlyFunctionProps<MainProps>,\n>(\n mainProps: MainProps,\n secondProps: React.ComponentProps<T>,\n): {\n [K in keyof OnlyFnPropsByMain]?:\n | ((this: any, ...args: Parameters<OnlyFnPropsByMain[K]>) => void)\n | undefined;\n} => {\n const result: {\n [K in keyof OnlyFnPropsByMain]?:\n | ((this: any, ...args: Parameters<OnlyFnPropsByMain[K]>) => void)\n | undefined;\n } = {};\n\n for (const eventName in mainProps) {\n if (\n mainProps.hasOwnProperty(eventName) &&\n secondProps.hasOwnProperty(eventName) &&\n isFunctionExistInProps(mainProps, eventName) &&\n isFunctionExistInProps(secondProps, eventName)\n ) {\n result[eventName] = function mergeSameEventsByProps(\n ...args: Parameters<OnlyFnPropsByMain[typeof eventName]>\n ) {\n secondProps[eventName].apply(this, args);\n mainProps[eventName].apply(this, args);\n };\n }\n }\n return result;\n};\n"],"names":["isFunctionExistInProps","props","key","getMergedSameEventsByProps","mainProps","secondProps","result","eventName","hasOwnProperty","mergeSameEventsByProps","args","apply"],"mappings":"AAIA,MAAMA,yBAAyB,CAC7BC,OACAC,MAC6C,OAAOD,KAAK,CAACC,IAAI,KAAK;AAErE;;;;;;;CAOC,GACD,OAAO,MAAMC,6BAA6B,CAKxCC,WACAC;IAMA,MAAMC,SAIF,CAAC;IAEL,IAAK,MAAMC,aAAaH,UAAW;QACjC,IACEA,UAAUI,cAAc,CAACD,cACzBF,YAAYG,cAAc,CAACD,cAC3BP,uBAAuBI,WAAWG,cAClCP,uBAAuBK,aAAaE,YACpC;YACAD,MAAM,CAACC,UAAU,GAAG,SAASE,uBAC3B,GAAGC,IAAqD;gBAExDL,WAAW,CAACE,UAAU,CAACI,KAAK,CAAC,IAAI,EAAED;gBACnCN,SAAS,CAACG,UAAU,CAACI,KAAK,CAAC,IAAI,EAAED;YACnC;QACF;IACF;IACA,OAAOJ;AACT,EAAE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
export interface UseDateInputDependencies<T, D> {
|
|
3
3
|
maxElement: number;
|
|
4
|
-
refs: Array<React.RefObject<T>>;
|
|
4
|
+
refs: Array<React.RefObject<T | null>>;
|
|
5
5
|
autoFocus?: boolean;
|
|
6
6
|
disabled?: boolean;
|
|
7
7
|
value?: D;
|
|
@@ -16,8 +16,8 @@ export interface UseDateInputDependencies<T, D> {
|
|
|
16
16
|
onCalendarOpenChanged?: (opened: boolean) => void;
|
|
17
17
|
}
|
|
18
18
|
export declare function useDateInput<T extends HTMLElement, D>({ maxElement, refs, autoFocus, disabled, elementsConfig, onChange, onInternalValueChange, getInternalValue, value, onCalendarOpenChanged, }: UseDateInputDependencies<T, D>): {
|
|
19
|
-
rootRef: React.RefObject<HTMLDivElement>;
|
|
20
|
-
calendarRef: React.RefObject<HTMLDivElement>;
|
|
19
|
+
rootRef: React.RefObject<HTMLDivElement | null>;
|
|
20
|
+
calendarRef: React.RefObject<HTMLDivElement | null>;
|
|
21
21
|
open: boolean;
|
|
22
22
|
openCalendar: () => void;
|
|
23
23
|
closeCalendar: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDateInput.d.ts","sourceRoot":"","sources":["../../src/hooks/useDateInput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,wBAAwB,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useDateInput.d.ts","sourceRoot":"","sources":["../../src/hooks/useDateInput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,wBAAwB,CAAC,CAAC,EAAE,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QACjC,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,MAAM,EAAE,CAAC;IACtD,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC;IAC3C,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACnD;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,EACrD,UAAU,EACV,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,qBAAqB,GACtB,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAClC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACvE,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACjE,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAClC,CA4KA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useDateInput.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport * as React from 'react';\nimport { useDOM } from '../lib/dom';\nimport { useBooleanState } from './useBooleanState';\nimport { useGlobalEventListener } from './useGlobalEventListener';\n\nexport interface UseDateInputDependencies<T, D> {\n maxElement: number;\n refs: Array<React.RefObject<T>>;\n autoFocus?: boolean;\n disabled?: boolean;\n value?: D;\n elementsConfig: (index: number) => {\n length: number;\n min: number;\n max: number;\n };\n onInternalValueChange: (value: string[]) => void;\n getInternalValue: (value?: D | undefined) => string[];\n onChange?: (value?: D | undefined) => void;\n onCalendarOpenChanged?: (opened: boolean) => void;\n}\n\nexport function useDateInput<T extends HTMLElement, D>({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n}: UseDateInputDependencies<T, D>): {\n rootRef: React.RefObject<HTMLDivElement>;\n calendarRef: React.RefObject<HTMLDivElement>;\n open: boolean;\n openCalendar: () => void;\n closeCalendar: () => void;\n internalValue: string[];\n focusedElement: number | null;\n setFocusedElement: React.Dispatch<React.SetStateAction<number | null>>;\n handleKeyDown: (e: React.KeyboardEvent<HTMLSpanElement>) => void;\n clear: () => void;\n handleFieldEnter: () => void;\n removeFocusFromField: () => void;\n} {\n const { document } = useDOM();\n const { value: open, setTrue: openCalendar, setFalse: closeCalendar } = useBooleanState(false);\n const rootRef = React.useRef<HTMLDivElement>(null);\n const calendarRef = React.useRef<HTMLDivElement>(null);\n const [internalValue, setInternalValue] = React.useState<string[]>([]);\n const [focusedElement, setFocusedElement] = React.useState<number | null>(null);\n const { window } = useDOM();\n\n const _onCalendarClose = useCallback(() => {\n if (open) {\n closeCalendar();\n onCalendarOpenChanged?.(false);\n }\n }, [closeCalendar, onCalendarOpenChanged, open]);\n\n const _onCalendarOpen = useCallback(() => {\n if (!open) {\n openCalendar();\n onCalendarOpenChanged?.(true);\n }\n }, [onCalendarOpenChanged, open, openCalendar]);\n\n const removeFocusFromField = React.useCallback(() => {\n if (focusedElement !== null) {\n setFocusedElement(null);\n _onCalendarClose();\n window!.getSelection()?.removeAllRanges();\n setInternalValue(getInternalValue(value));\n }\n }, [focusedElement, _onCalendarClose, window, getInternalValue, value]);\n\n const handleClickOutside = React.useCallback(\n (e: MouseEvent) => {\n if (\n !rootRef.current?.contains(e.target as Node | null) &&\n !calendarRef.current?.contains(e.target as Node | null)\n ) {\n removeFocusFromField();\n }\n },\n [removeFocusFromField],\n );\n\n const selectFirst = React.useCallback(() => {\n setFocusedElement(0);\n }, []);\n\n useGlobalEventListener(document, 'click', handleClickOutside, {\n capture: true,\n });\n\n React.useEffect(() => {\n setInternalValue(getInternalValue(value));\n }, [getInternalValue, value]);\n\n React.useEffect(() => {\n if (autoFocus) {\n selectFirst();\n }\n }, [autoFocus, selectFirst]);\n\n React.useEffect(() => {\n if (disabled || focusedElement === null) {\n return;\n }\n\n const range = window!.document.createRange();\n\n let element = refs[focusedElement].current;\n\n if (element) {\n element.focus();\n _onCalendarOpen();\n range.selectNodeContents(element as Node);\n\n const selection = window!.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }, [disabled, focusedElement, _onCalendarOpen, refs, window]);\n\n const clear = React.useCallback(() => {\n onChange?.(undefined);\n selectFirst();\n }, [onChange, selectFirst]);\n\n const handleFieldEnter = React.useCallback(() => {\n if (!open) {\n selectFirst();\n }\n }, [open, selectFirst]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (focusedElement === null) {\n return;\n }\n\n const _value = [...internalValue];\n const config = elementsConfig(focusedElement);\n\n if (/^\\d+$/.test(e.key)) {\n if (_value[focusedElement].length >= config.length) {\n _value[focusedElement] = e.key;\n } else {\n _value[focusedElement] += e.key;\n if (_value[focusedElement].length >= config.length && focusedElement < maxElement) {\n setFocusedElement(focusedElement + 1);\n }\n }\n } else if (e.key === 'Backspace') {\n if (!_value[focusedElement]) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else {\n _value[focusedElement] = _value[focusedElement].slice(0, -1);\n }\n } else if (e.key === 'ArrowDown' || e.key === 'Down') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue <= config.min ? config.max : currentValue - 1,\n ).padStart(config.length, '0');\n } else if (e.key === 'ArrowUp' || e.key === 'Up') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue >= config.max ? config.min : currentValue + 1,\n ).padStart(config.length, '0');\n } else if (\n e.key === 'Enter' ||\n (e.key === 'Tab' && focusedElement === maxElement) ||\n (e.key === 'Tab' && e.shiftKey && focusedElement === 0)\n ) {\n removeFocusFromField();\n return;\n } else if (e.key === 'ArrowLeft' || e.key === 'Left' || (e.key === 'Tab' && e.shiftKey)) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else if (e.key === 'ArrowRight' || e.key === 'Right' || e.key === 'Tab') {\n setFocusedElement(focusedElement >= maxElement ? 0 : focusedElement + 1);\n } else if (e.key === 'Delete' || e.key === 'Del') {\n _value[focusedElement] = '';\n } else {\n return;\n }\n\n e.preventDefault();\n setInternalValue(_value);\n onInternalValueChange(_value);\n },\n [\n elementsConfig,\n focusedElement,\n internalValue,\n maxElement,\n onInternalValueChange,\n removeFocusFromField,\n ],\n );\n\n return {\n rootRef,\n calendarRef,\n open,\n openCalendar: _onCalendarOpen,\n closeCalendar: _onCalendarClose,\n internalValue,\n focusedElement,\n setFocusedElement,\n handleKeyDown,\n clear,\n handleFieldEnter,\n removeFocusFromField,\n };\n}\n"],"names":["useCallback","React","useDOM","useBooleanState","useGlobalEventListener","useDateInput","maxElement","refs","autoFocus","disabled","elementsConfig","onChange","onInternalValueChange","getInternalValue","value","onCalendarOpenChanged","document","open","setTrue","openCalendar","setFalse","closeCalendar","rootRef","useRef","calendarRef","internalValue","setInternalValue","useState","focusedElement","setFocusedElement","window","_onCalendarClose","_onCalendarOpen","removeFocusFromField","getSelection","removeAllRanges","handleClickOutside","e","current","contains","target","selectFirst","capture","useEffect","range","createRange","element","focus","selectNodeContents","selection","addRange","clear","undefined","handleFieldEnter","handleKeyDown","_value","config","test","key","length","slice","currentValue","Number","String","min","max","padStart","shiftKey","preventDefault"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDateInput.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport * as React from 'react';\nimport { useDOM } from '../lib/dom';\nimport { useBooleanState } from './useBooleanState';\nimport { useGlobalEventListener } from './useGlobalEventListener';\n\nexport interface UseDateInputDependencies<T, D> {\n maxElement: number;\n refs: Array<React.RefObject<T | null>>;\n autoFocus?: boolean;\n disabled?: boolean;\n value?: D;\n elementsConfig: (index: number) => {\n length: number;\n min: number;\n max: number;\n };\n onInternalValueChange: (value: string[]) => void;\n getInternalValue: (value?: D | undefined) => string[];\n onChange?: (value?: D | undefined) => void;\n onCalendarOpenChanged?: (opened: boolean) => void;\n}\n\nexport function useDateInput<T extends HTMLElement, D>({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n}: UseDateInputDependencies<T, D>): {\n rootRef: React.RefObject<HTMLDivElement | null>;\n calendarRef: React.RefObject<HTMLDivElement | null>;\n open: boolean;\n openCalendar: () => void;\n closeCalendar: () => void;\n internalValue: string[];\n focusedElement: number | null;\n setFocusedElement: React.Dispatch<React.SetStateAction<number | null>>;\n handleKeyDown: (e: React.KeyboardEvent<HTMLSpanElement>) => void;\n clear: () => void;\n handleFieldEnter: () => void;\n removeFocusFromField: () => void;\n} {\n const { document } = useDOM();\n const { value: open, setTrue: openCalendar, setFalse: closeCalendar } = useBooleanState(false);\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const calendarRef = React.useRef<HTMLDivElement | null>(null);\n const [internalValue, setInternalValue] = React.useState<string[]>([]);\n const [focusedElement, setFocusedElement] = React.useState<number | null>(null);\n const { window } = useDOM();\n\n const _onCalendarClose = useCallback(() => {\n if (open) {\n closeCalendar();\n onCalendarOpenChanged?.(false);\n }\n }, [closeCalendar, onCalendarOpenChanged, open]);\n\n const _onCalendarOpen = useCallback(() => {\n if (!open) {\n openCalendar();\n onCalendarOpenChanged?.(true);\n }\n }, [onCalendarOpenChanged, open, openCalendar]);\n\n const removeFocusFromField = React.useCallback(() => {\n if (focusedElement !== null) {\n setFocusedElement(null);\n _onCalendarClose();\n window!.getSelection()?.removeAllRanges();\n setInternalValue(getInternalValue(value));\n }\n }, [focusedElement, _onCalendarClose, window, getInternalValue, value]);\n\n const handleClickOutside = React.useCallback(\n (e: MouseEvent) => {\n if (\n !rootRef.current?.contains(e.target as Node | null) &&\n !calendarRef.current?.contains(e.target as Node | null)\n ) {\n removeFocusFromField();\n }\n },\n [removeFocusFromField],\n );\n\n const selectFirst = React.useCallback(() => {\n setFocusedElement(0);\n }, []);\n\n useGlobalEventListener(document, 'click', handleClickOutside, {\n capture: true,\n });\n\n React.useEffect(() => {\n setInternalValue(getInternalValue(value));\n }, [getInternalValue, value]);\n\n React.useEffect(() => {\n if (autoFocus) {\n selectFirst();\n }\n }, [autoFocus, selectFirst]);\n\n React.useEffect(() => {\n if (disabled || focusedElement === null) {\n return;\n }\n\n const range = window!.document.createRange();\n\n let element = refs[focusedElement].current;\n\n if (element) {\n element.focus();\n _onCalendarOpen();\n range.selectNodeContents(element as Node);\n\n const selection = window!.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }, [disabled, focusedElement, _onCalendarOpen, refs, window]);\n\n const clear = React.useCallback(() => {\n onChange?.(undefined);\n selectFirst();\n }, [onChange, selectFirst]);\n\n const handleFieldEnter = React.useCallback(() => {\n if (!open) {\n selectFirst();\n }\n }, [open, selectFirst]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (focusedElement === null) {\n return;\n }\n\n const _value = [...internalValue];\n const config = elementsConfig(focusedElement);\n\n if (/^\\d+$/.test(e.key)) {\n if (_value[focusedElement].length >= config.length) {\n _value[focusedElement] = e.key;\n } else {\n _value[focusedElement] += e.key;\n if (_value[focusedElement].length >= config.length && focusedElement < maxElement) {\n setFocusedElement(focusedElement + 1);\n }\n }\n } else if (e.key === 'Backspace') {\n if (!_value[focusedElement]) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else {\n _value[focusedElement] = _value[focusedElement].slice(0, -1);\n }\n } else if (e.key === 'ArrowDown' || e.key === 'Down') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue <= config.min ? config.max : currentValue - 1,\n ).padStart(config.length, '0');\n } else if (e.key === 'ArrowUp' || e.key === 'Up') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue >= config.max ? config.min : currentValue + 1,\n ).padStart(config.length, '0');\n } else if (\n e.key === 'Enter' ||\n (e.key === 'Tab' && focusedElement === maxElement) ||\n (e.key === 'Tab' && e.shiftKey && focusedElement === 0)\n ) {\n removeFocusFromField();\n return;\n } else if (e.key === 'ArrowLeft' || e.key === 'Left' || (e.key === 'Tab' && e.shiftKey)) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else if (e.key === 'ArrowRight' || e.key === 'Right' || e.key === 'Tab') {\n setFocusedElement(focusedElement >= maxElement ? 0 : focusedElement + 1);\n } else if (e.key === 'Delete' || e.key === 'Del') {\n _value[focusedElement] = '';\n } else {\n return;\n }\n\n e.preventDefault();\n setInternalValue(_value);\n onInternalValueChange(_value);\n },\n [\n elementsConfig,\n focusedElement,\n internalValue,\n maxElement,\n onInternalValueChange,\n removeFocusFromField,\n ],\n );\n\n return {\n rootRef,\n calendarRef,\n open,\n openCalendar: _onCalendarOpen,\n closeCalendar: _onCalendarClose,\n internalValue,\n focusedElement,\n setFocusedElement,\n handleKeyDown,\n clear,\n handleFieldEnter,\n removeFocusFromField,\n };\n}\n"],"names":["useCallback","React","useDOM","useBooleanState","useGlobalEventListener","useDateInput","maxElement","refs","autoFocus","disabled","elementsConfig","onChange","onInternalValueChange","getInternalValue","value","onCalendarOpenChanged","document","open","setTrue","openCalendar","setFalse","closeCalendar","rootRef","useRef","calendarRef","internalValue","setInternalValue","useState","focusedElement","setFocusedElement","window","_onCalendarClose","_onCalendarOpen","removeFocusFromField","getSelection","removeAllRanges","handleClickOutside","e","current","contains","target","selectFirst","capture","useEffect","range","createRange","element","focus","selectNodeContents","selection","addRange","clear","undefined","handleFieldEnter","handleKeyDown","_value","config","test","key","length","slice","currentValue","Number","String","min","max","padStart","shiftKey","preventDefault"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
type Direction = 'ltr' | 'rtl';
|
|
2
|
+
export type Direction = 'ltr' | 'rtl';
|
|
3
3
|
type WritingMode = 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';
|
|
4
4
|
/**
|
|
5
5
|
* Определяет направление текста элемента.
|
|
@@ -31,7 +31,7 @@ type WritingMode = 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';
|
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
33
|
export declare function useDirection<T extends HTMLElement>(): [
|
|
34
|
-
React.RefObject<T>,
|
|
34
|
+
React.RefObject<T | null>,
|
|
35
35
|
Direction | undefined,
|
|
36
36
|
WritingMode | undefined
|
|
37
37
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDirection.d.ts","sourceRoot":"","sources":["../../src/hooks/useDirection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,
|
|
1
|
+
{"version":3,"file":"useDirection.d.ts","sourceRoot":"","sources":["../../src/hooks/useDirection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AACtC,KAAK,WAAW,GAAG,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,KAAK;IACrD,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC;IACzB,SAAS,GAAG,SAAS;IACrB,WAAW,GAAG,SAAS;CACxB,CAsBA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useDirection.ts"],"sourcesContent":["import * as React from 'react';\nimport { useDOM } from '../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\n\
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDirection.ts"],"sourcesContent":["import * as React from 'react';\nimport { useDOM } from '../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\n\nexport type Direction = 'ltr' | 'rtl';\ntype WritingMode = 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';\n\n/**\n * Определяет направление текста элемента.\n *\n * ## Ограничения\n *\n * - Не следит за изменением направлением.\n * - Определяется только на второй рендер.\n *\n * ## Пример\n *\n * ```jsx\n * import { strict as assert } from 'node:assert';\n *\n * const Component = () => {\n * const [ref, direction, writingMode] = useDirection();\n *\n * React.useEffect(()=>{\n * if (!direction || !writingMode) {\n * return\n * }\n *\n * assert.equal(direction, 'ltr')\n * assert.equal(writingMode, 'vertical-rl')\n * }, [direction, writingMode])\n *\n * return <div ref={ref} style={{writingMode: 'vertical-rl'}}>我家没有电脑。</div>\n * }\n * ```\n */\nexport function useDirection<T extends HTMLElement>(): [\n React.RefObject<T | null>,\n Direction | undefined,\n WritingMode | undefined,\n] {\n const ref = React.useRef<T | null>(null);\n\n const [direction, setDirection] = React.useState<Direction | undefined>(undefined);\n const [writingMode, setWritingMode] = React.useState<WritingMode | undefined>(undefined);\n\n const { window } = useDOM();\n\n const update = () => {\n if (!window || !ref.current) {\n return;\n }\n\n const styleDeclaration = window.getComputedStyle(ref.current);\n\n setDirection(styleDeclaration.direction as Direction);\n setWritingMode(styleDeclaration.writingMode as WritingMode);\n };\n\n useIsomorphicLayoutEffect(update, [window]);\n\n return [ref, direction, writingMode];\n}\n"],"names":["React","useDOM","useIsomorphicLayoutEffect","useDirection","ref","useRef","direction","setDirection","useState","undefined","writingMode","setWritingMode","window","update","current","styleDeclaration","getComputedStyle"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,MAAM,QAAQ,gBAAa;AACpC,SAASC,yBAAyB,QAAQ,sCAAmC;AAK7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,GACD,OAAO,SAASC;IAKd,MAAMC,MAAMJ,MAAMK,MAAM,CAAW;IAEnC,MAAM,CAACC,WAAWC,aAAa,GAAGP,MAAMQ,QAAQ,CAAwBC;IACxE,MAAM,CAACC,aAAaC,eAAe,GAAGX,MAAMQ,QAAQ,CAA0BC;IAE9E,MAAM,EAAEG,MAAM,EAAE,GAAGX;IAEnB,MAAMY,SAAS;QACb,IAAI,CAACD,UAAU,CAACR,IAAIU,OAAO,EAAE;YAC3B;QACF;QAEA,MAAMC,mBAAmBH,OAAOI,gBAAgB,CAACZ,IAAIU,OAAO;QAE5DP,aAAaQ,iBAAiBT,SAAS;QACvCK,eAAeI,iBAAiBL,WAAW;IAC7C;IAEAR,0BAA0BW,QAAQ;QAACD;KAAO;IAE1C,OAAO;QAACR;QAAKE;QAAWI;KAAY;AACtC"}
|
|
@@ -22,7 +22,7 @@ export type SwappedItemRange = {
|
|
|
22
22
|
to: number;
|
|
23
23
|
};
|
|
24
24
|
export interface UseDraggableProps<T extends HTMLElement = HTMLElement> {
|
|
25
|
-
elRef: React.
|
|
25
|
+
elRef: React.RefObject<T | null>;
|
|
26
26
|
onDragFinish?: (value: SwappedItemRange) => void;
|
|
27
27
|
}
|
|
28
28
|
export interface DraggableProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDraggableWithDomApi/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,WAAW,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,WAAW,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACpE,KAAK,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDraggableWithDomApi/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,WAAW,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,WAAW,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACpE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3D,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,QAAQ,EAAE,OAAO,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/useDraggableWithDomApi/types.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { CustomTouchEvent } from '../../components/Touch/Touch';\n\nexport type Direction = 'up' | 'down';\n\nexport type DraggingItem = {\n index: number;\n el: HTMLElement;\n draggingElRect: DOMRect;\n};\n\nexport type PlaceholderItem = {\n index: number;\n el: HTMLElement;\n draggingElRect: DOMRect;\n};\n\nexport type SiblingItem = {\n index: number;\n el: HTMLElement;\n shifted: boolean;\n draggingElRect: DOMRect;\n};\n\nexport type SwappedItemRange = { from: number; to: number };\n\nexport interface UseDraggableProps<T extends HTMLElement = HTMLElement> {\n elRef: React.
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/useDraggableWithDomApi/types.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { CustomTouchEvent } from '../../components/Touch/Touch';\n\nexport type Direction = 'up' | 'down';\n\nexport type DraggingItem = {\n index: number;\n el: HTMLElement;\n draggingElRect: DOMRect;\n};\n\nexport type PlaceholderItem = {\n index: number;\n el: HTMLElement;\n draggingElRect: DOMRect;\n};\n\nexport type SiblingItem = {\n index: number;\n el: HTMLElement;\n shifted: boolean;\n draggingElRect: DOMRect;\n};\n\nexport type SwappedItemRange = { from: number; to: number };\n\nexport interface UseDraggableProps<T extends HTMLElement = HTMLElement> {\n elRef: React.RefObject<T | null>;\n onDragFinish?: (value: SwappedItemRange) => void;\n}\n\nexport interface DraggableProps {\n onDragStart: (this: void, event: CustomTouchEvent) => void;\n onDragEnd: (this: void, event: CustomTouchEvent) => void;\n onDragMove: (this: void, event: CustomTouchEvent) => void;\n}\n\nexport interface UseDraggable extends DraggableProps {\n dragging: boolean;\n}\n"],"names":[],"mappings":"AAqCA,WAEC"}
|
|
@@ -29,7 +29,7 @@ const warn = warnOnce('useCustomEnsuredControl');
|
|
|
29
29
|
export function useCustomEnsuredControl({ value, defaultValue, disabled, onChange: onChangeProp }) {
|
|
30
30
|
const isControlled = value !== undefined;
|
|
31
31
|
const [localValue, setLocalValue] = React.useState(defaultValue);
|
|
32
|
-
const preservedControlledValueRef = React.useRef();
|
|
32
|
+
const preservedControlledValueRef = React.useRef(undefined);
|
|
33
33
|
useIsomorphicLayoutEffect(()=>{
|
|
34
34
|
preservedControlledValueRef.current = value;
|
|
35
35
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useEnsuredControl.ts"],"sourcesContent":["import * as React from 'react';\nimport { isFunction } from '@vkontakte/vkjs';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../lib/warnOnce';\n\nexport interface UseEnsuredControlProps<V, E extends React.ChangeEvent<any>> {\n value?: V;\n defaultValue: V;\n disabled?: boolean | undefined;\n onChange?: (this: void, e: E) => any;\n}\n\nexport function useEnsuredControl<V, E extends React.ChangeEvent<any>>({\n onChange: onChangeProp,\n disabled,\n ...props\n}: UseEnsuredControlProps<V, E>): [V, (e: E) => any] {\n const [value, onChangeValue] = useCustomEnsuredControl(props);\n\n const onChange = React.useCallback(\n (e: E) => {\n if (disabled) {\n return;\n }\n\n onChangeValue(e.target.value);\n onChangeProp && onChangeProp(e);\n },\n [onChangeValue, onChangeProp, disabled],\n );\n\n return [value, onChange];\n}\n\nexport interface UseCustomEnsuredControlProps<V> {\n value?: V;\n defaultValue: V;\n disabled?: boolean | undefined;\n onChange?: (this: void, v: V) => any;\n}\n\nconst warn = warnOnce('useCustomEnsuredControl');\n\nexport function useCustomEnsuredControl<V = any>({\n value,\n defaultValue,\n disabled,\n onChange: onChangeProp,\n}: UseCustomEnsuredControlProps<V>): [V, React.Dispatch<React.SetStateAction<V>>] {\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = React.useState(defaultValue);\n\n const preservedControlledValueRef = React.useRef<V | undefined>();\n useIsomorphicLayoutEffect(() => {\n preservedControlledValueRef.current = value;\n });\n\n /*\n * Для ситуации, когда nextValue это пользовательская функция,\n * и в качестве аргумента мы должны передать prevValue.\n * Обычно в качестве prevValue используется preservedControlledValueRef, но оно может быть undefined, если\n * некотролируемое value вдруг стало контролируемым\n * (value = undefined ---> value = true)\n * Если в момент вызова onChange preservedControlledValueRef ещё не был\n * обновлён в useEffect, то мы не можем использовать preservedControlledValueRef как prevValue\n * В качестве запасного варианта мы храним текущее значение value в currentFallbackValueRef, чтобы\n * использовать его вместо preservedControlledValueRef.\n */\n const currentFallbackValueRef = React.useRef<V | undefined>(value);\n currentFallbackValueRef.current = value;\n\n const onChange = React.useCallback(\n (nextValue: React.SetStateAction<V>) => {\n if (disabled) {\n return;\n }\n\n if (isFunction(nextValue)) {\n if (!isControlled) {\n setLocalValue((prevValue) => {\n const resolvedValue = nextValue(prevValue);\n if (onChangeProp) {\n onChangeProp(resolvedValue);\n }\n return resolvedValue;\n });\n } else if (onChangeProp) {\n if (process.env.NODE_ENV === 'development') {\n if (preservedControlledValueRef.current === undefined) {\n warn(\n `Похоже, что при вызове onChange с аргументом nextValue в виде коллбэка, состояние компонента было переведено из неконтролируемого (\"undefined\") в контролируемое. Пожалуйста, старайтесь сохранять либо неконтролируемое состояние, либо контролируемое на всём промежутке жизненного цикла компонента, чтобы получать предсказуемое значение prevValue в коллбэке nextValue((prevValue: V) => V)`,\n 'error',\n );\n }\n }\n\n const prevValue =\n preservedControlledValueRef.current === undefined\n ? currentFallbackValueRef.current\n : preservedControlledValueRef.current;\n // В теории prevValue не может быть undefined,\n // но лучше не вызывать nextValue с таким значением\n if (prevValue !== undefined) {\n const resolvedValue = nextValue(prevValue);\n onChangeProp(resolvedValue);\n }\n }\n } else {\n if (onChangeProp) {\n onChangeProp(nextValue);\n }\n if (!isControlled) {\n setLocalValue(nextValue);\n }\n }\n },\n [disabled, isControlled, onChangeProp],\n );\n\n return [isControlled ? value : localValue, onChange];\n}\n"],"names":["React","isFunction","useIsomorphicLayoutEffect","warnOnce","useEnsuredControl","onChange","onChangeProp","disabled","props","value","onChangeValue","useCustomEnsuredControl","useCallback","e","target","warn","defaultValue","isControlled","undefined","localValue","setLocalValue","useState","preservedControlledValueRef","useRef","current","currentFallbackValueRef","nextValue","prevValue","resolvedValue","process","env","NODE_ENV"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,yBAAyB,QAAQ,sCAAmC;AAC7E,SAASC,QAAQ,QAAQ,qBAAkB;AAS3C,OAAO,SAASC,kBAAuD;QAAA,EACrEC,UAAUC,YAAY,EACtBC,QAAQ,EAEqB,GAJwC,QAGlEC,mCAHkE;QACrEH;QACAE;;IAGA,MAAM,CAACE,OAAOC,cAAc,GAAGC,wBAAwBH;IAEvD,MAAMH,WAAWL,MAAMY,WAAW,CAChC,CAACC;QACC,IAAIN,UAAU;YACZ;QACF;QAEAG,cAAcG,EAAEC,MAAM,CAACL,KAAK;QAC5BH,gBAAgBA,aAAaO;IAC/B,GACA;QAACH;QAAeJ;QAAcC;KAAS;IAGzC,OAAO;QAACE;QAAOJ;KAAS;AAC1B;AASA,MAAMU,OAAOZ,SAAS;AAEtB,OAAO,SAASQ,wBAAiC,EAC/CF,KAAK,EACLO,YAAY,EACZT,QAAQ,EACRF,UAAUC,YAAY,EACU;IAChC,MAAMW,eAAeR,UAAUS;IAC/B,MAAM,CAACC,YAAYC,cAAc,GAAGpB,MAAMqB,QAAQ,CAACL;IAEnD,MAAMM,8BAA8BtB,MAAMuB,MAAM;
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useEnsuredControl.ts"],"sourcesContent":["import * as React from 'react';\nimport { isFunction } from '@vkontakte/vkjs';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../lib/warnOnce';\n\nexport interface UseEnsuredControlProps<V, E extends React.ChangeEvent<any>> {\n value?: V;\n defaultValue: V;\n disabled?: boolean | undefined;\n onChange?: (this: void, e: E) => any;\n}\n\nexport function useEnsuredControl<V, E extends React.ChangeEvent<any>>({\n onChange: onChangeProp,\n disabled,\n ...props\n}: UseEnsuredControlProps<V, E>): [V, (e: E) => any] {\n const [value, onChangeValue] = useCustomEnsuredControl(props);\n\n const onChange = React.useCallback(\n (e: E) => {\n if (disabled) {\n return;\n }\n\n onChangeValue(e.target.value);\n onChangeProp && onChangeProp(e);\n },\n [onChangeValue, onChangeProp, disabled],\n );\n\n return [value, onChange];\n}\n\nexport interface UseCustomEnsuredControlProps<V> {\n value?: V;\n defaultValue: V;\n disabled?: boolean | undefined;\n onChange?: (this: void, v: V) => any;\n}\n\nconst warn = warnOnce('useCustomEnsuredControl');\n\nexport function useCustomEnsuredControl<V = any>({\n value,\n defaultValue,\n disabled,\n onChange: onChangeProp,\n}: UseCustomEnsuredControlProps<V>): [V, React.Dispatch<React.SetStateAction<V>>] {\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = React.useState(defaultValue);\n\n const preservedControlledValueRef = React.useRef<V | undefined>(undefined);\n useIsomorphicLayoutEffect(() => {\n preservedControlledValueRef.current = value;\n });\n\n /*\n * Для ситуации, когда nextValue это пользовательская функция,\n * и в качестве аргумента мы должны передать prevValue.\n * Обычно в качестве prevValue используется preservedControlledValueRef, но оно может быть undefined, если\n * некотролируемое value вдруг стало контролируемым\n * (value = undefined ---> value = true)\n * Если в момент вызова onChange preservedControlledValueRef ещё не был\n * обновлён в useEffect, то мы не можем использовать preservedControlledValueRef как prevValue\n * В качестве запасного варианта мы храним текущее значение value в currentFallbackValueRef, чтобы\n * использовать его вместо preservedControlledValueRef.\n */\n const currentFallbackValueRef = React.useRef<V | undefined>(value);\n currentFallbackValueRef.current = value;\n\n const onChange = React.useCallback(\n (nextValue: React.SetStateAction<V>) => {\n if (disabled) {\n return;\n }\n\n if (isFunction(nextValue)) {\n if (!isControlled) {\n setLocalValue((prevValue) => {\n const resolvedValue = nextValue(prevValue);\n if (onChangeProp) {\n onChangeProp(resolvedValue);\n }\n return resolvedValue;\n });\n } else if (onChangeProp) {\n if (process.env.NODE_ENV === 'development') {\n if (preservedControlledValueRef.current === undefined) {\n warn(\n `Похоже, что при вызове onChange с аргументом nextValue в виде коллбэка, состояние компонента было переведено из неконтролируемого (\"undefined\") в контролируемое. Пожалуйста, старайтесь сохранять либо неконтролируемое состояние, либо контролируемое на всём промежутке жизненного цикла компонента, чтобы получать предсказуемое значение prevValue в коллбэке nextValue((prevValue: V) => V)`,\n 'error',\n );\n }\n }\n\n const prevValue =\n preservedControlledValueRef.current === undefined\n ? currentFallbackValueRef.current\n : preservedControlledValueRef.current;\n // В теории prevValue не может быть undefined,\n // но лучше не вызывать nextValue с таким значением\n if (prevValue !== undefined) {\n const resolvedValue = nextValue(prevValue);\n onChangeProp(resolvedValue);\n }\n }\n } else {\n if (onChangeProp) {\n onChangeProp(nextValue);\n }\n if (!isControlled) {\n setLocalValue(nextValue);\n }\n }\n },\n [disabled, isControlled, onChangeProp],\n );\n\n return [isControlled ? value : localValue, onChange];\n}\n"],"names":["React","isFunction","useIsomorphicLayoutEffect","warnOnce","useEnsuredControl","onChange","onChangeProp","disabled","props","value","onChangeValue","useCustomEnsuredControl","useCallback","e","target","warn","defaultValue","isControlled","undefined","localValue","setLocalValue","useState","preservedControlledValueRef","useRef","current","currentFallbackValueRef","nextValue","prevValue","resolvedValue","process","env","NODE_ENV"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,yBAAyB,QAAQ,sCAAmC;AAC7E,SAASC,QAAQ,QAAQ,qBAAkB;AAS3C,OAAO,SAASC,kBAAuD;QAAA,EACrEC,UAAUC,YAAY,EACtBC,QAAQ,EAEqB,GAJwC,QAGlEC,mCAHkE;QACrEH;QACAE;;IAGA,MAAM,CAACE,OAAOC,cAAc,GAAGC,wBAAwBH;IAEvD,MAAMH,WAAWL,MAAMY,WAAW,CAChC,CAACC;QACC,IAAIN,UAAU;YACZ;QACF;QAEAG,cAAcG,EAAEC,MAAM,CAACL,KAAK;QAC5BH,gBAAgBA,aAAaO;IAC/B,GACA;QAACH;QAAeJ;QAAcC;KAAS;IAGzC,OAAO;QAACE;QAAOJ;KAAS;AAC1B;AASA,MAAMU,OAAOZ,SAAS;AAEtB,OAAO,SAASQ,wBAAiC,EAC/CF,KAAK,EACLO,YAAY,EACZT,QAAQ,EACRF,UAAUC,YAAY,EACU;IAChC,MAAMW,eAAeR,UAAUS;IAC/B,MAAM,CAACC,YAAYC,cAAc,GAAGpB,MAAMqB,QAAQ,CAACL;IAEnD,MAAMM,8BAA8BtB,MAAMuB,MAAM,CAAgBL;IAChEhB,0BAA0B;QACxBoB,4BAA4BE,OAAO,GAAGf;IACxC;IAEA;;;;;;;;;;GAUC,GACD,MAAMgB,0BAA0BzB,MAAMuB,MAAM,CAAgBd;IAC5DgB,wBAAwBD,OAAO,GAAGf;IAElC,MAAMJ,WAAWL,MAAMY,WAAW,CAChC,CAACc;QACC,IAAInB,UAAU;YACZ;QACF;QAEA,IAAIN,WAAWyB,YAAY;YACzB,IAAI,CAACT,cAAc;gBACjBG,cAAc,CAACO;oBACb,MAAMC,gBAAgBF,UAAUC;oBAChC,IAAIrB,cAAc;wBAChBA,aAAasB;oBACf;oBACA,OAAOA;gBACT;YACF,OAAO,IAAItB,cAAc;gBACvB,IAAIuB,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;oBAC1C,IAAIT,4BAA4BE,OAAO,KAAKN,WAAW;wBACrDH,KACE,CAAC,iYAAiY,CAAC,EACnY;oBAEJ;gBACF;gBAEA,MAAMY,YACJL,4BAA4BE,OAAO,KAAKN,YACpCO,wBAAwBD,OAAO,GAC/BF,4BAA4BE,OAAO;gBACzC,8CAA8C;gBAC9C,mDAAmD;gBACnD,IAAIG,cAAcT,WAAW;oBAC3B,MAAMU,gBAAgBF,UAAUC;oBAChCrB,aAAasB;gBACf;YACF;QACF,OAAO;YACL,IAAItB,cAAc;gBAChBA,aAAaoB;YACf;YACA,IAAI,CAACT,cAAc;gBACjBG,cAAcM;YAChB;QACF;IACF,GACA;QAACnB;QAAUU;QAAcX;KAAa;IAGxC,OAAO;QAACW,eAAeR,QAAQU;QAAYd;KAAS;AACtD"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export declare function useExternRef<T>(...externRefs: Array<React.Ref<T> | undefined | false>): React.
|
|
2
|
+
export declare function useExternRef<T>(...externRefs: Array<React.Ref<T> | undefined | false>): React.RefObject<T | null>;
|
|
3
3
|
//# sourceMappingURL=useExternRef.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternRef.d.ts","sourceRoot":"","sources":["../../src/hooks/useExternRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6C/B,wBAAgB,YAAY,CAAC,CAAC,EAC5B,GAAG,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,GACrD,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"useExternRef.d.ts","sourceRoot":"","sources":["../../src/hooks/useExternRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6C/B,wBAAgB,YAAY,CAAC,CAAC,EAC5B,GAAG,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,GACrD,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAS3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useExternRef.ts"],"sourcesContent":["import * as React from 'react';\nimport { setRef } from '../lib/utils';\n\nclass ExternalRef<T> implements React.
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useExternRef.ts"],"sourcesContent":["import * as React from 'react';\nimport { setRef } from '../lib/utils';\n\nclass ExternalRef<T> implements React.RefObject<T | null> {\n #element: T | null = null;\n readonly #externRefs = new Set<React.Ref<T>>();\n\n constructor(externRefs: Array<React.Ref<T> | undefined | false> = []) {\n externRefs.forEach((ref) => {\n if (ref) {\n this.#externRefs.add(ref);\n }\n });\n }\n\n updateExternRefs(refs: Array<React.Ref<T> | undefined | false>) {\n refs.forEach((ref) => {\n if (!ref || this.#externRefs.has(ref)) {\n return;\n }\n\n setRef(this.#element, ref);\n this.#externRefs.add(ref);\n });\n }\n\n get current() {\n return this.#element;\n }\n\n set current(el) {\n this.#element = el;\n this.#externRefs.forEach((ref) => setRef(el, ref));\n }\n\n /**\n * React проверяет наличие свойства current у объектов через hasOwnProperty\n *\n * https://github.com/facebook/react/blob/c3cdbec0a78d39b5ff7329384cb41c4573a38212/packages/react-reconciler/src/ReactFiberCommitWork.js#L1612\n */\n hasOwnProperty(v: PropertyKey): v is keyof ExternalRef<T> {\n return v === 'current';\n }\n}\n\nexport function useExternRef<T>(\n ...externRefs: Array<React.Ref<T> | undefined | false>\n): React.RefObject<T | null> {\n const ref = React.useRef<ExternalRef<T> | null>(null);\n if (ref.current === null) {\n ref.current = new ExternalRef(externRefs);\n } else {\n ref.current.updateExternRefs(externRefs);\n }\n\n return ref.current;\n}\n"],"names":["React","setRef","ExternalRef","updateExternRefs","refs","forEach","ref","has","add","current","el","hasOwnProperty","v","constructor","externRefs","Set","useExternRef","useRef"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,MAAM,QAAQ,kBAAe;IAGpC,wCACS;AAFX,MAAMC;IAYJC,iBAAiBC,IAA6C,EAAE;QAC9DA,KAAKC,OAAO,CAAC,CAACC;YACZ,IAAI,CAACA,OAAO,yBAAA,IAAI,EAAC,aAAYC,GAAG,CAACD,MAAM;gBACrC;YACF;YAEAL,gCAAO,IAAI,EAAC,WAAUK;YACtB,yBAAA,IAAI,EAAC,aAAYE,GAAG,CAACF;QACvB;IACF;IAEA,IAAIG,UAAU;QACZ,gCAAO,IAAI,EAAC;IACd;IAEA,IAAIA,QAAQC,EAAE,EAAE;uCACT,UAAWA;QAChB,yBAAA,IAAI,EAAC,aAAYL,OAAO,CAAC,CAACC,MAAQL,OAAOS,IAAIJ;IAC/C;IAEA;;;;GAIC,GACDK,eAAeC,CAAc,EAA6B;QACxD,OAAOA,MAAM;IACf;IAnCAC,YAAYC,aAAsD,EAAE,CAAE;QAHtE,gCAAA;;mBAAqB;;QACrB,gCAAS;;mBAAc,IAAIC;;QAGzBD,WAAWT,OAAO,CAAC,CAACC;YAClB,IAAIA,KAAK;gBACP,yBAAA,IAAI,EAAC,aAAYE,GAAG,CAACF;YACvB;QACF;IACF;AA8BF;AAEA,OAAO,SAASU,aACd,GAAGF,UAAmD;IAEtD,MAAMR,MAAMN,MAAMiB,MAAM,CAAwB;IAChD,IAAIX,IAAIG,OAAO,KAAK,MAAM;QACxBH,IAAIG,OAAO,GAAG,IAAIP,YAAYY;IAChC,OAAO;QACLR,IAAIG,OAAO,CAACN,gBAAgB,CAACW;IAC/B;IAEA,OAAOR,IAAIG,OAAO;AACpB"}
|
|
@@ -30,5 +30,5 @@ export type UseFocusTrapProps = {
|
|
|
30
30
|
/**
|
|
31
31
|
* @private
|
|
32
32
|
*/
|
|
33
|
-
export declare const useFocusTrap: (ref: RefObject<HTMLElement>, { mount, disabled, autoFocus, restoreFocus, timeout, onClose, }: UseFocusTrapProps) => void;
|
|
33
|
+
export declare const useFocusTrap: (ref: RefObject<HTMLElement | null>, { mount, disabled, autoFocus, restoreFocus, timeout, onClose, }: UseFocusTrapProps) => void;
|
|
34
34
|
//# sourceMappingURL=useFocusTrap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFocusTrap.d.ts","sourceRoot":"","sources":["../../src/hooks/useFocusTrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,OAAO,CAAC;AAiFzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC;IACvD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAClB,SAAS,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"useFocusTrap.d.ts","sourceRoot":"","sources":["../../src/hooks/useFocusTrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,OAAO,CAAC;AAiFzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC;IACvD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAClB,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,mEAQ/B,iBAAiB,SAyJrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { type RefObject, useRef, useState } from 'react';\nimport { arraysEquals } from '../helpers/array';\nimport { FOCUSABLE_ELEMENTS_LIST, Keys, pressedKey } from '../lib/accessibility';\nimport {\n contains,\n getActiveElementByAnotherElement,\n getWindow,\n isHTMLElement,\n useDOM,\n} from '../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\nimport { useMutationObserver } from './useMutationObserver';\nimport { useStableCallback } from './useStableCallback';\n\nconst useRestoreFocus = ({\n restoreFocus,\n timeout,\n mount,\n ref,\n}: Pick<UseFocusTrapProps, 'restoreFocus' | 'timeout' | 'mount'> & {\n ref: RefObject<HTMLElement | null>;\n}) => {\n const restoreFocusRef = useRef(restoreFocus);\n restoreFocusRef.current = restoreFocus;\n const [restoreFocusTo, setRestoreFocusTo] = useState<Element | null>(null);\n\n const restoreFocusImpl = useStableCallback(() => {\n const shouldRestoreFocus =\n typeof restoreFocusRef.current === 'function'\n ? restoreFocusRef.current()\n : restoreFocusRef.current;\n\n if (!shouldRestoreFocus) {\n return;\n }\n\n setTimeout(() => {\n const restoreFocusElement =\n (isHTMLElement(shouldRestoreFocus) && shouldRestoreFocus) ||\n (isHTMLElement(restoreFocusTo) && restoreFocusTo) ||\n null;\n\n if (restoreFocusElement) {\n restoreFocusElement.focus();\n setRestoreFocusTo(null);\n }\n }, timeout);\n });\n\n useIsomorphicLayoutEffect(\n function calculateRestoreFocusTo() {\n if (!ref.current || !restoreFocusRef.current || !mount) {\n setRestoreFocusTo(null);\n return;\n }\n setRestoreFocusTo(getActiveElementByAnotherElement(ref.current));\n },\n [ref, mount],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusOnUnmount() {\n return () => {\n restoreFocusImpl();\n };\n },\n [restoreFocusImpl],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusWhenFakeUnmount() {\n if (!mount) {\n restoreFocusImpl();\n }\n },\n [mount, restoreFocusImpl],\n );\n};\n\nconst FOCUSABLE_ELEMENTS: string = FOCUSABLE_ELEMENTS_LIST.join();\n\nexport type UseFocusTrapProps = {\n /**\n * @default true\n */\n mount?: boolean;\n /**\n * Форсированное отключение захвата фокуса\n *\n * @default false\n */\n disabled?: boolean;\n /**\n * @default true\n */\n autoFocus?: boolean | 'root';\n /**\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement);\n /**\n * @default 0\n */\n timeout?: number;\n /**\n * Вызывается при нажатии на кнопку `Escape`.\n */\n onClose?: VoidFunction;\n};\n\n/**\n * @private\n */\nexport const useFocusTrap = (\n ref: RefObject<HTMLElement>,\n {\n mount = true,\n disabled = false,\n autoFocus = true,\n restoreFocus = true,\n timeout = 0,\n onClose,\n }: UseFocusTrapProps,\n) => {\n const { document } = useDOM();\n\n const focusableNodesRef = useRef<HTMLElement[]>([]);\n\n const focusNodeByIndex = (nodeIndex: number) => {\n const element = focusableNodesRef.current[nodeIndex];\n\n if (element) {\n element.focus({\n preventScroll: true,\n });\n }\n };\n\n useRestoreFocus({\n restoreFocus,\n mount,\n timeout,\n ref,\n });\n\n const recalculateFocusableNodesRef = (parentNode: HTMLElement) => {\n // eslint-disable-next-line no-restricted-properties\n const newFocusableElements = parentNode.querySelectorAll<HTMLElement>(FOCUSABLE_ELEMENTS);\n\n const nodes: HTMLElement[] = [];\n newFocusableElements.forEach((focusableEl) => {\n const { display, visibility } = getComputedStyle(focusableEl);\n if (display !== 'none' && visibility !== 'hidden') {\n nodes.push(focusableEl);\n }\n });\n if (nodes.length === 0) {\n // Чтобы фокус был хотя бы на родителе\n nodes.push(parentNode);\n }\n focusableNodesRef.current = nodes;\n };\n\n const onMutateParentHandler = (parentNode: HTMLElement) => {\n const oldFocusableNodes = [...focusableNodesRef.current];\n\n recalculateFocusableNodesRef(parentNode);\n\n if (!autoFocus || arraysEquals(oldFocusableNodes, focusableNodesRef.current)) {\n return;\n }\n\n if (document) {\n const activeElement = document.activeElement as HTMLElement;\n const currentElementIndex = Math.max(\n document.activeElement ? focusableNodesRef.current.indexOf(activeElement) : -1,\n 0,\n );\n focusNodeByIndex(currentElementIndex);\n }\n };\n\n useMutationObserver(ref, () => ref.current && onMutateParentHandler(ref.current));\n\n useIsomorphicLayoutEffect(() => {\n ref.current && recalculateFocusableNodesRef(ref.current);\n }, [ref]);\n\n useIsomorphicLayoutEffect(\n function tryToAutoFocusToFirstNode() {\n if (!ref.current || !autoFocus || disabled) {\n return;\n }\n\n const autoFocusToNode = () => {\n if (!ref.current || !focusableNodesRef.current.length) {\n return;\n }\n const activeElement = getActiveElementByAnotherElement(ref.current);\n if (!contains(ref.current, activeElement)) {\n if (autoFocus === 'root') {\n ref.current?.focus();\n } else {\n focusableNodesRef.current[0].focus();\n }\n }\n };\n const timeoutId = setTimeout(autoFocusToNode, timeout);\n return () => {\n clearTimeout(timeoutId);\n };\n },\n [autoFocus, timeout, disabled],\n );\n\n useIsomorphicLayoutEffect(\n function initializeFocusTrap() {\n if (!ref.current) {\n return;\n }\n\n const onDocumentKeydown = (event: KeyboardEvent) => {\n if (disabled) {\n return;\n }\n\n const pressedKeyResult = pressedKey(event);\n\n switch (pressedKeyResult) {\n case Keys.TAB: {\n if (!focusableNodesRef.current.length) {\n return false;\n }\n\n const lastIdx = focusableNodesRef.current.length - 1;\n const targetIdx = focusableNodesRef.current.findIndex((node) => node === event.target);\n\n const shouldFocusFirstNode =\n targetIdx === -1 || (targetIdx === lastIdx && !event.shiftKey);\n\n if (shouldFocusFirstNode || (targetIdx === 0 && event.shiftKey)) {\n event.preventDefault();\n\n const node = focusableNodesRef.current[shouldFocusFirstNode ? 0 : lastIdx];\n\n if (node !== getActiveElementByAnotherElement(node)) {\n node.focus();\n }\n\n return false;\n }\n\n break;\n }\n case Keys.ESCAPE: {\n if (onClose) {\n event.preventDefault();\n onClose();\n }\n }\n }\n\n return true;\n };\n\n const doc = getWindow(ref.current).document;\n doc.addEventListener('keydown', onDocumentKeydown, {\n capture: true,\n });\n return () => {\n doc.removeEventListener('keydown', onDocumentKeydown, true);\n };\n },\n [onClose, ref, disabled],\n );\n};\n"],"names":["useRef","useState","arraysEquals","FOCUSABLE_ELEMENTS_LIST","Keys","pressedKey","contains","getActiveElementByAnotherElement","getWindow","isHTMLElement","useDOM","useIsomorphicLayoutEffect","useMutationObserver","useStableCallback","useRestoreFocus","restoreFocus","timeout","mount","ref","restoreFocusRef","current","restoreFocusTo","setRestoreFocusTo","restoreFocusImpl","shouldRestoreFocus","setTimeout","restoreFocusElement","focus","calculateRestoreFocusTo","tryToRestoreFocusOnUnmount","tryToRestoreFocusWhenFakeUnmount","FOCUSABLE_ELEMENTS","join","useFocusTrap","disabled","autoFocus","onClose","document","focusableNodesRef","focusNodeByIndex","nodeIndex","element","preventScroll","recalculateFocusableNodesRef","parentNode","newFocusableElements","querySelectorAll","nodes","forEach","focusableEl","display","visibility","getComputedStyle","push","length","onMutateParentHandler","oldFocusableNodes","activeElement","currentElementIndex","Math","max","indexOf","tryToAutoFocusToFirstNode","autoFocusToNode","timeoutId","clearTimeout","initializeFocusTrap","onDocumentKeydown","event","pressedKeyResult","TAB","lastIdx","targetIdx","findIndex","node","target","shouldFocusFirstNode","shiftKey","preventDefault","ESCAPE","doc","addEventListener","capture","removeEventListener"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { type RefObject, useRef, useState } from 'react';\nimport { arraysEquals } from '../helpers/array';\nimport { FOCUSABLE_ELEMENTS_LIST, Keys, pressedKey } from '../lib/accessibility';\nimport {\n contains,\n getActiveElementByAnotherElement,\n getWindow,\n isHTMLElement,\n useDOM,\n} from '../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\nimport { useMutationObserver } from './useMutationObserver';\nimport { useStableCallback } from './useStableCallback';\n\nconst useRestoreFocus = ({\n restoreFocus,\n timeout,\n mount,\n ref,\n}: Pick<UseFocusTrapProps, 'restoreFocus' | 'timeout' | 'mount'> & {\n ref: RefObject<HTMLElement | null>;\n}) => {\n const restoreFocusRef = useRef(restoreFocus);\n restoreFocusRef.current = restoreFocus;\n const [restoreFocusTo, setRestoreFocusTo] = useState<Element | null>(null);\n\n const restoreFocusImpl = useStableCallback(() => {\n const shouldRestoreFocus =\n typeof restoreFocusRef.current === 'function'\n ? restoreFocusRef.current()\n : restoreFocusRef.current;\n\n if (!shouldRestoreFocus) {\n return;\n }\n\n setTimeout(() => {\n const restoreFocusElement =\n (isHTMLElement(shouldRestoreFocus) && shouldRestoreFocus) ||\n (isHTMLElement(restoreFocusTo) && restoreFocusTo) ||\n null;\n\n if (restoreFocusElement) {\n restoreFocusElement.focus();\n setRestoreFocusTo(null);\n }\n }, timeout);\n });\n\n useIsomorphicLayoutEffect(\n function calculateRestoreFocusTo() {\n if (!ref.current || !restoreFocusRef.current || !mount) {\n setRestoreFocusTo(null);\n return;\n }\n setRestoreFocusTo(getActiveElementByAnotherElement(ref.current));\n },\n [ref, mount],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusOnUnmount() {\n return () => {\n restoreFocusImpl();\n };\n },\n [restoreFocusImpl],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusWhenFakeUnmount() {\n if (!mount) {\n restoreFocusImpl();\n }\n },\n [mount, restoreFocusImpl],\n );\n};\n\nconst FOCUSABLE_ELEMENTS: string = FOCUSABLE_ELEMENTS_LIST.join();\n\nexport type UseFocusTrapProps = {\n /**\n * @default true\n */\n mount?: boolean;\n /**\n * Форсированное отключение захвата фокуса\n *\n * @default false\n */\n disabled?: boolean;\n /**\n * @default true\n */\n autoFocus?: boolean | 'root';\n /**\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement);\n /**\n * @default 0\n */\n timeout?: number;\n /**\n * Вызывается при нажатии на кнопку `Escape`.\n */\n onClose?: VoidFunction;\n};\n\n/**\n * @private\n */\nexport const useFocusTrap = (\n ref: RefObject<HTMLElement | null>,\n {\n mount = true,\n disabled = false,\n autoFocus = true,\n restoreFocus = true,\n timeout = 0,\n onClose,\n }: UseFocusTrapProps,\n) => {\n const { document } = useDOM();\n\n const focusableNodesRef = useRef<HTMLElement[]>([]);\n\n const focusNodeByIndex = (nodeIndex: number) => {\n const element = focusableNodesRef.current[nodeIndex];\n\n if (element) {\n element.focus({\n preventScroll: true,\n });\n }\n };\n\n useRestoreFocus({\n restoreFocus,\n mount,\n timeout,\n ref,\n });\n\n const recalculateFocusableNodesRef = (parentNode: HTMLElement) => {\n // eslint-disable-next-line no-restricted-properties\n const newFocusableElements = parentNode.querySelectorAll<HTMLElement>(FOCUSABLE_ELEMENTS);\n\n const nodes: HTMLElement[] = [];\n newFocusableElements.forEach((focusableEl) => {\n const { display, visibility } = getComputedStyle(focusableEl);\n if (display !== 'none' && visibility !== 'hidden') {\n nodes.push(focusableEl);\n }\n });\n if (nodes.length === 0) {\n // Чтобы фокус был хотя бы на родителе\n nodes.push(parentNode);\n }\n focusableNodesRef.current = nodes;\n };\n\n const onMutateParentHandler = (parentNode: HTMLElement) => {\n const oldFocusableNodes = [...focusableNodesRef.current];\n\n recalculateFocusableNodesRef(parentNode);\n\n if (!autoFocus || arraysEquals(oldFocusableNodes, focusableNodesRef.current)) {\n return;\n }\n\n if (document) {\n const activeElement = document.activeElement as HTMLElement;\n const currentElementIndex = Math.max(\n document.activeElement ? focusableNodesRef.current.indexOf(activeElement) : -1,\n 0,\n );\n focusNodeByIndex(currentElementIndex);\n }\n };\n\n useMutationObserver(ref, () => ref.current && onMutateParentHandler(ref.current));\n\n useIsomorphicLayoutEffect(() => {\n ref.current && recalculateFocusableNodesRef(ref.current);\n }, [ref]);\n\n useIsomorphicLayoutEffect(\n function tryToAutoFocusToFirstNode() {\n if (!ref.current || !autoFocus || disabled) {\n return;\n }\n\n const autoFocusToNode = () => {\n if (!ref.current || !focusableNodesRef.current.length) {\n return;\n }\n const activeElement = getActiveElementByAnotherElement(ref.current);\n if (!contains(ref.current, activeElement)) {\n if (autoFocus === 'root') {\n ref.current?.focus();\n } else {\n focusableNodesRef.current[0].focus();\n }\n }\n };\n const timeoutId = setTimeout(autoFocusToNode, timeout);\n return () => {\n clearTimeout(timeoutId);\n };\n },\n [autoFocus, timeout, disabled],\n );\n\n useIsomorphicLayoutEffect(\n function initializeFocusTrap() {\n if (!ref.current) {\n return;\n }\n\n const onDocumentKeydown = (event: KeyboardEvent) => {\n if (disabled) {\n return;\n }\n\n const pressedKeyResult = pressedKey(event);\n\n switch (pressedKeyResult) {\n case Keys.TAB: {\n if (!focusableNodesRef.current.length) {\n return false;\n }\n\n const lastIdx = focusableNodesRef.current.length - 1;\n const targetIdx = focusableNodesRef.current.findIndex((node) => node === event.target);\n\n const shouldFocusFirstNode =\n targetIdx === -1 || (targetIdx === lastIdx && !event.shiftKey);\n\n if (shouldFocusFirstNode || (targetIdx === 0 && event.shiftKey)) {\n event.preventDefault();\n\n const node = focusableNodesRef.current[shouldFocusFirstNode ? 0 : lastIdx];\n\n if (node !== getActiveElementByAnotherElement(node)) {\n node.focus();\n }\n\n return false;\n }\n\n break;\n }\n case Keys.ESCAPE: {\n if (onClose) {\n event.preventDefault();\n onClose();\n }\n }\n }\n\n return true;\n };\n\n const doc = getWindow(ref.current).document;\n doc.addEventListener('keydown', onDocumentKeydown, {\n capture: true,\n });\n return () => {\n doc.removeEventListener('keydown', onDocumentKeydown, true);\n };\n },\n [onClose, ref, disabled],\n );\n};\n"],"names":["useRef","useState","arraysEquals","FOCUSABLE_ELEMENTS_LIST","Keys","pressedKey","contains","getActiveElementByAnotherElement","getWindow","isHTMLElement","useDOM","useIsomorphicLayoutEffect","useMutationObserver","useStableCallback","useRestoreFocus","restoreFocus","timeout","mount","ref","restoreFocusRef","current","restoreFocusTo","setRestoreFocusTo","restoreFocusImpl","shouldRestoreFocus","setTimeout","restoreFocusElement","focus","calculateRestoreFocusTo","tryToRestoreFocusOnUnmount","tryToRestoreFocusWhenFakeUnmount","FOCUSABLE_ELEMENTS","join","useFocusTrap","disabled","autoFocus","onClose","document","focusableNodesRef","focusNodeByIndex","nodeIndex","element","preventScroll","recalculateFocusableNodesRef","parentNode","newFocusableElements","querySelectorAll","nodes","forEach","focusableEl","display","visibility","getComputedStyle","push","length","onMutateParentHandler","oldFocusableNodes","activeElement","currentElementIndex","Math","max","indexOf","tryToAutoFocusToFirstNode","autoFocusToNode","timeoutId","clearTimeout","initializeFocusTrap","onDocumentKeydown","event","pressedKeyResult","TAB","lastIdx","targetIdx","findIndex","node","target","shouldFocusFirstNode","shiftKey","preventDefault","ESCAPE","doc","addEventListener","capture","removeEventListener"],"mappings":"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"}
|
|
@@ -4,5 +4,5 @@ import type * as React from 'react';
|
|
|
4
4
|
*
|
|
5
5
|
* @private
|
|
6
6
|
*/
|
|
7
|
-
export declare const useGlobalOnClickOutside: <T extends React.RefObject<ElementType> | undefined | null, ElementType extends Element = Element>(callback: (event: MouseEvent) => void, ...refs: T[]) => void;
|
|
7
|
+
export declare const useGlobalOnClickOutside: <T extends React.RefObject<ElementType | null> | undefined | null, ElementType extends Element = Element>(callback: (event: MouseEvent) => void, ...refs: T[]) => void;
|
|
8
8
|
//# sourceMappingURL=useGlobalOnClickOutside.d.ts.map
|