@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
|
@@ -1,137 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
3
|
-
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
4
2
|
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
|
|
5
|
-
import {
|
|
3
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
4
|
import * as React from "react";
|
|
7
|
-
import { classNames } from "@vkontakte/vkjs";
|
|
8
5
|
import { usePatchChildren } from "../../hooks/usePatchChildren.js";
|
|
9
|
-
import {
|
|
10
|
-
import { animationFadeClassNames, transformOriginClassNames } from "../../lib/animation/index.js";
|
|
11
|
-
import { useFloatingMiddlewaresBootstrap, useFloatingWithInteractions, usePlacementChangeCallback } from "../../lib/floating/index.js";
|
|
12
|
-
import { AppRootPortal } from "../AppRoot/AppRootPortal.js";
|
|
13
|
-
import { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING, DefaultIcon } from "../FloatingArrow/DefaultIcon.js";
|
|
14
|
-
import { FloatingArrow } from "../FloatingArrow/FloatingArrow.js";
|
|
15
|
-
import { FocusTrap } from "../FocusTrap/FocusTrap.js";
|
|
6
|
+
import { usePopover } from "./usePopover.js";
|
|
16
7
|
/**
|
|
17
8
|
* @see https://vkcom.github.io/VKUI/#/Popover
|
|
18
9
|
*/ export const Popover = (_param)=>{
|
|
19
|
-
var {
|
|
20
|
-
|
|
21
|
-
defaultShown = false, // controlled
|
|
22
|
-
shown: shownProp, onShownChange, onShownChanged, // Для AppRootPortal
|
|
23
|
-
usePortal = true, // Для FloatingArrow
|
|
24
|
-
arrowProps, ArrowIcon = DefaultIcon, // FocusTrapProps
|
|
25
|
-
autoFocus = true, restoreFocus = true, className, children, noStyling = false, zIndex = 'var(--vkui--z_index_popout)', // a11y
|
|
26
|
-
role = 'dialog' } = _param, restPopoverProps = _object_without_properties(_param, [
|
|
27
|
-
"arrow",
|
|
28
|
-
"arrowHeight",
|
|
29
|
-
"arrowPadding",
|
|
30
|
-
"placement",
|
|
31
|
-
"onPlacementChange",
|
|
32
|
-
"disableFlipMiddleware",
|
|
33
|
-
"trigger",
|
|
34
|
-
"content",
|
|
35
|
-
"hoverDelay",
|
|
36
|
-
"closeAfterClick",
|
|
37
|
-
"offsetByMainAxis",
|
|
38
|
-
"offsetByCrossAxis",
|
|
39
|
-
"sameWidth",
|
|
40
|
-
"hideWhenReferenceHidden",
|
|
41
|
-
"disabled",
|
|
42
|
-
"disableInteractive",
|
|
43
|
-
"disableCloseOnClickOutside",
|
|
44
|
-
"disableCloseOnEscKey",
|
|
45
|
-
"keepMounted",
|
|
46
|
-
"customMiddlewares",
|
|
47
|
-
"defaultShown",
|
|
48
|
-
"shown",
|
|
49
|
-
"onShownChange",
|
|
50
|
-
"onShownChanged",
|
|
51
|
-
"usePortal",
|
|
52
|
-
"arrowProps",
|
|
53
|
-
"ArrowIcon",
|
|
54
|
-
"autoFocus",
|
|
55
|
-
"restoreFocus",
|
|
56
|
-
"className",
|
|
57
|
-
"children",
|
|
58
|
-
"noStyling",
|
|
59
|
-
"zIndex",
|
|
60
|
-
"role"
|
|
10
|
+
var { children } = _param, restProps = _object_without_properties(_param, [
|
|
11
|
+
"children"
|
|
61
12
|
]);
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
arrow: withArrow,
|
|
65
|
-
arrowRef,
|
|
66
|
-
arrowHeight,
|
|
67
|
-
arrowPadding,
|
|
68
|
-
placement: expectedPlacement,
|
|
69
|
-
offsetByMainAxis,
|
|
70
|
-
offsetByCrossAxis,
|
|
71
|
-
sameWidth,
|
|
72
|
-
hideWhenReferenceHidden,
|
|
73
|
-
disableFlipMiddleware,
|
|
74
|
-
customMiddlewares
|
|
75
|
-
});
|
|
76
|
-
const { placement: resolvedPlacement, shown, willBeHide, refs, referenceProps, floatingProps, middlewareData, onClose, onRestoreFocus, onEscapeKeyDown } = useFloatingWithInteractions({
|
|
77
|
-
middlewares,
|
|
78
|
-
placement: strictPlacement,
|
|
79
|
-
trigger,
|
|
80
|
-
hoverDelay,
|
|
81
|
-
closeAfterClick,
|
|
82
|
-
disabled,
|
|
83
|
-
disableInteractive,
|
|
84
|
-
disableCloseOnClickOutside,
|
|
85
|
-
disableCloseOnEscKey,
|
|
86
|
-
defaultShown,
|
|
87
|
-
shown: shownProp,
|
|
88
|
-
onShownChange,
|
|
89
|
-
onShownChanged
|
|
90
|
-
});
|
|
91
|
-
usePlacementChangeCallback(expectedPlacement, resolvedPlacement, onPlacementChange);
|
|
92
|
-
const [, child] = usePatchChildren(children, injectAriaExpandedPropByRole(referenceProps, shown, role), refs.setReference);
|
|
93
|
-
let popover = null;
|
|
94
|
-
if (shown || keepMounted) {
|
|
95
|
-
const hidden = keepMounted && !shown;
|
|
96
|
-
let arrow = null;
|
|
97
|
-
if (withArrow) {
|
|
98
|
-
const { arrow: arrowCoords } = middlewareData;
|
|
99
|
-
arrow = /*#__PURE__*/ _jsx(FloatingArrow, _object_spread_props(_object_spread({
|
|
100
|
-
iconClassName: noStyling ? undefined : "vkuiPopover__arrow"
|
|
101
|
-
}, arrowProps), {
|
|
102
|
-
coords: arrowCoords,
|
|
103
|
-
placement: resolvedPlacement,
|
|
104
|
-
getRootRef: setArrowRef,
|
|
105
|
-
Icon: ArrowIcon
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
popover = /*#__PURE__*/ _jsx(AppRootPortal, {
|
|
109
|
-
usePortal: usePortal,
|
|
110
|
-
children: /*#__PURE__*/ _jsx("div", _object_spread_props(_object_spread({
|
|
111
|
-
ref: refs.setFloating,
|
|
112
|
-
className: classNames("vkuiPopover__host", hidden && "vkuiPopover__hidden")
|
|
113
|
-
}, floatingProps), {
|
|
114
|
-
style: _object_spread({
|
|
115
|
-
zIndex: !hidden ? zIndex : undefined
|
|
116
|
-
}, floatingProps.style),
|
|
117
|
-
children: /*#__PURE__*/ _jsxs(FocusTrap, _object_spread_props(_object_spread({}, restPopoverProps), {
|
|
118
|
-
role: role,
|
|
119
|
-
className: classNames("vkuiPopover__in", noStyling ? undefined : "vkuiPopover__inWithStyling", willBeHide ? animationFadeClassNames.out : animationFadeClassNames.in, transformOriginClassNames[resolvedPlacement], className),
|
|
120
|
-
mount: !hidden,
|
|
121
|
-
disabled: hidden,
|
|
122
|
-
autoFocus: disableInteractive ? false : autoFocus,
|
|
123
|
-
restoreFocus: restoreFocus ? ()=>onRestoreFocus(restoreFocus) : false,
|
|
124
|
-
onClose: onEscapeKeyDown,
|
|
125
|
-
children: [
|
|
126
|
-
arrow,
|
|
127
|
-
typeof content === 'function' ? content({
|
|
128
|
-
onClose
|
|
129
|
-
}) : content
|
|
130
|
-
]
|
|
131
|
-
}))
|
|
132
|
-
}))
|
|
133
|
-
});
|
|
134
|
-
}
|
|
13
|
+
const { anchorRef, anchorProps: referenceProps, popover } = usePopover(restProps);
|
|
14
|
+
const [, child] = usePatchChildren(children, referenceProps, anchorRef);
|
|
135
15
|
return /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
136
16
|
children: [
|
|
137
17
|
child,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport { injectAriaExpandedPropByRole } from '../../lib/accessibility';\nimport { animationFadeClassNames, transformOriginClassNames } from '../../lib/animation';\nimport {\n type FloatingComponentProps,\n type FloatingContentRenderProp,\n type OnShownChange,\n useFloatingMiddlewaresBootstrap,\n useFloatingWithInteractions,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport {\n FloatingArrow,\n type FloatingArrowProps as FloatingArrowPropsPrivate,\n} from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport type { FocusTrapProps } from '../FocusTrap/FocusTrap';\nimport styles from './Popover.module.css';\n\n/**\n * @alias\n * @public\n */\nexport type PopoverArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverOnShownChange = OnShownChange;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverContentRenderProp = FloatingContentRenderProp;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'placement'\n | 'onPlacementChange'\n | 'trigger'\n | 'content'\n | 'hoverDelay'\n | 'closeAfterClick'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'defaultShown'\n | 'shown'\n | 'onShownChange'\n | 'onShownChanged'\n | 'usePortal'\n | 'sameWidth'\n | 'hideWhenReferenceHidden'\n | 'disabled'\n | 'disableInteractive'\n | 'disableCloseOnClickOutside'\n | 'disableCloseOnEscKey'\n | 'autoFocus'\n | 'restoreFocus'\n | 'children'\n | 'zIndex'\n | 'disableFlipMiddleware'\n | 'customMiddlewares'\n>;\n\n/**\n * @public\n */\nexport interface PopoverProps\n extends Omit<AllowedFloatingComponentProps, 'autoFocus'>,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof FloatingComponentProps> {\n /**\n * Отключает у всплывающего элемента стилизацию по умолчанию.\n *\n * У `content`:\n * - _background_\n * - _border-radius_\n * - _box-shadow_\n *\n * У `arrow`:\n * - _color_\n *\n * Используется в случае, если необходимо стилизовать по своему. Для `arrow` _color_ можно\n * определить через в `arrowProps.iconClassName` или `arrowProps.iconStyle`.\n */\n noStyling?: boolean;\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: PopoverArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Используется для того, чтобы не удалять поповер из DOM дерева при скрытии.\n */\n keepMounted?: boolean;\n autoFocus?: FocusTrapProps['autoFocus'];\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({\n // UsePopoverProps\n arrow: withArrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n placement: expectedPlacement = 'bottom-start',\n onPlacementChange,\n disableFlipMiddleware = false,\n trigger = 'click',\n content,\n hoverDelay = 150,\n closeAfterClick,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n sameWidth,\n hideWhenReferenceHidden,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n keepMounted = false,\n customMiddlewares,\n // uncontrolled\n defaultShown = false,\n // controlled\n shown: shownProp,\n onShownChange,\n onShownChanged,\n\n // Для AppRootPortal\n usePortal = true,\n\n // Для FloatingArrow\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // FocusTrapProps\n autoFocus = true,\n restoreFocus = true,\n className,\n children,\n noStyling = false,\n zIndex = 'var(--vkui--z_index_popout)',\n // a11y\n role = 'dialog',\n ...restPopoverProps\n}: PopoverProps): React.ReactNode => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n arrow: withArrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n placement: expectedPlacement,\n offsetByMainAxis,\n offsetByCrossAxis,\n sameWidth,\n hideWhenReferenceHidden,\n disableFlipMiddleware,\n customMiddlewares,\n });\n const {\n placement: resolvedPlacement,\n shown,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose,\n onRestoreFocus,\n onEscapeKeyDown,\n } = useFloatingWithInteractions({\n middlewares,\n placement: strictPlacement,\n trigger,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n onShownChanged,\n });\n\n usePlacementChangeCallback(expectedPlacement, resolvedPlacement, onPlacementChange);\n\n const [, child] = usePatchChildren<HTMLDivElement>(\n children,\n injectAriaExpandedPropByRole(referenceProps, shown, role),\n refs.setReference,\n );\n\n let popover: React.ReactNode = null;\n if (shown || keepMounted) {\n const hidden = keepMounted && !shown;\n\n let arrow: React.ReactElement | null = null;\n if (withArrow) {\n const { arrow: arrowCoords } = middlewareData;\n arrow = (\n <FloatingArrow\n iconClassName={noStyling ? undefined : styles.arrow}\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n );\n }\n\n popover = (\n <AppRootPortal usePortal={usePortal}>\n <div\n ref={refs.setFloating}\n className={classNames(styles.host, hidden && styles.hidden)}\n {...floatingProps}\n style={{\n zIndex: !hidden ? zIndex : undefined,\n ...floatingProps.style,\n }}\n >\n <FocusTrap\n {...restPopoverProps}\n role={role}\n className={classNames(\n styles.in,\n noStyling ? undefined : styles.inWithStyling,\n willBeHide ? animationFadeClassNames.out : animationFadeClassNames.in,\n transformOriginClassNames[resolvedPlacement],\n className,\n )}\n mount={!hidden}\n disabled={hidden}\n autoFocus={disableInteractive ? false : autoFocus}\n restoreFocus={restoreFocus ? () => onRestoreFocus(restoreFocus) : false}\n onClose={onEscapeKeyDown}\n >\n {arrow}\n {typeof content === 'function' ? content({ onClose }) : content}\n </FocusTrap>\n </div>\n </AppRootPortal>\n );\n }\n\n return (\n <React.Fragment>\n {child}\n {popover}\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","usePatchChildren","injectAriaExpandedPropByRole","animationFadeClassNames","transformOriginClassNames","useFloatingMiddlewaresBootstrap","useFloatingWithInteractions","usePlacementChangeCallback","AppRootPortal","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","DefaultIcon","FloatingArrow","FocusTrap","Popover","arrow","withArrow","arrowHeight","arrowPadding","placement","expectedPlacement","onPlacementChange","disableFlipMiddleware","trigger","content","hoverDelay","closeAfterClick","offsetByMainAxis","offsetByCrossAxis","sameWidth","hideWhenReferenceHidden","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","keepMounted","customMiddlewares","defaultShown","shown","shownProp","onShownChange","onShownChanged","usePortal","arrowProps","ArrowIcon","autoFocus","restoreFocus","className","children","noStyling","zIndex","role","restPopoverProps","arrowRef","setArrowRef","useState","middlewares","strictPlacement","resolvedPlacement","willBeHide","refs","referenceProps","floatingProps","middlewareData","onClose","onRestoreFocus","onEscapeKeyDown","child","setReference","popover","hidden","arrowCoords","iconClassName","undefined","coords","getRootRef","Icon","div","ref","setFloating","style","out","in","mount","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport {\n type FloatingComponentProps,\n type FloatingContentRenderProp,\n type OnShownChange,\n} from '../../lib/floating';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { type FloatingArrowProps as FloatingArrowPropsPrivate } from '../FloatingArrow/FloatingArrow';\nimport type { FocusTrapProps } from '../FocusTrap/FocusTrap';\nimport { usePopover } from './usePopover';\n\n/**\n * @alias\n * @public\n */\nexport type PopoverArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverOnShownChange = OnShownChange;\n\n/**\n * @alias\n * @public\n */\nexport type PopoverContentRenderProp = FloatingContentRenderProp;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'placement'\n | 'onPlacementChange'\n | 'trigger'\n | 'content'\n | 'hoverDelay'\n | 'closeAfterClick'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'defaultShown'\n | 'shown'\n | 'onShownChange'\n | 'onShownChanged'\n | 'usePortal'\n | 'sameWidth'\n | 'hideWhenReferenceHidden'\n | 'disabled'\n | 'disableInteractive'\n | 'disableCloseOnClickOutside'\n | 'disableCloseOnEscKey'\n | 'autoFocus'\n | 'restoreFocus'\n | 'children'\n | 'zIndex'\n | 'disableFlipMiddleware'\n | 'customMiddlewares'\n | 'strategy'\n>;\n\n/**\n * @public\n */\nexport interface PopoverProps\n extends Omit<AllowedFloatingComponentProps, 'autoFocus'>,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof FloatingComponentProps> {\n /**\n * Отключает у всплывающего элемента стилизацию по умолчанию.\n *\n * У `content`:\n * - _background_\n * - _border-radius_\n * - _box-shadow_\n *\n * У `arrow`:\n * - _color_\n *\n * Используется в случае, если необходимо стилизовать по своему. Для `arrow` _color_ можно\n * определить через в `arrowProps.iconClassName` или `arrowProps.iconStyle`.\n */\n noStyling?: boolean;\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: PopoverArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Используется для того, чтобы не удалять поповер из DOM дерева при скрытии.\n */\n keepMounted?: boolean;\n autoFocus?: FocusTrapProps['autoFocus'];\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({ children, ...restProps }: PopoverProps): React.ReactNode => {\n const { anchorRef, anchorProps: referenceProps, popover } = usePopover<HTMLDivElement>(restProps);\n\n const [, child] = usePatchChildren<HTMLDivElement>(children, referenceProps, anchorRef);\n\n return (\n <React.Fragment>\n {child}\n {popover}\n </React.Fragment>\n );\n};\n"],"names":["React","usePatchChildren","usePopover","Popover","children","restProps","anchorRef","anchorProps","referenceProps","popover","child","Fragment"],"mappings":"AAAA;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,QAAQ,kCAA+B;AAShE,SAASC,UAAU,QAAQ,kBAAe;AAsG1C;;CAEC,GACD,OAAO,MAAMC,UAAU;QAAC,EAAEC,QAAQ,EAA8B,WAAzBC;QAAbD;;IACxB,MAAM,EAAEE,SAAS,EAAEC,aAAaC,cAAc,EAAEC,OAAO,EAAE,GAAGP,WAA2BG;IAEvF,MAAM,GAAGK,MAAM,GAAGT,iBAAiCG,UAAUI,gBAAgBF;IAE7E,qBACE,MAACN,MAAMW,QAAQ;;YACZD;YACAD;;;AAGP,EAAE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Ref } from 'react';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { type ReferenceProps } from '../../lib/floating/useFloatingWithInteractions/types';
|
|
4
|
+
import { type PopoverProps } from './Popover';
|
|
5
|
+
export type UsePopoverProps = Omit<PopoverProps, 'children'> & {
|
|
6
|
+
[key: `data-${string}`]: string | number | boolean;
|
|
7
|
+
};
|
|
8
|
+
export type UsePopoverResult<ElementType extends HTMLElement = HTMLElement> = {
|
|
9
|
+
anchorRef: Ref<ElementType>;
|
|
10
|
+
anchorProps: ReferenceProps<ElementType>;
|
|
11
|
+
popover: React.ReactNode | null;
|
|
12
|
+
};
|
|
13
|
+
export declare const usePopover: <ElementType extends HTMLElement = HTMLElement>({ arrow: withArrow, arrowHeight, arrowPadding, placement: expectedPlacement, onPlacementChange, disableFlipMiddleware, trigger, strategy, content, hoverDelay, closeAfterClick, offsetByMainAxis, offsetByCrossAxis, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted, customMiddlewares, defaultShown, shown: shownProp, onShownChange, onShownChanged, usePortal, arrowProps, ArrowIcon, autoFocus, restoreFocus, className, noStyling, zIndex, role, ...restPopoverProps }: UsePopoverProps) => UsePopoverResult<ElementType>;
|
|
14
|
+
//# sourceMappingURL=usePopover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePopover.d.ts","sourceRoot":"","sources":["../../../src/components/Popover/usePopover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sDAAsD,CAAC;AAS3F,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAG9C,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG;IAC7D,CAAC,GAAG,EAAE,QAAQ,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,WAAW,SAAS,WAAW,GAAG,WAAW,IAAI;IAC5E,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5B,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,WAAW,SAAS,WAAW,8iBA8CvD,eAAe,KAAG,gBAAgB,CAAC,WAAW,CAwGhD,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
2
|
+
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
3
|
+
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import { classNames } from "@vkontakte/vkjs";
|
|
7
|
+
import { injectAriaExpandedPropByRole } from "../../lib/accessibility.js";
|
|
8
|
+
import { animationFadeClassNames, transformOriginClassNames } from "../../lib/animation/index.js";
|
|
9
|
+
import { useFloatingMiddlewaresBootstrap, useFloatingWithInteractions, usePlacementChangeCallback } from "../../lib/floating/index.js";
|
|
10
|
+
import { AppRootPortal } from "../AppRoot/AppRootPortal.js";
|
|
11
|
+
import { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING, DefaultIcon } from "../FloatingArrow/DefaultIcon.js";
|
|
12
|
+
import { FloatingArrow } from "../FloatingArrow/FloatingArrow.js";
|
|
13
|
+
import { FocusTrap } from "../FocusTrap/FocusTrap.js";
|
|
14
|
+
export const usePopover = (_param)=>{
|
|
15
|
+
var { // UsePopoverProps
|
|
16
|
+
arrow: withArrow, arrowHeight = DEFAULT_ARROW_HEIGHT, arrowPadding = DEFAULT_ARROW_PADDING, placement: expectedPlacement = 'bottom-start', onPlacementChange, disableFlipMiddleware = false, trigger = 'click', strategy, content, hoverDelay = 150, closeAfterClick, offsetByMainAxis = 8, offsetByCrossAxis = 0, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted = false, customMiddlewares, // uncontrolled
|
|
17
|
+
defaultShown = false, // controlled
|
|
18
|
+
shown: shownProp, onShownChange, onShownChanged, // Для AppRootPortal
|
|
19
|
+
usePortal = true, // Для FloatingArrow
|
|
20
|
+
arrowProps, ArrowIcon = DefaultIcon, // FocusTrapProps
|
|
21
|
+
autoFocus = true, restoreFocus = true, className, noStyling = false, zIndex = 'var(--vkui--z_index_popout)', // a11y
|
|
22
|
+
role = 'dialog' } = _param, restPopoverProps = _object_without_properties(_param, [
|
|
23
|
+
"arrow",
|
|
24
|
+
"arrowHeight",
|
|
25
|
+
"arrowPadding",
|
|
26
|
+
"placement",
|
|
27
|
+
"onPlacementChange",
|
|
28
|
+
"disableFlipMiddleware",
|
|
29
|
+
"trigger",
|
|
30
|
+
"strategy",
|
|
31
|
+
"content",
|
|
32
|
+
"hoverDelay",
|
|
33
|
+
"closeAfterClick",
|
|
34
|
+
"offsetByMainAxis",
|
|
35
|
+
"offsetByCrossAxis",
|
|
36
|
+
"sameWidth",
|
|
37
|
+
"hideWhenReferenceHidden",
|
|
38
|
+
"disabled",
|
|
39
|
+
"disableInteractive",
|
|
40
|
+
"disableCloseOnClickOutside",
|
|
41
|
+
"disableCloseOnEscKey",
|
|
42
|
+
"keepMounted",
|
|
43
|
+
"customMiddlewares",
|
|
44
|
+
"defaultShown",
|
|
45
|
+
"shown",
|
|
46
|
+
"onShownChange",
|
|
47
|
+
"onShownChanged",
|
|
48
|
+
"usePortal",
|
|
49
|
+
"arrowProps",
|
|
50
|
+
"ArrowIcon",
|
|
51
|
+
"autoFocus",
|
|
52
|
+
"restoreFocus",
|
|
53
|
+
"className",
|
|
54
|
+
"noStyling",
|
|
55
|
+
"zIndex",
|
|
56
|
+
"role"
|
|
57
|
+
]);
|
|
58
|
+
const [arrowRef, setArrowRef] = React.useState(null);
|
|
59
|
+
const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({
|
|
60
|
+
arrow: withArrow,
|
|
61
|
+
arrowRef,
|
|
62
|
+
arrowHeight,
|
|
63
|
+
arrowPadding,
|
|
64
|
+
placement: expectedPlacement,
|
|
65
|
+
offsetByMainAxis,
|
|
66
|
+
offsetByCrossAxis,
|
|
67
|
+
sameWidth,
|
|
68
|
+
hideWhenReferenceHidden,
|
|
69
|
+
disableFlipMiddleware,
|
|
70
|
+
customMiddlewares
|
|
71
|
+
});
|
|
72
|
+
const { placement: resolvedPlacement, shown, willBeHide, refs, referenceProps, floatingProps, middlewareData, onClose, onRestoreFocus, onEscapeKeyDown } = useFloatingWithInteractions({
|
|
73
|
+
middlewares,
|
|
74
|
+
placement: strictPlacement,
|
|
75
|
+
trigger,
|
|
76
|
+
strategy,
|
|
77
|
+
hoverDelay,
|
|
78
|
+
closeAfterClick,
|
|
79
|
+
disabled,
|
|
80
|
+
disableInteractive,
|
|
81
|
+
disableCloseOnClickOutside,
|
|
82
|
+
disableCloseOnEscKey,
|
|
83
|
+
defaultShown,
|
|
84
|
+
shown: shownProp,
|
|
85
|
+
onShownChange,
|
|
86
|
+
onShownChanged
|
|
87
|
+
});
|
|
88
|
+
usePlacementChangeCallback(expectedPlacement, resolvedPlacement, onPlacementChange);
|
|
89
|
+
let popover = null;
|
|
90
|
+
if (shown || keepMounted) {
|
|
91
|
+
const hidden = keepMounted && !shown;
|
|
92
|
+
let arrow = null;
|
|
93
|
+
if (withArrow) {
|
|
94
|
+
const { arrow: arrowCoords } = middlewareData;
|
|
95
|
+
arrow = /*#__PURE__*/ _jsx(FloatingArrow, _object_spread_props(_object_spread({
|
|
96
|
+
iconClassName: noStyling ? undefined : "vkuiPopover__arrow"
|
|
97
|
+
}, arrowProps), {
|
|
98
|
+
coords: arrowCoords,
|
|
99
|
+
placement: resolvedPlacement,
|
|
100
|
+
getRootRef: setArrowRef,
|
|
101
|
+
Icon: ArrowIcon
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
popover = /*#__PURE__*/ _jsx(AppRootPortal, {
|
|
105
|
+
usePortal: usePortal,
|
|
106
|
+
children: /*#__PURE__*/ _jsx("div", _object_spread_props(_object_spread({
|
|
107
|
+
ref: refs.setFloating,
|
|
108
|
+
className: classNames("vkuiPopover__host", hidden && "vkuiPopover__hidden")
|
|
109
|
+
}, floatingProps), {
|
|
110
|
+
style: _object_spread({
|
|
111
|
+
zIndex: !hidden ? zIndex : undefined
|
|
112
|
+
}, floatingProps.style),
|
|
113
|
+
children: /*#__PURE__*/ _jsxs(FocusTrap, _object_spread_props(_object_spread({}, restPopoverProps), {
|
|
114
|
+
role: role,
|
|
115
|
+
className: classNames("vkuiPopover__in", noStyling ? undefined : "vkuiPopover__inWithStyling", willBeHide ? animationFadeClassNames.out : animationFadeClassNames.in, transformOriginClassNames[resolvedPlacement], className),
|
|
116
|
+
mount: !hidden,
|
|
117
|
+
disabled: hidden,
|
|
118
|
+
autoFocus: disableInteractive ? false : autoFocus,
|
|
119
|
+
restoreFocus: restoreFocus ? ()=>onRestoreFocus(restoreFocus) : false,
|
|
120
|
+
onClose: onEscapeKeyDown,
|
|
121
|
+
children: [
|
|
122
|
+
arrow,
|
|
123
|
+
typeof content === 'function' ? content({
|
|
124
|
+
onClose
|
|
125
|
+
}) : content
|
|
126
|
+
]
|
|
127
|
+
}))
|
|
128
|
+
}))
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
anchorRef: refs.setReference,
|
|
133
|
+
anchorProps: injectAriaExpandedPropByRole(referenceProps, shown, role),
|
|
134
|
+
popover
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
//# sourceMappingURL=usePopover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Popover/usePopover.tsx"],"sourcesContent":["import { type Ref } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { injectAriaExpandedPropByRole } from '../../lib/accessibility';\nimport { animationFadeClassNames, transformOriginClassNames } from '../../lib/animation';\nimport {\n useFloatingMiddlewaresBootstrap,\n useFloatingWithInteractions,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport { type ReferenceProps } from '../../lib/floating/useFloatingWithInteractions/types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport { FloatingArrow } from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { type PopoverProps } from './Popover';\nimport styles from './Popover.module.css';\n\nexport type UsePopoverProps = Omit<PopoverProps, 'children'> & {\n [key: `data-${string}`]: string | number | boolean;\n};\n\nexport type UsePopoverResult<ElementType extends HTMLElement = HTMLElement> = {\n anchorRef: Ref<ElementType>;\n anchorProps: ReferenceProps<ElementType>;\n popover: React.ReactNode | null;\n};\n\nexport const usePopover = <ElementType extends HTMLElement = HTMLElement>({\n // UsePopoverProps\n arrow: withArrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n placement: expectedPlacement = 'bottom-start',\n onPlacementChange,\n disableFlipMiddleware = false,\n trigger = 'click',\n strategy,\n content,\n hoverDelay = 150,\n closeAfterClick,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n sameWidth,\n hideWhenReferenceHidden,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n keepMounted = false,\n customMiddlewares,\n // uncontrolled\n defaultShown = false,\n // controlled\n shown: shownProp,\n onShownChange,\n onShownChanged,\n\n // Для AppRootPortal\n usePortal = true,\n\n // Для FloatingArrow\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // FocusTrapProps\n autoFocus = true,\n restoreFocus = true,\n className,\n noStyling = false,\n zIndex = 'var(--vkui--z_index_popout)',\n // a11y\n role = 'dialog',\n ...restPopoverProps\n}: UsePopoverProps): UsePopoverResult<ElementType> => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n arrow: withArrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n placement: expectedPlacement,\n offsetByMainAxis,\n offsetByCrossAxis,\n sameWidth,\n hideWhenReferenceHidden,\n disableFlipMiddleware,\n customMiddlewares,\n });\n const {\n placement: resolvedPlacement,\n shown,\n willBeHide,\n refs,\n referenceProps,\n floatingProps,\n middlewareData,\n onClose,\n onRestoreFocus,\n onEscapeKeyDown,\n } = useFloatingWithInteractions({\n middlewares,\n placement: strictPlacement,\n trigger,\n strategy,\n hoverDelay,\n closeAfterClick,\n disabled,\n disableInteractive,\n disableCloseOnClickOutside,\n disableCloseOnEscKey,\n defaultShown,\n shown: shownProp,\n onShownChange,\n onShownChanged,\n });\n\n usePlacementChangeCallback(expectedPlacement, resolvedPlacement, onPlacementChange);\n\n let popover: React.ReactNode = null;\n if (shown || keepMounted) {\n const hidden = keepMounted && !shown;\n\n let arrow: React.ReactElement | null = null;\n if (withArrow) {\n const { arrow: arrowCoords } = middlewareData;\n arrow = (\n <FloatingArrow\n iconClassName={noStyling ? undefined : styles.arrow}\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n );\n }\n\n popover = (\n <AppRootPortal usePortal={usePortal}>\n <div\n ref={refs.setFloating}\n className={classNames(styles.host, hidden && styles.hidden)}\n {...floatingProps}\n style={{\n zIndex: !hidden ? zIndex : undefined,\n ...floatingProps.style,\n }}\n >\n <FocusTrap\n {...restPopoverProps}\n role={role}\n className={classNames(\n styles.in,\n noStyling ? undefined : styles.inWithStyling,\n willBeHide ? animationFadeClassNames.out : animationFadeClassNames.in,\n transformOriginClassNames[resolvedPlacement],\n className,\n )}\n mount={!hidden}\n disabled={hidden}\n autoFocus={disableInteractive ? false : autoFocus}\n restoreFocus={restoreFocus ? () => onRestoreFocus(restoreFocus) : false}\n onClose={onEscapeKeyDown}\n >\n {arrow}\n {typeof content === 'function' ? content({ onClose }) : content}\n </FocusTrap>\n </div>\n </AppRootPortal>\n );\n }\n\n return {\n anchorRef: refs.setReference,\n anchorProps: injectAriaExpandedPropByRole(referenceProps, shown, role),\n popover,\n };\n};\n"],"names":["React","classNames","injectAriaExpandedPropByRole","animationFadeClassNames","transformOriginClassNames","useFloatingMiddlewaresBootstrap","useFloatingWithInteractions","usePlacementChangeCallback","AppRootPortal","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","DefaultIcon","FloatingArrow","FocusTrap","usePopover","arrow","withArrow","arrowHeight","arrowPadding","placement","expectedPlacement","onPlacementChange","disableFlipMiddleware","trigger","strategy","content","hoverDelay","closeAfterClick","offsetByMainAxis","offsetByCrossAxis","sameWidth","hideWhenReferenceHidden","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","keepMounted","customMiddlewares","defaultShown","shown","shownProp","onShownChange","onShownChanged","usePortal","arrowProps","ArrowIcon","autoFocus","restoreFocus","className","noStyling","zIndex","role","restPopoverProps","arrowRef","setArrowRef","useState","middlewares","strictPlacement","resolvedPlacement","willBeHide","refs","referenceProps","floatingProps","middlewareData","onClose","onRestoreFocus","onEscapeKeyDown","popover","hidden","arrowCoords","iconClassName","undefined","coords","getRootRef","Icon","div","ref","setFloating","style","out","in","mount","anchorRef","setReference","anchorProps"],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ export interface PopperCommonProps extends AllowedFloatingComponentProps, Omit<H
|
|
|
29
29
|
autoUpdateOnTargetResize?: boolean;
|
|
30
30
|
}
|
|
31
31
|
export interface PopperProps extends PopperCommonProps {
|
|
32
|
-
targetRef: React.RefObject<HTMLElement> | VirtualElement;
|
|
32
|
+
targetRef: React.RefObject<HTMLElement | null> | VirtualElement;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* @see https://vkcom.github.io/VKUI/#/Popper
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../../src/components/Popper/Popper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGL,KAAK,sBAAsB,EAI3B,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,UAAU,GACV,aAAa,GACb,cAAc,GACd,YAAY,GACZ,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,eAAe,GACf,cAAc,GACd,yBAAyB,GACzB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,CAC1B,CAAC;AAEF,MAAM,WAAW,iBACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,6BAA6B,CAAC;IACtF;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IACpD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../../src/components/Popper/Popper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGL,KAAK,sBAAsB,EAI3B,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,UAAU,GACV,aAAa,GACb,cAAc,GACd,YAAY,GACZ,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,eAAe,GACf,cAAc,GACd,yBAAyB,GACzB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,CAC1B,CAAC;AAEF,MAAM,WAAW,iBACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,6BAA6B,CAAC;IACtF;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IACpD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,cAAc,CAAC;CACjE;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,mUA6BhB,WAAW,KAAG,KAAK,CAAC,SAgFtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Popper/Popper.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n type VirtualElement,\n} from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport {\n FloatingArrow,\n type FloatingArrowProps as FloatingArrowPropsPrivate,\n} from '../FloatingArrow/FloatingArrow';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Popper.module.css';\n\nexport type FloatingArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowRef'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'hoverDelay'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'onShownChange'\n | 'defaultShown'\n | 'hideWhenReferenceHidden'\n | 'sameWidth'\n | 'zIndex'\n | 'usePortal'\n | 'customMiddlewares'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n>;\n\nexport interface PopperCommonProps\n extends AllowedFloatingComponentProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof AllowedFloatingComponentProps> {\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: FloatingArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Подписывается на изменение геометрии `targetRef`, чтобы пересчитать свою позицию.\n */\n autoUpdateOnTargetResize?: boolean;\n}\n\nexport interface PopperProps extends PopperCommonProps {\n targetRef: React.RefObject<HTMLElement> | VirtualElement;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popper\n */\nexport const Popper = ({\n // UseFloatingMiddlewaresBootstrapProps\n placement: placementProp = 'bottom-start',\n sameWidth,\n hideWhenReferenceHidden,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n arrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n customMiddlewares,\n disableFlipMiddleware = false,\n\n // UseFloatingProps\n autoUpdateOnTargetResize = false,\n\n // ArrowProps\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // rest\n targetRef,\n getRootRef,\n children,\n usePortal = true,\n onPlacementChange,\n zIndex,\n style,\n ...restProps\n}: PopperProps): React.ReactNode => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n\n const { strictPlacement, middlewares } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n sameWidth,\n arrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n offsetByMainAxis,\n offsetByCrossAxis,\n hideWhenReferenceHidden,\n customMiddlewares,\n disableFlipMiddleware,\n });\n\n const {\n x: floatingDataX,\n y: floatingDataY,\n strategy: floatingPositionStrategy,\n placement: resolvedPlacement,\n refs,\n middlewareData,\n } = useFloating({\n placement: strictPlacement,\n middleware: middlewares,\n whileElementsMounted(...args) {\n /* istanbul ignore next: не знаю как проверить */\n return autoUpdateFloatingElement(...args, {\n elementResize: autoUpdateOnTargetResize,\n });\n },\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n const { arrow: arrowCoords } = middlewareData;\n\n const handleRootRef = useExternRef<HTMLDivElement>(refs.setFloating, getRootRef);\n\n useIsomorphicLayoutEffect(() => {\n refs.setReference('current' in targetRef ? targetRef.current : targetRef);\n }, [refs.setReference, targetRef]);\n\n const dropdownStyle =\n typeof zIndex !== 'undefined'\n ? {\n zIndex,\n }\n : undefined;\n\n const dropdown = (\n <RootComponent\n {...restProps}\n style={mergeStyle(dropdownStyle, style)}\n baseClassName={styles.host}\n getRootRef={handleRootRef}\n baseStyle={convertFloatingDataToReactCSSProperties(\n floatingPositionStrategy,\n floatingDataX,\n floatingDataY,\n sameWidth ? null : undefined,\n middlewareData,\n )}\n >\n {arrow && (\n <FloatingArrow\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n )}\n {children}\n </RootComponent>\n );\n\n return <AppRootPortal usePortal={usePortal}>{dropdown}</AppRootPortal>;\n};\n"],"names":["React","mergeStyle","useExternRef","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","useIsomorphicLayoutEffect","AppRootPortal","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","DefaultIcon","FloatingArrow","RootComponent","Popper","placement","placementProp","sameWidth","hideWhenReferenceHidden","offsetByMainAxis","offsetByCrossAxis","arrow","arrowHeight","arrowPadding","customMiddlewares","disableFlipMiddleware","autoUpdateOnTargetResize","arrowProps","ArrowIcon","targetRef","getRootRef","children","usePortal","onPlacementChange","zIndex","style","restProps","arrowRef","setArrowRef","useState","strictPlacement","middlewares","x","floatingDataX","y","floatingDataY","strategy","floatingPositionStrategy","resolvedPlacement","refs","middlewareData","middleware","whileElementsMounted","args","elementResize","arrowCoords","handleRootRef","setFloating","setReference","current","dropdownStyle","undefined","dropdown","baseClassName","baseStyle","coords","Icon"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,8BAA2B;AACtD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SACEC,yBAAyB,EACzBC,uCAAuC,EAEvCC,WAAW,EACXC,+BAA+B,EAC/BC,0BAA0B,QAErB,8BAAqB;AAC5B,SAASC,yBAAyB,QAAQ,yCAAsC;AAEhF,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SACEC,oBAAoB,EACpBC,qBAAqB,EACrBC,WAAW,QACN,kCAA+B;AACtC,SACEC,aAAa,QAER,oCAAiC;AACxC,SAASC,aAAa,QAAQ,oCAAiC;AA6D/D;;CAEC,GACD,OAAO,MAAMC,SAAS;QAAC,EACrB,uCAAuC;IACvCC,WAAWC,gBAAgB,cAAc,EACzCC,SAAS,EACTC,uBAAuB,EACvBC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,KAAK,EACLC,cAAcb,oBAAoB,EAClCc,eAAeb,qBAAqB,EACpCc,iBAAiB,EACjBC,wBAAwB,KAAK,EAE7B,mBAAmB;IACnBC,2BAA2B,KAAK,EAEhC,aAAa;IACbC,UAAU,EACVC,YAAYjB,WAAW,EAEvB,OAAO;IACPkB,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,YAAY,IAAI,EAChBC,iBAAiB,EACjBC,MAAM,EACNC,KAAK,EAEO,WADTC;QA1BHrB;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAGAC;QAGAC;QACAC;QAGAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,CAACE,UAAUC,YAAY,GAAGvC,MAAMwC,QAAQ,CAAwB;IAEtE,MAAM,EAAEC,eAAe,EAAEC,WAAW,EAAE,GAAGpC,gCAAgC;QACvEU,WAAWC;QACXC;QACAI;QACAgB;QACAf;QACAC;QACAJ;QACAC;QACAF;QACAM;QACAC;IACF;IAEA,MAAM,EACJiB,GAAGC,aAAa,EAChBC,GAAGC,aAAa,EAChBC,UAAUC,wBAAwB,EAClChC,WAAWiC,iBAAiB,EAC5BC,IAAI,EACJC,cAAc,EACf,GAAG9C,YAAY;QACdW,WAAWyB;QACXW,YAAYV;QACZW,sBAAqB,GAAGC,IAAI;YAC1B,+CAA+C,GAC/C,OAAOnD,6BAA6BmD,MAAM;gBACxCC,eAAe5B;YACjB;QACF;IACF;IAEApB,2BAA2BU,eAAegC,mBAAmBf;IAE7D,MAAM,EAAEZ,OAAOkC,WAAW,EAAE,GAAGL;IAE/B,MAAMM,gBAAgBvD,aAA6BgD,KAAKQ,WAAW,EAAE3B;IAErEvB,0BAA0B;QACxB0C,KAAKS,YAAY,CAAC,aAAa7B,YAAYA,UAAU8B,OAAO,GAAG9B;IACjE,GAAG;QAACoB,KAAKS,YAAY;QAAE7B;KAAU;IAEjC,MAAM+B,gBACJ,OAAO1B,WAAW,cACd;QACEA;IACF,IACA2B;IAEN,MAAMC,yBACJ,MAACjD,uDACKuB;QACJD,OAAOnC,WAAW4D,eAAezB;QACjC4B,aAAa;QACbjC,YAAY0B;QACZQ,WAAW7D,wCACT4C,0BACAJ,eACAE,eACA5B,YAAY,OAAO4C,WACnBX;;YAGD7B,uBACC,KAACT,uDACKe;gBACJsC,QAAQV;gBACRxC,WAAWiC;gBACXlB,YAAYQ;gBACZ4B,MAAMtC;;YAGTG;;;IAIL,qBAAO,KAACvB;QAAcwB,WAAWA;kBAAY8B;;AAC/C,EAAE"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Popper/Popper.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n type VirtualElement,\n} from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport {\n FloatingArrow,\n type FloatingArrowProps as FloatingArrowPropsPrivate,\n} from '../FloatingArrow/FloatingArrow';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Popper.module.css';\n\nexport type FloatingArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowRef'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'hoverDelay'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'onShownChange'\n | 'defaultShown'\n | 'hideWhenReferenceHidden'\n | 'sameWidth'\n | 'zIndex'\n | 'usePortal'\n | 'customMiddlewares'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n>;\n\nexport interface PopperCommonProps\n extends AllowedFloatingComponentProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof AllowedFloatingComponentProps> {\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: FloatingArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Подписывается на изменение геометрии `targetRef`, чтобы пересчитать свою позицию.\n */\n autoUpdateOnTargetResize?: boolean;\n}\n\nexport interface PopperProps extends PopperCommonProps {\n targetRef: React.RefObject<HTMLElement | null> | VirtualElement;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popper\n */\nexport const Popper = ({\n // UseFloatingMiddlewaresBootstrapProps\n placement: placementProp = 'bottom-start',\n sameWidth,\n hideWhenReferenceHidden,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n arrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n customMiddlewares,\n disableFlipMiddleware = false,\n\n // UseFloatingProps\n autoUpdateOnTargetResize = false,\n\n // ArrowProps\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // rest\n targetRef,\n getRootRef,\n children,\n usePortal = true,\n onPlacementChange,\n zIndex,\n style,\n ...restProps\n}: PopperProps): React.ReactNode => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n\n const { strictPlacement, middlewares } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n sameWidth,\n arrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n offsetByMainAxis,\n offsetByCrossAxis,\n hideWhenReferenceHidden,\n customMiddlewares,\n disableFlipMiddleware,\n });\n\n const {\n x: floatingDataX,\n y: floatingDataY,\n strategy: floatingPositionStrategy,\n placement: resolvedPlacement,\n refs,\n middlewareData,\n } = useFloating({\n placement: strictPlacement,\n middleware: middlewares,\n whileElementsMounted(...args) {\n /* istanbul ignore next: не знаю как проверить */\n return autoUpdateFloatingElement(...args, {\n elementResize: autoUpdateOnTargetResize,\n });\n },\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n const { arrow: arrowCoords } = middlewareData;\n\n const handleRootRef = useExternRef<HTMLDivElement>(refs.setFloating, getRootRef);\n\n useIsomorphicLayoutEffect(() => {\n refs.setReference('current' in targetRef ? targetRef.current : targetRef);\n }, [refs.setReference, targetRef]);\n\n const dropdownStyle =\n typeof zIndex !== 'undefined'\n ? {\n zIndex,\n }\n : undefined;\n\n const dropdown = (\n <RootComponent\n {...restProps}\n style={mergeStyle(dropdownStyle, style)}\n baseClassName={styles.host}\n getRootRef={handleRootRef}\n baseStyle={convertFloatingDataToReactCSSProperties(\n floatingPositionStrategy,\n floatingDataX,\n floatingDataY,\n sameWidth ? null : undefined,\n middlewareData,\n )}\n >\n {arrow && (\n <FloatingArrow\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n )}\n {children}\n </RootComponent>\n );\n\n return <AppRootPortal usePortal={usePortal}>{dropdown}</AppRootPortal>;\n};\n"],"names":["React","mergeStyle","useExternRef","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","useIsomorphicLayoutEffect","AppRootPortal","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","DefaultIcon","FloatingArrow","RootComponent","Popper","placement","placementProp","sameWidth","hideWhenReferenceHidden","offsetByMainAxis","offsetByCrossAxis","arrow","arrowHeight","arrowPadding","customMiddlewares","disableFlipMiddleware","autoUpdateOnTargetResize","arrowProps","ArrowIcon","targetRef","getRootRef","children","usePortal","onPlacementChange","zIndex","style","restProps","arrowRef","setArrowRef","useState","strictPlacement","middlewares","x","floatingDataX","y","floatingDataY","strategy","floatingPositionStrategy","resolvedPlacement","refs","middlewareData","middleware","whileElementsMounted","args","elementResize","arrowCoords","handleRootRef","setFloating","setReference","current","dropdownStyle","undefined","dropdown","baseClassName","baseStyle","coords","Icon"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,8BAA2B;AACtD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SACEC,yBAAyB,EACzBC,uCAAuC,EAEvCC,WAAW,EACXC,+BAA+B,EAC/BC,0BAA0B,QAErB,8BAAqB;AAC5B,SAASC,yBAAyB,QAAQ,yCAAsC;AAEhF,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SACEC,oBAAoB,EACpBC,qBAAqB,EACrBC,WAAW,QACN,kCAA+B;AACtC,SACEC,aAAa,QAER,oCAAiC;AACxC,SAASC,aAAa,QAAQ,oCAAiC;AA6D/D;;CAEC,GACD,OAAO,MAAMC,SAAS;QAAC,EACrB,uCAAuC;IACvCC,WAAWC,gBAAgB,cAAc,EACzCC,SAAS,EACTC,uBAAuB,EACvBC,mBAAmB,CAAC,EACpBC,oBAAoB,CAAC,EACrBC,KAAK,EACLC,cAAcb,oBAAoB,EAClCc,eAAeb,qBAAqB,EACpCc,iBAAiB,EACjBC,wBAAwB,KAAK,EAE7B,mBAAmB;IACnBC,2BAA2B,KAAK,EAEhC,aAAa;IACbC,UAAU,EACVC,YAAYjB,WAAW,EAEvB,OAAO;IACPkB,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,YAAY,IAAI,EAChBC,iBAAiB,EACjBC,MAAM,EACNC,KAAK,EAEO,WADTC;QA1BHrB;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAGAC;QAGAC;QACAC;QAGAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,CAACE,UAAUC,YAAY,GAAGvC,MAAMwC,QAAQ,CAAwB;IAEtE,MAAM,EAAEC,eAAe,EAAEC,WAAW,EAAE,GAAGpC,gCAAgC;QACvEU,WAAWC;QACXC;QACAI;QACAgB;QACAf;QACAC;QACAJ;QACAC;QACAF;QACAM;QACAC;IACF;IAEA,MAAM,EACJiB,GAAGC,aAAa,EAChBC,GAAGC,aAAa,EAChBC,UAAUC,wBAAwB,EAClChC,WAAWiC,iBAAiB,EAC5BC,IAAI,EACJC,cAAc,EACf,GAAG9C,YAAY;QACdW,WAAWyB;QACXW,YAAYV;QACZW,sBAAqB,GAAGC,IAAI;YAC1B,+CAA+C,GAC/C,OAAOnD,6BAA6BmD,MAAM;gBACxCC,eAAe5B;YACjB;QACF;IACF;IAEApB,2BAA2BU,eAAegC,mBAAmBf;IAE7D,MAAM,EAAEZ,OAAOkC,WAAW,EAAE,GAAGL;IAE/B,MAAMM,gBAAgBvD,aAA6BgD,KAAKQ,WAAW,EAAE3B;IAErEvB,0BAA0B;QACxB0C,KAAKS,YAAY,CAAC,aAAa7B,YAAYA,UAAU8B,OAAO,GAAG9B;IACjE,GAAG;QAACoB,KAAKS,YAAY;QAAE7B;KAAU;IAEjC,MAAM+B,gBACJ,OAAO1B,WAAW,cACd;QACEA;IACF,IACA2B;IAEN,MAAMC,yBACJ,MAACjD,uDACKuB;QACJD,OAAOnC,WAAW4D,eAAezB;QACjC4B,aAAa;QACbjC,YAAY0B;QACZQ,WAAW7D,wCACT4C,0BACAJ,eACAE,eACA5B,YAAY,OAAO4C,WACnBX;;YAGD7B,uBACC,KAACT,uDACKe;gBACJsC,QAAQV;gBACRxC,WAAWiC;gBACXlB,YAAYQ;gBACZ4B,MAAMtC;;YAGTG;;;IAIL,qBAAO,KAACvB;QAAcwB,WAAWA;kBAAY8B;;AAC/C,EAAE"}
|
|
@@ -79,7 +79,7 @@ function cancelEvent(event) {
|
|
|
79
79
|
touchDown,
|
|
80
80
|
resetRefreshingState
|
|
81
81
|
]);
|
|
82
|
-
const waitFetchingTimeoutId = React.useRef();
|
|
82
|
+
const waitFetchingTimeoutId = React.useRef(undefined);
|
|
83
83
|
useIsomorphicLayoutEffect(()=>{
|
|
84
84
|
const prevIsFetching = prevIsFetchingRef.current;
|
|
85
85
|
if (prevIsFetching !== undefined && prevIsFetching && !isFetching) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/PullToRefresh/PullToRefresh.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useStateWithPrev } from '../../hooks/useStateWithPrev';\nimport { type DOMProps, initializeBrowserGesturePreventionEffect, useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { AnyFunction, HasChildren } from '../../types';\nimport { type ScrollContextInterface, useScroll } from '../AppRoot/ScrollContext';\nimport { FixedLayout } from '../FixedLayout/FixedLayout';\nimport { type CustomTouchEvent, Touch, type TouchProps } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { PullToRefreshSpinner } from './PullToRefreshSpinner';\nimport styles from './PullToRefresh.module.css';\n\nconst WAIT_FETCHING_TIMEOUT_MS = 1000;\n\nfunction cancelEvent(event: CustomTouchEvent) {\n /* istanbul ignore if: неясно в какой ситуации `event` из `Touch` может быть не определён */\n if (!event) {\n return false;\n }\n if ('preventDefault' in event.originalEvent && event.originalEvent.cancelable) {\n event.originalEvent.preventDefault();\n }\n if ('stopPropagation' in event.originalEvent) {\n event.originalEvent.stopPropagation();\n }\n return false;\n}\n\nexport interface PullToRefreshProps extends DOMProps, TouchProps, HasChildren {\n /**\n * Будет вызвана для обновления контента (прим.: функция должна быть мемоизированным коллбэком)\n */\n onRefresh: AnyFunction;\n /**\n * Определяет, выполняется ли обновление. Для скрытия спиннера после получения контента необходимо передать `false`\n */\n isFetching?: boolean;\n /** @ignore */\n scroll?: ScrollContextInterface;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PullToRefresh\n */\nexport const PullToRefresh = ({\n children,\n isFetching,\n onRefresh,\n className,\n ...restProps\n}: PullToRefreshProps): React.ReactNode => {\n const platform = usePlatform();\n const scroll = useScroll();\n const { window } = useDOM();\n\n const prevIsFetchingRef = React.useRef<boolean | undefined>(undefined);\n React.useEffect(() => {\n prevIsFetchingRef.current = isFetching;\n });\n\n const initParams = React.useMemo(\n () => ({\n start: platform === 'ios' ? -10 : -45,\n max: platform === 'ios' ? 50 : 80,\n maxY: platform === 'ios' ? 400 : 80,\n refreshing: platform === 'ios' ? 36 : 50,\n positionMultiplier: platform === 'ios' ? 0.21 : 1,\n }),\n [platform],\n );\n\n const [spinnerY, setSpinnerY] = React.useState(initParams.start);\n const [watching, setWatching] = React.useState(false);\n const [refreshing, setRefreshing] = React.useState(false);\n const [canRefresh, setCanRefresh] = React.useState(false);\n const [[touchDown, prevTouchDown], setTouchDown] = useStateWithPrev(false);\n\n const touchY = React.useRef(0);\n const [contentShift, setContentShift] = React.useState(0);\n const [spinnerProgress, setSpinnerProgress] = React.useState(0);\n\n const resetRefreshingState = React.useCallback(() => {\n setWatching(false);\n setCanRefresh(false);\n setRefreshing(false);\n setSpinnerY(initParams.start);\n setSpinnerProgress(0);\n setContentShift(0);\n }, [initParams]);\n\n const onRefreshingFinish = React.useCallback(() => {\n if (!touchDown) {\n resetRefreshingState();\n }\n }, [touchDown, resetRefreshingState]);\n\n const waitFetchingTimeoutId = React.useRef<NodeJS.Timeout>();\n\n useIsomorphicLayoutEffect(() => {\n const prevIsFetching = prevIsFetchingRef.current;\n if (prevIsFetching !== undefined && prevIsFetching && !isFetching) {\n onRefreshingFinish();\n }\n }, [isFetching, onRefreshingFinish]);\n\n useIsomorphicLayoutEffect(() => {\n const prevIsFetching = prevIsFetchingRef.current;\n if (prevIsFetching !== undefined && !prevIsFetching && isFetching) {\n clearTimeout(waitFetchingTimeoutId.current);\n }\n }, [isFetching]);\n\n const runRefreshing = React.useCallback(() => {\n if (!refreshing && onRefresh) {\n // cleanup if the consumer does not start fetching in 1s\n clearTimeout(waitFetchingTimeoutId.current);\n waitFetchingTimeoutId.current = setTimeout(onRefreshingFinish, WAIT_FETCHING_TIMEOUT_MS);\n\n setRefreshing(true);\n setSpinnerY((prevSpinnerY) => (platform === 'ios' ? prevSpinnerY : initParams.refreshing));\n\n onRefresh();\n }\n }, [refreshing, onRefresh, onRefreshingFinish, platform, initParams.refreshing]);\n\n useIsomorphicLayoutEffect(() => {\n if (prevTouchDown !== undefined && prevTouchDown && !touchDown) {\n if (!refreshing && canRefresh) {\n runRefreshing();\n } else if (refreshing && !isFetching) {\n // only iOS can start refresh before gesture end\n resetRefreshingState();\n /* istanbul ignore if: TODO написать тест */\n } else {\n // refreshing && isFetching: refresh in progress\n // OR !refreshing && !canRefresh: pull was not strong enough\n setSpinnerY(refreshing ? initParams.refreshing : initParams.start);\n setSpinnerProgress(0);\n setContentShift(0);\n }\n }\n }, [\n initParams,\n isFetching,\n onRefreshingFinish,\n prevTouchDown,\n touchDown,\n refreshing,\n canRefresh,\n runRefreshing,\n ]);\n\n useIsomorphicLayoutEffect(\n function toggleDocumentOverscrollBehavior() {\n return window && (watching || refreshing)\n ? initializeBrowserGesturePreventionEffect(window)\n : undefined;\n },\n [window, watching, refreshing],\n );\n\n const startYRef = React.useRef(0);\n\n const onTouchStart = (event: CustomTouchEvent) => {\n if (refreshing) {\n cancelEvent(event);\n return;\n }\n setTouchDown(true);\n startYRef.current = event.startY;\n };\n\n const iosRefreshStartedRef = React.useRef(false);\n const onTouchMove = (event: CustomTouchEvent) => {\n const { isY, shiftY } = event;\n const { start, max } = initParams;\n const pageYOffset = scroll?.getScroll().y;\n\n if (watching && touchDown) {\n cancelEvent(event);\n\n const { positionMultiplier, maxY } = initParams;\n\n const shift = Math.max(0, shiftY - touchY.current);\n\n const currentY = clamp(start + shift * positionMultiplier, start, maxY);\n const progress = currentY > -10 ? Math.abs((currentY + 10) / max) * 80 : 0;\n\n setSpinnerY(currentY);\n setSpinnerProgress(clamp(progress, 0, 80));\n setCanRefresh(progress > 80);\n setContentShift((currentY + 10) * 2.3);\n\n const iosCanStartRefreshDuringGesture =\n platform === 'ios' && progress > 85 && !refreshing && !iosRefreshStartedRef.current;\n if (iosCanStartRefreshDuringGesture) {\n iosRefreshStartedRef.current = true;\n runRefreshing();\n }\n } else if (isY && pageYOffset === 0 && shiftY > 0 && !refreshing && touchDown) {\n cancelEvent(event);\n\n touchY.current = shiftY;\n setWatching(true);\n setSpinnerY(start);\n setSpinnerProgress(0);\n }\n };\n\n const onTouchEnd = () => {\n setWatching(false);\n setTouchDown(false);\n iosRefreshStartedRef.current = false;\n };\n\n const spinnerTransform = `translate3d(0, ${spinnerY}px, 0)`;\n let contentTransform = '';\n\n if (platform === 'ios' && refreshing && !touchDown) {\n contentTransform = 'translate3d(0, 100px, 0)';\n } else if (platform === 'ios' && (contentShift || refreshing)) {\n contentTransform = `translate3d(0, ${contentShift}px, 0)`;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <Touch\n aria-live=\"polite\"\n aria-busy={!!isFetching}\n {...restProps}\n onStart={onTouchStart}\n onMove={onTouchMove}\n onEnd={onTouchEnd}\n className={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n watching && styles.watching,\n refreshing && styles.refreshing,\n className,\n )}\n >\n <FixedLayout className={styles.controls} useParentWidth>\n <PullToRefreshSpinner\n style={{\n transform: spinnerTransform,\n opacity: watching || refreshing || canRefresh ? 1 : 0,\n }}\n on={refreshing}\n progress={refreshing ? undefined : spinnerProgress}\n />\n </FixedLayout>\n\n <div\n className={styles.content}\n style={{\n transform: contentTransform,\n }}\n >\n {children}\n </div>\n </Touch>\n </TouchRootContext.Provider>\n );\n};\n"],"names":["React","classNames","clamp","usePlatform","useStateWithPrev","initializeBrowserGesturePreventionEffect","useDOM","useIsomorphicLayoutEffect","useScroll","FixedLayout","Touch","TouchRootContext","PullToRefreshSpinner","WAIT_FETCHING_TIMEOUT_MS","cancelEvent","event","originalEvent","cancelable","preventDefault","stopPropagation","PullToRefresh","children","isFetching","onRefresh","className","restProps","platform","scroll","window","prevIsFetchingRef","useRef","undefined","useEffect","current","initParams","useMemo","start","max","maxY","refreshing","positionMultiplier","spinnerY","setSpinnerY","useState","watching","setWatching","setRefreshing","canRefresh","setCanRefresh","touchDown","prevTouchDown","setTouchDown","touchY","contentShift","setContentShift","spinnerProgress","setSpinnerProgress","resetRefreshingState","useCallback","onRefreshingFinish","waitFetchingTimeoutId","prevIsFetching","clearTimeout","runRefreshing","setTimeout","prevSpinnerY","toggleDocumentOverscrollBehavior","startYRef","onTouchStart","startY","iosRefreshStartedRef","onTouchMove","isY","shiftY","pageYOffset","getScroll","y","shift","Math","currentY","progress","abs","iosCanStartRefreshDuringGesture","onTouchEnd","spinnerTransform","contentTransform","Provider","value","aria-live","aria-busy","onStart","onMove","onEnd","useParentWidth","style","transform","opacity","on","div"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/PullToRefresh/PullToRefresh.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useStateWithPrev } from '../../hooks/useStateWithPrev';\nimport { type DOMProps, initializeBrowserGesturePreventionEffect, useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { AnyFunction, HasChildren } from '../../types';\nimport { type ScrollContextInterface, useScroll } from '../AppRoot/ScrollContext';\nimport { FixedLayout } from '../FixedLayout/FixedLayout';\nimport { type CustomTouchEvent, Touch, type TouchProps } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { PullToRefreshSpinner } from './PullToRefreshSpinner';\nimport styles from './PullToRefresh.module.css';\n\nconst WAIT_FETCHING_TIMEOUT_MS = 1000;\n\nfunction cancelEvent(event: CustomTouchEvent) {\n /* istanbul ignore if: неясно в какой ситуации `event` из `Touch` может быть не определён */\n if (!event) {\n return false;\n }\n if ('preventDefault' in event.originalEvent && event.originalEvent.cancelable) {\n event.originalEvent.preventDefault();\n }\n if ('stopPropagation' in event.originalEvent) {\n event.originalEvent.stopPropagation();\n }\n return false;\n}\n\nexport interface PullToRefreshProps extends DOMProps, TouchProps, HasChildren {\n /**\n * Будет вызвана для обновления контента (прим.: функция должна быть мемоизированным коллбэком)\n */\n onRefresh: AnyFunction;\n /**\n * Определяет, выполняется ли обновление. Для скрытия спиннера после получения контента необходимо передать `false`\n */\n isFetching?: boolean;\n /** @ignore */\n scroll?: ScrollContextInterface;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PullToRefresh\n */\nexport const PullToRefresh = ({\n children,\n isFetching,\n onRefresh,\n className,\n ...restProps\n}: PullToRefreshProps): React.ReactNode => {\n const platform = usePlatform();\n const scroll = useScroll();\n const { window } = useDOM();\n\n const prevIsFetchingRef = React.useRef<boolean | undefined>(undefined);\n React.useEffect(() => {\n prevIsFetchingRef.current = isFetching;\n });\n\n const initParams = React.useMemo(\n () => ({\n start: platform === 'ios' ? -10 : -45,\n max: platform === 'ios' ? 50 : 80,\n maxY: platform === 'ios' ? 400 : 80,\n refreshing: platform === 'ios' ? 36 : 50,\n positionMultiplier: platform === 'ios' ? 0.21 : 1,\n }),\n [platform],\n );\n\n const [spinnerY, setSpinnerY] = React.useState(initParams.start);\n const [watching, setWatching] = React.useState(false);\n const [refreshing, setRefreshing] = React.useState(false);\n const [canRefresh, setCanRefresh] = React.useState(false);\n const [[touchDown, prevTouchDown], setTouchDown] = useStateWithPrev(false);\n\n const touchY = React.useRef(0);\n const [contentShift, setContentShift] = React.useState(0);\n const [spinnerProgress, setSpinnerProgress] = React.useState(0);\n\n const resetRefreshingState = React.useCallback(() => {\n setWatching(false);\n setCanRefresh(false);\n setRefreshing(false);\n setSpinnerY(initParams.start);\n setSpinnerProgress(0);\n setContentShift(0);\n }, [initParams]);\n\n const onRefreshingFinish = React.useCallback(() => {\n if (!touchDown) {\n resetRefreshingState();\n }\n }, [touchDown, resetRefreshingState]);\n\n const waitFetchingTimeoutId = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useIsomorphicLayoutEffect(() => {\n const prevIsFetching = prevIsFetchingRef.current;\n if (prevIsFetching !== undefined && prevIsFetching && !isFetching) {\n onRefreshingFinish();\n }\n }, [isFetching, onRefreshingFinish]);\n\n useIsomorphicLayoutEffect(() => {\n const prevIsFetching = prevIsFetchingRef.current;\n if (prevIsFetching !== undefined && !prevIsFetching && isFetching) {\n clearTimeout(waitFetchingTimeoutId.current);\n }\n }, [isFetching]);\n\n const runRefreshing = React.useCallback(() => {\n if (!refreshing && onRefresh) {\n // cleanup if the consumer does not start fetching in 1s\n clearTimeout(waitFetchingTimeoutId.current);\n waitFetchingTimeoutId.current = setTimeout(onRefreshingFinish, WAIT_FETCHING_TIMEOUT_MS);\n\n setRefreshing(true);\n setSpinnerY((prevSpinnerY) => (platform === 'ios' ? prevSpinnerY : initParams.refreshing));\n\n onRefresh();\n }\n }, [refreshing, onRefresh, onRefreshingFinish, platform, initParams.refreshing]);\n\n useIsomorphicLayoutEffect(() => {\n if (prevTouchDown !== undefined && prevTouchDown && !touchDown) {\n if (!refreshing && canRefresh) {\n runRefreshing();\n } else if (refreshing && !isFetching) {\n // only iOS can start refresh before gesture end\n resetRefreshingState();\n /* istanbul ignore if: TODO написать тест */\n } else {\n // refreshing && isFetching: refresh in progress\n // OR !refreshing && !canRefresh: pull was not strong enough\n setSpinnerY(refreshing ? initParams.refreshing : initParams.start);\n setSpinnerProgress(0);\n setContentShift(0);\n }\n }\n }, [\n initParams,\n isFetching,\n onRefreshingFinish,\n prevTouchDown,\n touchDown,\n refreshing,\n canRefresh,\n runRefreshing,\n ]);\n\n useIsomorphicLayoutEffect(\n function toggleDocumentOverscrollBehavior() {\n return window && (watching || refreshing)\n ? initializeBrowserGesturePreventionEffect(window)\n : undefined;\n },\n [window, watching, refreshing],\n );\n\n const startYRef = React.useRef(0);\n\n const onTouchStart = (event: CustomTouchEvent) => {\n if (refreshing) {\n cancelEvent(event);\n return;\n }\n setTouchDown(true);\n startYRef.current = event.startY;\n };\n\n const iosRefreshStartedRef = React.useRef(false);\n const onTouchMove = (event: CustomTouchEvent) => {\n const { isY, shiftY } = event;\n const { start, max } = initParams;\n const pageYOffset = scroll?.getScroll().y;\n\n if (watching && touchDown) {\n cancelEvent(event);\n\n const { positionMultiplier, maxY } = initParams;\n\n const shift = Math.max(0, shiftY - touchY.current);\n\n const currentY = clamp(start + shift * positionMultiplier, start, maxY);\n const progress = currentY > -10 ? Math.abs((currentY + 10) / max) * 80 : 0;\n\n setSpinnerY(currentY);\n setSpinnerProgress(clamp(progress, 0, 80));\n setCanRefresh(progress > 80);\n setContentShift((currentY + 10) * 2.3);\n\n const iosCanStartRefreshDuringGesture =\n platform === 'ios' && progress > 85 && !refreshing && !iosRefreshStartedRef.current;\n if (iosCanStartRefreshDuringGesture) {\n iosRefreshStartedRef.current = true;\n runRefreshing();\n }\n } else if (isY && pageYOffset === 0 && shiftY > 0 && !refreshing && touchDown) {\n cancelEvent(event);\n\n touchY.current = shiftY;\n setWatching(true);\n setSpinnerY(start);\n setSpinnerProgress(0);\n }\n };\n\n const onTouchEnd = () => {\n setWatching(false);\n setTouchDown(false);\n iosRefreshStartedRef.current = false;\n };\n\n const spinnerTransform = `translate3d(0, ${spinnerY}px, 0)`;\n let contentTransform = '';\n\n if (platform === 'ios' && refreshing && !touchDown) {\n contentTransform = 'translate3d(0, 100px, 0)';\n } else if (platform === 'ios' && (contentShift || refreshing)) {\n contentTransform = `translate3d(0, ${contentShift}px, 0)`;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <Touch\n aria-live=\"polite\"\n aria-busy={!!isFetching}\n {...restProps}\n onStart={onTouchStart}\n onMove={onTouchMove}\n onEnd={onTouchEnd}\n className={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n watching && styles.watching,\n refreshing && styles.refreshing,\n className,\n )}\n >\n <FixedLayout className={styles.controls} useParentWidth>\n <PullToRefreshSpinner\n style={{\n transform: spinnerTransform,\n opacity: watching || refreshing || canRefresh ? 1 : 0,\n }}\n on={refreshing}\n progress={refreshing ? undefined : spinnerProgress}\n />\n </FixedLayout>\n\n <div\n className={styles.content}\n style={{\n transform: contentTransform,\n }}\n >\n {children}\n </div>\n </Touch>\n </TouchRootContext.Provider>\n );\n};\n"],"names":["React","classNames","clamp","usePlatform","useStateWithPrev","initializeBrowserGesturePreventionEffect","useDOM","useIsomorphicLayoutEffect","useScroll","FixedLayout","Touch","TouchRootContext","PullToRefreshSpinner","WAIT_FETCHING_TIMEOUT_MS","cancelEvent","event","originalEvent","cancelable","preventDefault","stopPropagation","PullToRefresh","children","isFetching","onRefresh","className","restProps","platform","scroll","window","prevIsFetchingRef","useRef","undefined","useEffect","current","initParams","useMemo","start","max","maxY","refreshing","positionMultiplier","spinnerY","setSpinnerY","useState","watching","setWatching","setRefreshing","canRefresh","setCanRefresh","touchDown","prevTouchDown","setTouchDown","touchY","contentShift","setContentShift","spinnerProgress","setSpinnerProgress","resetRefreshingState","useCallback","onRefreshingFinish","waitFetchingTimeoutId","prevIsFetching","clearTimeout","runRefreshing","setTimeout","prevSpinnerY","toggleDocumentOverscrollBehavior","startYRef","onTouchStart","startY","iosRefreshStartedRef","onTouchMove","isY","shiftY","pageYOffset","getScroll","y","shift","Math","currentY","progress","abs","iosCanStartRefreshDuringGesture","onTouchEnd","spinnerTransform","contentTransform","Provider","value","aria-live","aria-busy","onStart","onMove","onEnd","useParentWidth","style","transform","opacity","on","div"],"mappings":"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"}
|
|
@@ -10,11 +10,11 @@ export interface RemovableProps {
|
|
|
10
10
|
*/
|
|
11
11
|
onRemove?: (e: React.MouseEvent, rootEl?: HTMLElement | null) => void;
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Передает атрибут `data-testid` для кнопки, которая активирует кнопку удаления (iOS only)
|
|
14
14
|
*/
|
|
15
15
|
toggleButtonTestId?: string;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Передает атрибут `data-testid` для кнопки удаления
|
|
18
18
|
*/
|
|
19
19
|
removeButtonTestId?: string;
|
|
20
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Removable/Removable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon24Cancel } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getTextFromChildren } from '../../lib/children';\nimport { useDOM } from '../../lib/dom';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { IconButton } from '../IconButton/IconButton';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Tappable } from '../Tappable/Tappable';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Removable.module.css';\n\nexport interface RemovableProps {\n /**\n * Текст кнопки удаления ячейки. Визуально скрыт везде, кроме iOS. На iOS появляется в выезжающей кнопке для удаления ячейки.\n */\n removePlaceholder?: React.ReactNode;\n /**\n * Коллбэк срабатывает при клике на контрол удаления.\n */\n onRemove?: (e: React.MouseEvent, rootEl?: HTMLElement | null) => void;\n /**\n * (test) iOS only. testId кнопки, которая активирует кнопку удаления\n */\n toggleButtonTestId?: string;\n /**\n * (test) testId кнопки удаления\n */\n removeButtonTestId?: string;\n /**\n * Ячейка превращается в неактивную\n */\n disabled?: boolean;\n}\n\ninterface RemovableIosOwnProps extends RemovableProps {\n removePlaceholderString?: string;\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/RemovableIos\n */\nconst RemovableIos = ({\n onRemove,\n removePlaceholder,\n removePlaceholderString,\n children: childrenProp,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n}: RemovableIosOwnProps) => {\n const { window } = useDOM();\n\n const removeButtonRef = React.useRef<HTMLElement>(null);\n const disabledRef = React.useRef(true);\n const [removeOffset, updateRemoveOffset] = React.useState(0);\n\n useGlobalEventListener(\n window,\n 'click',\n () => {\n if (removeOffset > 0) {\n updateRemoveOffset(0);\n }\n },\n { capture: true },\n );\n\n const onRemoveTransitionEnd = () => {\n if (removeOffset > 0) {\n removeButtonRef?.current?.focus();\n } else {\n disabledRef.current = true;\n }\n };\n\n const onRemoveActivateClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!removeButtonRef.current) {\n return;\n }\n const { offsetWidth } = removeButtonRef.current;\n disabledRef.current = false;\n updateRemoveOffset(offsetWidth);\n };\n\n return (\n <div\n className={classNames(styles.content, 'vkuiInternalRemovable__content')}\n style={{ transform: `translateX(-${removeOffset ?? 0}px)` }}\n onTransitionEnd={onRemoveTransitionEnd}\n >\n <IconButton\n hasActive={false}\n hasHover={false}\n className={classNames(styles.action, styles.toggle, 'vkuiInternalRemovable__action')}\n onClick={onRemoveActivateClick}\n disabled={removeOffset > 0 || disabled}\n data-testid={toggleButtonTestId}\n >\n <VisuallyHidden>{removePlaceholderString}</VisuallyHidden>\n <i className={styles.toggleIn} role=\"presentation\" />\n </IconButton>\n {typeof childrenProp === 'function'\n ? childrenProp({ isRemoving: removeOffset > 0 })\n : childrenProp}\n\n <span className={styles.offset} aria-hidden />\n\n <Tappable\n Component=\"button\"\n hasActive={false}\n hasHover={false}\n disabled={disabledRef.current}\n getRootRef={removeButtonRef}\n className={styles.remove}\n onClick={onRemove}\n data-testid={removeButtonTestId}\n >\n <span className={styles.removeIn}>{removePlaceholder}</span>\n </Tappable>\n </div>\n );\n};\n\ninterface RemovableIosRenderProps {\n /**\n * Показывает состояние Removable на платформе iOS при клике на иконку удаления.\n * Для имитации поведения на iOS при клике на иконку удаления самого удаление не происходит,\n * контент сдвигается влево и справа выезжает настоящая кнопка \"Удалить\".\n * Когда контент сдвинут `isRemoving = true`.\n */\n isRemoving: boolean;\n}\n\ninterface RemovableOwnProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'children'>,\n RemovableProps {\n /**\n * Расположение кнопки удаления.\n */\n align?: 'start' | 'center';\n /**\n * Скрывает кнопку, но оставляет отступ.\n * @since 5.4.0\n */\n indent?: boolean;\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Removable\n */\nexport const Removable = ({\n children,\n onRemove,\n removePlaceholder = 'Удалить',\n align = 'center',\n indent = false,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n ...restProps\n}: RemovableOwnProps): React.ReactNode => {\n const platform = usePlatform();\n\n const onRemoveClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onRemove?.(e);\n };\n\n const removePlaceholderString: string = getTextFromChildren(removePlaceholder);\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n platform === 'ios' && styles.ios,\n align === 'start' && styles.alignStart,\n indent && styles.indent,\n )}\n >\n {platform !== 'ios' && (\n <div className={classNames(styles.content, 'vkuiInternalRemovable__content')}>\n {typeof children === 'function' ? children({ isRemoving: false }) : children}\n\n <IconButton\n activeMode=\"opacity\"\n hoverMode=\"opacity\"\n className={classNames(styles.action, 'vkuiInternalRemovable__action')}\n onClick={onRemoveClick}\n label={removePlaceholderString}\n data-testid={removeButtonTestId}\n disabled={disabled}\n >\n <Icon24Cancel role=\"presentation\" />\n </IconButton>\n\n <span className={styles.offset} aria-hidden />\n </div>\n )}\n\n {platform === 'ios' && (\n <RemovableIos\n onRemove={onRemoveClick}\n removePlaceholder={removePlaceholder}\n removePlaceholderString={removePlaceholderString}\n toggleButtonTestId={toggleButtonTestId}\n removeButtonTestId={removeButtonTestId}\n disabled={disabled}\n >\n {children}\n </RemovableIos>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon24Cancel","classNames","useGlobalEventListener","usePlatform","getTextFromChildren","useDOM","IconButton","RootComponent","Tappable","VisuallyHidden","RemovableIos","onRemove","removePlaceholder","removePlaceholderString","children","childrenProp","toggleButtonTestId","removeButtonTestId","disabled","window","removeButtonRef","useRef","disabledRef","removeOffset","updateRemoveOffset","useState","capture","onRemoveTransitionEnd","current","focus","onRemoveActivateClick","e","stopPropagation","offsetWidth","div","className","style","transform","onTransitionEnd","hasActive","hasHover","onClick","data-testid","i","role","isRemoving","span","aria-hidden","Component","getRootRef","Removable","align","indent","restProps","platform","onRemoveClick","preventDefault","baseClassName","activeMode","hoverMode","label"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Removable/Removable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon24Cancel } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getTextFromChildren } from '../../lib/children';\nimport { useDOM } from '../../lib/dom';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { IconButton } from '../IconButton/IconButton';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Tappable } from '../Tappable/Tappable';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Removable.module.css';\n\nexport interface RemovableProps {\n /**\n * Текст кнопки удаления ячейки. Визуально скрыт везде, кроме iOS. На iOS появляется в выезжающей кнопке для удаления ячейки.\n */\n removePlaceholder?: React.ReactNode;\n /**\n * Коллбэк срабатывает при клике на контрол удаления.\n */\n onRemove?: (e: React.MouseEvent, rootEl?: HTMLElement | null) => void;\n /**\n * Передает атрибут `data-testid` для кнопки, которая активирует кнопку удаления (iOS only)\n */\n toggleButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки удаления\n */\n removeButtonTestId?: string;\n /**\n * Ячейка превращается в неактивную\n */\n disabled?: boolean;\n}\n\ninterface RemovableIosOwnProps extends RemovableProps {\n removePlaceholderString?: string;\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/RemovableIos\n */\nconst RemovableIos = ({\n onRemove,\n removePlaceholder,\n removePlaceholderString,\n children: childrenProp,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n}: RemovableIosOwnProps) => {\n const { window } = useDOM();\n\n const removeButtonRef = React.useRef<HTMLElement>(null);\n const disabledRef = React.useRef(true);\n const [removeOffset, updateRemoveOffset] = React.useState(0);\n\n useGlobalEventListener(\n window,\n 'click',\n () => {\n if (removeOffset > 0) {\n updateRemoveOffset(0);\n }\n },\n { capture: true },\n );\n\n const onRemoveTransitionEnd = () => {\n if (removeOffset > 0) {\n removeButtonRef?.current?.focus();\n } else {\n disabledRef.current = true;\n }\n };\n\n const onRemoveActivateClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!removeButtonRef.current) {\n return;\n }\n const { offsetWidth } = removeButtonRef.current;\n disabledRef.current = false;\n updateRemoveOffset(offsetWidth);\n };\n\n return (\n <div\n className={classNames(styles.content, 'vkuiInternalRemovable__content')}\n style={{ transform: `translateX(-${removeOffset ?? 0}px)` }}\n onTransitionEnd={onRemoveTransitionEnd}\n >\n <IconButton\n hasActive={false}\n hasHover={false}\n className={classNames(styles.action, styles.toggle, 'vkuiInternalRemovable__action')}\n onClick={onRemoveActivateClick}\n disabled={removeOffset > 0 || disabled}\n data-testid={toggleButtonTestId}\n >\n <VisuallyHidden>{removePlaceholderString}</VisuallyHidden>\n <i className={styles.toggleIn} role=\"presentation\" />\n </IconButton>\n {typeof childrenProp === 'function'\n ? childrenProp({ isRemoving: removeOffset > 0 })\n : childrenProp}\n\n <span className={styles.offset} aria-hidden />\n\n <Tappable\n Component=\"button\"\n hasActive={false}\n hasHover={false}\n disabled={disabledRef.current}\n getRootRef={removeButtonRef}\n className={styles.remove}\n onClick={onRemove}\n data-testid={removeButtonTestId}\n >\n <span className={styles.removeIn}>{removePlaceholder}</span>\n </Tappable>\n </div>\n );\n};\n\ninterface RemovableIosRenderProps {\n /**\n * Показывает состояние Removable на платформе iOS при клике на иконку удаления.\n * Для имитации поведения на iOS при клике на иконку удаления самого удаление не происходит,\n * контент сдвигается влево и справа выезжает настоящая кнопка \"Удалить\".\n * Когда контент сдвинут `isRemoving = true`.\n */\n isRemoving: boolean;\n}\n\ninterface RemovableOwnProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'children'>,\n RemovableProps {\n /**\n * Расположение кнопки удаления.\n */\n align?: 'start' | 'center';\n /**\n * Скрывает кнопку, но оставляет отступ.\n * @since 5.4.0\n */\n indent?: boolean;\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Removable\n */\nexport const Removable = ({\n children,\n onRemove,\n removePlaceholder = 'Удалить',\n align = 'center',\n indent = false,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n ...restProps\n}: RemovableOwnProps): React.ReactNode => {\n const platform = usePlatform();\n\n const onRemoveClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onRemove?.(e);\n };\n\n const removePlaceholderString: string = getTextFromChildren(removePlaceholder);\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n platform === 'ios' && styles.ios,\n align === 'start' && styles.alignStart,\n indent && styles.indent,\n )}\n >\n {platform !== 'ios' && (\n <div className={classNames(styles.content, 'vkuiInternalRemovable__content')}>\n {typeof children === 'function' ? children({ isRemoving: false }) : children}\n\n <IconButton\n activeMode=\"opacity\"\n hoverMode=\"opacity\"\n className={classNames(styles.action, 'vkuiInternalRemovable__action')}\n onClick={onRemoveClick}\n label={removePlaceholderString}\n data-testid={removeButtonTestId}\n disabled={disabled}\n >\n <Icon24Cancel role=\"presentation\" />\n </IconButton>\n\n <span className={styles.offset} aria-hidden />\n </div>\n )}\n\n {platform === 'ios' && (\n <RemovableIos\n onRemove={onRemoveClick}\n removePlaceholder={removePlaceholder}\n removePlaceholderString={removePlaceholderString}\n toggleButtonTestId={toggleButtonTestId}\n removeButtonTestId={removeButtonTestId}\n disabled={disabled}\n >\n {children}\n </RemovableIos>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon24Cancel","classNames","useGlobalEventListener","usePlatform","getTextFromChildren","useDOM","IconButton","RootComponent","Tappable","VisuallyHidden","RemovableIos","onRemove","removePlaceholder","removePlaceholderString","children","childrenProp","toggleButtonTestId","removeButtonTestId","disabled","window","removeButtonRef","useRef","disabledRef","removeOffset","updateRemoveOffset","useState","capture","onRemoveTransitionEnd","current","focus","onRemoveActivateClick","e","stopPropagation","offsetWidth","div","className","style","transform","onTransitionEnd","hasActive","hasHover","onClick","data-testid","i","role","isRemoving","span","aria-hidden","Component","getRootRef","Removable","align","indent","restProps","platform","onRemoveClick","preventDefault","baseClassName","activeMode","hoverMode","label"],"mappings":"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"}
|