@vkontakte/vkui 7.0.0 → 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/ActionSheet.d.ts +2 -1
- package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- 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/ModalCard/ModalCard.d.ts.map +1 -1
- package/dist/components/ModalCard/ModalCard.js +3 -2
- package/dist/components/ModalCard/ModalCard.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/NativeSelect/NativeSelect.d.ts +4 -2
- package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.js +4 -3
- package/dist/components/NativeSelect/NativeSelect.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 +2 -2
- package/dist/components/Popper/Popper.d.ts.map +1 -1
- package/dist/components/Popper/Popper.js +9 -2
- 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 +3 -3
- 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/TooltipBase/TooltipBase.d.ts.map +1 -1
- package/dist/components/TooltipBase/TooltipBase.js +2 -0
- package/dist/components/TooltipBase/TooltipBase.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/ActionSheet.js.map +1 -1
- 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/ContentCard/ContentCard.module.css +1 -0
- 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 +11 -2
- 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/ModalCard/ModalCard.js +1 -1
- package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
- package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.module.css +5 -4
- package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js +4 -3
- package/dist/cssm/components/NativeSelect/NativeSelect.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/PanelHeader/PanelHeader.module.css +5 -4
- 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 +6 -1
- 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/TooltipBase/TooltipBase.js +2 -0
- package/dist/cssm/components/TooltipBase/TooltipBase.js.map +1 -1
- package/dist/cssm/components/TooltipBase/TooltipBase.module.css +5 -0
- 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/ActionSheet.tsx +3 -4
- 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/ContentCard/ContentCard.module.css +1 -0
- 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 +11 -2
- 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/ModalCard/ModalCard.tsx +5 -1
- package/src/components/ModalCardBase/ModalCardBase.tsx +1 -1
- package/src/components/ModalPage/ModalPage.module.css +5 -4
- package/src/components/ModalRoot/ModalRootContext.tsx +3 -1
- package/src/components/NativeSelect/NativeSelect.tsx +4 -3
- package/src/components/Pagination/Pagination.tsx +23 -4
- package/src/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.tsx +4 -2
- package/src/components/PanelHeader/PanelHeader.module.css +5 -4
- package/src/components/Popover/Popover.tsx +6 -166
- package/src/components/Popover/usePopover.tsx +183 -0
- package/src/components/Popper/Popper.tsx +12 -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 +4 -1
- package/src/components/TooltipBase/TooltipBase.module.css +5 -0
- package/src/components/TooltipBase/TooltipBase.tsx +8 -2
- 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 +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":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,KAAK,QAAQ,wBAAqB;AAC3C,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,gBAAgB,QAAQ,kCAA+B;AAChE,SAAwBC,wCAAwC,EAAEC,MAAM,QAAQ,mBAAgB;AAChG,SAASC,yBAAyB,QAAQ,yCAAsC;AAEhF,SAAsCC,SAAS,QAAQ,8BAA2B;AAClF,SAASC,WAAW,QAAQ,gCAA6B;AACzD,SAAgCC,KAAK,QAAyB,oBAAiB;AAC/E,OAAOC,sBAAsB,2BAAwB;AACrD,SAASC,oBAAoB,QAAQ,4BAAyB;AAG9D,MAAMC,2BAA2B;AAEjC,SAASC,YAAYC,KAAuB;IAC1C,0FAA0F,GAC1F,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IACA,IAAI,oBAAoBA,MAAMC,aAAa,IAAID,MAAMC,aAAa,CAACC,UAAU,EAAE;QAC7EF,MAAMC,aAAa,CAACE,cAAc;IACpC;IACA,IAAI,qBAAqBH,MAAMC,aAAa,EAAE;QAC5CD,MAAMC,aAAa,CAACG,eAAe;IACrC;IACA,OAAO;AACT;AAeA;;CAEC,GACD,OAAO,MAAMC,gBAAgB;QAAC,EAC5BC,QAAQ,EACRC,UAAU,EACVC,SAAS,EACTC,SAAS,EAEU,WADhBC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAWvB;IACjB,MAAMwB,SAASnB;IACf,MAAM,EAAEoB,MAAM,EAAE,GAAGtB;IAEnB,MAAMuB,oBAAoB7B,MAAM8B,MAAM,CAAsBC;IAC5D/B,MAAMgC,SAAS,CAAC;QACdH,kBAAkBI,OAAO,GAAGX;IAC9B;IAEA,MAAMY,aAAalC,MAAMmC,OAAO,CAC9B,IAAO,CAAA;YACLC,OAAOV,aAAa,QAAQ,CAAC,KAAK,CAAC;YACnCW,KAAKX,aAAa,QAAQ,KAAK;YAC/BY,MAAMZ,aAAa,QAAQ,MAAM;YACjCa,YAAYb,aAAa,QAAQ,KAAK;YACtCc,oBAAoBd,aAAa,QAAQ,OAAO;QAClD,CAAA,GACA;QAACA;KAAS;IAGZ,MAAM,CAACe,UAAUC,YAAY,GAAG1C,MAAM2C,QAAQ,CAACT,WAAWE,KAAK;IAC/D,MAAM,CAACQ,UAAUC,YAAY,GAAG7C,MAAM2C,QAAQ,CAAC;IAC/C,MAAM,CAACJ,YAAYO,cAAc,GAAG9C,MAAM2C,QAAQ,CAAC;IACnD,MAAM,CAACI,YAAYC,cAAc,GAAGhD,MAAM2C,QAAQ,CAAC;IACnD,MAAM,CAAC,CAACM,WAAWC,cAAc,EAAEC,aAAa,GAAG/C,iBAAiB;IAEpE,MAAMgD,SAASpD,MAAM8B,MAAM,CAAC;IAC5B,MAAM,CAACuB,cAAcC,gBAAgB,GAAGtD,MAAM2C,QAAQ,CAAC;IACvD,MAAM,CAACY,iBAAiBC,mBAAmB,GAAGxD,MAAM2C,QAAQ,CAAC;IAE7D,MAAMc,uBAAuBzD,MAAM0D,WAAW,CAAC;QAC7Cb,YAAY;QACZG,cAAc;QACdF,cAAc;QACdJ,YAAYR,WAAWE,KAAK;QAC5BoB,mBAAmB;QACnBF,gBAAgB;IAClB,GAAG;QAACpB;KAAW;IAEf,MAAMyB,qBAAqB3D,MAAM0D,WAAW,CAAC;QAC3C,IAAI,CAACT,WAAW;YACdQ;QACF;IACF,GAAG;QAACR;QAAWQ;KAAqB;IAEpC,MAAMG,wBAAwB5D,MAAM8B,MAAM,CAAgCC;IAE1ExB,0BAA0B;QACxB,MAAMsD,iBAAiBhC,kBAAkBI,OAAO;QAChD,IAAI4B,mBAAmB9B,aAAa8B,kBAAkB,CAACvC,YAAY;YACjEqC;QACF;IACF,GAAG;QAACrC;QAAYqC;KAAmB;IAEnCpD,0BAA0B;QACxB,MAAMsD,iBAAiBhC,kBAAkBI,OAAO;QAChD,IAAI4B,mBAAmB9B,aAAa,CAAC8B,kBAAkBvC,YAAY;YACjEwC,aAAaF,sBAAsB3B,OAAO;QAC5C;IACF,GAAG;QAACX;KAAW;IAEf,MAAMyC,gBAAgB/D,MAAM0D,WAAW,CAAC;QACtC,IAAI,CAACnB,cAAchB,WAAW;YAC5B,wDAAwD;YACxDuC,aAAaF,sBAAsB3B,OAAO;YAC1C2B,sBAAsB3B,OAAO,GAAG+B,WAAWL,oBAAoB9C;YAE/DiC,cAAc;YACdJ,YAAY,CAACuB,eAAkBvC,aAAa,QAAQuC,eAAe/B,WAAWK,UAAU;YAExFhB;QACF;IACF,GAAG;QAACgB;QAAYhB;QAAWoC;QAAoBjC;QAAUQ,WAAWK,UAAU;KAAC;IAE/EhC,0BAA0B;QACxB,IAAI2C,kBAAkBnB,aAAamB,iBAAiB,CAACD,WAAW;YAC9D,IAAI,CAACV,cAAcQ,YAAY;gBAC7BgB;YACF,OAAO,IAAIxB,cAAc,CAACjB,YAAY;gBACpC,gDAAgD;gBAChDmC;YACA,0CAA0C,GAC5C,OAAO;gBACL,gDAAgD;gBAChD,4DAA4D;gBAC5Df,YAAYH,aAAaL,WAAWK,UAAU,GAAGL,WAAWE,KAAK;gBACjEoB,mBAAmB;gBACnBF,gBAAgB;YAClB;QACF;IACF,GAAG;QACDpB;QACAZ;QACAqC;QACAT;QACAD;QACAV;QACAQ;QACAgB;KACD;IAEDxD,0BACE,SAAS2D;QACP,OAAOtC,UAAWgB,CAAAA,YAAYL,UAAS,IACnClC,yCAAyCuB,UACzCG;IACN,GACA;QAACH;QAAQgB;QAAUL;KAAW;IAGhC,MAAM4B,YAAYnE,MAAM8B,MAAM,CAAC;IAE/B,MAAMsC,eAAe,CAACrD;QACpB,IAAIwB,YAAY;YACdzB,YAAYC;YACZ;QACF;QACAoC,aAAa;QACbgB,UAAUlC,OAAO,GAAGlB,MAAMsD,MAAM;IAClC;IAEA,MAAMC,uBAAuBtE,MAAM8B,MAAM,CAAC;IAC1C,MAAMyC,cAAc,CAACxD;QACnB,MAAM,EAAEyD,GAAG,EAAEC,MAAM,EAAE,GAAG1D;QACxB,MAAM,EAAEqB,KAAK,EAAEC,GAAG,EAAE,GAAGH;QACvB,MAAMwC,cAAc/C,mBAAAA,6BAAAA,OAAQgD,SAAS,GAAGC,CAAC;QAEzC,IAAIhC,YAAYK,WAAW;YACzBnC,YAAYC;YAEZ,MAAM,EAAEyB,kBAAkB,EAAEF,IAAI,EAAE,GAAGJ;YAErC,MAAM2C,QAAQC,KAAKzC,GAAG,CAAC,GAAGoC,SAASrB,OAAOnB,OAAO;YAEjD,MAAM8C,WAAW7E,MAAMkC,QAAQyC,QAAQrC,oBAAoBJ,OAAOE;YAClE,MAAM0C,WAAWD,WAAW,CAAC,KAAKD,KAAKG,GAAG,CAAC,AAACF,CAAAA,WAAW,EAAC,IAAK1C,OAAO,KAAK;YAEzEK,YAAYqC;YACZvB,mBAAmBtD,MAAM8E,UAAU,GAAG;YACtChC,cAAcgC,WAAW;YACzB1B,gBAAgB,AAACyB,CAAAA,WAAW,EAAC,IAAK;YAElC,MAAMG,kCACJxD,aAAa,SAASsD,WAAW,MAAM,CAACzC,cAAc,CAAC+B,qBAAqBrC,OAAO;YACrF,IAAIiD,iCAAiC;gBACnCZ,qBAAqBrC,OAAO,GAAG;gBAC/B8B;YACF;QACF,OAAO,IAAIS,OAAOE,gBAAgB,KAAKD,SAAS,KAAK,CAAClC,cAAcU,WAAW;YAC7EnC,YAAYC;YAEZqC,OAAOnB,OAAO,GAAGwC;YACjB5B,YAAY;YACZH,YAAYN;YACZoB,mBAAmB;QACrB;IACF;IAEA,MAAM2B,aAAa;QACjBtC,YAAY;QACZM,aAAa;QACbmB,qBAAqBrC,OAAO,GAAG;IACjC;IAEA,MAAMmD,mBAAmB,CAAC,eAAe,EAAE3C,SAAS,MAAM,CAAC;IAC3D,IAAI4C,mBAAmB;IAEvB,IAAI3D,aAAa,SAASa,cAAc,CAACU,WAAW;QAClDoC,mBAAmB;IACrB,OAAO,IAAI3D,aAAa,SAAU2B,CAAAA,gBAAgBd,UAAS,GAAI;QAC7D8C,mBAAmB,CAAC,eAAe,EAAEhC,aAAa,MAAM,CAAC;IAC3D;IAEA,qBACE,KAAC1C,iBAAiB2E,QAAQ;QAACC,OAAO;kBAChC,cAAA,MAAC7E;YACC8E,aAAU;YACVC,aAAW,CAAC,CAACnE;WACTG;YACJiE,SAAStB;YACTuB,QAAQpB;YACRqB,OAAOT;YACP3D,WAAWvB,sCAETyB,aAAa,mCACbkB,2CACAL,+CACAf;;8BAGF,KAACf;oBAAYe,SAAS;oBAAmBqE,cAAc;8BACrD,cAAA,KAACjF;wBACCkF,OAAO;4BACLC,WAAWX;4BACXY,SAASpD,YAAYL,cAAcQ,aAAa,IAAI;wBACtD;wBACAkD,IAAI1D;wBACJyC,UAAUzC,aAAaR,YAAYwB;;;8BAIvC,KAAC2C;oBACC1E,SAAS;oBACTsE,OAAO;wBACLC,WAAWV;oBACb;8BAEChE;;;;;AAKX,EAAE"}
|
|
@@ -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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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { type TappableProps } from '../Tappable/Tappable';
|
|
3
3
|
import { RichCellIcon } from './RichCellIcon/RichCellIcon';
|
|
4
|
+
type Align = 'start' | 'center' | 'end';
|
|
4
5
|
export interface RichCellProps extends TappableProps {
|
|
5
6
|
/**
|
|
6
7
|
* Контейнер для текста над `children`.
|
|
@@ -41,10 +42,18 @@ export interface RichCellProps extends TappableProps {
|
|
|
41
42
|
* Текст под `after`.
|
|
42
43
|
*/
|
|
43
44
|
afterCaption?: React.ReactNode;
|
|
45
|
+
/**
|
|
46
|
+
* Выравнивание before компонента по вертикали
|
|
47
|
+
*/
|
|
48
|
+
beforeAlign?: Align;
|
|
49
|
+
/**
|
|
50
|
+
* Выравнивание центрального контента по вертикали
|
|
51
|
+
*/
|
|
52
|
+
contentAlign?: Align;
|
|
44
53
|
/**
|
|
45
54
|
* Выравнивание after компонента по вертикали
|
|
46
55
|
*/
|
|
47
|
-
afterAlign?:
|
|
56
|
+
afterAlign?: Align;
|
|
48
57
|
/**
|
|
49
58
|
* Убирает анимацию нажатия.
|
|
50
59
|
*/
|
|
@@ -60,4 +69,5 @@ export interface RichCellProps extends TappableProps {
|
|
|
60
69
|
export declare const RichCell: React.FC<RichCellProps> & {
|
|
61
70
|
Icon: typeof RichCellIcon;
|
|
62
71
|
};
|
|
72
|
+
export {};
|
|
63
73
|
//# sourceMappingURL=RichCell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichCell.d.ts","sourceRoot":"","sources":["../../../src/components/RichCell/RichCell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"RichCell.d.ts","sourceRoot":"","sources":["../../../src/components/RichCell/RichCell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAoB3D,KAAK,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExC,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG;IAC/C,IAAI,EAAE,OAAO,YAAY,CAAC;CAqE3B,CAAC"}
|
|
@@ -13,15 +13,20 @@ const sizeYClassNames = {
|
|
|
13
13
|
none: "vkuiRichCell__sizeYNone",
|
|
14
14
|
compact: "vkuiRichCell__sizeYCompact"
|
|
15
15
|
};
|
|
16
|
-
const
|
|
17
|
-
start: "
|
|
18
|
-
center: "
|
|
19
|
-
end: "
|
|
16
|
+
const alignSelfClassNames = {
|
|
17
|
+
start: "vkuiRichCell__alignSelfStart",
|
|
18
|
+
center: "vkuiRichCell__alignSelfCenter",
|
|
19
|
+
end: "vkuiRichCell__alignSelfEnd"
|
|
20
|
+
};
|
|
21
|
+
const alignContentClassNames = {
|
|
22
|
+
start: "vkuiRichCell__contentAlignStart",
|
|
23
|
+
center: "vkuiRichCell__contentAlignCenter",
|
|
24
|
+
end: "vkuiRichCell__contentAlignEnd"
|
|
20
25
|
};
|
|
21
26
|
/**
|
|
22
27
|
* @see https://vkcom.github.io/VKUI/#/RichCell
|
|
23
28
|
*/ export const RichCell = (_param)=>{
|
|
24
|
-
var { overTitle, children, subtitle, extraSubtitle, before, after, afterCaption, bottom, actions, multiline, afterAlign = 'start' } = _param, restProps = _object_without_properties(_param, [
|
|
29
|
+
var { overTitle, children, subtitle, extraSubtitle, before, after, afterCaption, bottom, actions, multiline, beforeAlign = 'start', contentAlign = 'start', afterAlign = 'start' } = _param, restProps = _object_without_properties(_param, [
|
|
25
30
|
"overTitle",
|
|
26
31
|
"children",
|
|
27
32
|
"subtitle",
|
|
@@ -32,6 +37,8 @@ const alignAfterClassNames = {
|
|
|
32
37
|
"bottom",
|
|
33
38
|
"actions",
|
|
34
39
|
"multiline",
|
|
40
|
+
"beforeAlign",
|
|
41
|
+
"contentAlign",
|
|
35
42
|
"afterAlign"
|
|
36
43
|
]);
|
|
37
44
|
const { sizeY = 'none' } = useAdaptivity();
|
|
@@ -40,7 +47,7 @@ const alignAfterClassNames = {
|
|
|
40
47
|
return;
|
|
41
48
|
}
|
|
42
49
|
return /*#__PURE__*/ _jsxs("div", {
|
|
43
|
-
className: classNames("vkuiRichCell__contentAfter",
|
|
50
|
+
className: classNames("vkuiRichCell__contentAfter", alignSelfClassNames[afterAlign]),
|
|
44
51
|
children: [
|
|
45
52
|
after && /*#__PURE__*/ _jsx("div", {
|
|
46
53
|
className: "vkuiRichCell__afterChildren",
|
|
@@ -57,7 +64,7 @@ const alignAfterClassNames = {
|
|
|
57
64
|
baseClassName: classNames("vkuiRichCell__host", !multiline && "vkuiRichCell__textEllipsis", sizeY !== 'regular' && sizeYClassNames[sizeY]),
|
|
58
65
|
children: [
|
|
59
66
|
before && /*#__PURE__*/ _jsx("div", {
|
|
60
|
-
className: "vkuiRichCell__before",
|
|
67
|
+
className: classNames("vkuiRichCell__before", alignSelfClassNames[beforeAlign]),
|
|
61
68
|
children: before
|
|
62
69
|
}),
|
|
63
70
|
/*#__PURE__*/ _jsxs("div", {
|
|
@@ -70,7 +77,7 @@ const alignAfterClassNames = {
|
|
|
70
77
|
className: "vkuiRichCell__content",
|
|
71
78
|
children: [
|
|
72
79
|
/*#__PURE__*/ _jsxs("div", {
|
|
73
|
-
className: "vkuiRichCell__contentBefore",
|
|
80
|
+
className: classNames("vkuiRichCell__contentBefore", alignContentClassNames[contentAlign]),
|
|
74
81
|
children: [
|
|
75
82
|
overTitle && /*#__PURE__*/ _jsx(Subhead, {
|
|
76
83
|
Component: "div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/RichCell/RichCell.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { RichCellIcon } from './RichCellIcon/RichCellIcon';\nimport styles from './RichCell.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst
|
|
1
|
+
{"version":3,"sources":["../../../src/components/RichCell/RichCell.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { RichCellIcon } from './RichCellIcon/RichCellIcon';\nimport styles from './RichCell.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst alignSelfClassNames = {\n start: styles.alignSelfStart,\n center: styles.alignSelfCenter,\n end: styles.alignSelfEnd,\n};\n\nconst alignContentClassNames = {\n start: styles.contentAlignStart,\n center: styles.contentAlignCenter,\n end: styles.contentAlignEnd,\n};\n\ntype Align = 'start' | 'center' | 'end';\n\nexport interface RichCellProps extends TappableProps {\n /**\n * Контейнер для текста над `children`.\n */\n overTitle?: React.ReactNode;\n /**\n * Контейнер для текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Контейнер для текста под `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Контейнер для контента под `caption`. Например `<UsersStack size=\"m\" />`.\n */\n bottom?: React.ReactNode;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkcom.github.io/VKUI/#/Button) с параметрами:\n *\n * - `mode=\"primary\" size=\"s\"`\n * - `mode=\"secondary\" size=\"s\"`\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkcom.github.io/VKUI/#/ButtonGroup) с параметрами:\n *\n * - `mode=\"horizontal\" gap=\"s\" stretched`\n */\n actions?: React.ReactNode;\n /**\n * `<Avatar size={40|48|72} />`.\n */\n before?: React.ReactNode;\n /**\n * Иконка 28 или текст.\n */\n after?: React.ReactNode;\n /**\n * Текст под `after`.\n */\n afterCaption?: React.ReactNode;\n /**\n * Выравнивание before компонента по вертикали\n */\n beforeAlign?: Align;\n /**\n * Выравнивание центрального контента по вертикали\n */\n contentAlign?: Align;\n /**\n * Выравнивание after компонента по вертикали\n */\n afterAlign?: Align;\n /**\n * Убирает анимацию нажатия.\n */\n disabled?: boolean;\n /**\n * Включает многострочный режим для `subhead`, `children`, `text` и `caption`.\n */\n multiline?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/RichCell\n */\nexport const RichCell: React.FC<RichCellProps> & {\n Icon: typeof RichCellIcon;\n} = ({\n overTitle,\n children,\n subtitle,\n extraSubtitle,\n before,\n after,\n afterCaption,\n bottom,\n actions,\n multiline,\n beforeAlign = 'start',\n contentAlign = 'start',\n afterAlign = 'start',\n ...restProps\n}: RichCellProps) => {\n const { sizeY = 'none' } = useAdaptivity();\n\n const afterRender = () => {\n if (!after && !afterCaption) {\n return;\n }\n return (\n <div className={classNames(styles.contentAfter, alignSelfClassNames[afterAlign])}>\n {after && <div className={styles.afterChildren}>{after}</div>}\n {afterCaption && <div className={styles.afterCaption}>{afterCaption}</div>}\n </div>\n );\n };\n\n return (\n <Tappable\n {...restProps}\n baseClassName={classNames(\n styles.host,\n !multiline && styles.textEllipsis,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n )}\n >\n {before && (\n <div className={classNames(styles.before, alignSelfClassNames[beforeAlign])}>{before}</div>\n )}\n <div className={styles.inWrapper}>\n <div className={styles.in}>\n <div className={styles.content}>\n <div className={classNames(styles.contentBefore, alignContentClassNames[contentAlign])}>\n {overTitle && (\n <Subhead Component=\"div\" className={styles.overTitle}>\n {overTitle}\n </Subhead>\n )}\n <div className={styles.children}>{children}</div>\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n {extraSubtitle && (\n <Subhead Component=\"div\" className={styles.extraSubtitle}>\n {extraSubtitle}\n </Subhead>\n )}\n </div>\n {afterAlign === 'start' && afterRender()}\n </div>\n {bottom && <div className={styles.bottom}>{bottom}</div>}\n {actions && <div className={styles.actions}>{actions}</div>}\n </div>\n {afterAlign !== 'start' && afterRender()}\n </div>\n </Tappable>\n );\n};\n\nRichCell.Icon = RichCellIcon;\n"],"names":["React","classNames","useAdaptivity","Tappable","Subhead","RichCellIcon","sizeYClassNames","none","compact","alignSelfClassNames","start","center","end","alignContentClassNames","RichCell","overTitle","children","subtitle","extraSubtitle","before","after","afterCaption","bottom","actions","multiline","beforeAlign","contentAlign","afterAlign","restProps","sizeY","afterRender","div","className","baseClassName","Component","Icon"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAA4B,0BAAuB;AACpE,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,YAAY,QAAQ,iCAA8B;AAG3D,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAEA,MAAMC,sBAAsB;IAC1BC,KAAK;IACLC,MAAM;IACNC,GAAG;AACL;AAEA,MAAMC,yBAAyB;IAC7BH,KAAK;IACLC,MAAM;IACNC,GAAG;AACL;AAkEA;;CAEC,GACD,OAAO,MAAME,WAET;QAAC,EACHC,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,MAAM,EACNC,KAAK,EACLC,YAAY,EACZC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,cAAc,OAAO,EACrBC,eAAe,OAAO,EACtBC,aAAa,OAAO,EAEN,WADXC;QAbHb;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAG3B;IAE3B,MAAM4B,cAAc;QAClB,IAAI,CAACV,SAAS,CAACC,cAAc;YAC3B;QACF;QACA,qBACE,MAACU;YAAIC,WAAW/B,yCAAgCQ,mBAAmB,CAACkB,WAAW;;gBAC5EP,uBAAS,KAACW;oBAAIC,SAAS;8BAAyBZ;;gBAChDC,8BAAgB,KAACU;oBAAIC,SAAS;8BAAwBX;;;;IAG7D;IAEA,qBACE,MAAClB,kDACKyB;QACJK,eAAehC,iCAEb,CAACuB,2CACDK,UAAU,aAAavB,eAAe,CAACuB,MAAM;;YAG9CV,wBACC,KAACY;gBAAIC,WAAW/B,mCAA0BQ,mBAAmB,CAACgB,YAAY;0BAAIN;;0BAEhF,MAACY;gBAAIC,SAAS;;kCACZ,MAACD;wBAAIC,SAAS;;0CACZ,MAACD;gCAAIC,SAAS;;kDACZ,MAACD;wCAAIC,WAAW/B,0CAAiCY,sBAAsB,CAACa,aAAa;;4CAClFX,2BACC,KAACX;gDAAQ8B,WAAU;gDAAMF,SAAS;0DAC/BjB;;0DAGL,KAACgB;gDAAIC,SAAS;0DAAoBhB;;4CACjCC,0BAAY,KAACc;gDAAIC,SAAS;0DAAoBf;;4CAC9CC,+BACC,KAACd;gDAAQ8B,WAAU;gDAAMF,SAAS;0DAC/Bd;;;;oCAINS,eAAe,WAAWG;;;4BAE5BR,wBAAU,KAACS;gCAAIC,SAAS;0CAAkBV;;4BAC1CC,yBAAW,KAACQ;gCAAIC,SAAS;0CAAmBT;;;;oBAE9CI,eAAe,WAAWG;;;;;AAInC,EAAE;AAEFhB,SAASqB,IAAI,GAAG9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Root.d.ts","sourceRoot":"","sources":["../../../src/components/Root/Root.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAG/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAS7D,MAAM,WAAW,SAAU,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU;IACtF,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/E,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID;;GAEG;AACH,eAAO,MAAM,IAAI,2EAMd,SAAS,KAAG,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"Root.d.ts","sourceRoot":"","sources":["../../../src/components/Root/Root.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAG/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAS7D,MAAM,WAAW,SAAU,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU;IACtF,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/E,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID;;GAEG;AACH,eAAO,MAAM,IAAI,2EAMd,SAAS,KAAG,KAAK,CAAC,SAoHpB,CAAC"}
|
|
@@ -108,7 +108,9 @@ const warn = warnOnce('Root');
|
|
|
108
108
|
const compensateScroll = transition && (viewId === prevView || isBack && viewId === activeView);
|
|
109
109
|
var _scrolls_viewId;
|
|
110
110
|
return /*#__PURE__*/ _jsx("div", {
|
|
111
|
-
ref: (e)=>
|
|
111
|
+
ref: (e)=>{
|
|
112
|
+
viewId && (viewNodes[viewId] = e);
|
|
113
|
+
},
|
|
112
114
|
onAnimationEnd: isTransitionTarget ? onAnimationEnd : undefined,
|
|
113
115
|
className: classNames("vkuiRoot__view", transition && viewId === prevView && isBack && "vkuiRoot__viewHideBack", transition && viewId === prevView && !isBack && "vkuiRoot__viewHideForward", transition && viewId === activeView && isBack && "vkuiRoot__viewShowBack", transition && viewId === activeView && !isBack && "vkuiRoot__viewShowForward"),
|
|
114
116
|
children: /*#__PURE__*/ _jsx(NavTransitionDirectionProvider, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Root/Root.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { ScrollContext } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { SplitColContext } from '../SplitCol/SplitColContext';\nimport styles from './Root.module.css';\n\nexport interface RootProps extends HTMLAttributesWithRootRef<HTMLDivElement>, NavIdProps {\n activeView: string;\n onTransition?: (params: { isBack: boolean; from: string; to: string }) => void;\n children: React.ReactElement | Iterable<React.ReactElement>;\n}\n\nexport interface RootState {\n activeView: string;\n transition: boolean;\n isBack?: boolean;\n prevView?: string;\n}\n\nconst warn = warnOnce('Root');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Root\n */\nexport const Root = ({\n children,\n activeView: _activeView,\n onTransition,\n nav,\n ...restProps\n}: RootProps): React.ReactNode => {\n const scroll = React.useContext(ScrollContext);\n const platform = usePlatform();\n const { document } = useDOM();\n const scrolls = React.useRef<Record<string, number>>({}).current;\n const viewNodes = React.useRef<Record<string, HTMLElement | null>>({}).current;\n\n const { transitionMotionEnabled = true } = useConfigProvider();\n const { animate } = React.useContext(SplitColContext);\n const disableAnimation = !transitionMotionEnabled || !animate;\n\n const views = React.Children.toArray(children) as React.ReactElement
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Root/Root.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId, type NavIdProps } from '../../lib/getNavId';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { ScrollContext } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';\nimport { NavTransitionDirectionProvider } from '../NavTransitionDirectionContext/NavTransitionDirectionContext';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { SplitColContext } from '../SplitCol/SplitColContext';\nimport styles from './Root.module.css';\n\nexport interface RootProps extends HTMLAttributesWithRootRef<HTMLDivElement>, NavIdProps {\n activeView: string;\n onTransition?: (params: { isBack: boolean; from: string; to: string }) => void;\n children: React.ReactElement | Iterable<React.ReactElement>;\n}\n\nexport interface RootState {\n activeView: string;\n transition: boolean;\n isBack?: boolean;\n prevView?: string;\n}\n\nconst warn = warnOnce('Root');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Root\n */\nexport const Root = ({\n children,\n activeView: _activeView,\n onTransition,\n nav,\n ...restProps\n}: RootProps): React.ReactNode => {\n const scroll = React.useContext(ScrollContext);\n const platform = usePlatform();\n const { document } = useDOM();\n const scrolls = React.useRef<Record<string, number>>({}).current;\n const viewNodes = React.useRef<Record<string, HTMLElement | null>>({}).current;\n\n const { transitionMotionEnabled = true } = useConfigProvider();\n const { animate } = React.useContext(SplitColContext);\n const disableAnimation = !transitionMotionEnabled || !animate;\n\n const views = React.Children.toArray(children) as Array<React.ReactElement<NavIdProps>>;\n\n const [{ prevView, activeView, transition, isBack }, _setState] = React.useState<RootState>({\n activeView: _activeView,\n transition: false,\n });\n const transitionTo = (panel: string) => {\n if (panel !== activeView) {\n const viewIds = views.map((view) => getNavId(view.props, warn));\n const isBack = viewIds.indexOf(panel) < viewIds.indexOf(activeView);\n scrolls[activeView] = scroll.getScroll().y;\n _setState({\n activeView: panel,\n prevView: activeView,\n transition: !disableAnimation,\n isBack,\n });\n }\n };\n const finishTransition = React.useCallback(\n () => _setState({ activeView, prevView, isBack, transition: false }),\n [activeView, isBack, prevView],\n );\n\n useIsomorphicLayoutEffect(() => {\n (document!.activeElement as HTMLElement).blur();\n }, [activeView]);\n\n // Нужен переход\n useIsomorphicLayoutEffect(() => transitionTo(_activeView), [_activeView]);\n useIsomorphicLayoutEffect(() => {\n if (!transition && prevView) {\n // Закончился переход\n scroll.scrollTo(0, isBack ? scrolls[activeView] : 0);\n onTransition &&\n onTransition({\n isBack: Boolean(isBack),\n from: prevView,\n to: activeView,\n });\n }\n }, [transition, prevView]);\n\n React.useEffect(\n function onAnimationEndFallback() {\n if (transition && disableAnimation) {\n finishTransition();\n }\n },\n [transition, disableAnimation, finishTransition],\n );\n\n const onAnimationEnd = () => {\n finishTransition();\n };\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n transition && styles.transition,\n )}\n >\n {views.map((view) => {\n const viewId = getNavId(view.props, warn);\n if (viewId !== activeView && !(transition && viewId === prevView)) {\n return null;\n }\n const isTransitionTarget = transition && viewId === (isBack ? prevView : activeView);\n const compensateScroll =\n transition && (viewId === prevView || (isBack && viewId === activeView));\n return (\n <div\n key={viewId}\n ref={(e) => {\n viewId && (viewNodes[viewId] = e);\n }}\n onAnimationEnd={isTransitionTarget ? onAnimationEnd : undefined}\n className={classNames(\n styles.view,\n transition && viewId === prevView && isBack && styles.viewHideBack,\n transition && viewId === prevView && !isBack && styles.viewHideForward,\n transition && viewId === activeView && isBack && styles.viewShowBack,\n transition && viewId === activeView && !isBack && styles.viewShowForward,\n )}\n >\n <NavTransitionDirectionProvider isBack={isBack}>\n <NavTransitionProvider entering={transition && viewId === activeView}>\n <div\n className={styles.scrollCompensation}\n style={{\n marginTop: compensateScroll ? viewId && -(scrolls[viewId] ?? 0) : undefined,\n }}\n >\n {view}\n </div>\n </NavTransitionProvider>\n </NavTransitionDirectionProvider>\n </div>\n );\n })}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","usePlatform","useDOM","getNavId","useIsomorphicLayoutEffect","warnOnce","ScrollContext","useConfigProvider","NavTransitionProvider","NavTransitionDirectionProvider","RootComponent","SplitColContext","warn","Root","children","activeView","_activeView","onTransition","nav","restProps","scroll","useContext","platform","document","scrolls","useRef","current","viewNodes","transitionMotionEnabled","animate","disableAnimation","views","Children","toArray","prevView","transition","isBack","_setState","useState","transitionTo","panel","viewIds","map","view","props","indexOf","getScroll","y","finishTransition","useCallback","activeElement","blur","scrollTo","Boolean","from","to","useEffect","onAnimationEndFallback","onAnimationEnd","baseClassName","viewId","isTransitionTarget","compensateScroll","div","ref","e","undefined","className","entering","style","marginTop"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export interface SegmentedControlOptionInterface extends Omit<React.HTMLAttribut
|
|
|
7
7
|
* Рекомендуется использовать только иконки с размером 20
|
|
8
8
|
*/
|
|
9
9
|
before?: React.ReactNode;
|
|
10
|
-
label: React.
|
|
10
|
+
label: React.ReactNode;
|
|
11
11
|
value: SegmentedControlValue;
|
|
12
12
|
}
|
|
13
13
|
export interface SegmentedControlProps extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'> {
|
|
@@ -21,5 +21,5 @@ export interface SegmentedControlProps extends Omit<HTMLAttributesWithRootRef<HT
|
|
|
21
21
|
/**
|
|
22
22
|
* @see https://vkcom.github.io/VKUI/#/SegmentedControl
|
|
23
23
|
*/
|
|
24
|
-
export declare const SegmentedControl: ({ size, name, options, defaultValue, children, onChange: onChangeProp, value: valueProp, ...restProps }: SegmentedControlProps) => React.ReactNode;
|
|
24
|
+
export declare const SegmentedControl: ({ size, name, options, defaultValue, children, onChange: onChangeProp, value: valueProp, role, ...restProps }: SegmentedControlProps) => React.ReactNode;
|
|
25
25
|
//# sourceMappingURL=SegmentedControl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../src/components/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../src/components/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAa7D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,+BACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IACxD;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACnE,OAAO,EAAE,+BAA+B,EAAE,CAAC;IAC3C,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC;AAID;;GAEG;AACH,eAAO,MAAM,gBAAgB,kHAU1B,qBAAqB,KAAG,KAAK,CAAC,SAkFhC,CAAC"}
|
|
@@ -8,6 +8,7 @@ import * as React from "react";
|
|
|
8
8
|
import { classNames } from "@vkontakte/vkjs";
|
|
9
9
|
import { useAdaptivity } from "../../hooks/useAdaptivity.js";
|
|
10
10
|
import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
|
|
11
|
+
import { useTabsNavigation } from "../../hooks/useTabsNavigation.js";
|
|
11
12
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
|
|
12
13
|
import { warnOnce } from "../../lib/warnOnce.js";
|
|
13
14
|
import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
@@ -20,14 +21,15 @@ const warn = warnOnce('SegmentedControl');
|
|
|
20
21
|
/**
|
|
21
22
|
* @see https://vkcom.github.io/VKUI/#/SegmentedControl
|
|
22
23
|
*/ export const SegmentedControl = (_param)=>{
|
|
23
|
-
var { size = 'l', name, options, defaultValue = (_options_ = options[0]) === null || _options_ === void 0 ? void 0 : _options_.value, children, onChange: onChangeProp, value: valueProp } = _param, restProps = _object_without_properties(_param, [
|
|
24
|
+
var { size = 'l', name, options, defaultValue = (_options_ = options[0]) === null || _options_ === void 0 ? void 0 : _options_.value, children, onChange: onChangeProp, value: valueProp, role = 'radiogroup' } = _param, restProps = _object_without_properties(_param, [
|
|
24
25
|
"size",
|
|
25
26
|
"name",
|
|
26
27
|
"options",
|
|
27
28
|
"defaultValue",
|
|
28
29
|
"children",
|
|
29
30
|
"onChange",
|
|
30
|
-
"value"
|
|
31
|
+
"value",
|
|
32
|
+
"role"
|
|
31
33
|
]);
|
|
32
34
|
const id = React.useId();
|
|
33
35
|
const [value, onChange] = useCustomEnsuredControl({
|
|
@@ -36,6 +38,7 @@ const warn = warnOnce('SegmentedControl');
|
|
|
36
38
|
defaultValue
|
|
37
39
|
});
|
|
38
40
|
const { sizeY = 'none' } = useAdaptivity();
|
|
41
|
+
const { tabsRef } = useTabsNavigation(role === 'tablist');
|
|
39
42
|
const actualIndex = options.findIndex((option)=>option.value === value);
|
|
40
43
|
useIsomorphicLayoutEffect(()=>{
|
|
41
44
|
if (actualIndex === -1 && process.env.NODE_ENV === 'development') {
|
|
@@ -48,7 +51,8 @@ const warn = warnOnce('SegmentedControl');
|
|
|
48
51
|
return /*#__PURE__*/ _jsx(RootComponent, _object_spread_props(_object_spread({}, restProps), {
|
|
49
52
|
baseClassName: classNames("vkuiSegmentedControl__host", sizeY !== 'compact' && sizeYClassNames[sizeY], size === 'l' && "vkuiSegmentedControl__sizeL"),
|
|
50
53
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
51
|
-
role:
|
|
54
|
+
role: role,
|
|
55
|
+
ref: tabsRef,
|
|
52
56
|
className: "vkuiSegmentedControl__in",
|
|
53
57
|
children: [
|
|
54
58
|
actualIndex > -1 && /*#__PURE__*/ _jsx("div", {
|
|
@@ -60,15 +64,31 @@ const warn = warnOnce('SegmentedControl');
|
|
|
60
64
|
}
|
|
61
65
|
}),
|
|
62
66
|
options.map((_param)=>{
|
|
63
|
-
var { label } = _param, optionProps = _object_without_properties(_param, [
|
|
64
|
-
"label"
|
|
67
|
+
var { label, before } = _param, optionProps = _object_without_properties(_param, [
|
|
68
|
+
"label",
|
|
69
|
+
"before"
|
|
65
70
|
]);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
const selected = value === optionProps.value;
|
|
72
|
+
const onSelect = ()=>onChange(optionProps.value);
|
|
73
|
+
var _optionProps_tabIndex;
|
|
74
|
+
const optionRootProps = role === 'tablist' ? _object_spread({
|
|
75
|
+
'role': 'tab',
|
|
76
|
+
'aria-selected': selected,
|
|
77
|
+
'onClick': onSelect,
|
|
78
|
+
'tabIndex': (_optionProps_tabIndex = optionProps.tabIndex) !== null && _optionProps_tabIndex !== void 0 ? _optionProps_tabIndex : selected ? 0 : -1
|
|
79
|
+
}, optionProps) : undefined;
|
|
80
|
+
const optionInputProps = role !== 'tablist' ? _object_spread({
|
|
81
|
+
role: optionProps.role || (role === 'radiogroup' ? 'radio' : undefined),
|
|
82
|
+
checked: selected,
|
|
83
|
+
onChange: onSelect,
|
|
84
|
+
name: name !== null && name !== void 0 ? name : id
|
|
85
|
+
}, optionProps) : undefined;
|
|
86
|
+
return /*#__PURE__*/ _jsx(SegmentedControlOption, {
|
|
87
|
+
before: before,
|
|
88
|
+
rootProps: optionRootProps,
|
|
89
|
+
inputProps: optionInputProps,
|
|
70
90
|
children: label
|
|
71
|
-
}
|
|
91
|
+
}, `${optionProps.value}`);
|
|
72
92
|
})
|
|
73
93
|
]
|
|
74
94
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useTabsNavigation } from '../../hooks/useTabsNavigation';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport {\n SegmentedControlOption,\n type SegmentedControlOptionProps,\n} from './SegmentedControlOption/SegmentedControlOption';\nimport styles from './SegmentedControl.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n regular: styles.sizeYRegular,\n};\n\nexport type SegmentedControlValue = string | number | undefined;\n\nexport interface SegmentedControlOptionInterface\n extends Omit<React.HTMLAttributes<HTMLElement>, 'label'> {\n /**\n * Вставляет элемент перед основным контентом.\n * Рекомендуется использовать только иконки с размером 20\n */\n before?: React.ReactNode;\n label: React.ReactNode;\n value: SegmentedControlValue;\n}\n\nexport interface SegmentedControlProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'> {\n options: SegmentedControlOptionInterface[];\n size?: 'm' | 'l';\n name?: string;\n onChange?: (value: SegmentedControlValue) => void;\n value?: SegmentedControlValue;\n defaultValue?: SegmentedControlValue;\n}\n\nconst warn = warnOnce('SegmentedControl');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SegmentedControl\n */\nexport const SegmentedControl = ({\n size = 'l',\n name,\n options,\n defaultValue = options[0]?.value,\n children,\n onChange: onChangeProp,\n value: valueProp,\n role = 'radiogroup',\n ...restProps\n}: SegmentedControlProps): React.ReactNode => {\n const id = React.useId();\n\n const [value, onChange] = useCustomEnsuredControl({\n onChange: onChangeProp,\n value: valueProp,\n defaultValue,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const { tabsRef } = useTabsNavigation(role === 'tablist');\n\n const actualIndex = options.findIndex((option) => option.value === value);\n\n useIsomorphicLayoutEffect(() => {\n if (actualIndex === -1 && process.env.NODE_ENV === 'development') {\n warn('defaultValue: такого значения нет среди опций!', 'error');\n }\n }, [actualIndex]);\n\n const translateX = `translateX(${100 * actualIndex}%)`;\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n sizeY !== 'compact' && sizeYClassNames[sizeY],\n size === 'l' && styles.sizeL,\n )}\n >\n <div role={role} ref={tabsRef} className={styles.in}>\n {actualIndex > -1 && (\n <div\n aria-hidden\n className={styles.slider}\n style={{\n width: `${100 / options.length}%`,\n transform: translateX,\n }}\n />\n )}\n {options.map(({ label, before, ...optionProps }) => {\n const selected = value === optionProps.value;\n const onSelect = () => onChange(optionProps.value);\n const optionRootProps: SegmentedControlOptionProps['rootProps'] =\n role === 'tablist'\n ? {\n 'role': 'tab',\n 'aria-selected': selected,\n 'onClick': onSelect,\n 'tabIndex': optionProps.tabIndex ?? (selected ? 0 : -1),\n ...optionProps,\n }\n : undefined;\n\n const optionInputProps: SegmentedControlOptionProps['inputProps'] =\n role !== 'tablist'\n ? {\n role: optionProps.role || (role === 'radiogroup' ? 'radio' : undefined),\n checked: selected,\n onChange: onSelect,\n name: name ?? id,\n ...optionProps,\n }\n : undefined;\n\n return (\n <SegmentedControlOption\n key={`${optionProps.value}`}\n before={before}\n rootProps={optionRootProps}\n inputProps={optionInputProps}\n >\n {label}\n </SegmentedControlOption>\n );\n })}\n </div>\n </RootComponent>\n );\n};\n"],"names":["options","React","classNames","useAdaptivity","useCustomEnsuredControl","useTabsNavigation","useIsomorphicLayoutEffect","warnOnce","RootComponent","SegmentedControlOption","sizeYClassNames","none","regular","warn","SegmentedControl","size","name","defaultValue","value","children","onChange","onChangeProp","valueProp","role","restProps","id","useId","sizeY","tabsRef","actualIndex","findIndex","option","process","env","NODE_ENV","translateX","baseClassName","div","ref","className","aria-hidden","style","width","length","transform","map","label","before","optionProps","selected","onSelect","optionRootProps","tabIndex","undefined","optionInputProps","checked","rootProps","inputProps"],"mappings":"AAAA;;;;IAsDiBA;;AApDjB,YAAYC,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,uBAAuB,QAAQ,mCAAgC;AACxE,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,yBAAyB,QAAQ,yCAAsC;AAChF,SAASC,QAAQ,QAAQ,wBAAqB;AAE9C,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SACEC,sBAAsB,QAEjB,qDAAkD;AAGzD,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAyBA,MAAMC,OAAON,SAAS;AAEtB;;CAEC,GACD,OAAO,MAAMO,mBAAmB;QAAC,EAC/BC,OAAO,GAAG,EACVC,IAAI,EACJhB,OAAO,EACPiB,gBAAejB,YAAAA,OAAO,CAAC,EAAE,cAAVA,gCAAAA,UAAYkB,KAAK,EAChCC,QAAQ,EACRC,UAAUC,YAAY,EACtBH,OAAOI,SAAS,EAChBC,OAAO,YAAY,EAEG,WADnBC;QARHT;QACAC;QACAhB;QACAiB;QACAE;QACAC;QACAF;QACAK;;IAGA,MAAME,KAAKxB,MAAMyB,KAAK;IAEtB,MAAM,CAACR,OAAOE,SAAS,GAAGhB,wBAAwB;QAChDgB,UAAUC;QACVH,OAAOI;QACPL;IACF;IAEA,MAAM,EAAEU,QAAQ,MAAM,EAAE,GAAGxB;IAE3B,MAAM,EAAEyB,OAAO,EAAE,GAAGvB,kBAAkBkB,SAAS;IAE/C,MAAMM,cAAc7B,QAAQ8B,SAAS,CAAC,CAACC,SAAWA,OAAOb,KAAK,KAAKA;IAEnEZ,0BAA0B;QACxB,IAAIuB,gBAAgB,CAAC,KAAKG,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;YAChErB,KAAK,kDAAkD;QACzD;IACF,GAAG;QAACgB;KAAY;IAEhB,MAAMM,aAAa,CAAC,WAAW,EAAE,MAAMN,YAAY,EAAE,CAAC;IAEtD,qBACE,KAACrB,uDACKgB;QACJY,eAAelC,yCAEbyB,UAAU,aAAajB,eAAe,CAACiB,MAAM,EAC7CZ,SAAS;kBAGX,cAAA,MAACsB;YAAId,MAAMA;YAAMe,KAAKV;YAASW,SAAS;;gBACrCV,cAAc,CAAC,mBACd,KAACQ;oBACCG,aAAW;oBACXD,SAAS;oBACTE,OAAO;wBACLC,OAAO,GAAG,MAAM1C,QAAQ2C,MAAM,CAAC,CAAC,CAAC;wBACjCC,WAAWT;oBACb;;gBAGHnC,QAAQ6C,GAAG,CAAC;wBAAC,EAAEC,KAAK,EAAEC,MAAM,EAAkB,WAAbC;wBAAlBF;wBAAOC;;oBACrB,MAAME,WAAW/B,UAAU8B,YAAY9B,KAAK;oBAC5C,MAAMgC,WAAW,IAAM9B,SAAS4B,YAAY9B,KAAK;wBAO7B8B;oBANpB,MAAMG,kBACJ5B,SAAS,YACL;wBACE,QAAQ;wBACR,iBAAiB0B;wBACjB,WAAWC;wBACX,YAAYF,CAAAA,wBAAAA,YAAYI,QAAQ,cAApBJ,mCAAAA,wBAAyBC,WAAW,IAAI,CAAC;uBAClDD,eAELK;oBAEN,MAAMC,mBACJ/B,SAAS,YACL;wBACEA,MAAMyB,YAAYzB,IAAI,IAAKA,CAAAA,SAAS,eAAe,UAAU8B,SAAQ;wBACrEE,SAASN;wBACT7B,UAAU8B;wBACVlC,MAAMA,iBAAAA,kBAAAA,OAAQS;uBACXuB,eAELK;oBAEN,qBACE,KAAC5C;wBAECsC,QAAQA;wBACRS,WAAWL;wBACXM,YAAYH;kCAEXR;uBALI,GAAGE,YAAY9B,KAAK,EAAE;gBAQjC;;;;AAIR,EAAE"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import type { HasRef, HasRootRef } from '../../../types';
|
|
3
|
-
export interface SegmentedControlOptionProps extends
|
|
2
|
+
import type { HasChildren, HasRef, HasRootRef } from '../../../types';
|
|
3
|
+
export interface SegmentedControlOptionProps extends HasRootRef<HTMLLabelElement>, HasRef<HTMLInputElement>, HasChildren {
|
|
4
|
+
rootProps?: React.LabelHTMLAttributes<HTMLLabelElement>;
|
|
5
|
+
inputProps?: React.InputHTMLAttributes<HTMLInputElement>;
|
|
4
6
|
before?: React.ReactNode;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
7
9
|
* @see https://vkcom.github.io/VKUI/#/SegmentedControl
|
|
8
10
|
*/
|
|
9
|
-
export declare const SegmentedControlOption: ({ getRef,
|
|
11
|
+
export declare const SegmentedControlOption: ({ getRef, children, getRootRef, before, rootProps, inputProps, }: SegmentedControlOptionProps) => React.ReactNode;
|
|
10
12
|
//# sourceMappingURL=SegmentedControlOption.d.ts.map
|
package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControlOption.d.ts","sourceRoot":"","sources":["../../../../src/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SegmentedControlOption.d.ts","sourceRoot":"","sources":["../../../../src/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAMtE,MAAM,WAAW,2BACf,SAAQ,UAAU,CAAC,gBAAgB,CAAC,EAClC,MAAM,CAAC,gBAAgB,CAAC,EACxB,WAAW;IACb,SAAS,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACxD,UAAU,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,qEAOhC,2BAA2B,KAAG,KAAK,CAAC,SAiBtC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
2
3
|
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
3
|
-
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
|
|
4
4
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { hasReactNode } from "@vkontakte/vkjs";
|
|
@@ -9,25 +9,15 @@ import { Headline } from "../../Typography/Headline/Headline.js";
|
|
|
9
9
|
import { VisuallyHidden } from "../../VisuallyHidden/VisuallyHidden.js";
|
|
10
10
|
/**
|
|
11
11
|
* @see https://vkcom.github.io/VKUI/#/SegmentedControl
|
|
12
|
-
*/ export const SegmentedControlOption = (
|
|
13
|
-
var { getRef, className, style, children, getRootRef, before } = _param, restProps = _object_without_properties(_param, [
|
|
14
|
-
"getRef",
|
|
15
|
-
"className",
|
|
16
|
-
"style",
|
|
17
|
-
"children",
|
|
18
|
-
"getRootRef",
|
|
19
|
-
"before"
|
|
20
|
-
]);
|
|
21
|
-
return /*#__PURE__*/ _jsxs(Clickable, {
|
|
12
|
+
*/ export const SegmentedControlOption = ({ getRef, children, getRootRef, before, rootProps, inputProps })=>/*#__PURE__*/ _jsxs(Clickable, _object_spread_props(_object_spread({
|
|
22
13
|
Component: "label",
|
|
23
14
|
baseClassName: "vkuiSegmentedControlOption__host",
|
|
24
15
|
hoverClassName: "vkuiSegmentedControlOption__hover",
|
|
25
16
|
activeClassName: "vkuiSegmentedControlOption__hover",
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
style: style,
|
|
17
|
+
getRootRef: getRootRef
|
|
18
|
+
}, rootProps), {
|
|
29
19
|
children: [
|
|
30
|
-
/*#__PURE__*/ _jsx(VisuallyHidden, _object_spread_props(_object_spread({},
|
|
20
|
+
inputProps && /*#__PURE__*/ _jsx(VisuallyHidden, _object_spread_props(_object_spread({}, inputProps), {
|
|
31
21
|
Component: "input",
|
|
32
22
|
getRootRef: getRef,
|
|
33
23
|
type: "radio"
|
|
@@ -42,7 +32,6 @@ import { VisuallyHidden } from "../../VisuallyHidden/VisuallyHidden.js";
|
|
|
42
32
|
children: children
|
|
43
33
|
})
|
|
44
34
|
]
|
|
45
|
-
});
|
|
46
|
-
};
|
|
35
|
+
}));
|
|
47
36
|
|
|
48
37
|
//# sourceMappingURL=SegmentedControlOption.js.map
|