@vkontakte/vkui 8.1.3 → 8.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ActionSheet/ActionSheet.d.ts +5 -4
- package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.js +2 -1
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/components/AdaptivityProvider/AdaptivityContext.d.ts +3 -3
- package/dist/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
- package/dist/components/AdaptivityProvider/AdaptivityProvider.js +2 -2
- package/dist/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
- package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRoot.js +0 -6
- package/dist/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/components/AppRoot/AppRootContext.d.ts +0 -1
- package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRootContext.js +0 -1
- package/dist/components/AppRoot/AppRootContext.js.map +1 -1
- package/dist/components/Banner/Banner.d.ts.map +1 -1
- package/dist/components/Banner/Banner.js +7 -1
- package/dist/components/Banner/Banner.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +1 -1
- package/dist/components/Calendar/Calendar.js +2 -1
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.js +4 -2
- package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.js +2 -2
- package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
- 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 +2 -2
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.d.ts +1 -1
- package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.js +61 -50
- package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/components/CalendarTime/CalendarTimePicker.d.ts +11 -7
- package/dist/components/CalendarTime/CalendarTimePicker.d.ts.map +1 -1
- package/dist/components/CalendarTime/CalendarTimePicker.js +108 -48
- package/dist/components/CalendarTime/CalendarTimePicker.js.map +1 -1
- package/dist/components/CalendarTime/ComboBox.d.ts +25 -0
- package/dist/components/CalendarTime/ComboBox.d.ts.map +1 -0
- package/dist/components/CalendarTime/ComboBox.js +112 -0
- package/dist/components/CalendarTime/ComboBox.js.map +1 -0
- package/dist/components/CardScroll/CardScroll.d.ts.map +1 -1
- package/dist/components/CardScroll/CardScroll.js +2 -2
- package/dist/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
- package/dist/components/CarouselBase/CarouselBase.js +3 -1
- package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/components/ChipsSelect/useChipsSelect.d.ts.map +1 -1
- package/dist/components/ChipsSelect/useChipsSelect.js +2 -1
- package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
- package/dist/components/ConfigProvider/ConfigProvider.js +8 -4
- package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderOverride.d.ts.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderOverride.js +5 -1
- package/dist/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProviderSubContexts.d.ts +15 -0
- package/dist/components/ConfigProvider/ConfigProviderSubContexts.d.ts.map +1 -0
- package/dist/components/ConfigProvider/ConfigProviderSubContexts.js +25 -0
- package/dist/components/ConfigProvider/ConfigProviderSubContexts.js.map +1 -0
- package/dist/components/ContentBadge/ContentBadge.d.ts +14 -1
- package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
- package/dist/components/ContentBadge/ContentBadge.js +39 -1
- package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +16 -10
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/components/DateInput/DateInput.js +4 -3
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.js +2 -2
- package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/components/Epic/ScrollSaver.d.ts.map +1 -1
- package/dist/components/Epic/ScrollSaver.js +1 -0
- package/dist/components/Epic/ScrollSaver.js.map +1 -1
- package/dist/components/FixedLayout/ParentWidthWrapper.d.ts +6 -0
- package/dist/components/FixedLayout/ParentWidthWrapper.d.ts.map +1 -0
- package/dist/components/FixedLayout/ParentWidthWrapper.js +43 -0
- package/dist/components/FixedLayout/ParentWidthWrapper.js.map +1 -0
- package/dist/components/Flex/Flex.d.ts +7 -4
- package/dist/components/Flex/Flex.d.ts.map +1 -1
- package/dist/components/Flex/Flex.js +5 -2
- package/dist/components/Flex/Flex.js.map +1 -1
- package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +3 -1
- package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.js +6 -2
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.js +2 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.d.ts +1 -1
- package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/components/Popper/Popper.js +1 -1
- package/dist/components/Popper/Popper.js.map +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.js +8 -4
- package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/components/Root/Root.d.ts +1 -1
- package/dist/components/Root/Root.d.ts.map +1 -1
- package/dist/components/Root/Root.js +14 -5
- package/dist/components/Root/Root.js.map +1 -1
- package/dist/components/SimpleGrid/SimpleGrid.d.ts +9 -8
- package/dist/components/SimpleGrid/SimpleGrid.d.ts.map +1 -1
- package/dist/components/SimpleGrid/SimpleGrid.js +9 -2
- package/dist/components/SimpleGrid/SimpleGrid.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +3 -4
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
- package/dist/components/Snackbar/Snackbar.js +6 -3
- package/dist/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/components/Spacing/Spacing.d.ts +1 -1
- package/dist/components/Spacing/Spacing.js.map +1 -1
- package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.d.ts +10 -0
- package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.d.ts.map +1 -0
- package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js +54 -0
- package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js.map +1 -0
- package/dist/components/Spinner/ExpressiveSpinner/icons.d.ts +18 -0
- package/dist/components/Spinner/ExpressiveSpinner/icons.d.ts.map +1 -0
- package/dist/components/Spinner/ExpressiveSpinner/icons.js +79 -0
- package/dist/components/Spinner/ExpressiveSpinner/icons.js.map +1 -0
- package/dist/components/Spinner/SvgIcon.d.ts +14 -0
- package/dist/components/Spinner/SvgIcon.d.ts.map +1 -0
- package/dist/components/Spinner/SvgIcon.js +20 -0
- package/dist/components/Spinner/SvgIcon.js.map +1 -0
- package/dist/components/Spinner/icons.d.ts +1 -1
- package/dist/components/Spinner/icons.d.ts.map +1 -1
- package/dist/components/Spinner/icons.js +10 -23
- package/dist/components/Spinner/icons.js.map +1 -1
- package/dist/components/SplitLayout/SplitLayout.d.ts +3 -3
- package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
- package/dist/components/TabsItem/TabsItem.js +2 -5
- package/dist/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +2 -2
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/WriteBar/WriteBar.d.ts +15 -1
- package/dist/components/WriteBar/WriteBar.d.ts.map +1 -1
- package/dist/components/WriteBar/WriteBar.js +35 -63
- package/dist/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.d.ts +5 -0
- package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.d.ts.map +1 -0
- package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js +15 -0
- package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js.map +1 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.d.ts +8 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.d.ts.map +1 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.js +16 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.js.map +1 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.d.ts +5 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.d.ts.map +1 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js +15 -0
- package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js.map +1 -0
- package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.d.ts +10 -0
- package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.d.ts.map +1 -0
- package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.js +16 -0
- package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.js.map +1 -0
- package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.d.ts +10 -0
- package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.d.ts.map +1 -0
- package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js +39 -0
- package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js.map +1 -0
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js +2 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.module.css +5 -3
- package/dist/cssm/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
- package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js +2 -2
- package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.js +0 -6
- package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRootContext.js +0 -1
- package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
- package/dist/cssm/components/Banner/Banner.js +7 -1
- package/dist/cssm/components/Banner/Banner.js.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.js +2 -1
- package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.js +4 -2
- package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.js +2 -2
- 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.map +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.js +61 -50
- package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.module.css +38 -0
- package/dist/cssm/components/CalendarTime/CalendarTimePicker.js +108 -48
- package/dist/cssm/components/CalendarTime/CalendarTimePicker.js.map +1 -1
- package/dist/cssm/components/CalendarTime/ComboBox.js +113 -0
- package/dist/cssm/components/CalendarTime/ComboBox.js.map +1 -0
- package/dist/cssm/components/CardScroll/CardScroll.js +2 -2
- package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/cssm/components/CarouselBase/CarouselBase.js +3 -1
- package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/useChipsSelect.js +2 -1
- package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProvider.js +8 -4
- package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js +5 -1
- package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProviderSubContexts.js +25 -0
- package/dist/cssm/components/ConfigProvider/ConfigProviderSubContexts.js.map +1 -0
- package/dist/cssm/components/ContentBadge/ContentBadge.js +39 -1
- package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
- package/dist/cssm/components/ContentBadge/ContentBadge.module.css +88 -90
- package/dist/cssm/components/CustomSelect/CustomSelect.js +16 -10
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.js +4 -3
- package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js +2 -2
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cssm/components/Epic/ScrollSaver.js +1 -0
- package/dist/cssm/components/Epic/ScrollSaver.js.map +1 -1
- package/dist/cssm/components/FixedLayout/ParentWidthWrapper.js +43 -0
- package/dist/cssm/components/FixedLayout/ParentWidthWrapper.js.map +1 -0
- package/dist/cssm/components/Flex/Flex.js +5 -2
- package/dist/cssm/components/Flex/Flex.js.map +1 -1
- package/dist/cssm/components/GridAvatar/GridAvatar.module.css +1 -1
- package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +3 -1
- package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js +6 -2
- package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +2 -1
- package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cssm/components/Popper/Popper.js +1 -1
- package/dist/cssm/components/Popper/Popper.js.map +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js +8 -4
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +1 -1
- package/dist/cssm/components/Root/Root.js +14 -5
- package/dist/cssm/components/Root/Root.js.map +1 -1
- package/dist/cssm/components/SimpleGrid/SimpleGrid.js +9 -2
- package/dist/cssm/components/SimpleGrid/SimpleGrid.js.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.js +3 -4
- package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.js +6 -3
- package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/cssm/components/Spacing/Spacing.js.map +1 -1
- package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js +56 -0
- package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js.map +1 -0
- package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css +13 -0
- package/dist/cssm/components/Spinner/ExpressiveSpinner/icons.js +79 -0
- package/dist/cssm/components/Spinner/ExpressiveSpinner/icons.js.map +1 -0
- package/dist/cssm/components/Spinner/SvgIcon.js +20 -0
- package/dist/cssm/components/Spinner/SvgIcon.js.map +1 -0
- package/dist/cssm/components/Spinner/icons.js +10 -23
- package/dist/cssm/components/Spinner/icons.js.map +1 -1
- package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.js +2 -5
- package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.js +35 -64
- package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js +16 -0
- package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js.map +1 -0
- package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css +12 -0
- package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.js +17 -0
- package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.js.map +1 -0
- package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css +18 -0
- package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js +16 -0
- package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js.map +1 -0
- package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css +3 -0
- package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.js +17 -0
- package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.js.map +1 -0
- package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css +15 -0
- package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js +40 -0
- package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js.map +1 -0
- package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css +43 -0
- package/dist/cssm/helpers/math.js +6 -0
- package/dist/cssm/helpers/math.js.map +1 -1
- package/dist/cssm/hoc/withPlatform.js +3 -2
- package/dist/cssm/hoc/withPlatform.js.map +1 -1
- package/dist/cssm/hooks/useAdaptivityConditionalRender/types.js.map +1 -1
- package/dist/cssm/hooks/useAnimationFrame.js +40 -0
- package/dist/cssm/hooks/useAnimationFrame.js.map +1 -0
- package/dist/cssm/hooks/useAutoFocus.js +4 -1
- package/dist/cssm/hooks/useAutoFocus.js.map +1 -1
- package/dist/cssm/hooks/useColorScheme.js +3 -3
- package/dist/cssm/hooks/useColorScheme.js.map +1 -1
- package/dist/cssm/hooks/useConfigDirection.js +3 -3
- package/dist/cssm/hooks/useConfigDirection.js.map +1 -1
- package/dist/cssm/hooks/useDateInput.js +1 -2
- package/dist/cssm/hooks/useDateInput.js.map +1 -1
- package/dist/cssm/hooks/useFocusTrap/useAutoFocus.js +1 -0
- package/dist/cssm/hooks/useFocusTrap/useAutoFocus.js.map +1 -1
- package/dist/cssm/hooks/useFocusTrap/useFocusTrap.js +2 -0
- package/dist/cssm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
- package/dist/cssm/hooks/useFocusVisible.js +8 -13
- package/dist/cssm/hooks/useFocusVisible.js.map +1 -1
- package/dist/cssm/hooks/useFocusWithin.js +5 -4
- package/dist/cssm/hooks/useFocusWithin.js.map +1 -1
- package/dist/cssm/hooks/useGlobalEscKeyDown.js +17 -15
- package/dist/cssm/hooks/useGlobalEscKeyDown.js.map +1 -1
- package/dist/cssm/hooks/useGlobalOnClickOutside.js +6 -2
- package/dist/cssm/hooks/useGlobalOnClickOutside.js.map +1 -1
- package/dist/cssm/hooks/useKeyboardInputTracker.js +48 -41
- package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
- package/dist/cssm/hooks/useLatestRef.js +13 -0
- package/dist/cssm/hooks/useLatestRef.js.map +1 -0
- package/dist/cssm/hooks/useLocale.js +3 -3
- package/dist/cssm/hooks/useLocale.js.map +1 -1
- package/dist/cssm/hooks/useMediaQueryMatch.js +1 -0
- package/dist/cssm/hooks/useMediaQueryMatch.js.map +1 -1
- package/dist/cssm/hooks/useMutationObserver.js +3 -3
- package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
- package/dist/cssm/hooks/usePlatform.js +3 -3
- package/dist/cssm/hooks/usePlatform.js.map +1 -1
- package/dist/cssm/hooks/useResizeObserver.js +4 -6
- package/dist/cssm/hooks/useResizeObserver.js.map +1 -1
- package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +2 -1
- package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
- package/dist/cssm/hooks/useSyncHTMLWithTokens.js +3 -1
- package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -1
- package/dist/cssm/hooks/useWaitTransitionFinish.js +13 -15
- package/dist/cssm/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/cssm/index.js +1 -0
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/array.js +18 -0
- package/dist/cssm/lib/array.js.map +1 -0
- package/dist/cssm/lib/curve.js +21 -0
- package/dist/cssm/lib/curve.js.map +1 -0
- package/dist/cssm/lib/dom.js +5 -2
- package/dist/cssm/lib/dom.js.map +1 -1
- package/dist/cssm/lib/fx.js +4 -55
- package/dist/cssm/lib/fx.js.map +1 -1
- package/dist/cssm/lib/layouts/index.js.map +1 -1
- package/dist/cssm/lib/layouts/layoutProps.js +11 -0
- package/dist/cssm/lib/layouts/layoutProps.js.map +1 -1
- package/dist/cssm/lib/layouts/resolveLayoutProps.js +13 -11
- package/dist/cssm/lib/layouts/resolveLayoutProps.js.map +1 -1
- package/dist/cssm/lib/layouts/types.js.map +1 -1
- package/dist/cssm/lib/material/shapes/Shape.js +18 -0
- package/dist/cssm/lib/material/shapes/Shape.js.map +1 -0
- package/dist/cssm/lib/material/shapes/shapes.js +2250 -0
- package/dist/cssm/lib/material/shapes/shapes.js.map +1 -0
- package/dist/cssm/lib/math.js +31 -0
- package/dist/cssm/lib/math.js.map +1 -0
- package/dist/cssm/lib/svg/path/approximate.js +57 -0
- package/dist/cssm/lib/svg/path/approximate.js.map +1 -0
- package/dist/cssm/lib/svg/path/interpolate.js +121 -0
- package/dist/cssm/lib/svg/path/interpolate.js.map +1 -0
- package/dist/cssm/lib/svg/path/path.js +50 -0
- package/dist/cssm/lib/svg/path/path.js.map +1 -0
- package/dist/cssm/lib/svg/path/point.js +3 -0
- package/dist/cssm/lib/svg/path/point.js.map +1 -0
- package/dist/cssm/lib/svg/path/transform.js +110 -0
- package/dist/cssm/lib/svg/path/transform.js.map +1 -0
- package/dist/cssm/lib/tokens/useTokenClassName.js +4 -1
- package/dist/cssm/lib/tokens/useTokenClassName.js.map +1 -1
- package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
- package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
- package/dist/cssm/styles/layout.css +273 -0
- package/dist/cssm/types.js +1 -4
- package/dist/cssm/types.js.map +1 -1
- package/dist/helpers/math.d.ts +4 -0
- package/dist/helpers/math.d.ts.map +1 -1
- package/dist/helpers/math.js +6 -0
- package/dist/helpers/math.js.map +1 -1
- package/dist/hoc/withPlatform.d.ts +1 -1
- package/dist/hoc/withPlatform.d.ts.map +1 -1
- package/dist/hoc/withPlatform.js +3 -2
- package/dist/hoc/withPlatform.js.map +1 -1
- package/dist/hooks/useAdaptivityConditionalRender/types.d.ts +2 -2
- package/dist/hooks/useAdaptivityConditionalRender/types.js.map +1 -1
- package/dist/hooks/useAnimationFrame.d.ts +16 -0
- package/dist/hooks/useAnimationFrame.d.ts.map +1 -0
- package/dist/hooks/useAnimationFrame.js +40 -0
- package/dist/hooks/useAnimationFrame.js.map +1 -0
- package/dist/hooks/useAutoFocus.js +4 -1
- package/dist/hooks/useAutoFocus.js.map +1 -1
- package/dist/hooks/useColorScheme.d.ts.map +1 -1
- package/dist/hooks/useColorScheme.js +3 -3
- package/dist/hooks/useColorScheme.js.map +1 -1
- package/dist/hooks/useConfigDirection.d.ts.map +1 -1
- package/dist/hooks/useConfigDirection.js +3 -3
- package/dist/hooks/useConfigDirection.js.map +1 -1
- package/dist/hooks/useDateInput.d.ts.map +1 -1
- package/dist/hooks/useDateInput.js +1 -2
- package/dist/hooks/useDateInput.js.map +1 -1
- package/dist/hooks/useFocusTrap/useAutoFocus.js +1 -0
- package/dist/hooks/useFocusTrap/useAutoFocus.js.map +1 -1
- package/dist/hooks/useFocusTrap/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap/useFocusTrap.js +2 -0
- package/dist/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
- package/dist/hooks/useFocusVisible.d.ts.map +1 -1
- package/dist/hooks/useFocusVisible.js +8 -13
- package/dist/hooks/useFocusVisible.js.map +1 -1
- package/dist/hooks/useFocusWithin.d.ts.map +1 -1
- package/dist/hooks/useFocusWithin.js +5 -4
- package/dist/hooks/useFocusWithin.js.map +1 -1
- package/dist/hooks/useGlobalEscKeyDown.d.ts.map +1 -1
- package/dist/hooks/useGlobalEscKeyDown.js +17 -15
- package/dist/hooks/useGlobalEscKeyDown.js.map +1 -1
- package/dist/hooks/useGlobalOnClickOutside.d.ts.map +1 -1
- package/dist/hooks/useGlobalOnClickOutside.js +6 -2
- package/dist/hooks/useGlobalOnClickOutside.js.map +1 -1
- package/dist/hooks/useKeyboardInputTracker.d.ts +1 -19
- package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
- package/dist/hooks/useKeyboardInputTracker.js +48 -41
- package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
- package/dist/hooks/useLatestRef.d.ts +3 -0
- package/dist/hooks/useLatestRef.d.ts.map +1 -0
- package/dist/hooks/useLatestRef.js +13 -0
- package/dist/hooks/useLatestRef.js.map +1 -0
- package/dist/hooks/useLocale.d.ts.map +1 -1
- package/dist/hooks/useLocale.js +3 -3
- package/dist/hooks/useLocale.js.map +1 -1
- package/dist/hooks/useMediaQueryMatch.js +1 -0
- package/dist/hooks/useMediaQueryMatch.js.map +1 -1
- package/dist/hooks/useMutationObserver.d.ts +1 -2
- package/dist/hooks/useMutationObserver.d.ts.map +1 -1
- package/dist/hooks/useMutationObserver.js +3 -3
- package/dist/hooks/useMutationObserver.js.map +1 -1
- package/dist/hooks/usePlatform.d.ts.map +1 -1
- package/dist/hooks/usePlatform.js +3 -3
- package/dist/hooks/usePlatform.js.map +1 -1
- package/dist/hooks/useResizeObserver.d.ts.map +1 -1
- package/dist/hooks/useResizeObserver.js +4 -6
- package/dist/hooks/useResizeObserver.js.map +1 -1
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +2 -1
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
- package/dist/hooks/useSyncHTMLWithTokens.js +3 -1
- package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -1
- package/dist/hooks/useWaitTransitionFinish.d.ts.map +1 -1
- package/dist/hooks/useWaitTransitionFinish.js +13 -15
- package/dist/hooks/useWaitTransitionFinish.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/array.d.ts +17 -0
- package/dist/lib/array.d.ts.map +1 -0
- package/dist/lib/array.js +18 -0
- package/dist/lib/array.js.map +1 -0
- package/dist/lib/curve.d.ts +9 -0
- package/dist/lib/curve.d.ts.map +1 -0
- package/dist/lib/curve.js +21 -0
- package/dist/lib/curve.js.map +1 -0
- package/dist/lib/dom.d.ts +2 -1
- package/dist/lib/dom.d.ts.map +1 -1
- package/dist/lib/dom.js +5 -2
- package/dist/lib/dom.js.map +1 -1
- package/dist/lib/fx.d.ts +1 -8
- package/dist/lib/fx.d.ts.map +1 -1
- package/dist/lib/fx.js +4 -55
- package/dist/lib/fx.js.map +1 -1
- package/dist/lib/layouts/index.d.ts +1 -1
- package/dist/lib/layouts/index.d.ts.map +1 -1
- package/dist/lib/layouts/index.js.map +1 -1
- package/dist/lib/layouts/layoutProps.d.ts +7 -0
- package/dist/lib/layouts/layoutProps.d.ts.map +1 -1
- package/dist/lib/layouts/layoutProps.js +11 -0
- package/dist/lib/layouts/layoutProps.js.map +1 -1
- package/dist/lib/layouts/resolveLayoutProps.d.ts.map +1 -1
- package/dist/lib/layouts/resolveLayoutProps.js +13 -11
- package/dist/lib/layouts/resolveLayoutProps.js.map +1 -1
- package/dist/lib/layouts/types.d.ts +29 -0
- package/dist/lib/layouts/types.d.ts.map +1 -1
- package/dist/lib/layouts/types.js.map +1 -1
- package/dist/lib/material/shapes/Shape.d.ts +8 -0
- package/dist/lib/material/shapes/Shape.d.ts.map +1 -0
- package/dist/lib/material/shapes/Shape.js +18 -0
- package/dist/lib/material/shapes/Shape.js.map +1 -0
- package/dist/lib/material/shapes/shapes.d.ts +43 -0
- package/dist/lib/material/shapes/shapes.d.ts.map +1 -0
- package/dist/lib/material/shapes/shapes.js +2250 -0
- package/dist/lib/material/shapes/shapes.js.map +1 -0
- package/dist/lib/math.d.ts +23 -0
- package/dist/lib/math.d.ts.map +1 -0
- package/dist/lib/math.js +31 -0
- package/dist/lib/math.js.map +1 -0
- package/dist/lib/svg/path/approximate.d.ts +21 -0
- package/dist/lib/svg/path/approximate.d.ts.map +1 -0
- package/dist/lib/svg/path/approximate.js +57 -0
- package/dist/lib/svg/path/approximate.js.map +1 -0
- package/dist/lib/svg/path/interpolate.d.ts +5 -0
- package/dist/lib/svg/path/interpolate.d.ts.map +1 -0
- package/dist/lib/svg/path/interpolate.js +121 -0
- package/dist/lib/svg/path/interpolate.js.map +1 -0
- package/dist/lib/svg/path/path.d.ts +48 -0
- package/dist/lib/svg/path/path.d.ts.map +1 -0
- package/dist/lib/svg/path/path.js +50 -0
- package/dist/lib/svg/path/path.js.map +1 -0
- package/dist/lib/svg/path/point.d.ts +3 -0
- package/dist/lib/svg/path/point.d.ts.map +1 -0
- package/dist/lib/svg/path/point.js +3 -0
- package/dist/lib/svg/path/point.js.map +1 -0
- package/dist/lib/svg/path/transform.d.ts +64 -0
- package/dist/lib/svg/path/transform.d.ts.map +1 -0
- package/dist/lib/svg/path/transform.js +110 -0
- package/dist/lib/svg/path/transform.js.map +1 -0
- package/dist/lib/tokens/useTokenClassName.d.ts.map +1 -1
- package/dist/lib/tokens/useTokenClassName.js +4 -1
- package/dist/lib/tokens/useTokenClassName.js.map +1 -1
- package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
- package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
- package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -4
- package/dist/types.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +7 -6
- package/src/components/ActionSheet/ActionSheet.module.css +5 -3
- package/src/components/ActionSheet/ActionSheet.module.css.d.ts.map +1 -1
- package/src/components/ActionSheet/ActionSheet.tsx +6 -3
- package/src/components/AdaptivityProvider/AdaptivityContext.tsx +3 -3
- package/src/components/AdaptivityProvider/AdaptivityProvider.tsx +2 -2
- package/src/components/AppRoot/AppRoot.tsx +1 -14
- package/src/components/AppRoot/AppRootContext.ts +0 -2
- package/src/components/Banner/Banner.tsx +8 -5
- package/src/components/Calendar/Calendar.tsx +2 -2
- package/src/components/CalendarDay/CalendarDay.tsx +4 -2
- package/src/components/CalendarDays/CalendarDays.tsx +2 -2
- package/src/components/CalendarHeader/CalendarHeader.tsx +4 -2
- package/src/components/CalendarRange/CalendarRange.tsx +2 -2
- package/src/components/CalendarTime/CalendarTime.module.css +38 -0
- package/src/components/CalendarTime/CalendarTime.module.css.d.ts.map +1 -1
- package/src/components/CalendarTime/CalendarTime.tsx +68 -55
- package/src/components/CalendarTime/CalendarTimePicker.tsx +148 -62
- package/src/components/CalendarTime/ComboBox.tsx +189 -0
- package/src/components/CardScroll/CardScroll.tsx +6 -5
- package/src/components/CarouselBase/CarouselBase.tsx +2 -1
- package/src/components/ChipsSelect/useChipsSelect.ts +1 -0
- package/src/components/ConfigProvider/ConfigProvider.tsx +6 -3
- package/src/components/ConfigProvider/ConfigProviderOverride.tsx +2 -1
- package/src/components/ConfigProvider/ConfigProviderSubContexts.tsx +43 -0
- package/src/components/ContentBadge/ContentBadge.module.css +84 -91
- package/src/components/ContentBadge/ContentBadge.module.css.d.ts.map +1 -1
- package/src/components/ContentBadge/ContentBadge.tsx +73 -5
- package/src/components/CustomSelect/CustomSelect.tsx +19 -10
- package/src/components/DateInput/DateInput.tsx +3 -3
- package/src/components/DateRangeInput/DateRangeInput.tsx +2 -2
- package/src/components/Epic/ScrollSaver.tsx +1 -0
- package/src/components/FixedLayout/ParentWidthWrapper.tsx +48 -0
- package/src/components/Flex/Flex.tsx +11 -6
- package/src/components/GridAvatar/GridAvatar.module.css +1 -1
- package/src/components/GridAvatar/GridAvatar.module.css.d.ts.map +1 -1
- package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx +1 -1
- package/src/components/NativeSelect/NativeSelect.tsx +4 -2
- package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +1 -1
- package/src/components/PanelHeader/PanelHeader.tsx +1 -1
- package/src/components/Popper/Popper.tsx +1 -1
- package/src/components/PullToRefresh/PullToRefresh.module.css +1 -1
- package/src/components/PullToRefresh/PullToRefresh.tsx +10 -3
- package/src/components/Root/Root.tsx +10 -7
- package/src/components/SimpleGrid/SimpleGrid.tsx +25 -11
- package/src/components/Skeleton/Skeleton.tsx +6 -4
- package/src/components/Snackbar/Snackbar.tsx +6 -3
- package/src/components/Spacing/Spacing.tsx +1 -1
- package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css +13 -0
- package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css.d.ts.map +1 -0
- package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.tsx +73 -0
- package/src/components/Spinner/ExpressiveSpinner/icons.tsx +104 -0
- package/src/components/Spinner/SvgIcon.tsx +31 -0
- package/src/components/Spinner/icons.tsx +10 -13
- package/src/components/SplitLayout/SplitLayout.tsx +3 -3
- package/src/components/TabsItem/TabsItem.tsx +4 -5
- package/src/components/Tappable/Tappable.tsx +2 -2
- package/src/components/WriteBar/WriteBar.tsx +25 -59
- package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css +12 -0
- package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css.d.ts.map +1 -0
- package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.tsx +20 -0
- package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css +18 -0
- package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css.d.ts.map +1 -0
- package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.tsx +22 -0
- package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css +3 -0
- package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css.d.ts.map +1 -0
- package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.tsx +23 -0
- package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css +14 -0
- package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css.d.ts.map +1 -0
- package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.tsx +31 -0
- package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css +42 -0
- package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css.d.ts.map +1 -0
- package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.tsx +48 -0
- package/src/helpers/math.ts +8 -0
- package/src/hoc/withPlatform.tsx +3 -3
- package/src/hooks/useAdaptivityConditionalRender/types.ts +2 -2
- package/src/hooks/useAnimationFrame.tsx +42 -0
- package/src/hooks/useAutoFocus.ts +1 -1
- package/src/hooks/useColorScheme.ts +3 -4
- package/src/hooks/useConfigDirection.ts +3 -4
- package/src/hooks/useDateInput.ts +1 -2
- package/src/hooks/useFocusTrap/useAutoFocus.ts +1 -1
- package/src/hooks/useFocusTrap/useFocusTrap.tsx +2 -0
- package/src/hooks/useFocusVisible.ts +10 -18
- package/src/hooks/useFocusWithin.ts +26 -23
- package/src/hooks/useGlobalEscKeyDown.ts +12 -15
- package/src/hooks/useGlobalOnClickOutside.ts +5 -2
- package/src/hooks/useKeyboardInputTracker.ts +68 -55
- package/src/hooks/useLatestRef.ts +12 -0
- package/src/hooks/useLocale.ts +3 -4
- package/src/hooks/useMediaQueryMatch.ts +1 -1
- package/src/hooks/useMutationObserver.ts +2 -3
- package/src/hooks/usePlatform.ts +3 -4
- package/src/hooks/useResizeObserver.ts +4 -5
- package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +1 -1
- package/src/hooks/useSyncHTMLWithTokens.ts +1 -1
- package/src/hooks/useWaitTransitionFinish.ts +15 -15
- package/src/index.ts +1 -0
- package/src/lib/array.ts +19 -0
- package/src/lib/curve.ts +36 -0
- package/src/lib/dom.tsx +10 -4
- package/src/lib/fx.ts +5 -63
- package/src/lib/layouts/index.ts +1 -0
- package/src/lib/layouts/layoutProps.ts +8 -0
- package/src/lib/layouts/resolveLayoutProps.ts +19 -17
- package/src/lib/layouts/types.ts +29 -0
- package/src/lib/material/shapes/Shape.tsx +17 -0
- package/src/lib/material/shapes/shapes.ts +329 -0
- package/src/lib/math.ts +37 -0
- package/src/lib/svg/path/approximate.ts +81 -0
- package/src/lib/svg/path/interpolate.ts +151 -0
- package/src/lib/svg/path/path.ts +102 -0
- package/src/lib/svg/path/point.ts +2 -0
- package/src/lib/svg/path/transform.ts +147 -0
- package/src/lib/tokens/useTokenClassName.ts +7 -5
- package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
- package/src/types.ts +16 -0
- package/dist/cssm/components/WriteBar/WriteBar.module.css +0 -118
- package/src/components/WriteBar/WriteBar.module.css +0 -116
- package/src/components/WriteBar/WriteBar.module.css.d.ts.map +0 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { classNames } from "@vkontakte/vkjs";
|
|
5
|
+
import { getRequiredValueByKey } from "../../helpers/getValueByKey.js";
|
|
5
6
|
import { useAdaptivity } from "../../hooks/useAdaptivity.js";
|
|
6
7
|
import { defineComponentDisplayNames } from "../../lib/react/defineComponentDisplayNames.js";
|
|
7
8
|
import { Tappable } from "../Tappable/Tappable.js";
|
|
@@ -10,6 +11,11 @@ import { footnoteClassNames } from "../Typography/Footnote/Footnote.js";
|
|
|
10
11
|
import { weightClassNames } from "../Typography/Typography.js";
|
|
11
12
|
import { ContentBadgeContext } from "./ContentBadgeContext.js";
|
|
12
13
|
import { ContentBadgeIconSlot } from "./ContentBadgeIconSlot.js";
|
|
14
|
+
const modeClassNames = {
|
|
15
|
+
primary: "vkuiContentBadge__modePrimary",
|
|
16
|
+
secondary: "vkuiContentBadge__modeSecondary",
|
|
17
|
+
outline: "vkuiContentBadge__modeOutline"
|
|
18
|
+
};
|
|
13
19
|
const appearanceClassNames = {
|
|
14
20
|
'accent': {
|
|
15
21
|
primary: "vkuiContentBadge__primaryAccent",
|
|
@@ -42,6 +48,36 @@ const sizeClassNames = {
|
|
|
42
48
|
m: "vkuiContentBadge__sizeM",
|
|
43
49
|
l: "vkuiContentBadge__sizeL"
|
|
44
50
|
};
|
|
51
|
+
const isPresetAppearance = (appearance)=>appearance in appearanceClassNames;
|
|
52
|
+
const resolveAppearance = (appearance, mode)=>{
|
|
53
|
+
if (isPresetAppearance(appearance)) {
|
|
54
|
+
return [
|
|
55
|
+
undefined,
|
|
56
|
+
appearanceClassNames[appearance][mode]
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
return [
|
|
60
|
+
getRequiredValueByKey(mode, {
|
|
61
|
+
primary: {
|
|
62
|
+
'--vkui_internal_ContentBadge--background': appearance,
|
|
63
|
+
'--vkui_internal_ContentBadge--color': 'var(--vkui--color_text_contrast)',
|
|
64
|
+
'--vkui_internal_ContentBadge--iconColor': 'var(--vkui--color_icon_contrast)'
|
|
65
|
+
},
|
|
66
|
+
secondary: {
|
|
67
|
+
'--vkui_internal_ContentBadge--color': appearance,
|
|
68
|
+
'--vkui_internal_ContentBadge--iconColor': appearance,
|
|
69
|
+
'--vkui_internal_ContentBadge--background': appearance,
|
|
70
|
+
'--vkui_internal_ContentBadge--backgroundOpacity': '0.16'
|
|
71
|
+
},
|
|
72
|
+
outline: {
|
|
73
|
+
'--vkui_internal_ContentBadge--color': appearance,
|
|
74
|
+
'--vkui_internal_ContentBadge--iconColor': appearance,
|
|
75
|
+
'--vkui_internal_ContentBadge--borderColor': appearance
|
|
76
|
+
}
|
|
77
|
+
}),
|
|
78
|
+
undefined
|
|
79
|
+
];
|
|
80
|
+
};
|
|
45
81
|
/**
|
|
46
82
|
* Компонент, который позволяет добавить текстовые или иконочные бейджи. Как правило, используются
|
|
47
83
|
* поверх других элементов или рядом с ними.
|
|
@@ -53,8 +89,10 @@ const sizeClassNames = {
|
|
|
53
89
|
*/ export const ContentBadge = ({ appearance = 'accent', mode = 'primary', capsule, size = 'm', weight = '2', children, ...restProps })=>{
|
|
54
90
|
const { density = 'none' } = useAdaptivity();
|
|
55
91
|
const typographyClassNames = size === 'l' ? footnoteClassNames(density) : captionClassNames(density);
|
|
92
|
+
const [appearanceStyles, appearanceClassName] = resolveAppearance(appearance, mode);
|
|
56
93
|
return /*#__PURE__*/ _jsx(Tappable, {
|
|
57
|
-
baseClassName: classNames("vkuiContentBadge__host", size !== 's' && capsule && "vkuiContentBadge__capsule",
|
|
94
|
+
baseClassName: classNames("vkuiContentBadge__host", size !== 's' && capsule && "vkuiContentBadge__capsule", modeClassNames[mode], appearanceClassName, sizeClassNames[size], typographyClassNames, weightClassNames(weight)),
|
|
95
|
+
baseStyle: appearanceStyles,
|
|
58
96
|
DefaultComponent: "span",
|
|
59
97
|
hoverMode: "opacity",
|
|
60
98
|
activeMode: "opacity",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ContentBadge/ContentBadge.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { Tappable } from '../Tappable/Tappable';\nimport { captionClassNames } from '../Typography/Caption/Caption';\nimport { footnoteClassNames } from '../Typography/Footnote/Footnote';\nimport { type TypographyProps, weightClassNames } from '../Typography/Typography';\nimport { ContentBadgeContext } from './ContentBadgeContext';\nimport { ContentBadgeIconSlot } from './ContentBadgeIconSlot';\nimport type { ContentBadgeModeType, ContentBadgeSizeType } from './types';\nimport styles from './ContentBadge.module.css';\n\nconst appearanceClassNames = {\n 'accent': {\n primary: styles.primaryAccent,\n secondary: styles.secondaryAccent,\n outline: styles.outlineAccent,\n },\n 'neutral': {\n primary: styles.primaryNeutral,\n secondary: styles.secondaryNeutral,\n outline: styles.outlineNeutral,\n },\n 'accent-green': {\n primary: styles.primaryAccentGreen,\n secondary: styles.secondaryAccentGreen,\n outline: styles.outlineAccentGreen,\n },\n 'accent-red': {\n primary: styles.primaryAccentRed,\n secondary: styles.secondaryAccentRed,\n outline: styles.outlineAccentRed,\n },\n 'overlay': {\n primary: styles.primaryOverlay,\n secondary: styles.secondaryOverlay,\n outline: styles.outlineOverlay,\n },\n};\n\nconst sizeClassNames = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nexport interface ContentBadgeProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n Pick<TypographyProps, 'weight'> {\n /**\n * Вид отображения.\n */\n mode?: ContentBadgeModeType | undefined;\n /**\n * Цвет оформления.\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ContentBadge/ContentBadge.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getRequiredValueByKey } from '../../helpers/getValueByKey';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { CSSCustomProperties, HTMLAttributesWithRootRef } from '../../types';\nimport { Tappable } from '../Tappable/Tappable';\nimport { captionClassNames } from '../Typography/Caption/Caption';\nimport { footnoteClassNames } from '../Typography/Footnote/Footnote';\nimport { type TypographyProps, weightClassNames } from '../Typography/Typography';\nimport { ContentBadgeContext } from './ContentBadgeContext';\nimport { ContentBadgeIconSlot } from './ContentBadgeIconSlot';\nimport type { ContentBadgeModeType, ContentBadgeSizeType } from './types';\nimport styles from './ContentBadge.module.css';\n\ntype ContentBadgePresetAppearance =\n | 'accent'\n | 'neutral'\n | 'accent-green'\n | 'accent-red'\n | 'overlay';\n\ntype ContentBadgeCustomAppearance = `var(--${string})` | `#${string}`;\n\nexport type ContentBadgeAppearance = ContentBadgePresetAppearance | ContentBadgeCustomAppearance;\n\nconst modeClassNames: Record<ContentBadgeModeType, string> = {\n primary: styles.modePrimary,\n secondary: styles.modeSecondary,\n outline: styles.modeOutline,\n};\n\nconst appearanceClassNames: Record<\n ContentBadgePresetAppearance,\n Record<ContentBadgeModeType, string>\n> = {\n 'accent': {\n primary: styles.primaryAccent,\n secondary: styles.secondaryAccent,\n outline: styles.outlineAccent,\n },\n 'neutral': {\n primary: styles.primaryNeutral,\n secondary: styles.secondaryNeutral,\n outline: styles.outlineNeutral,\n },\n 'accent-green': {\n primary: styles.primaryAccentGreen,\n secondary: styles.secondaryAccentGreen,\n outline: styles.outlineAccentGreen,\n },\n 'accent-red': {\n primary: styles.primaryAccentRed,\n secondary: styles.secondaryAccentRed,\n outline: styles.outlineAccentRed,\n },\n 'overlay': {\n primary: styles.primaryOverlay,\n secondary: styles.secondaryOverlay,\n outline: styles.outlineOverlay,\n },\n};\n\nconst sizeClassNames = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nconst isPresetAppearance = (\n appearance: ContentBadgeAppearance,\n): appearance is ContentBadgePresetAppearance => appearance in appearanceClassNames;\n\nconst resolveAppearance = (\n appearance: ContentBadgeAppearance,\n mode: ContentBadgeModeType,\n): [CSSCustomProperties | undefined, string | undefined] => {\n if (isPresetAppearance(appearance)) {\n return [undefined, appearanceClassNames[appearance][mode]];\n }\n\n return [\n getRequiredValueByKey<CSSCustomProperties>(mode, {\n primary: {\n '--vkui_internal_ContentBadge--background': appearance,\n '--vkui_internal_ContentBadge--color': 'var(--vkui--color_text_contrast)',\n '--vkui_internal_ContentBadge--iconColor': 'var(--vkui--color_icon_contrast)',\n },\n secondary: {\n '--vkui_internal_ContentBadge--color': appearance,\n '--vkui_internal_ContentBadge--iconColor': appearance,\n '--vkui_internal_ContentBadge--background': appearance,\n '--vkui_internal_ContentBadge--backgroundOpacity': '0.16',\n },\n outline: {\n '--vkui_internal_ContentBadge--color': appearance,\n '--vkui_internal_ContentBadge--iconColor': appearance,\n '--vkui_internal_ContentBadge--borderColor': appearance,\n },\n }),\n undefined,\n ];\n};\n\nexport interface ContentBadgeProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n Pick<TypographyProps, 'weight'> {\n /**\n * Вид отображения.\n */\n mode?: ContentBadgeModeType | undefined;\n /**\n * Цвет оформления.\n *\n * Помимо предустановленных значений принимает кастомный цвет в формате\n * CSS-переменной (`var(--my-token)`) или HEX (`#RRGGBB`).\n *\n * Применение кастомного цвета по режимам:\n *\n * - `mode=\"primary\"` — фон = кастомный цвет, текст/иконка = `--vkui--color_text_contrast` / `--vkui--color_icon_contrast`;\n * - `mode=\"secondary\"` — фон = кастомный цвет с прозрачностью 16% (отдельным слоем), текст и иконка = кастомный цвет;\n * - `mode=\"outline\"` — бордер, текст и иконка = кастомный цвет.\n */\n appearance?: ContentBadgeAppearance | undefined;\n /**\n * Включает приближение значения закругления к форме круга.\n *\n * > Note: игнорируется при size=\"s\".\n */\n capsule?: boolean | undefined;\n /**\n * Определяет отступы и размер текста.\n *\n * Соответствие размеров иконок в слоте `<ContentBadge.SlotIcon />`:\n *\n * - size=\"s\" – ⚠️ не поддерживает иконки;\n * - size=\"m\" – при **одиночной** иконке `16x16`, в остальных случаях `12x12`;\n * - size=\"l\" – при **одиночной** иконке `20x20`, в остальных случаях `16x16`.\n */\n size?: ContentBadgeSizeType | undefined;\n}\n\n/**\n * Компонент, который позволяет добавить текстовые или иконочные бейджи. Как правило, используются\n * поверх других элементов или рядом с ними.\n *\n * Используйте `ContentBadge.SlotIcon` для размещения иконок внутри `ContentBadge`.\n *\n * @since 6.1.0\n * @see https://vkui.io/components/content-badge\n */\nexport const ContentBadge: React.FC<ContentBadgeProps> & {\n IconSlot: typeof ContentBadgeIconSlot;\n /**\n * @deprecated Since 7.3.4. Используйте `IconSlot`.\n */\n SlotIcon: typeof ContentBadgeIconSlot;\n} = ({\n appearance = 'accent',\n mode = 'primary',\n capsule,\n size = 'm',\n weight = '2',\n children,\n ...restProps\n}: ContentBadgeProps) => {\n const { density = 'none' } = useAdaptivity();\n const typographyClassNames =\n size === 'l' ? footnoteClassNames(density) : captionClassNames(density);\n\n const [appearanceStyles, appearanceClassName] = resolveAppearance(appearance, mode);\n\n return (\n <Tappable\n baseClassName={classNames(\n styles.host,\n size !== 's' && capsule && styles.capsule,\n modeClassNames[mode],\n appearanceClassName,\n sizeClassNames[size],\n typographyClassNames,\n weightClassNames(weight),\n )}\n baseStyle={appearanceStyles}\n DefaultComponent=\"span\"\n hoverMode=\"opacity\"\n activeMode=\"opacity\"\n {...restProps}\n >\n <ContentBadgeContext.Provider\n value={{ isSingleChild: React.Children.count(children) === 1, size }}\n >\n {children}\n </ContentBadgeContext.Provider>\n </Tappable>\n );\n};\n\nContentBadge.IconSlot = ContentBadgeIconSlot;\nContentBadge.SlotIcon = ContentBadgeIconSlot;\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(ContentBadge.IconSlot, 'ContentBadge.IconSlot');\n defineComponentDisplayNames(ContentBadge.SlotIcon, 'ContentBadge.SlotIcon');\n}\n"],"names":["React","classNames","getRequiredValueByKey","useAdaptivity","defineComponentDisplayNames","Tappable","captionClassNames","footnoteClassNames","weightClassNames","ContentBadgeContext","ContentBadgeIconSlot","modeClassNames","primary","secondary","outline","appearanceClassNames","sizeClassNames","s","m","l","isPresetAppearance","appearance","resolveAppearance","mode","undefined","ContentBadge","capsule","size","weight","children","restProps","density","typographyClassNames","appearanceStyles","appearanceClassName","baseClassName","baseStyle","DefaultComponent","hoverMode","activeMode","Provider","value","isSingleChild","Children","count","IconSlot","SlotIcon","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,qBAAqB,QAAQ,iCAA8B;AACpE,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,2BAA2B,QAAQ,iDAA8C;AAE1F,SAASC,QAAQ,QAAQ,0BAAuB;AAChD,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,kBAAkB,QAAQ,qCAAkC;AACrE,SAA+BC,gBAAgB,QAAQ,8BAA2B;AAClF,SAASC,mBAAmB,QAAQ,2BAAwB;AAC5D,SAASC,oBAAoB,QAAQ,4BAAyB;AAe9D,MAAMC,iBAAuD;IAC3DC,OAAO;IACPC,SAAS;IACTC,OAAO;AACT;AAEA,MAAMC,uBAGF;IACF,UAAU;QACRH,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,WAAW;QACTF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,gBAAgB;QACdF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,cAAc;QACZF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;IACA,WAAW;QACTF,OAAO;QACPC,SAAS;QACTC,OAAO;IACT;AACF;AAEA,MAAME,iBAAiB;IACrBC,CAAC;IACDC,CAAC;IACDC,CAAC;AACH;AAEA,MAAMC,qBAAqB,CACzBC,aAC+CA,cAAcN;AAE/D,MAAMO,oBAAoB,CACxBD,YACAE;IAEA,IAAIH,mBAAmBC,aAAa;QAClC,OAAO;YAACG;YAAWT,oBAAoB,CAACM,WAAW,CAACE,KAAK;SAAC;IAC5D;IAEA,OAAO;QACLrB,sBAA2CqB,MAAM;YAC/CX,SAAS;gBACP,4CAA4CS;gBAC5C,uCAAuC;gBACvC,2CAA2C;YAC7C;YACAR,WAAW;gBACT,uCAAuCQ;gBACvC,2CAA2CA;gBAC3C,4CAA4CA;gBAC5C,mDAAmD;YACrD;YACAP,SAAS;gBACP,uCAAuCO;gBACvC,2CAA2CA;gBAC3C,6CAA6CA;YAC/C;QACF;QACAG;KACD;AACH;AAwCA;;;;;;;;CAQC,GACD,OAAO,MAAMC,eAMT,CAAC,EACHJ,aAAa,QAAQ,EACrBE,OAAO,SAAS,EAChBG,OAAO,EACPC,OAAO,GAAG,EACVC,SAAS,GAAG,EACZC,QAAQ,EACR,GAAGC,WACe;IAClB,MAAM,EAAEC,UAAU,MAAM,EAAE,GAAG5B;IAC7B,MAAM6B,uBACJL,SAAS,MAAMpB,mBAAmBwB,WAAWzB,kBAAkByB;IAEjE,MAAM,CAACE,kBAAkBC,oBAAoB,GAAGZ,kBAAkBD,YAAYE;IAE9E,qBACE,KAAClB;QACC8B,eAAelC,qCAEb0B,SAAS,OAAOD,wCAChBf,cAAc,CAACY,KAAK,EACpBW,qBACAlB,cAAc,CAACW,KAAK,EACpBK,sBACAxB,iBAAiBoB;QAEnBQ,WAAWH;QACXI,kBAAiB;QACjBC,WAAU;QACVC,YAAW;QACV,GAAGT,SAAS;kBAEb,cAAA,KAACrB,oBAAoB+B,QAAQ;YAC3BC,OAAO;gBAAEC,eAAe1C,MAAM2C,QAAQ,CAACC,KAAK,CAACf,cAAc;gBAAGF;YAAK;sBAElEE;;;AAIT,EAAE;AAEFJ,aAAaoB,QAAQ,GAAGnC;AACxBe,aAAaqB,QAAQ,GAAGpC;AAExB,IAAIqC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzC7C,4BAA4BqB,aAAaoB,QAAQ,EAAE;IACnDzC,4BAA4BqB,aAAaqB,QAAQ,EAAE;AACrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,6 @@ import { useAdaptivity } from "../../hooks/useAdaptivity.js";
|
|
|
7
7
|
import { useExternRef } from "../../hooks/useExternRef.js";
|
|
8
8
|
import { useMergeProps } from "../../hooks/useMergeProps.js";
|
|
9
9
|
import { callMultiple } from "../../lib/callMultiple.js";
|
|
10
|
-
import { useDOM } from "../../lib/dom.js";
|
|
11
10
|
import { defaultFilterFn } from "../../lib/select.js";
|
|
12
11
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
|
|
13
12
|
import { preventDefault } from "../../lib/utils.js";
|
|
@@ -49,11 +48,19 @@ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = '
|
|
|
49
48
|
useIsomorphicLayoutEffect(function updateStatus() {
|
|
50
49
|
if (fetching) {
|
|
51
50
|
setStatus('fetching');
|
|
51
|
+
return;
|
|
52
52
|
} else {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
let timeoutId;
|
|
54
|
+
setStatus((prevStatus)=>{
|
|
55
|
+
if (prevStatus === 'fetching') {
|
|
56
|
+
timeoutId = setTimeout(()=>setStatus('none'), FETCH_STATUS_RESET_DELAY);
|
|
57
|
+
return 'loaded';
|
|
58
|
+
}
|
|
59
|
+
return prevStatus;
|
|
60
|
+
});
|
|
61
|
+
return ()=>{
|
|
62
|
+
clearTimeout(timeoutId);
|
|
63
|
+
};
|
|
57
64
|
}
|
|
58
65
|
}, [
|
|
59
66
|
fetching
|
|
@@ -180,6 +187,7 @@ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = '
|
|
|
180
187
|
});
|
|
181
188
|
selectElRef.current?.dispatchEvent(event);
|
|
182
189
|
}
|
|
190
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
183
191
|
}, [
|
|
184
192
|
nativeSelectValue
|
|
185
193
|
]);
|
|
@@ -342,7 +350,6 @@ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = '
|
|
|
342
350
|
readOnly,
|
|
343
351
|
icon: iconProp
|
|
344
352
|
});
|
|
345
|
-
const { document } = useDOM();
|
|
346
353
|
const passClickAndFocusToInputOnClick = React.useCallback((e)=>{
|
|
347
354
|
// Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,
|
|
348
355
|
// даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.
|
|
@@ -352,26 +359,25 @@ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = '
|
|
|
352
359
|
// дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.
|
|
353
360
|
// Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.
|
|
354
361
|
// Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect
|
|
355
|
-
if (!selectInputRef.current
|
|
362
|
+
if (!selectInputRef.current) {
|
|
356
363
|
return;
|
|
357
364
|
}
|
|
358
365
|
const clickTargetIsNotAnInput = e.target !== selectInputRef.current;
|
|
359
366
|
if (clickTargetIsNotAnInput) {
|
|
360
367
|
selectInputRef.current.click();
|
|
361
|
-
const inputIsNotFocused =
|
|
368
|
+
const inputIsNotFocused = selectInputRef.current.ownerDocument.activeElement !== selectInputRef.current;
|
|
362
369
|
if (inputIsNotFocused) {
|
|
363
370
|
selectInputRef.current.focus();
|
|
364
371
|
}
|
|
365
372
|
}
|
|
366
373
|
}, [
|
|
367
|
-
document,
|
|
368
374
|
selectInputRef
|
|
369
375
|
]);
|
|
370
376
|
const preventInputBlurWhenClickInsideFocusedSelectArea = (e)=>{
|
|
371
377
|
// Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,
|
|
372
378
|
// но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.
|
|
373
379
|
// Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки
|
|
374
|
-
const isInputFocused =
|
|
380
|
+
const isInputFocused = selectInputRef.current?.ownerDocument.activeElement === selectInputRef.current;
|
|
375
381
|
if (isInputFocused) {
|
|
376
382
|
e.preventDefault();
|
|
377
383
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getRequiredValueByKey } from '../../helpers/getValueByKey';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { preventDefault } from '../../lib/utils';\nimport type { HasDataAttribute, HasRootRef } from '../../types';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport {\n type NativeSelectProps,\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n type SelectValue,\n} from '../NativeSelect/NativeSelect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport type { CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport {\n checkDeprecatedProps,\n checkMixControlledAndUncontrolledState,\n checkOptionsValueType,\n filter,\n findSelectedIndex,\n getOptionByValue,\n} from './helpers';\nimport { useAfterItems } from './hooks/useAfterItems';\nimport { useDropdownOpenedController } from './hooks/useDropdownOpenedController';\nimport { useFocusedOptionController } from './hooks/useFocusedOptionController';\nimport { useInputKeyboardController } from './hooks/useInputKeyboardController';\nimport { useInputValueController } from './hooks/useInputValueController';\nimport { useScrollListController } from './hooks/useScrollListController';\nimport { useSelectedOptionController } from './hooks/useSelectedOptionController';\nimport type {\n CustomSelectOptionInterface,\n CustomSelectRenderOption,\n MousePosition,\n PopupDirection,\n} from './types';\nimport styles from './CustomSelect.module.css';\n\nconst densityClassNames = {\n none: styles.densityNone,\n compact: styles.densityCompact,\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nfunction isMousePositionChanged(event: React.MouseEvent, prevPosition: MousePosition) {\n return (\n Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1\n );\n}\n\nconst FETCH_STATUS_RESET_DELAY = 2000;\n\nconst FetchingStatus = ({\n fetching = false,\n options,\n fetchingInProgressLabel = 'Список опций загружается...',\n fetchingCompletedLabel = `Загружено опций: ${options.length}`,\n}: Pick<\n SelectProps,\n 'fetching' | 'fetchingInProgressLabel' | 'fetchingCompletedLabel' | 'options'\n>) => {\n const [status, setStatus] = React.useState<'fetching' | 'loaded' | 'none'>('none');\n\n const content = getRequiredValueByKey(status, {\n fetching: fetchingInProgressLabel,\n loaded:\n typeof fetchingCompletedLabel === 'function'\n ? fetchingCompletedLabel(options.length)\n : fetchingCompletedLabel,\n none: '',\n });\n\n useIsomorphicLayoutEffect(\n function updateStatus() {\n if (fetching) {\n setStatus('fetching');\n } else {\n if (status === 'fetching') {\n setStatus('loaded');\n setTimeout(() => setStatus('none'), FETCH_STATUS_RESET_DELAY);\n }\n }\n },\n [fetching],\n );\n\n return <VisuallyHidden aria-live=\"polite\">{content}</VisuallyHidden>;\n};\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends Omit<NativeSelectProps, 'slotProps'>,\n Omit<FormFieldProps, 'maxHeight' | 'mode'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'form' | 'readOnly'> {\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `select`: свойства для прокидывания в нативный `select`;\n * - `input`: свойства для прокидывания в нативный `input`.\n */\n slotProps?:\n | (NativeSelectProps['slotProps'] & {\n input?:\n | (React.InputHTMLAttributes<HTMLInputElement> &\n HasDataAttribute &\n HasRootRef<HTMLInputElement>)\n | undefined;\n })\n | undefined;\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\n *\n * Ref на внутрений компонент input.\n */\n getSelectInputRef?: React.Ref<HTMLInputElement> | undefined;\n /**\n * Если `true`, то при нажатии на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean | undefined;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string | undefined;\n /**\n * Событие изменения текстового поля.\n */\n onInputChange?: ((e: React.ChangeEvent<HTMLInputElement>) => void) | undefined;\n /**\n * Список опций в списке.\n */\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT> | undefined;\n /**\n * Направление раскрытия выпадающего списка.\n */\n popupDirection?: PopupDirection | undefined;\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkui.io/components/custom-select#custom-select-option-api).\n *\n * > ⚠️ Важно: свойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode | undefined;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean | undefined;\n /**\n * Обработчик закрытия выпадающего списка.\n */\n onClose?: VoidFunction | undefined;\n /**\n * Обработчик открытия выпадающего списка.\n */\n onOpen?: VoidFunction | undefined;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`.\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps> | undefined;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения.\n */\n allowClearButton?: boolean | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string | undefined;\n /**\n * Отступ от выпадающего списка.\n */\n dropdownOffsetDistance?: number | undefined;\n /**\n * Ширина раскрывающегося списка зависит от контента.\n */\n dropdownAutoWidth?: boolean | undefined;\n /**\n * Использовать Portal для рендеринга выпадающего списка.\n */\n forceDropdownPortal?: boolean | undefined;\n /**\n * Отключает максимальную высоту по умолчанию.\n */\n noMaxHeight?: boolean | undefined;\n /**\n * Передает атрибут `data-testid` для элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string | undefined;\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ select: { 'data-testid': ... } }`.\n *\n * Передает атрибут `data-testid` для нативного элемента `select`.\n */\n nativeSelectTestId?: string | undefined;\n /**\n * Обработчик события `keyDown` в поле ввода.\n */\n onInputKeyDown?: ((e: React.KeyboardEvent, isOpen: boolean) => void) | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором выбранное значение `CustomSelect` читается скринридерами корректно.\n * В данном режиме введенное в поле ввода значение не сбрасывается при потере фокуса.\n */\n accessible?: boolean | undefined /* TODO [>=v9] удалить свойство */;\n /**\n * Текстовая метка для индикации процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Список опций загружается...\"`.\n */\n fetchingInProgressLabel?: string | undefined;\n /**\n * Текстовая метка для индикации завершения процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Загружено опций: ${options.length}\"`.\n */\n fetchingCompletedLabel?: string | ((optionsCount: number) => string) | undefined;\n /**\n * @deprecated Будет удалено в 10.0.0, используйте `selectType`.\n *\n * Режим отображения.\n *\n * - `default` — показывает фон, обводку и, при наличии, текст-подсказку.\n * - `plain` — показывает только текст-подсказку.\n */\n mode?: 'default' | 'plain' | undefined;\n}\n\n/**\n * @see https://vkui.io/components/custom-select\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const {\n // FormFieldProps\n status,\n before,\n\n // CustomSelectDropdownProps\n overscrollBehavior,\n\n // SelectProps\n children,\n getSelectInputRef,\n searchable = false,\n emptyText = 'Ничего не найдено',\n 'onInputChange': onInputChangeProp,\n 'options': options,\n filterFn = defaultFilterFn,\n popupDirection = 'bottom',\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n ClearButton,\n allowClearButton = false,\n clearButtonTestId,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n forceDropdownPortal,\n noMaxHeight = false,\n labelTextTestId,\n nativeSelectTestId,\n 'onInputKeyDown': onInputKeyDownProp,\n accessible = true,\n fetchingInProgressLabel,\n fetchingCompletedLabel,\n\n // NativeSelectProps\n 'value': selectValue,\n defaultValue,\n onChange,\n getRef,\n multiline,\n placeholder,\n 'icon': iconProp,\n selectType,\n mode,\n align,\n form,\n\n // Input props\n minLength,\n maxLength,\n pattern,\n autoFocus,\n disabled,\n id,\n 'readOnly': readOnlyProp,\n\n // Select props\n required,\n name,\n 'onClick': onSelectClick,\n 'onFocus': onSelectFocus,\n 'onBlur': onSelectBlur,\n\n // other\n 'aria-labelledby': ariaLabelledBy,\n\n slotProps,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(options);\n checkDeprecatedProps(props);\n }\n\n const { density = 'none' } = useAdaptivity();\n\n const {\n onClick: onRootClick,\n onMouseMove: onRootMouseMove,\n onMouseDown: onRootMouseDown,\n getRootRef: rootRef,\n ...rootRest\n } = useMergeProps<\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> &\n HasDataAttribute &\n HasRootRef<HTMLDivElement>\n >(restProps, slotProps?.root);\n\n const { getRootRef: getSelectRef, ...selectRest } = useMergeProps(\n {\n getRootRef: getRef,\n required,\n name,\n form,\n onClick: onSelectClick,\n onFocus: onSelectFocus,\n onBlur: onSelectBlur,\n },\n slotProps?.select,\n );\n\n const {\n getRootRef: getInputRef,\n onChange: onChangeInput,\n onFocus: onInputFocus,\n onBlur: onInputBlur,\n onKeyDown: onNativeInputKeyDown,\n onClick: onNativeInputClick,\n readOnly,\n ...inputRest\n } = useMergeProps(\n {\n getRootRef: getSelectInputRef,\n onChange: onInputChangeProp,\n minLength,\n maxLength,\n pattern,\n autoFocus,\n disabled,\n id,\n readOnly: readOnlyProp,\n placeholder,\n },\n slotProps?.input,\n );\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, rootRef);\n const selectElRef = useExternRef(getSelectRef);\n const selectInputRef = useExternRef(getInputRef);\n\n const propsValue = React.useMemo<SelectValue | undefined>(() => {\n if (selectValue === undefined) {\n return undefined;\n }\n return getOptionByValue(options, selectValue)?.value ?? null;\n }, [options, selectValue]);\n\n const [isControlledOutside, setIsControlledOutside] = React.useState(selectValue !== undefined);\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n\n const {\n nativeSelectValue,\n setNativeSelectValue,\n selectedOptionValue,\n setSelectedOptionValue,\n onNativeSelectChange,\n } = useSelectedOptionController({\n value: propsValue,\n defaultValue,\n isControlledOutside,\n allowClearButton,\n onChange,\n });\n\n const selected = React.useMemo(\n () => options.find((option) => option.value === selectedOptionValue),\n [options, selectedOptionValue],\n );\n\n const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } =\n useInputValueController({\n options,\n accessible,\n selectedValue: selectedOptionValue,\n onInputChange: onChangeInput,\n });\n\n const filteredOptions = React.useMemo(\n () => filter(options, searchable ? inputValue : '', filterFn),\n [filterFn, inputValue, options, searchable],\n );\n\n const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();\n\n const {\n focusedOptionValue,\n setFocusedOptionValue,\n resetFocusedOption,\n focusOptionByIndex,\n focusOption,\n selectFocusedValue,\n } = useFocusedOptionController({\n selectedOptionValue,\n filteredOptions,\n scrollToElement,\n });\n\n const scrollToSelectedOption = () => {\n scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);\n };\n\n const [opened, open, close, toggleOpened] = useDropdownOpenedController({\n onOpen: callMultiple(selectFocusedValue, onOpen),\n onOpened: scrollToSelectedOption,\n onClose,\n onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue,\n });\n\n React.useEffect(\n function updateOptionsValue() {\n const value =\n propsValue !== undefined\n ? propsValue\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n setSelectedOptionValue(value);\n setFocusedOptionValue(value);\n },\n [propsValue, nativeSelectValue, setFocusedOptionValue, setSelectedOptionValue],\n );\n\n React.useEffect(\n function syncIsControlledState() {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = propsValue !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n },\n [propsValue],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (\n filteredOptions.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const selectOption = React.useCallback(\n (value: Exclude<SelectValue, null>) => {\n setNativeSelectValue(value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, setNativeSelectValue, isControlledOutside, propsValue, nativeSelectValue, selectElRef],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionValue === null) {\n return;\n }\n\n selectOption(focusedOptionValue);\n }, [focusedOptionValue, selectOption]);\n\n const handleInputKeyDown = useInputKeyboardController({\n opened,\n open,\n close,\n resetFocusedOption,\n selectFocused,\n focusOption,\n scrollBoxRef,\n onInputKeyDown: onInputKeyDownProp,\n });\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = filteredOptions[index];\n\n if (option && !option.disabled) {\n selectOption(option.value);\n }\n },\n [filteredOptions, selectOption],\n );\n\n const lastMousePositionRef = React.useRef<MousePosition>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n if (isMousePositionChanged(e, lastMousePositionRef.current)) {\n focusOptionByIndex(index, false);\n }\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = option.value === focusedOptionValue;\n const selected = option.value === selectedOptionValue;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n /**\n * Компилятор сходит с ума из-за рефа внутри focusOptionOnMouseMove.\n * Обходной путь прокидывать ref в свойства для рендер пропов.\n */\n ...(false\n ? {\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: lastMousePositionRef,\n }\n : {}),\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: preventDefault,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n ...option,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionValue,\n selectedOptionValue,\n renderOptionProp,\n handleOptionClick,\n popupAriaId,\n focusOptionOnMouseMove,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n filteredOptions.length > 0 ? (\n <div ref={optionsWrapperRef}>{filteredOptions.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, filteredOptions, optionsWrapperRef, renderDropdown, renderOption]);\n\n const afterItems = useAfterItems({\n value: propsValue,\n nativeSelectValue,\n isControlledOutside,\n opened,\n allowClearButton,\n ClearButton,\n onClearButtonClick: () => {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n resetInputValue();\n selectInputRef.current && selectInputRef.current.focus();\n },\n clearButtonTestId,\n disabled: inputRest.disabled,\n readOnly,\n icon: iconProp,\n });\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [document, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const resetOptionFocusOnMouseLeave = React.useCallback(\n (event: React.MouseEvent) => {\n // В Хроме eсли мышка пользователя находится над инпутом селекта,\n // и он с клавиатуры открывает опции, причём одна из опций\n // уже выбрана, то видно, как выбранная опция получает фокус,\n // но потом сразу же его теряет.\n // Связано это с тем, что в этот момент вызывается onMouseLeave, на который у нас\n // завязан сброс состония фокуса у опции. По хорошему фокус должен оставаться.\n // Нам не интересен вызов onMouseLeave если мышка при этом не двигалась.\n if (isMousePositionChanged(event, lastMousePositionRef.current)) {\n resetFocusedOption();\n }\n },\n [resetFocusedOption],\n );\n\n const updateLastMousePosition = (e: React.MouseEvent) => {\n lastMousePositionRef.current = { x: e.clientX, y: e.clientY };\n };\n\n const onClick = (event: React.MouseEvent<HTMLDivElement>) => {\n onRootClick?.(event);\n passClickAndFocusToInputOnClick(event);\n };\n\n const onMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n onRootMouseDown?.(event);\n preventInputBlurWhenClickInsideFocusedSelectArea(event);\n };\n\n const onMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n onRootMouseMove?.(event);\n updateLastMousePosition(event);\n };\n\n const onCustomSelectInputFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n onFocus();\n onInputFocus?.(event);\n };\n\n const onCustomSelectInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur();\n onInputBlur?.(event);\n };\n\n return (\n <RootComponent\n baseClassName={classNames(styles.host, density !== 'regular' && densityClassNames[density])}\n getRootRef={handleRootRef}\n onClick={onClick}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n {...rootRest}\n >\n <CustomSelectInput\n fetching={fetching}\n searchable={searchable}\n accessible={accessible}\n before={before}\n after={afterItems}\n selectType={selectType || mode || 'default'}\n align={align}\n status={status}\n multiline={multiline}\n labelTextTestId={labelTextTestId}\n slotProps={{\n root: { className: openedClassNames },\n input: {\n autoComplete: 'off',\n autoCapitalize: 'none',\n autoCorrect: 'off',\n spellCheck: 'false',\n getRootRef: selectInputRef,\n onChange: onInputChange,\n value: inputValue,\n readOnly: readOnly || !searchable,\n placeholder,\n onFocus: onCustomSelectInputFocus,\n onBlur: onCustomSelectInputBlur,\n onKeyDown: !readOnly\n ? callMultiple(handleInputKeyDown, onNativeInputKeyDown)\n : onNativeInputKeyDown,\n onClick: !readOnly\n ? callMultiple(toggleOpened, onNativeInputClick)\n : onNativeInputClick,\n ...selectInputAriaProps,\n ...inputRest,\n },\n }}\n >\n {selected?.label}\n </CustomSelectInput>\n\n <FetchingStatus\n fetching={fetching}\n options={filteredOptions}\n fetchingInProgressLabel={fetchingInProgressLabel}\n fetchingCompletedLabel={fetchingCompletedLabel}\n />\n <RootComponent\n Component=\"select\"\n baseClassName={styles.control}\n tabIndex={-1}\n value={nativeSelectValue}\n aria-hidden\n data-testid={nativeSelectTestId}\n onChange={onNativeSelectChange}\n getRootRef={selectElRef}\n {...selectRest}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {options.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </RootComponent>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetOptionFocusOnMouseLeave}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </RootComponent>\n );\n}\n"],"names":["React","classNames","getRequiredValueByKey","useAdaptivity","useExternRef","useMergeProps","callMultiple","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","preventDefault","CustomSelectDropdown","CustomSelectOption","NOT_SELECTED","remapFromNativeValueToSelectValue","RootComponent","Footnote","VisuallyHidden","CustomSelectInput","checkDeprecatedProps","checkMixControlledAndUncontrolledState","checkOptionsValueType","filter","findSelectedIndex","getOptionByValue","useAfterItems","useDropdownOpenedController","useFocusedOptionController","useInputKeyboardController","useInputValueController","useScrollListController","useSelectedOptionController","densityClassNames","none","compact","defaultRenderOptionFn","option","props","isMousePositionChanged","event","prevPosition","Math","abs","x","clientX","y","clientY","FETCH_STATUS_RESET_DELAY","FetchingStatus","fetching","options","fetchingInProgressLabel","fetchingCompletedLabel","length","status","setStatus","useState","content","loaded","updateStatus","setTimeout","aria-live","CustomSelect","before","overscrollBehavior","children","getSelectInputRef","searchable","emptyText","onInputChangeProp","filterFn","popupDirection","renderOptionProp","renderDropdown","onClose","onOpen","ClearButton","allowClearButton","clearButtonTestId","dropdownOffsetDistance","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","labelTextTestId","nativeSelectTestId","onInputKeyDownProp","accessible","selectValue","defaultValue","onChange","getRef","multiline","placeholder","iconProp","selectType","mode","align","form","minLength","maxLength","pattern","autoFocus","disabled","id","readOnlyProp","required","name","onSelectClick","onSelectFocus","onSelectBlur","ariaLabelledBy","slotProps","restProps","process","env","NODE_ENV","density","onClick","onRootClick","onMouseMove","onRootMouseMove","onMouseDown","onRootMouseDown","getRootRef","rootRef","rootRest","root","getSelectRef","selectRest","onFocus","onBlur","select","getInputRef","onChangeInput","onInputFocus","onInputBlur","onKeyDown","onNativeInputKeyDown","onNativeInputClick","readOnly","inputRest","input","containerRef","useRef","handleRootRef","selectElRef","selectInputRef","propsValue","useMemo","undefined","value","isControlledOutside","setIsControlledOutside","popperPlacement","setPopperPlacement","nativeSelectValue","setNativeSelectValue","selectedOptionValue","setSelectedOptionValue","onNativeSelectChange","selected","find","inputValue","onInputChange","resetInputValue","resetInputValueBySelectedOption","selectedValue","filteredOptions","scrollToElement","optionsWrapperRef","scrollBoxRef","focusedOptionValue","setFocusedOptionValue","resetFocusedOption","focusOptionByIndex","focusOption","selectFocusedValue","scrollToSelectedOption","opened","open","close","toggleOpened","onOpened","onClosed","useEffect","updateOptionsValue","syncIsControlledState","oldIsControlled","newIsControlled","some","NATIVE","Event","bubbles","current","dispatchEvent","openedClassNames","includes","selectOption","useCallback","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","handleInputKeyDown","onInputKeyDown","handleOptionClick","e","index","Array","prototype","indexOf","call","currentTarget","parentNode","lastMousePositionRef","focusOptionOnMouseMove","popupAriaId","useId","renderOption","hovered","Fragment","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","label","resolvedContent","defaultDropdownContent","div","ref","map","className","afterItems","onClearButtonClick","focus","icon","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","target","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantId","selectInputAriaProps","resetOptionFocusOnMouseLeave","updateLastMousePosition","onCustomSelectInputFocus","onCustomSelectInputBlur","baseClassName","after","autoComplete","autoCapitalize","autoCorrect","spellCheck","Component","tabIndex","aria-hidden","data-testid","item","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,qBAAqB,QAAQ,iCAA8B;AACpE,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,MAAM,QAAQ,mBAAgB;AAEvC,SAASC,eAAe,QAAuB,sBAAmB;AAClE,SAASC,yBAAyB,QAAQ,yCAAsC;AAChF,SAASC,cAAc,QAAQ,qBAAkB;AAEjD,SACEC,oBAAoB,QAEf,kDAA+C;AACtD,SAASC,kBAAkB,QAAQ,8CAA2C;AAE9E,SAEEC,YAAY,EACZC,iCAAiC,QAE5B,kCAA+B;AACtC,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,cAAc,QAAQ,sCAAmC;AAElE,SACEC,iBAAiB,QAEZ,2CAAwC;AAC/C,SACEC,oBAAoB,EACpBC,sCAAsC,EACtCC,qBAAqB,EACrBC,MAAM,EACNC,iBAAiB,EACjBC,gBAAgB,QACX,eAAY;AACnB,SAASC,aAAa,QAAQ,2BAAwB;AACtD,SAASC,2BAA2B,QAAQ,yCAAsC;AAClF,SAASC,0BAA0B,QAAQ,wCAAqC;AAChF,SAASC,0BAA0B,QAAQ,wCAAqC;AAChF,SAASC,uBAAuB,QAAQ,qCAAkC;AAC1E,SAASC,uBAAuB,QAAQ,qCAAkC;AAC1E,SAASC,2BAA2B,QAAQ,yCAAsC;AASlF,MAAMC,oBAAoB;IACxBC,IAAI;IACJC,OAAO;AACT;AAEA,SAASC,sBAA6D,EACpEC,MAAM,EACN,GAAGC,OACyB;IAC5B,qBAAO,KAACzB;QAAoB,GAAGyB,KAAK;;AACtC;AAEA,SAASC,uBAAuBC,KAAuB,EAAEC,YAA2B;IAClF,OACEC,KAAKC,GAAG,CAACF,aAAaG,CAAC,GAAGJ,MAAMK,OAAO,KAAK,KAAKH,KAAKC,GAAG,CAACF,aAAaK,CAAC,GAAGN,MAAMO,OAAO,KAAK;AAEjG;AAEA,MAAMC,2BAA2B;AAEjC,MAAMC,iBAAiB,CAAC,EACtBC,WAAW,KAAK,EAChBC,OAAO,EACPC,0BAA0B,6BAA6B,EACvDC,yBAAyB,CAAC,iBAAiB,EAAEF,QAAQG,MAAM,EAAE,EAI9D;IACC,MAAM,CAACC,QAAQC,UAAU,GAAGvD,MAAMwD,QAAQ,CAAiC;IAE3E,MAAMC,UAAUvD,sBAAsBoD,QAAQ;QAC5CL,UAAUE;QACVO,QACE,OAAON,2BAA2B,aAC9BA,uBAAuBF,QAAQG,MAAM,IACrCD;QACNnB,MAAM;IACR;IAEAxB,0BACE,SAASkD;QACP,IAAIV,UAAU;YACZM,UAAU;QACZ,OAAO;YACL,IAAID,WAAW,YAAY;gBACzBC,UAAU;gBACVK,WAAW,IAAML,UAAU,SAASR;YACtC;QACF;IACF,GACA;QAACE;KAAS;IAGZ,qBAAO,KAAChC;QAAe4C,aAAU;kBAAUJ;;AAC7C;AA4JA;;CAEC,GACD,OAAO,SAASK,aACdzB,KAAoC;IAEpC,MAAM,EACJ,iBAAiB;IACjBiB,MAAM,EACNS,MAAM,EAEN,4BAA4B;IAC5BC,kBAAkB,EAElB,cAAc;IACdC,QAAQ,EACRC,iBAAiB,EACjBC,aAAa,KAAK,EAClBC,YAAY,mBAAmB,EAC/B,iBAAiBC,iBAAiB,EAClC,WAAWnB,OAAO,EAClBoB,WAAW9D,eAAe,EAC1B+D,iBAAiB,QAAQ,EACzB,gBAAgBC,mBAAmBrC,qBAAqB,EACxDsC,cAAc,EACdxB,QAAQ,EACRyB,OAAO,EACPC,MAAM,EACNC,WAAW,EACXC,mBAAmB,KAAK,EACxBC,iBAAiB,EACjBC,yBAAyB,CAAC,EAC1BC,oBAAoB,KAAK,EACzBC,mBAAmB,EACnBC,cAAc,KAAK,EACnBC,eAAe,EACfC,kBAAkB,EAClB,kBAAkBC,kBAAkB,EACpCC,aAAa,IAAI,EACjBnC,uBAAuB,EACvBC,sBAAsB,EAEtB,oBAAoB;IACpB,SAASmC,WAAW,EACpBC,YAAY,EACZC,QAAQ,EACRC,MAAM,EACNC,SAAS,EACTC,WAAW,EACX,QAAQC,QAAQ,EAChBC,UAAU,EACVC,IAAI,EACJC,KAAK,EACLC,IAAI,EAEJ,cAAc;IACdC,SAAS,EACTC,SAAS,EACTC,OAAO,EACPC,SAAS,EACTC,QAAQ,EACRC,EAAE,EACF,YAAYC,YAAY,EAExB,eAAe;IACfC,QAAQ,EACRC,IAAI,EACJ,WAAWC,aAAa,EACxB,WAAWC,aAAa,EACxB,UAAUC,YAAY,EAEtB,QAAQ;IACR,mBAAmBC,cAAc,EAEjCC,SAAS,EACT,GAAGC,WACJ,GAAG3E;IAEJ,IAAI4E,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C9F,sBAAsB6B;QACtB/B,qBAAqBkB;IACvB;IAEA,MAAM,EAAE+E,UAAU,MAAM,EAAE,GAAGjH;IAE7B,MAAM,EACJkH,SAASC,WAAW,EACpBC,aAAaC,eAAe,EAC5BC,aAAaC,eAAe,EAC5BC,YAAYC,OAAO,EACnB,GAAGC,UACJ,GAAGxH,cAIF2G,WAAWD,WAAWe;IAExB,MAAM,EAAEH,YAAYI,YAAY,EAAE,GAAGC,YAAY,GAAG3H,cAClD;QACEsH,YAAYjC;QACZe;QACAC;QACAT;QACAoB,SAASV;QACTsB,SAASrB;QACTsB,QAAQrB;IACV,GACAE,WAAWoB;IAGb,MAAM,EACJR,YAAYS,WAAW,EACvB3C,UAAU4C,aAAa,EACvBJ,SAASK,YAAY,EACrBJ,QAAQK,WAAW,EACnBC,WAAWC,oBAAoB,EAC/BpB,SAASqB,kBAAkB,EAC3BC,QAAQ,EACR,GAAGC,WACJ,GAAGvI,cACF;QACEsH,YAAYzD;QACZuB,UAAUpB;QACV6B;QACAC;QACAC;QACAC;QACAC;QACAC;QACAoC,UAAUnC;QACVZ;IACF,GACAmB,WAAW8B;IAGb,MAAMC,eAAe9I,MAAM+I,MAAM,CAAiB;IAClD,MAAMC,gBAAgB5I,aAAa0I,cAAclB;IACjD,MAAMqB,cAAc7I,aAAa2H;IACjC,MAAMmB,iBAAiB9I,aAAagI;IAEpC,MAAMe,aAAanJ,MAAMoJ,OAAO,CAA0B;QACxD,IAAI7D,gBAAgB8D,WAAW;YAC7B,OAAOA;QACT;QACA,OAAO7H,iBAAiB0B,SAASqC,cAAc+D,SAAS;IAC1D,GAAG;QAACpG;QAASqC;KAAY;IAEzB,MAAM,CAACgE,qBAAqBC,uBAAuB,GAAGxJ,MAAMwD,QAAQ,CAAC+B,gBAAgB8D;IACrF,MAAM,CAACI,iBAAiBC,mBAAmB,GAAG1J,MAAMwD,QAAQ,CAAYe;IAExE,MAAM,EACJoF,iBAAiB,EACjBC,oBAAoB,EACpBC,mBAAmB,EACnBC,sBAAsB,EACtBC,oBAAoB,EACrB,GAAGhI,4BAA4B;QAC9BuH,OAAOH;QACP3D;QACA+D;QACA1E;QACAY;IACF;IAEA,MAAMuE,WAAWhK,MAAMoJ,OAAO,CAC5B,IAAMlG,QAAQ+G,IAAI,CAAC,CAAC7H,SAAWA,OAAOkH,KAAK,KAAKO,sBAChD;QAAC3G;QAAS2G;KAAoB;IAGhC,MAAM,EAAEK,UAAU,EAAEC,aAAa,EAAEC,eAAe,EAAEC,+BAA+B,EAAE,GACnFxI,wBAAwB;QACtBqB;QACAoC;QACAgF,eAAeT;QACfM,eAAe9B;IACjB;IAEF,MAAMkC,kBAAkBvK,MAAMoJ,OAAO,CACnC,IAAM9H,OAAO4B,SAASiB,aAAa+F,aAAa,IAAI5F,WACpD;QAACA;QAAU4F;QAAYhH;QAASiB;KAAW;IAG7C,MAAM,EAAEqG,eAAe,EAAEC,iBAAiB,EAAEC,YAAY,EAAE,GAAG5I;IAE7D,MAAM,EACJ6I,kBAAkB,EAClBC,qBAAqB,EACrBC,kBAAkB,EAClBC,kBAAkB,EAClBC,WAAW,EACXC,kBAAkB,EACnB,GAAGrJ,2BAA2B;QAC7BkI;QACAU;QACAC;IACF;IAEA,MAAMS,yBAAyB;QAC7BT,gBAAgBjJ,kBAAkBgJ,iBAAiBV,sBAAsB;IAC3E;IAEA,MAAM,CAACqB,QAAQC,MAAMC,OAAOC,aAAa,GAAG3J,4BAA4B;QACtEiD,QAAQrE,aAAa0K,oBAAoBrG;QACzC2G,UAAUL;QACVvG;QACA6G,UAAUjG,aAAa+E,kCAAkCD;IAC3D;IAEApK,MAAMwL,SAAS,CACb,SAASC;QACP,MAAMnC,QACJH,eAAeE,YACXF,aACArI,kCAAkC6I;QACxCG,uBAAuBR;QACvBsB,sBAAsBtB;IACxB,GACA;QAACH;QAAYQ;QAAmBiB;QAAuBd;KAAuB;IAGhF9J,MAAMwL,SAAS,CACb,SAASE;QACPlC,uBAAuB,CAACmC;YACtB,MAAMC,kBAAkBzC,eAAeE;YACvCjI,uCAAuCuK,iBAAiBC;YACxD,OAAOA;QACT;IACF,GACA;QAACzC;KAAW;IAGd1I,0BAA0B;QACxB,IACE8J,gBAAgBsB,IAAI,CAAC,CAAC,EAAEvC,KAAK,EAAE,GAAKK,sBAAsBL,UACzDzE,oBAAoB8E,sBAAsB9I,aAAaiL,MAAM,EAC9D;YACA,MAAMvJ,QAAQ,IAAIwJ,MAAM,UAAU;gBAAEC,SAAS;YAAK;YAElD/C,YAAYgD,OAAO,EAAEC,cAAc3J;QACrC;IACF,GAAG;QAACoH;KAAkB;IAEtB,MAAMwC,mBAAmBnM,MAAMoJ,OAAO,CACpC,IACE,AAAC8B,UACCnG,2BAA2B,KAC1B0E,CAAAA,gBAAgB2C,QAAQ,CAAC,gEAAqC,KACjE/C,WACF;QAACtE;QAAwBmG;QAAQzB;KAAgB;IAGnD,MAAM4C,eAAerM,MAAMsM,WAAW,CACpC,CAAChD;QACCM,qBAAqBN,SAASzI,aAAaiL,MAAM;QACjDV;QAEA,MAAMmB,8DACJhD,uBAAuBJ,eAAeQ,qBAAqBA,sBAAsBL;QAEnF,IAAIiD,6DAA6D;YAC/D,MAAMhK,QAAQ,IAAIwJ,MAAM,UAAU;gBAAEC,SAAS;YAAK;YAClD/C,YAAYgD,OAAO,EAAEC,cAAc3J;QACrC;IACF,GACA;QAAC6I;QAAOxB;QAAsBL;QAAqBJ;QAAYQ;QAAmBV;KAAY;IAGhG,MAAMuD,gBAAgBxM,MAAMsM,WAAW,CAAC;QACtC,IAAI3B,uBAAuB,MAAM;YAC/B;QACF;QAEA0B,aAAa1B;IACf,GAAG;QAACA;QAAoB0B;KAAa;IAErC,MAAMI,qBAAqB7K,2BAA2B;QACpDsJ;QACAC;QACAC;QACAP;QACA2B;QACAzB;QACAL;QACAgC,gBAAgBrH;IAClB;IAEA,MAAM6C,SAASlI,MAAMsM,WAAW,CAAC;QAC/BlB;QACA,MAAM7I,QAAQ,IAAIwJ,MAAM,YAAY;YAAEC,SAAS;QAAK;QACpD/C,YAAYgD,OAAO,EAAEC,cAAc3J;IACrC,GAAG;QAAC6I;QAAOnC;KAAY;IAEvB,MAAMhB,UAAUjI,MAAMsM,WAAW,CAAC;QAChC,MAAM/J,QAAQ,IAAIwJ,MAAM,WAAW;YAAEC,SAAS;QAAK;QACnD/C,YAAYgD,OAAO,EAAEC,cAAc3J;IACrC,GAAG;QAAC0G;KAAY;IAEhB,MAAM0D,oBAAoB3M,MAAMsM,WAAW,CACzC,CAACM;QACC,MAAMC,QAAQC,MAAMC,SAAS,CAACC,OAAO,CAACC,IAAI,CACxCL,EAAEM,aAAa,CAACC,UAAU,EAAElJ,UAC5B2I,EAAEM,aAAa;QAEjB,MAAM9K,SAASmI,eAAe,CAACsC,MAAM;QAErC,IAAIzK,UAAU,CAACA,OAAOkE,QAAQ,EAAE;YAC9B+F,aAAajK,OAAOkH,KAAK;QAC3B;IACF,GACA;QAACiB;QAAiB8B;KAAa;IAGjC,MAAMe,uBAAuBpN,MAAM+I,MAAM,CAAgB;QAAEpG,GAAG;QAAGE,GAAG;IAAE;IACtE,MAAMwK,yBAAyBrN,MAAMsM,WAAW,CAC9C,CAACM,GAAkCC;QACjC,IAAIvK,uBAAuBsK,GAAGQ,qBAAqBnB,OAAO,GAAG;YAC3DnB,mBAAmB+B,OAAO;QAC5B;IACF,GACA;QAAC/B;KAAmB;IAGtB,MAAMwC,cAActN,MAAMuN,KAAK;IAC/B,MAAMC,eAAexN,MAAMsM,WAAW,CACpC,CAAClK,QAA0ByK;QACzB,MAAMY,UAAUrL,OAAOkH,KAAK,KAAKqB;QACjC,MAAMX,WAAW5H,OAAOkH,KAAK,KAAKO;QAElC,qBACE,KAAC7J,MAAM0N,QAAQ;sBACZlJ,iBAAiB;gBAChB;;;aAGC,GACD,GAAI,QACA;oBACEmJ,oDAAoDP;gBACtD,IACA,CAAC,CAAC;gBACNhL;gBACAqL;gBACAxJ,UAAU7B,OAAOwL,KAAK;gBACtB5D;gBACA1D,UAAUlE,OAAOkE,QAAQ;gBACzBe,SAASsF;gBACTlF,aAAa/G;gBACb,8DAA8D;gBAC9D,+DAA+D;gBAC/D,8FAA8F;gBAC9F,yIAAyI;gBACzI,sFAAsF;gBACtF,8EAA8E;gBAC9E,6IAA6I;gBAC7I6G,aAAa,CAACqF,IAAMS,uBAAuBT,GAAGC;gBAC9CtG,IAAI,GAAG+G,YAAY,CAAC,EAAElL,OAAOkH,KAAK,EAAE;gBACpC,GAAGlH,MAAM;YACX;WA5BmB,GAAG,OAAOA,OAAOkH,KAAK,CAAC,CAAC,EAAElH,OAAOkH,KAAK,EAAE;IA+BjE,GACA;QACEqB;QACAd;QACArF;QACAmI;QACAW;QACAD;KACD;IAGH,MAAMQ,kBAAkB7N,MAAMoJ,OAAO,CAAC;QACpC,MAAM0E,yBACJvD,gBAAgBlH,MAAM,GAAG,kBACvB,KAAC0K;YAAIC,KAAKvD;sBAAoBF,gBAAgB0D,GAAG,CAACT;2BAElD,KAACxM;YAASkN,SAAS;sBAAiB9J;;QAGxC,IAAI,OAAOK,mBAAmB,YAAY;YACxC,OAAOA,eAAe;gBAAEqJ;YAAuB;QACjD,OAAO;YACL,OAAOA;QACT;IACF,GAAG;QAAC1J;QAAWmG;QAAiBE;QAAmBhG;QAAgB+I;KAAa;IAEhF,MAAMW,aAAa1M,cAAc;QAC/B6H,OAAOH;QACPQ;QACAJ;QACA2B;QACArG;QACAD;QACAwJ,oBAAoB;YAClBxE,qBAAqB/I,aAAaiL,MAAM;YACxC1B;YACAlB,eAAe+C,OAAO,IAAI/C,eAAe+C,OAAO,CAACoC,KAAK;QACxD;QACAvJ;QACAwB,UAAUsC,UAAUtC,QAAQ;QAC5BqC;QACA2F,MAAMzI;IACR;IAEA,MAAM,EAAE0I,QAAQ,EAAE,GAAGhO;IACrB,MAAMiO,kCAAkCxO,MAAMsM,WAAW,CACvD,CAACM;QACC,yGAAyG;QACzG,kGAAkG;QAClG,qHAAqH;QACrH,8EAA8E;QAC9E,8EAA8E;QAC9E,mGAAmG;QACnG,2FAA2F;QAC3F,8FAA8F;QAE9F,IAAI,CAAC1D,eAAe+C,OAAO,IAAI,CAACsC,UAAU;YACxC;QACF;QAEA,MAAME,0BAA0B7B,EAAE8B,MAAM,KAAKxF,eAAe+C,OAAO;QACnE,IAAIwC,yBAAyB;YAC3BvF,eAAe+C,OAAO,CAAC0C,KAAK;YAE5B,MAAMC,oBAAoBL,SAASM,aAAa,KAAK3F,eAAe+C,OAAO;YAC3E,IAAI2C,mBAAmB;gBACrB1F,eAAe+C,OAAO,CAACoC,KAAK;YAC9B;QACF;IACF,GACA;QAACE;QAAUrF;KAAe;IAG5B,MAAM4F,mDAAmD,CACvDlC;QAEA,gFAAgF;QAChF,8EAA8E;QAC9E,sFAAsF;QACtF,MAAMmC,iBAAiBR,YAAYA,SAASM,aAAa,KAAK3F,eAAe+C,OAAO;QACpF,IAAI8C,gBAAgB;YAClBnC,EAAElM,cAAc;QAClB;IACF;IAEA,MAAMsO,yBAAyBrE,uBAAuB,OAAOA,qBAAqBtB;IAElF,MAAM4F,uBAA0D;QAC9D,QAAQ;QACR,iBAAiB3B;QACjB,iBAAiBpC;QACjB,yBACE8D,0BAA0B9D,SAAS,GAAGoC,YAAY,CAAC,EAAE0B,wBAAwB,GAAG3F;QAClF,mBAAmBvC;QACnB,iBAAiB;QACjB,qBAAqB;IACvB;IAEA,MAAMoI,+BAA+BlP,MAAMsM,WAAW,CACpD,CAAC/J;QACC,iEAAiE;QACjE,0DAA0D;QAC1D,6DAA6D;QAC7D,gCAAgC;QAChC,iFAAiF;QACjF,8EAA8E;QAC9E,wEAAwE;QACxE,IAAID,uBAAuBC,OAAO6K,qBAAqBnB,OAAO,GAAG;YAC/DpB;QACF;IACF,GACA;QAACA;KAAmB;IAGtB,MAAMsE,0BAA0B,CAACvC;QAC/BQ,qBAAqBnB,OAAO,GAAG;YAAEtJ,GAAGiK,EAAEhK,OAAO;YAAEC,GAAG+J,EAAE9J,OAAO;QAAC;IAC9D;IAEA,MAAMuE,UAAU,CAAC9E;QACf+E,cAAc/E;QACdiM,gCAAgCjM;IAClC;IAEA,MAAMkF,cAAc,CAAClF;QACnBmF,kBAAkBnF;QAClBuM,iDAAiDvM;IACnD;IAEA,MAAMgF,cAAc,CAAChF;QACnBiF,kBAAkBjF;QAClB4M,wBAAwB5M;IAC1B;IAEA,MAAM6M,2BAA2B,CAAC7M;QAChC0F;QACAK,eAAe/F;IACjB;IAEA,MAAM8M,0BAA0B,CAAC9M;QAC/B2F;QACAK,cAAchG;IAChB;IAEA,qBACE,MAACxB;QACCuO,eAAerP,qCAAwBmH,YAAY,aAAapF,iBAAiB,CAACoF,QAAQ;QAC1FO,YAAYqB;QACZ3B,SAASA;QACTI,aAAaA;QACbF,aAAaA;QACZ,GAAGM,QAAQ;;0BAEZ,KAAC3G;gBACC+B,UAAUA;gBACVkB,YAAYA;gBACZmB,YAAYA;gBACZvB,QAAQA;gBACRwL,OAAOpB;gBACPrI,YAAYA,cAAcC,QAAQ;gBAClCC,OAAOA;gBACP1C,QAAQA;gBACRqC,WAAWA;gBACXR,iBAAiBA;gBACjB4B,WAAW;oBACTe,MAAM;wBAAEoG,WAAW/B;oBAAiB;oBACpCtD,OAAO;wBACL2G,cAAc;wBACdC,gBAAgB;wBAChBC,aAAa;wBACbC,YAAY;wBACZhI,YAAYuB;wBACZzD,UAAU0E;wBACVb,OAAOY;wBACPvB,UAAUA,YAAY,CAACxE;wBACvByB;wBACAqC,SAASmH;wBACTlH,QAAQmH;wBACR7G,WAAW,CAACG,WACRrI,aAAamM,oBAAoBhE,wBACjCA;wBACJpB,SAAS,CAACsB,WACNrI,aAAa+K,cAAc3C,sBAC3BA;wBACJ,GAAGuG,oBAAoB;wBACvB,GAAGrG,SAAS;oBACd;gBACF;0BAECoB,UAAU4D;;0BAGb,KAAC5K;gBACCC,UAAUA;gBACVC,SAASqH;gBACTpH,yBAAyBA;gBACzBC,wBAAwBA;;0BAE1B,MAACrC;gBACC6O,WAAU;gBACVN,aAAa;gBACbO,UAAU,CAAC;gBACXvG,OAAOK;gBACPmG,aAAW;gBACXC,eAAa3K;gBACbK,UAAUsE;gBACVpC,YAAYsB;gBACX,GAAGjB,UAAU;;oBAEZnD,CAAAA,oBAAoB8E,sBAAsB9I,aAAaiL,MAAM,AAAD,mBAC5D,KAAC1J;wBAAiCkH,OAAOzI,aAAaiL,MAAM;uBAA/CjL,aAAaiL,MAAM;oBAEjC5I,QAAQ+K,GAAG,CAAC,CAAC+B,qBACZ,KAAC5N;4BAA6BkH,OAAO0G,KAAK1G,KAAK;2BAAlC,GAAG0G,KAAK1G,KAAK,EAAE;;;YAG/B4B,wBACC,KAACvK;gBACCsP,WAAWnH;gBACXoH,WAAWzG;gBACXiB,cAAcA;gBACdyF,mBAAmBzG;gBACnB0G,cAAclB;gBACdjM,UAAUA;gBACVe,oBAAoBA;gBACpBqM,gBAAgBtL;gBAChBuL,WAAWtL;gBACXuL,aAAatL;gBACbC,aAAaA;gBACbsL,MAAK;gBACLjK,IAAI+G;gBACJmD,mBAAiB3J;gBACjB+I,UAAU,CAAC;0BAEVhC;;;;AAKX"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getRequiredValueByKey } from '../../helpers/getValueByKey';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { callMultiple } from '../../lib/callMultiple';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { preventDefault } from '../../lib/utils';\nimport type { HasDataAttribute, HasRootRef } from '../../types';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport {\n type NativeSelectProps,\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n type SelectValue,\n} from '../NativeSelect/NativeSelect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport type { CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport {\n checkDeprecatedProps,\n checkMixControlledAndUncontrolledState,\n checkOptionsValueType,\n filter,\n findSelectedIndex,\n getOptionByValue,\n} from './helpers';\nimport { useAfterItems } from './hooks/useAfterItems';\nimport { useDropdownOpenedController } from './hooks/useDropdownOpenedController';\nimport { useFocusedOptionController } from './hooks/useFocusedOptionController';\nimport { useInputKeyboardController } from './hooks/useInputKeyboardController';\nimport { useInputValueController } from './hooks/useInputValueController';\nimport { useScrollListController } from './hooks/useScrollListController';\nimport { useSelectedOptionController } from './hooks/useSelectedOptionController';\nimport type {\n CustomSelectOptionInterface,\n CustomSelectRenderOption,\n MousePosition,\n PopupDirection,\n} from './types';\nimport styles from './CustomSelect.module.css';\n\nconst densityClassNames = {\n none: styles.densityNone,\n compact: styles.densityCompact,\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nfunction isMousePositionChanged(event: React.MouseEvent, prevPosition: MousePosition) {\n return (\n Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1\n );\n}\n\nconst FETCH_STATUS_RESET_DELAY = 2000;\n\nconst FetchingStatus = ({\n fetching = false,\n options,\n fetchingInProgressLabel = 'Список опций загружается...',\n fetchingCompletedLabel = `Загружено опций: ${options.length}`,\n}: Pick<\n SelectProps,\n 'fetching' | 'fetchingInProgressLabel' | 'fetchingCompletedLabel' | 'options'\n>) => {\n const [status, setStatus] = React.useState<'fetching' | 'loaded' | 'none'>('none');\n\n const content = getRequiredValueByKey(status, {\n fetching: fetchingInProgressLabel,\n loaded:\n typeof fetchingCompletedLabel === 'function'\n ? fetchingCompletedLabel(options.length)\n : fetchingCompletedLabel,\n none: '',\n });\n\n useIsomorphicLayoutEffect(\n function updateStatus() {\n if (fetching) {\n setStatus('fetching');\n return;\n } else {\n let timeoutId: ReturnType<typeof setTimeout>;\n setStatus((prevStatus) => {\n if (prevStatus === 'fetching') {\n timeoutId = setTimeout(() => setStatus('none'), FETCH_STATUS_RESET_DELAY);\n return 'loaded';\n }\n return prevStatus;\n });\n return () => {\n clearTimeout(timeoutId);\n };\n }\n },\n [fetching],\n );\n\n return <VisuallyHidden aria-live=\"polite\">{content}</VisuallyHidden>;\n};\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends Omit<NativeSelectProps, 'slotProps'>,\n Omit<FormFieldProps, 'maxHeight' | 'mode'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'form' | 'readOnly'> {\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `select`: свойства для прокидывания в нативный `select`;\n * - `input`: свойства для прокидывания в нативный `input`.\n */\n slotProps?:\n | (NativeSelectProps['slotProps'] & {\n input?:\n | (React.InputHTMLAttributes<HTMLInputElement> &\n HasDataAttribute &\n HasRootRef<HTMLInputElement>)\n | undefined;\n })\n | undefined;\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\n *\n * Ref на внутрений компонент input.\n */\n getSelectInputRef?: React.Ref<HTMLInputElement> | undefined;\n /**\n * Если `true`, то при нажатии на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean | undefined;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string | undefined;\n /**\n * Событие изменения текстового поля.\n */\n onInputChange?: ((e: React.ChangeEvent<HTMLInputElement>) => void) | undefined;\n /**\n * Список опций в списке.\n */\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT> | undefined;\n /**\n * Направление раскрытия выпадающего списка.\n */\n popupDirection?: PopupDirection | undefined;\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkui.io/components/custom-select#custom-select-option-api).\n *\n * > ⚠️ Важно: свойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode | undefined;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean | undefined;\n /**\n * Обработчик закрытия выпадающего списка.\n */\n onClose?: VoidFunction | undefined;\n /**\n * Обработчик открытия выпадающего списка.\n */\n onOpen?: VoidFunction | undefined;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`.\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps> | undefined;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения.\n */\n allowClearButton?: boolean | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string | undefined;\n /**\n * Отступ от выпадающего списка.\n */\n dropdownOffsetDistance?: number | undefined;\n /**\n * Ширина раскрывающегося списка зависит от контента.\n */\n dropdownAutoWidth?: boolean | undefined;\n /**\n * Использовать Portal для рендеринга выпадающего списка.\n */\n forceDropdownPortal?: boolean | undefined;\n /**\n * Отключает максимальную высоту по умолчанию.\n */\n noMaxHeight?: boolean | undefined;\n /**\n * Передает атрибут `data-testid` для элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string | undefined;\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ select: { 'data-testid': ... } }`.\n *\n * Передает атрибут `data-testid` для нативного элемента `select`.\n */\n nativeSelectTestId?: string | undefined;\n /**\n * Обработчик события `keyDown` в поле ввода.\n */\n onInputKeyDown?: ((e: React.KeyboardEvent, isOpen: boolean) => void) | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором выбранное значение `CustomSelect` читается скринридерами корректно.\n * В данном режиме введенное в поле ввода значение не сбрасывается при потере фокуса.\n */\n accessible?: boolean | undefined /* TODO [>=v9] удалить свойство */;\n /**\n * Текстовая метка для индикации процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Список опций загружается...\"`.\n */\n fetchingInProgressLabel?: string | undefined;\n /**\n * Текстовая метка для индикации завершения процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Загружено опций: ${options.length}\"`.\n */\n fetchingCompletedLabel?: string | ((optionsCount: number) => string) | undefined;\n /**\n * @deprecated Будет удалено в 10.0.0, используйте `selectType`.\n *\n * Режим отображения.\n *\n * - `default` — показывает фон, обводку и, при наличии, текст-подсказку.\n * - `plain` — показывает только текст-подсказку.\n */\n mode?: 'default' | 'plain' | undefined;\n}\n\n/**\n * @see https://vkui.io/components/custom-select\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const {\n // FormFieldProps\n status,\n before,\n\n // CustomSelectDropdownProps\n overscrollBehavior,\n\n // SelectProps\n children,\n getSelectInputRef,\n searchable = false,\n emptyText = 'Ничего не найдено',\n 'onInputChange': onInputChangeProp,\n 'options': options,\n filterFn = defaultFilterFn,\n popupDirection = 'bottom',\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n ClearButton,\n allowClearButton = false,\n clearButtonTestId,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n forceDropdownPortal,\n noMaxHeight = false,\n labelTextTestId,\n nativeSelectTestId,\n 'onInputKeyDown': onInputKeyDownProp,\n accessible = true,\n fetchingInProgressLabel,\n fetchingCompletedLabel,\n\n // NativeSelectProps\n 'value': selectValue,\n defaultValue,\n onChange,\n getRef,\n multiline,\n placeholder,\n 'icon': iconProp,\n selectType,\n mode,\n align,\n form,\n\n // Input props\n minLength,\n maxLength,\n pattern,\n autoFocus,\n disabled,\n id,\n 'readOnly': readOnlyProp,\n\n // Select props\n required,\n name,\n 'onClick': onSelectClick,\n 'onFocus': onSelectFocus,\n 'onBlur': onSelectBlur,\n\n // other\n 'aria-labelledby': ariaLabelledBy,\n\n slotProps,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(options);\n checkDeprecatedProps(props);\n }\n\n const { density = 'none' } = useAdaptivity();\n\n const {\n onClick: onRootClick,\n onMouseMove: onRootMouseMove,\n onMouseDown: onRootMouseDown,\n getRootRef: rootRef,\n ...rootRest\n } = useMergeProps<\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> &\n HasDataAttribute &\n HasRootRef<HTMLDivElement>\n >(restProps, slotProps?.root);\n\n const { getRootRef: getSelectRef, ...selectRest } = useMergeProps(\n {\n getRootRef: getRef,\n required,\n name,\n form,\n onClick: onSelectClick,\n onFocus: onSelectFocus,\n onBlur: onSelectBlur,\n },\n slotProps?.select,\n );\n\n const {\n getRootRef: getInputRef,\n onChange: onChangeInput,\n onFocus: onInputFocus,\n onBlur: onInputBlur,\n onKeyDown: onNativeInputKeyDown,\n onClick: onNativeInputClick,\n readOnly,\n ...inputRest\n } = useMergeProps(\n {\n getRootRef: getSelectInputRef,\n onChange: onInputChangeProp,\n minLength,\n maxLength,\n pattern,\n autoFocus,\n disabled,\n id,\n readOnly: readOnlyProp,\n placeholder,\n },\n slotProps?.input,\n );\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, rootRef);\n const selectElRef = useExternRef(getSelectRef);\n const selectInputRef = useExternRef(getInputRef);\n\n const propsValue = React.useMemo<SelectValue | undefined>(() => {\n if (selectValue === undefined) {\n return undefined;\n }\n return getOptionByValue(options, selectValue)?.value ?? null;\n }, [options, selectValue]);\n\n const [isControlledOutside, setIsControlledOutside] = React.useState(selectValue !== undefined);\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n\n const {\n nativeSelectValue,\n setNativeSelectValue,\n selectedOptionValue,\n setSelectedOptionValue,\n onNativeSelectChange,\n } = useSelectedOptionController({\n value: propsValue,\n defaultValue,\n isControlledOutside,\n allowClearButton,\n onChange,\n });\n\n const selected = React.useMemo(\n () => options.find((option) => option.value === selectedOptionValue),\n [options, selectedOptionValue],\n );\n\n const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } =\n useInputValueController({\n options,\n accessible,\n selectedValue: selectedOptionValue,\n onInputChange: onChangeInput,\n });\n\n const filteredOptions = React.useMemo(\n () => filter(options, searchable ? inputValue : '', filterFn),\n [filterFn, inputValue, options, searchable],\n );\n\n const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();\n\n const {\n focusedOptionValue,\n setFocusedOptionValue,\n resetFocusedOption,\n focusOptionByIndex,\n focusOption,\n selectFocusedValue,\n } = useFocusedOptionController({\n selectedOptionValue,\n filteredOptions,\n scrollToElement,\n });\n\n const scrollToSelectedOption = () => {\n scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);\n };\n\n const [opened, open, close, toggleOpened] = useDropdownOpenedController({\n onOpen: callMultiple(selectFocusedValue, onOpen),\n onOpened: scrollToSelectedOption,\n onClose,\n onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue,\n });\n\n React.useEffect(\n function updateOptionsValue() {\n const value =\n propsValue !== undefined\n ? propsValue\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n setSelectedOptionValue(value);\n setFocusedOptionValue(value);\n },\n [propsValue, nativeSelectValue, setFocusedOptionValue, setSelectedOptionValue],\n );\n\n React.useEffect(\n function syncIsControlledState() {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = propsValue !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n },\n [propsValue],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (\n filteredOptions.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nativeSelectValue]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const selectOption = React.useCallback(\n (value: Exclude<SelectValue, null>) => {\n setNativeSelectValue(value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, setNativeSelectValue, isControlledOutside, propsValue, nativeSelectValue, selectElRef],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionValue === null) {\n return;\n }\n\n selectOption(focusedOptionValue);\n }, [focusedOptionValue, selectOption]);\n\n const handleInputKeyDown = useInputKeyboardController({\n opened,\n open,\n close,\n resetFocusedOption,\n selectFocused,\n focusOption,\n scrollBoxRef,\n onInputKeyDown: onInputKeyDownProp,\n });\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = filteredOptions[index];\n\n if (option && !option.disabled) {\n selectOption(option.value);\n }\n },\n [filteredOptions, selectOption],\n );\n\n const lastMousePositionRef = React.useRef<MousePosition>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n if (isMousePositionChanged(e, lastMousePositionRef.current)) {\n focusOptionByIndex(index, false);\n }\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = option.value === focusedOptionValue;\n const selected = option.value === selectedOptionValue;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n /**\n * Компилятор сходит с ума из-за рефа внутри focusOptionOnMouseMove.\n * Обходной путь прокидывать ref в свойства для рендер пропов.\n */\n ...(false\n ? {\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: lastMousePositionRef,\n }\n : {}),\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: preventDefault,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n ...option,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionValue,\n selectedOptionValue,\n renderOptionProp,\n handleOptionClick,\n popupAriaId,\n focusOptionOnMouseMove,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n filteredOptions.length > 0 ? (\n <div ref={optionsWrapperRef}>{filteredOptions.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, filteredOptions, optionsWrapperRef, renderDropdown, renderOption]);\n\n const afterItems = useAfterItems({\n value: propsValue,\n nativeSelectValue,\n isControlledOutside,\n opened,\n allowClearButton,\n ClearButton,\n onClearButtonClick: () => {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n resetInputValue();\n selectInputRef.current && selectInputRef.current.focus();\n },\n clearButtonTestId,\n disabled: inputRest.disabled,\n readOnly,\n icon: iconProp,\n });\n\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused =\n selectInputRef.current.ownerDocument.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused =\n selectInputRef.current?.ownerDocument.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const resetOptionFocusOnMouseLeave = React.useCallback(\n (event: React.MouseEvent) => {\n // В Хроме eсли мышка пользователя находится над инпутом селекта,\n // и он с клавиатуры открывает опции, причём одна из опций\n // уже выбрана, то видно, как выбранная опция получает фокус,\n // но потом сразу же его теряет.\n // Связано это с тем, что в этот момент вызывается onMouseLeave, на который у нас\n // завязан сброс состония фокуса у опции. По хорошему фокус должен оставаться.\n // Нам не интересен вызов onMouseLeave если мышка при этом не двигалась.\n if (isMousePositionChanged(event, lastMousePositionRef.current)) {\n resetFocusedOption();\n }\n },\n [resetFocusedOption],\n );\n\n const updateLastMousePosition = (e: React.MouseEvent) => {\n lastMousePositionRef.current = { x: e.clientX, y: e.clientY };\n };\n\n const onClick = (event: React.MouseEvent<HTMLDivElement>) => {\n onRootClick?.(event);\n passClickAndFocusToInputOnClick(event);\n };\n\n const onMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n onRootMouseDown?.(event);\n preventInputBlurWhenClickInsideFocusedSelectArea(event);\n };\n\n const onMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n onRootMouseMove?.(event);\n updateLastMousePosition(event);\n };\n\n const onCustomSelectInputFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n onFocus();\n onInputFocus?.(event);\n };\n\n const onCustomSelectInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n onBlur();\n onInputBlur?.(event);\n };\n\n return (\n <RootComponent\n baseClassName={classNames(styles.host, density !== 'regular' && densityClassNames[density])}\n getRootRef={handleRootRef}\n onClick={onClick}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n {...rootRest}\n >\n <CustomSelectInput\n fetching={fetching}\n searchable={searchable}\n accessible={accessible}\n before={before}\n after={afterItems}\n selectType={selectType || mode || 'default'}\n align={align}\n status={status}\n multiline={multiline}\n labelTextTestId={labelTextTestId}\n slotProps={{\n root: { className: openedClassNames },\n input: {\n autoComplete: 'off',\n autoCapitalize: 'none',\n autoCorrect: 'off',\n spellCheck: 'false',\n getRootRef: selectInputRef,\n onChange: onInputChange,\n value: inputValue,\n readOnly: readOnly || !searchable,\n placeholder,\n onFocus: onCustomSelectInputFocus,\n onBlur: onCustomSelectInputBlur,\n onKeyDown: !readOnly\n ? callMultiple(handleInputKeyDown, onNativeInputKeyDown)\n : onNativeInputKeyDown,\n onClick: !readOnly\n ? callMultiple(toggleOpened, onNativeInputClick)\n : onNativeInputClick,\n ...selectInputAriaProps,\n ...inputRest,\n },\n }}\n >\n {selected?.label}\n </CustomSelectInput>\n\n <FetchingStatus\n fetching={fetching}\n options={filteredOptions}\n fetchingInProgressLabel={fetchingInProgressLabel}\n fetchingCompletedLabel={fetchingCompletedLabel}\n />\n <RootComponent\n Component=\"select\"\n baseClassName={styles.control}\n tabIndex={-1}\n value={nativeSelectValue}\n aria-hidden\n data-testid={nativeSelectTestId}\n onChange={onNativeSelectChange}\n getRootRef={selectElRef}\n {...selectRest}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {options.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </RootComponent>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetOptionFocusOnMouseLeave}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </RootComponent>\n );\n}\n"],"names":["React","classNames","getRequiredValueByKey","useAdaptivity","useExternRef","useMergeProps","callMultiple","defaultFilterFn","useIsomorphicLayoutEffect","preventDefault","CustomSelectDropdown","CustomSelectOption","NOT_SELECTED","remapFromNativeValueToSelectValue","RootComponent","Footnote","VisuallyHidden","CustomSelectInput","checkDeprecatedProps","checkMixControlledAndUncontrolledState","checkOptionsValueType","filter","findSelectedIndex","getOptionByValue","useAfterItems","useDropdownOpenedController","useFocusedOptionController","useInputKeyboardController","useInputValueController","useScrollListController","useSelectedOptionController","densityClassNames","none","compact","defaultRenderOptionFn","option","props","isMousePositionChanged","event","prevPosition","Math","abs","x","clientX","y","clientY","FETCH_STATUS_RESET_DELAY","FetchingStatus","fetching","options","fetchingInProgressLabel","fetchingCompletedLabel","length","status","setStatus","useState","content","loaded","updateStatus","timeoutId","prevStatus","setTimeout","clearTimeout","aria-live","CustomSelect","before","overscrollBehavior","children","getSelectInputRef","searchable","emptyText","onInputChangeProp","filterFn","popupDirection","renderOptionProp","renderDropdown","onClose","onOpen","ClearButton","allowClearButton","clearButtonTestId","dropdownOffsetDistance","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","labelTextTestId","nativeSelectTestId","onInputKeyDownProp","accessible","selectValue","defaultValue","onChange","getRef","multiline","placeholder","iconProp","selectType","mode","align","form","minLength","maxLength","pattern","autoFocus","disabled","id","readOnlyProp","required","name","onSelectClick","onSelectFocus","onSelectBlur","ariaLabelledBy","slotProps","restProps","process","env","NODE_ENV","density","onClick","onRootClick","onMouseMove","onRootMouseMove","onMouseDown","onRootMouseDown","getRootRef","rootRef","rootRest","root","getSelectRef","selectRest","onFocus","onBlur","select","getInputRef","onChangeInput","onInputFocus","onInputBlur","onKeyDown","onNativeInputKeyDown","onNativeInputClick","readOnly","inputRest","input","containerRef","useRef","handleRootRef","selectElRef","selectInputRef","propsValue","useMemo","undefined","value","isControlledOutside","setIsControlledOutside","popperPlacement","setPopperPlacement","nativeSelectValue","setNativeSelectValue","selectedOptionValue","setSelectedOptionValue","onNativeSelectChange","selected","find","inputValue","onInputChange","resetInputValue","resetInputValueBySelectedOption","selectedValue","filteredOptions","scrollToElement","optionsWrapperRef","scrollBoxRef","focusedOptionValue","setFocusedOptionValue","resetFocusedOption","focusOptionByIndex","focusOption","selectFocusedValue","scrollToSelectedOption","opened","open","close","toggleOpened","onOpened","onClosed","useEffect","updateOptionsValue","syncIsControlledState","oldIsControlled","newIsControlled","some","NATIVE","Event","bubbles","current","dispatchEvent","openedClassNames","includes","selectOption","useCallback","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","handleInputKeyDown","onInputKeyDown","handleOptionClick","e","index","Array","prototype","indexOf","call","currentTarget","parentNode","lastMousePositionRef","focusOptionOnMouseMove","popupAriaId","useId","renderOption","hovered","Fragment","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","label","resolvedContent","defaultDropdownContent","div","ref","map","className","afterItems","onClearButtonClick","focus","icon","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","target","click","inputIsNotFocused","ownerDocument","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantId","selectInputAriaProps","resetOptionFocusOnMouseLeave","updateLastMousePosition","onCustomSelectInputFocus","onCustomSelectInputBlur","baseClassName","after","autoComplete","autoCapitalize","autoCorrect","spellCheck","Component","tabIndex","aria-hidden","data-testid","item","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,11 @@ import { useAdaptivity } from "../../hooks/useAdaptivity.js";
|
|
|
7
7
|
import { useDateInput } from "../../hooks/useDateInput.js";
|
|
8
8
|
import { useExternRef } from "../../hooks/useExternRef.js";
|
|
9
9
|
import { useGlobalEscKeyDown } from "../../hooks/useGlobalEscKeyDown.js";
|
|
10
|
+
import { useLocale } from "../../hooks/useLocale.js";
|
|
10
11
|
import { convertDateToTimeZone, createDateInTimeZone, dateFormatter, dateTimeFormatter, isMatch, parse, startOfDay, startOfMinute } from "../../lib/date.js";
|
|
11
12
|
import { cacheDateTimeFormat } from "../../lib/intlCache.js";
|
|
12
13
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
|
|
13
14
|
import { Calendar } from "../Calendar/Calendar.js";
|
|
14
|
-
import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
|
|
15
15
|
import { FocusTrap } from "../FocusTrap/FocusTrap.js";
|
|
16
16
|
import { FormField } from "../FormField/FormField.js";
|
|
17
17
|
import { IconButton } from "../IconButton/IconButton.js";
|
|
@@ -155,7 +155,8 @@ const getInternalValue = (value)=>{
|
|
|
155
155
|
}
|
|
156
156
|
}, [
|
|
157
157
|
open,
|
|
158
|
-
getLastUpdatedValue
|
|
158
|
+
getLastUpdatedValue,
|
|
159
|
+
setInternalValue
|
|
159
160
|
]);
|
|
160
161
|
const onCalendarChange = React.useCallback((value)=>{
|
|
161
162
|
if (enableTime) {
|
|
@@ -198,7 +199,7 @@ const getInternalValue = (value)=>{
|
|
|
198
199
|
// лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался
|
|
199
200
|
// на ней, пока помещается.
|
|
200
201
|
const [calendarPlacement, setCalendarPlacement] = React.useState(calendarPlacementProp);
|
|
201
|
-
const
|
|
202
|
+
const locale = useLocale();
|
|
202
203
|
const currentDateLabel = value ? labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(value) : null;
|
|
203
204
|
const currentDateLabelId = React.useId();
|
|
204
205
|
const ariaLabelId = React.useId();
|