@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
|
@@ -7,35 +7,36 @@ import { Keys, pressedKey } from "../../lib/accessibility.js";
|
|
|
7
7
|
import { setHours, setMinutes } from "../../lib/date.js";
|
|
8
8
|
import { AdaptivityProvider } from "../AdaptivityProvider/AdaptivityProvider.js";
|
|
9
9
|
import { Button } from "../Button/Button.js";
|
|
10
|
-
import { CalendarTimePicker } from "./CalendarTimePicker.js";
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
});
|
|
10
|
+
import { CalendarTimePicker, padStartTimeValue } from "./CalendarTimePicker.js";
|
|
11
|
+
const MAX_HOURS = 23;
|
|
12
|
+
const MAX_MINUTES = 59;
|
|
13
|
+
function generateLabels(min, max) {
|
|
14
|
+
const array = new Array(Math.ceil(max - min + 1));
|
|
15
|
+
for(let i = min; i <= max; i += 1){
|
|
16
|
+
const value = padStartTimeValue(i);
|
|
17
|
+
array[i - min] = {
|
|
18
|
+
value,
|
|
19
|
+
label: value
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return array;
|
|
24
23
|
}
|
|
25
|
-
|
|
24
|
+
const hours = generateLabels(0, MAX_HOURS);
|
|
25
|
+
const minutes = generateLabels(0, MAX_MINUTES);
|
|
26
|
+
export const CalendarTime = ({ value, onChange, onDoneButtonClick, changeHoursLabel, changeMinutesLabel, setHours: setHoursFn = setHours, setMinutes: setMinutesFn = setMinutes, doneButtonText = 'Готово', doneButtonDisabled = false, doneButtonShow = true, minutesTestId, hoursTestId, doneButtonTestId, DoneButton, isDayDisabled })=>{
|
|
26
27
|
const hoursInputRef = useRef(null);
|
|
27
28
|
const minutesInputRef = useRef(null);
|
|
28
29
|
const doneButtonRef = useRef(null);
|
|
29
30
|
const localHours = isDayDisabled ? hours.map((hour)=>{
|
|
30
31
|
return {
|
|
31
32
|
...hour,
|
|
32
|
-
disabled: isDayDisabled(setHoursFn(value, hour.value), true)
|
|
33
|
+
disabled: isDayDisabled(setHoursFn(value, Number(hour.value)), true)
|
|
33
34
|
};
|
|
34
35
|
}) : hours;
|
|
35
36
|
const localMinutes = isDayDisabled ? minutes.map((minute)=>{
|
|
36
37
|
return {
|
|
37
38
|
...minute,
|
|
38
|
-
disabled: isDayDisabled(setMinutesFn(value, minute.value), true)
|
|
39
|
+
disabled: isDayDisabled(setMinutesFn(value, Number(minute.value)), true)
|
|
39
40
|
};
|
|
40
41
|
}) : minutes;
|
|
41
42
|
const onPickerKeyDown = (e)=>{
|
|
@@ -60,14 +61,8 @@ export const CalendarTime = ({ value, onChange, onDoneButtonClick, changeHoursLa
|
|
|
60
61
|
nextStep.current?.focus();
|
|
61
62
|
}
|
|
62
63
|
};
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
event.stopPropagation();
|
|
66
|
-
}
|
|
67
|
-
}, []);
|
|
68
|
-
const onSelectInputKeyDown = (e, isOpen)=>{
|
|
69
|
-
onPickerKeyDown(e);
|
|
70
|
-
stopPropagationOfEscapeKeyboardEventWhenSelectIsOpen(e, isOpen);
|
|
64
|
+
const onHoursInputEnd = ()=>{
|
|
65
|
+
minutesInputRef.current?.focus();
|
|
71
66
|
};
|
|
72
67
|
const renderDoneButton = ()=>{
|
|
73
68
|
const ButtonComponent = DoneButton ?? Button;
|
|
@@ -85,31 +80,47 @@ export const CalendarTime = ({ value, onChange, onDoneButtonClick, changeHoursLa
|
|
|
85
80
|
return /*#__PURE__*/ _jsxs("div", {
|
|
86
81
|
className: classNames("vkuiCalendarTime__host", !doneButtonShow && "vkuiCalendarTime__host__withoutDone"),
|
|
87
82
|
children: [
|
|
88
|
-
/*#__PURE__*/
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
83
|
+
/*#__PURE__*/ _jsxs(AdaptivityProvider, {
|
|
84
|
+
density: "compact",
|
|
85
|
+
children: [
|
|
86
|
+
/*#__PURE__*/ _jsx("div", {
|
|
87
|
+
className: "vkuiCalendarTime__picker",
|
|
88
|
+
children: /*#__PURE__*/ _jsx(CalendarTimePicker, {
|
|
89
|
+
valueDate: value,
|
|
90
|
+
value: value.getHours(),
|
|
91
|
+
onChange: onChange,
|
|
92
|
+
options: localHours,
|
|
93
|
+
setTime: setHoursFn,
|
|
94
|
+
onKeyDown: onPickerKeyDown,
|
|
95
|
+
inputRef: hoursInputRef,
|
|
96
|
+
inputLabel: changeHoursLabel,
|
|
97
|
+
inputTestId: hoursTestId,
|
|
98
|
+
maxValue: MAX_HOURS,
|
|
99
|
+
onInputEnd: onHoursInputEnd,
|
|
100
|
+
isDayDisabled: isDayDisabled
|
|
101
|
+
})
|
|
102
|
+
}),
|
|
103
|
+
/*#__PURE__*/ _jsx("div", {
|
|
104
|
+
className: "vkuiCalendarTime__divider",
|
|
105
|
+
children: ":"
|
|
106
|
+
}),
|
|
107
|
+
/*#__PURE__*/ _jsx("div", {
|
|
108
|
+
className: "vkuiCalendarTime__picker",
|
|
109
|
+
children: /*#__PURE__*/ _jsx(CalendarTimePicker, {
|
|
110
|
+
valueDate: value,
|
|
111
|
+
value: value.getMinutes(),
|
|
112
|
+
onChange: onChange,
|
|
113
|
+
options: localMinutes,
|
|
114
|
+
setTime: setMinutesFn,
|
|
115
|
+
onKeyDown: onPickerKeyDown,
|
|
116
|
+
inputRef: minutesInputRef,
|
|
117
|
+
inputLabel: changeMinutesLabel,
|
|
118
|
+
inputTestId: minutesTestId,
|
|
119
|
+
maxValue: MAX_MINUTES,
|
|
120
|
+
isDayDisabled: isDayDisabled
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
]
|
|
113
124
|
}),
|
|
114
125
|
doneButtonShow && /*#__PURE__*/ _jsx("div", {
|
|
115
126
|
className: "vkuiCalendarTime__button",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"sourcesContent":["'use client';\n\nimport { useRef } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { setHours, setMinutes } from '../../lib/date';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { Button, type ButtonProps } from '../Button/Button';\nimport { CalendarTimePicker } from './CalendarTimePicker';\nimport styles from './CalendarTime.module.css';\n\nexport type CalendarTimeTestsProps = {\n /**\n * Передает атрибут `data-testid` для дропдауна выбора часа в календаре.\n */\n hoursTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для дропдауна выбора минут в календаре.\n */\n minutesTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки \"Готово\" в календаре.\n */\n doneButtonTestId?: string | undefined;\n};\n\nexport type CalendarDoneButtonProps = {\n /**\n * Кастомное отображение кнопки `\"Done\"`.\n */\n DoneButton?: React.ComponentType<ButtonProps> | undefined;\n /**\n * Текст отображаемый в кнопке `\"Done\"`.\n */\n doneButtonText?: string | undefined;\n /**\n * Управление отображением кнопки `\"Done\"`.\n */\n doneButtonShow?: boolean | undefined;\n /**\n * Блокировка взаимодействия с кнопкой \"Done\".\n */\n doneButtonDisabled?: boolean | undefined;\n /**\n * Обработки нажатия на кнопку `\"Done\"`.\n */\n onDoneButtonClick?: (() => void) | undefined;\n};\n\nexport interface CalendarTimeProps extends CalendarTimeTestsProps, CalendarDoneButtonProps {\n /**\n * Отображаемая дата.\n */\n value: Date;\n /**\n * Текст выпадающего списка с выбором часов. Делает его доступным для ассистивных технологий.\n */\n changeHoursLabel?: string | undefined;\n /**\n * Текст выпадающего списка с выбором минут. Делает его доступным для ассистивных технологий.\n */\n changeMinutesLabel?: string | undefined;\n /**\n * Обработчик изменения времени.\n */\n onChange?: ((value: Date) => void) | undefined;\n /**\n * Функция установки часа (для таймзонно-зависимого календаря).\n */\n setHours?: ((date: Date, hours: number) => Date) | undefined;\n /**\n * Функция установки минут (для таймзонно-зависимого календаря).\n */\n setMinutes?: ((date: Date, minutes: number) => Date) | undefined;\n /**\n * Функция для проверки блокировки выбора даты и времени.\n */\n isDayDisabled?: ((day: Date, withTime?: boolean) => boolean) | undefined;\n}\n\nconst hours: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 24; i += 1) {\n hours.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nconst minutes: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 60; i += 1) {\n minutes.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nexport const CalendarTime = ({\n value,\n onChange,\n onDoneButtonClick,\n changeHoursLabel,\n changeMinutesLabel,\n setHours: setHoursFn = setHours,\n setMinutes: setMinutesFn = setMinutes,\n isDayDisabled,\n doneButtonText = 'Готово',\n doneButtonDisabled = false,\n doneButtonShow = true,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n DoneButton,\n}: CalendarTimeProps): React.ReactNode => {\n const hoursInputRef = useRef<HTMLInputElement | null>(null);\n const minutesInputRef = useRef<HTMLInputElement | null>(null);\n const doneButtonRef = useRef<HTMLButtonElement | null>(null);\n\n const localHours = isDayDisabled\n ? hours.map((hour) => {\n return { ...hour, disabled: isDayDisabled(setHoursFn(value, hour.value), true) };\n })\n : hours;\n\n const localMinutes = isDayDisabled\n ? minutes.map((minute) => {\n return { ...minute, disabled: isDayDisabled(setMinutesFn(value, minute.value), true) };\n })\n : minutes;\n\n const onPickerKeyDown = (e: React.KeyboardEvent) => {\n const key = pressedKey(e);\n /* Мы хотим иметь возможность быстро, по Enter перемещаться между\n * селектами с часами и минутами, также как мы это делаем по нажатию на Tab */\n if (key !== Keys.ENTER) {\n return;\n }\n\n const steps = [hoursInputRef, minutesInputRef, doneButtonRef].filter((ref) =>\n Boolean(ref.current),\n );\n const currentStepIndex = steps.findIndex((step) => step.current === e.target);\n const nextStepIndex = currentStepIndex + 1;\n if (nextStepIndex >= steps.length) {\n return;\n }\n const nextStep = steps[nextStepIndex];\n\n if (nextStep.current) {\n e.preventDefault();\n nextStep.current?.focus();\n }\n };\n\n const stopPropagationOfEscapeKeyboardEventWhenSelectIsOpen = React.useCallback(\n (event: React.KeyboardEvent, isOpen: boolean) => {\n if (isOpen && event.key === 'Escape') {\n event.stopPropagation();\n }\n },\n [],\n );\n\n const onSelectInputKeyDown = (e: React.KeyboardEvent, isOpen: boolean) => {\n onPickerKeyDown(e);\n stopPropagationOfEscapeKeyboardEventWhenSelectIsOpen(e, isOpen);\n };\n\n const renderDoneButton = () => {\n const ButtonComponent = DoneButton ?? Button;\n return (\n <ButtonComponent\n mode=\"secondary\"\n onClick={onDoneButtonClick}\n size=\"l\"\n getRootRef={doneButtonRef}\n onKeyDown={onPickerKeyDown}\n disabled={doneButtonDisabled}\n data-testid={doneButtonTestId}\n >\n {doneButtonText}\n </ButtonComponent>\n );\n };\n\n return (\n <div className={classNames(styles.host, !doneButtonShow && styles.host__withoutDone)}>\n <CalendarTimePicker\n value={value}\n getNumericValue={(v) => v.getHours()}\n onChange={onChange}\n options={localHours}\n setTime={setHoursFn}\n onInputKeyDown={onSelectInputKeyDown}\n inputRef={hoursInputRef}\n inputLabel={changeHoursLabel}\n inputTestId={hoursTestId}\n />\n <div className={styles.divider}>:</div>\n <CalendarTimePicker\n value={value}\n getNumericValue={(v) => v.getMinutes()}\n onChange={onChange}\n options={localMinutes}\n setTime={setMinutesFn}\n onInputKeyDown={onSelectInputKeyDown}\n inputRef={minutesInputRef}\n inputLabel={changeMinutesLabel}\n inputTestId={minutesTestId}\n />\n {doneButtonShow && (\n <div className={styles.button}>\n <AdaptivityProvider density=\"compact\">{renderDoneButton()}</AdaptivityProvider>\n </div>\n )}\n </div>\n );\n};\n"],"names":["useRef","React","classNames","Keys","pressedKey","setHours","setMinutes","AdaptivityProvider","Button","CalendarTimePicker","hours","i","push","value","label","String","padStart","minutes","CalendarTime","onChange","onDoneButtonClick","changeHoursLabel","changeMinutesLabel","setHoursFn","setMinutesFn","isDayDisabled","doneButtonText","doneButtonDisabled","doneButtonShow","minutesTestId","hoursTestId","doneButtonTestId","DoneButton","hoursInputRef","minutesInputRef","doneButtonRef","localHours","map","hour","disabled","localMinutes","minute","onPickerKeyDown","e","key","ENTER","steps","filter","ref","Boolean","current","currentStepIndex","findIndex","step","target","nextStepIndex","length","nextStep","preventDefault","focus","stopPropagationOfEscapeKeyboardEventWhenSelectIsOpen","useCallback","event","isOpen","stopPropagation","onSelectInputKeyDown","renderDoneButton","ButtonComponent","mode","onClick","size","getRootRef","onKeyDown","data-testid","div","className","getNumericValue","v","getHours","options","setTime","onInputKeyDown","inputRef","inputLabel","inputTestId","getMinutes","density"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"sourcesContent":["'use client';\n\nimport { useRef } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { setHours, setMinutes } from '../../lib/date';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { Button, type ButtonProps } from '../Button/Button';\nimport { CalendarTimePicker, padStartTimeValue } from './CalendarTimePicker';\nimport styles from './CalendarTime.module.css';\n\nconst MAX_HOURS = 23;\nconst MAX_MINUTES = 59;\n\nfunction generateLabels(\n min: number,\n max: number,\n): Array<{\n value: string;\n label: string;\n}> {\n const array = new Array(Math.ceil(max - min + 1));\n\n for (let i = min; i <= max; i += 1) {\n const value = padStartTimeValue(i);\n\n array[i - min] = { value, label: value };\n }\n\n return array;\n}\n\nconst hours = generateLabels(0, MAX_HOURS);\n\nconst minutes = generateLabels(0, MAX_MINUTES);\n\nexport type CalendarTimeTestsProps = {\n /**\n * Передает атрибут `data-testid` для дропдауна выбора часа в календаре.\n */\n hoursTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для дропдауна выбора минут в календаре.\n */\n minutesTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки \"Готово\" в календаре.\n */\n doneButtonTestId?: string | undefined;\n};\n\nexport type CalendarDoneButtonProps = {\n /**\n * Кастомное отображение кнопки `\"Done\"`.\n */\n DoneButton?: React.ComponentType<ButtonProps> | undefined;\n /**\n * Текст отображаемый в кнопке `\"Done\"`.\n */\n doneButtonText?: string | undefined;\n /**\n * Управление отображением кнопки `\"Done\"`.\n */\n doneButtonShow?: boolean | undefined;\n /**\n * Блокировка взаимодействия с кнопкой \"Done\".\n */\n doneButtonDisabled?: boolean | undefined;\n /**\n * Обработки нажатия на кнопку `\"Done\"`.\n */\n onDoneButtonClick?: (() => void) | undefined;\n};\n\nexport interface CalendarTimeProps extends CalendarTimeTestsProps, CalendarDoneButtonProps {\n /**\n * Отображаемая дата.\n */\n value: Date;\n /**\n * Текст выпадающего списка с выбором часов. Делает его доступным для ассистивных технологий.\n */\n changeHoursLabel?: string | undefined;\n /**\n * Текст выпадающего списка с выбором минут. Делает его доступным для ассистивных технологий.\n */\n changeMinutesLabel?: string | undefined;\n /**\n * Обработчик изменения времени.\n */\n onChange?: ((value: Date) => void) | undefined;\n /**\n * Функция установки часа (для таймзонно-зависимого календаря).\n */\n setHours?: ((date: Date, hours: number) => Date) | undefined;\n /**\n * Функция установки минут (для таймзонно-зависимого календаря).\n */\n setMinutes?: ((date: Date, minutes: number) => Date) | undefined;\n /**\n * Функция для проверки блокировки выбора даты и времени.\n */\n isDayDisabled?: ((day: Date, withTime?: boolean) => boolean) | undefined;\n}\n\nexport const CalendarTime = ({\n value,\n onChange,\n onDoneButtonClick,\n changeHoursLabel,\n changeMinutesLabel,\n setHours: setHoursFn = setHours,\n setMinutes: setMinutesFn = setMinutes,\n doneButtonText = 'Готово',\n doneButtonDisabled = false,\n doneButtonShow = true,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n DoneButton,\n isDayDisabled,\n}: CalendarTimeProps): React.ReactNode => {\n const hoursInputRef = useRef<HTMLInputElement | null>(null);\n const minutesInputRef = useRef<HTMLInputElement | null>(null);\n const doneButtonRef = useRef<HTMLButtonElement | null>(null);\n\n const localHours = isDayDisabled\n ? hours.map((hour) => {\n return { ...hour, disabled: isDayDisabled(setHoursFn(value, Number(hour.value)), true) };\n })\n : hours;\n\n const localMinutes = isDayDisabled\n ? minutes.map((minute) => {\n return {\n ...minute,\n disabled: isDayDisabled(setMinutesFn(value, Number(minute.value)), true),\n };\n })\n : minutes;\n\n const onPickerKeyDown = (e: React.KeyboardEvent) => {\n const key = pressedKey(e);\n /* Мы хотим иметь возможность быстро, по Enter перемещаться между\n * селектами с часами и минутами, также как мы это делаем по нажатию на Tab */\n if (key !== Keys.ENTER) {\n return;\n }\n\n const steps = [hoursInputRef, minutesInputRef, doneButtonRef].filter((ref) =>\n Boolean(ref.current),\n );\n const currentStepIndex = steps.findIndex((step) => step.current === e.target);\n const nextStepIndex = currentStepIndex + 1;\n if (nextStepIndex >= steps.length) {\n return;\n }\n const nextStep = steps[nextStepIndex];\n\n if (nextStep.current) {\n e.preventDefault();\n nextStep.current?.focus();\n }\n };\n\n const onHoursInputEnd = () => {\n minutesInputRef.current?.focus();\n };\n\n const renderDoneButton = () => {\n const ButtonComponent = DoneButton ?? Button;\n return (\n <ButtonComponent\n mode=\"secondary\"\n onClick={onDoneButtonClick}\n size=\"l\"\n getRootRef={doneButtonRef}\n onKeyDown={onPickerKeyDown}\n disabled={doneButtonDisabled}\n data-testid={doneButtonTestId}\n >\n {doneButtonText}\n </ButtonComponent>\n );\n };\n\n return (\n <div className={classNames(styles.host, !doneButtonShow && styles.host__withoutDone)}>\n <AdaptivityProvider density=\"compact\">\n <div className={styles.picker}>\n <CalendarTimePicker\n valueDate={value}\n value={value.getHours()}\n onChange={onChange}\n options={localHours}\n setTime={setHoursFn}\n onKeyDown={onPickerKeyDown}\n inputRef={hoursInputRef}\n inputLabel={changeHoursLabel}\n inputTestId={hoursTestId}\n maxValue={MAX_HOURS}\n onInputEnd={onHoursInputEnd}\n isDayDisabled={isDayDisabled}\n />\n </div>\n <div className={styles.divider}>:</div>\n <div className={styles.picker}>\n <CalendarTimePicker\n valueDate={value}\n value={value.getMinutes()}\n onChange={onChange}\n options={localMinutes}\n setTime={setMinutesFn}\n onKeyDown={onPickerKeyDown}\n inputRef={minutesInputRef}\n inputLabel={changeMinutesLabel}\n inputTestId={minutesTestId}\n maxValue={MAX_MINUTES}\n isDayDisabled={isDayDisabled}\n />\n </div>\n </AdaptivityProvider>\n {doneButtonShow && (\n <div className={styles.button}>\n <AdaptivityProvider density=\"compact\">{renderDoneButton()}</AdaptivityProvider>\n </div>\n )}\n </div>\n );\n};\n"],"names":["useRef","React","classNames","Keys","pressedKey","setHours","setMinutes","AdaptivityProvider","Button","CalendarTimePicker","padStartTimeValue","MAX_HOURS","MAX_MINUTES","generateLabels","min","max","array","Array","Math","ceil","i","value","label","hours","minutes","CalendarTime","onChange","onDoneButtonClick","changeHoursLabel","changeMinutesLabel","setHoursFn","setMinutesFn","doneButtonText","doneButtonDisabled","doneButtonShow","minutesTestId","hoursTestId","doneButtonTestId","DoneButton","isDayDisabled","hoursInputRef","minutesInputRef","doneButtonRef","localHours","map","hour","disabled","Number","localMinutes","minute","onPickerKeyDown","e","key","ENTER","steps","filter","ref","Boolean","current","currentStepIndex","findIndex","step","target","nextStepIndex","length","nextStep","preventDefault","focus","onHoursInputEnd","renderDoneButton","ButtonComponent","mode","onClick","size","getRootRef","onKeyDown","data-testid","div","className","density","valueDate","getHours","options","setTime","inputRef","inputLabel","inputTestId","maxValue","onInputEnd","getMinutes"],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
interface CalendarTimePickerProps
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
value: number;
|
|
2
|
+
export declare function padStartTimeValue(value: Pick<string, 'toString'>): string;
|
|
3
|
+
interface CalendarTimePickerProps {
|
|
4
|
+
valueDate: Date;
|
|
5
|
+
options: ReadonlyArray<{
|
|
6
|
+
value: string;
|
|
8
7
|
label: string;
|
|
9
8
|
}>;
|
|
10
9
|
onChange?: ((value: Date) => void) | undefined;
|
|
@@ -12,7 +11,12 @@ interface CalendarTimePickerProps extends Pick<SelectProps, 'onInputKeyDown'> {
|
|
|
12
11
|
inputRef: React.Ref<HTMLInputElement>;
|
|
13
12
|
inputLabel?: string | undefined;
|
|
14
13
|
inputTestId?: string | undefined;
|
|
14
|
+
value: number;
|
|
15
|
+
maxValue: number;
|
|
16
|
+
onInputEnd?: () => void;
|
|
17
|
+
onKeyDown?: (e: React.KeyboardEvent) => void;
|
|
18
|
+
isDayDisabled?: ((day: Date, withTime?: boolean) => boolean) | undefined;
|
|
15
19
|
}
|
|
16
|
-
export declare const CalendarTimePicker: ({
|
|
20
|
+
export declare const CalendarTimePicker: ({ valueDate, value, options, onChange, setTime, inputRef, inputLabel, inputTestId, maxValue, onInputEnd, onKeyDown: onKeyDownProp, isDayDisabled, }: CalendarTimePickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
21
|
export {};
|
|
18
22
|
//# sourceMappingURL=CalendarTimePicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarTimePicker.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarTime/CalendarTimePicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CalendarTimePicker.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarTime/CalendarTimePicker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiC/B,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,CAEzE;AAkBD,UAAU,uBAAuB;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC1E;AAGD,eAAO,MAAM,kBAAkB,GAAI,qJAahC,uBAAuB,4CAkGzB,CAAC"}
|
|
@@ -1,60 +1,120 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useState } from "react";
|
|
4
3
|
import * as React from "react";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
4
|
+
import { clamp, overflow } from "../../helpers/math.js";
|
|
5
|
+
import { useBooleanState } from "../../hooks/useBooleanState.js";
|
|
6
|
+
import { useExternRef } from "../../hooks/useExternRef.js";
|
|
7
|
+
import { Keys } from "../../lib/accessibility.js";
|
|
8
|
+
import { isActiveElement } from "../../lib/dom.js";
|
|
9
|
+
import { ComboBox } from "./ComboBox.js";
|
|
10
|
+
function validateValueInput(event, maxValue) {
|
|
11
|
+
if (event.target.value === '') {
|
|
12
|
+
return event.target.value;
|
|
13
|
+
}
|
|
14
|
+
const inputValue = /\d\d?/.exec(event.target.value)?.[0] || '';
|
|
15
|
+
if (event.target.value !== inputValue) {
|
|
16
|
+
return inputValue;
|
|
17
|
+
}
|
|
18
|
+
const inputValueNumber = Number(inputValue);
|
|
19
|
+
if (isNaN(inputValueNumber)) {
|
|
20
|
+
return '';
|
|
21
|
+
}
|
|
22
|
+
const resultValueNumber = clamp(inputValueNumber, 0, maxValue);
|
|
23
|
+
if (inputValueNumber === resultValueNumber) {
|
|
24
|
+
return inputValue;
|
|
25
|
+
}
|
|
26
|
+
return resultValueNumber.toString();
|
|
27
|
+
}
|
|
28
|
+
export function padStartTimeValue(value) {
|
|
29
|
+
return value.toString().padStart(2, '0');
|
|
30
|
+
}
|
|
31
|
+
function newValueOnInputKeyDown(event, maxValue) {
|
|
32
|
+
if (!(event.target instanceof HTMLInputElement)) {
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
switch(event.key){
|
|
36
|
+
case Keys.ARROW_UP:
|
|
37
|
+
return padStartTimeValue(overflow(Number(event.target.value) + 1, 0, maxValue));
|
|
38
|
+
case Keys.ARROW_DOWN:
|
|
39
|
+
return padStartTimeValue(overflow(Number(event.target.value) - 1, 0, maxValue));
|
|
40
|
+
}
|
|
41
|
+
return event.target.value;
|
|
42
|
+
}
|
|
43
|
+
/* eslint-enable jsdoc/require-jsdoc */ export const CalendarTimePicker = ({ valueDate, value, options, onChange, setTime, inputRef, inputLabel, inputTestId, maxValue, onInputEnd, onKeyDown: onKeyDownProp, isDayDisabled })=>{
|
|
44
|
+
const ref = useExternRef(inputRef);
|
|
45
|
+
const [isInputFocused, onFocus, setInputBlur] = useBooleanState(false);
|
|
46
|
+
const [editableValue, setEditableValue] = React.useState(padStartTimeValue(value));
|
|
47
|
+
const updateValue = (newValue)=>{
|
|
48
|
+
const newDate = setTime(valueDate, Number(newValue));
|
|
49
|
+
if (isDayDisabled?.(newDate, true)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
setEditableValue(newValue);
|
|
53
|
+
onChange?.(newDate);
|
|
54
|
+
};
|
|
55
|
+
// Обработка ввода
|
|
56
|
+
const onInput = (event)=>{
|
|
57
|
+
const validateValue = validateValueInput(event, maxValue);
|
|
58
|
+
updateValue(validateValue);
|
|
59
|
+
if (validateValue.length > 1 && event.target.selectionStart) {
|
|
60
|
+
onInputEnd?.();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Управление числом с клавиатуры стрелками вниз/вверх.
|
|
64
|
+
const onKeyDown = (event)=>{
|
|
65
|
+
const validateValue = newValueOnInputKeyDown(event, maxValue);
|
|
66
|
+
updateValue(validateValue);
|
|
67
|
+
};
|
|
68
|
+
// Обработка каретки если время уже задано
|
|
69
|
+
const onSelectionChange = React.useCallback((event)=>{
|
|
70
|
+
if (event.target instanceof HTMLInputElement) {
|
|
71
|
+
if (event.target.value.length > 1 && isActiveElement(event.target)) {
|
|
72
|
+
event.target.select();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
17
75
|
}, []);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
76
|
+
React.useEffect(()=>{
|
|
77
|
+
const el = ref.current;
|
|
78
|
+
el?.addEventListener('selectionchange', onSelectionChange);
|
|
79
|
+
return ()=>{
|
|
80
|
+
el?.removeEventListener('selectionchange', onSelectionChange);
|
|
81
|
+
};
|
|
82
|
+
}, [
|
|
83
|
+
onSelectionChange,
|
|
84
|
+
ref
|
|
22
85
|
]);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
86
|
+
// Обработка ухода с поля ввода
|
|
87
|
+
const onBlur = ()=>{
|
|
88
|
+
setInputBlur();
|
|
89
|
+
setEditableValue((value)=>{
|
|
90
|
+
const newValue = padStartTimeValue(value);
|
|
91
|
+
return newValue;
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
// Обработка значения при нажатии в барабане
|
|
95
|
+
const onClickOption = (newValue)=>{
|
|
96
|
+
updateValue(newValue);
|
|
29
97
|
};
|
|
98
|
+
const valueAsString = padStartTimeValue(value);
|
|
99
|
+
const viewValue = isInputFocused || padStartTimeValue(editableValue) !== valueAsString ? editableValue : valueAsString;
|
|
30
100
|
return /*#__PURE__*/ _jsx("div", {
|
|
31
101
|
className: "vkuiCalendarTime__picker",
|
|
32
|
-
children: /*#__PURE__*/ _jsx(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
filterFn: selectFilterFn,
|
|
41
|
-
onInputChange: onPickerValueChange,
|
|
42
|
-
onInputKeyDown: onInputKeyDown,
|
|
43
|
-
renderOption: ({ children: optionChildren, ...optionProps })=>/*#__PURE__*/ _jsx(CustomSelectOption, {
|
|
44
|
-
...optionProps,
|
|
45
|
-
textNoWrap: true,
|
|
46
|
-
children: optionChildren
|
|
47
|
-
}),
|
|
48
|
-
slotProps: {
|
|
49
|
-
input: {
|
|
50
|
-
'aria-label': inputLabel,
|
|
51
|
-
'data-testid': inputTestId,
|
|
52
|
-
'value': inputValue,
|
|
53
|
-
'getRootRef': inputRef,
|
|
54
|
-
onBlur
|
|
55
|
-
}
|
|
102
|
+
children: /*#__PURE__*/ _jsx(ComboBox, {
|
|
103
|
+
value: viewValue,
|
|
104
|
+
slotProps: {
|
|
105
|
+
input: {
|
|
106
|
+
'getRootRef': ref,
|
|
107
|
+
'aria-label': inputLabel,
|
|
108
|
+
'data-testid': inputTestId,
|
|
109
|
+
'onKeyDown': onKeyDownProp
|
|
56
110
|
}
|
|
57
|
-
}
|
|
111
|
+
},
|
|
112
|
+
labels: options,
|
|
113
|
+
onChange: onInput,
|
|
114
|
+
onKeyDown: onKeyDown,
|
|
115
|
+
onClickOption: onClickOption,
|
|
116
|
+
onFocus: onFocus,
|
|
117
|
+
onBlur: onBlur
|
|
58
118
|
})
|
|
59
119
|
});
|
|
60
120
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CalendarTime/CalendarTimePicker.tsx"],"sourcesContent":["'use client';\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CalendarTime/CalendarTimePicker.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { clamp, overflow } from '../../helpers/math';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { Keys } from '../../lib/accessibility';\nimport { isActiveElement } from '../../lib/dom';\nimport { ComboBox } from './ComboBox';\nimport styles from './CalendarTime.module.css';\n\nfunction validateValueInput(event: React.ChangeEvent<HTMLInputElement>, maxValue: number) {\n if (event.target.value === '') {\n return event.target.value;\n }\n\n const inputValue = /\\d\\d?/.exec(event.target.value)?.[0] || '';\n if (event.target.value !== inputValue) {\n return inputValue;\n }\n\n const inputValueNumber = Number(inputValue);\n if (isNaN(inputValueNumber)) {\n return '';\n }\n\n const resultValueNumber = clamp(inputValueNumber, 0, maxValue);\n\n if (inputValueNumber === resultValueNumber) {\n return inputValue;\n }\n\n return resultValueNumber.toString();\n}\n\nexport function padStartTimeValue(value: Pick<string, 'toString'>): string {\n return value.toString().padStart(2, '0');\n}\n\nfunction newValueOnInputKeyDown(event: React.KeyboardEvent<HTMLInputElement>, maxValue: number) {\n if (!(event.target instanceof HTMLInputElement)) {\n return '';\n }\n\n switch (event.key) {\n case Keys.ARROW_UP:\n return padStartTimeValue(overflow(Number(event.target.value) + 1, 0, maxValue));\n case Keys.ARROW_DOWN:\n return padStartTimeValue(overflow(Number(event.target.value) - 1, 0, maxValue));\n }\n\n return event.target.value;\n}\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface CalendarTimePickerProps {\n valueDate: Date;\n options: ReadonlyArray<{\n value: string;\n label: string;\n }>;\n onChange?: ((value: Date) => void) | undefined;\n setTime: (value: Date, time: number) => Date;\n inputRef: React.Ref<HTMLInputElement>;\n inputLabel?: string | undefined;\n inputTestId?: string | undefined;\n value: number;\n maxValue: number;\n onInputEnd?: () => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n isDayDisabled?: ((day: Date, withTime?: boolean) => boolean) | undefined;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const CalendarTimePicker = ({\n valueDate,\n value,\n options,\n onChange,\n setTime,\n inputRef,\n inputLabel,\n inputTestId,\n maxValue,\n onInputEnd,\n onKeyDown: onKeyDownProp,\n isDayDisabled,\n}: CalendarTimePickerProps) => {\n const ref = useExternRef(inputRef);\n\n const [isInputFocused, onFocus, setInputBlur] = useBooleanState(false);\n\n const [editableValue, setEditableValue] = React.useState(padStartTimeValue(value));\n\n const updateValue = (newValue: string) => {\n const newDate = setTime(valueDate, Number(newValue));\n if (isDayDisabled?.(newDate, true)) {\n return;\n }\n setEditableValue(newValue);\n onChange?.(newDate);\n };\n\n // Обработка ввода\n\n const onInput = (event: React.ChangeEvent<HTMLInputElement>) => {\n const validateValue = validateValueInput(event, maxValue);\n updateValue(validateValue);\n\n if (validateValue.length > 1 && event.target.selectionStart) {\n onInputEnd?.();\n }\n };\n\n // Управление числом с клавиатуры стрелками вниз/вверх.\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const validateValue = newValueOnInputKeyDown(event, maxValue);\n updateValue(validateValue);\n };\n\n // Обработка каретки если время уже задано\n\n const onSelectionChange = React.useCallback((event: Event) => {\n if (event.target instanceof HTMLInputElement) {\n if (event.target.value.length > 1 && isActiveElement(event.target)) {\n event.target.select();\n }\n }\n }, []);\n\n React.useEffect(() => {\n const el = ref.current;\n el?.addEventListener('selectionchange', onSelectionChange);\n\n return () => {\n el?.removeEventListener('selectionchange', onSelectionChange);\n };\n }, [onSelectionChange, ref]);\n\n // Обработка ухода с поля ввода\n\n const onBlur = () => {\n setInputBlur();\n setEditableValue((value) => {\n const newValue = padStartTimeValue(value);\n\n return newValue;\n });\n };\n\n // Обработка значения при нажатии в барабане\n\n const onClickOption = (newValue: string) => {\n updateValue(newValue);\n };\n\n const valueAsString = padStartTimeValue(value);\n\n const viewValue =\n isInputFocused || padStartTimeValue(editableValue) !== valueAsString\n ? editableValue\n : valueAsString;\n\n return (\n <div className={styles.picker}>\n <ComboBox\n value={viewValue}\n slotProps={{\n input: {\n 'getRootRef': ref,\n 'aria-label': inputLabel,\n 'data-testid': inputTestId,\n 'onKeyDown': onKeyDownProp,\n },\n }}\n labels={options}\n onChange={onInput}\n onKeyDown={onKeyDown}\n onClickOption={onClickOption}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n </div>\n );\n};\n"],"names":["React","clamp","overflow","useBooleanState","useExternRef","Keys","isActiveElement","ComboBox","validateValueInput","event","maxValue","target","value","inputValue","exec","inputValueNumber","Number","isNaN","resultValueNumber","toString","padStartTimeValue","padStart","newValueOnInputKeyDown","HTMLInputElement","key","ARROW_UP","ARROW_DOWN","CalendarTimePicker","valueDate","options","onChange","setTime","inputRef","inputLabel","inputTestId","onInputEnd","onKeyDown","onKeyDownProp","isDayDisabled","ref","isInputFocused","onFocus","setInputBlur","editableValue","setEditableValue","useState","updateValue","newValue","newDate","onInput","validateValue","length","selectionStart","onSelectionChange","useCallback","select","useEffect","el","current","addEventListener","removeEventListener","onBlur","onClickOption","valueAsString","viewValue","div","className","slotProps","input","labels"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type InputProps } from '../Input/Input';
|
|
2
|
+
type Label = {
|
|
3
|
+
/**
|
|
4
|
+
* Значение.
|
|
5
|
+
*/
|
|
6
|
+
value: string;
|
|
7
|
+
/**
|
|
8
|
+
* Лейбл.
|
|
9
|
+
*/
|
|
10
|
+
label: string;
|
|
11
|
+
/**
|
|
12
|
+
* Disabled состояние.
|
|
13
|
+
*/
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
};
|
|
16
|
+
type ComboBoxProps = InputProps & {
|
|
17
|
+
readonly labels?: readonly Label[] | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Нажатие на элемент.
|
|
20
|
+
*/
|
|
21
|
+
onClickOption?: ((value: string) => void) | undefined;
|
|
22
|
+
};
|
|
23
|
+
export declare function ComboBox({ getRootRef, onBlur, onFocus, after, labels, defaultValue, slotProps, onClickOption, ...restProps }: ComboBoxProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=ComboBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComboBox.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarTime/ComboBox.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIxD,KAAK,KAAK,GAAG;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAqEF,KAAK,aAAa,GAAG,UAAU,GAAG;IAEhC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,CAAC;IAE/C;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACvD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,UAAU,EACV,MAAM,EACN,OAAO,EACP,KAAK,EACL,MAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,GAAG,SAAS,EACb,EAAE,aAAa,2CAuEf"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { classNames } from "@vkontakte/vkjs";
|
|
5
|
+
import { useBooleanState } from "../../hooks/useBooleanState.js";
|
|
6
|
+
import { useExternRef } from "../../hooks/useExternRef.js";
|
|
7
|
+
import { callMultiple } from "../../lib/callMultiple.js";
|
|
8
|
+
import { CustomScrollView } from "../CustomScrollView/CustomScrollView.js";
|
|
9
|
+
import { CustomSelectOption } from "../CustomSelectOption/CustomSelectOption.js";
|
|
10
|
+
import { DropdownIcon } from "../DropdownIcon/DropdownIcon.js";
|
|
11
|
+
import { Input } from "../Input/Input.js";
|
|
12
|
+
import { Popper } from "../Popper/Popper.js";
|
|
13
|
+
function getScrollParent(node) {
|
|
14
|
+
if (!(node instanceof HTMLElement)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (node.scrollHeight > node.clientHeight) {
|
|
18
|
+
return node;
|
|
19
|
+
} else {
|
|
20
|
+
return getScrollParent(node.parentNode);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function Option({ option, onClickOption, selectedValue }) {
|
|
24
|
+
const ref = React.useRef(null);
|
|
25
|
+
const selected = selectedValue === option.value;
|
|
26
|
+
React.useEffect(()=>{
|
|
27
|
+
if (!selected) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const element = ref.current;
|
|
31
|
+
const scrollElement = getScrollParent(ref.current);
|
|
32
|
+
if (!element || !scrollElement) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
scrollElement.scrollTo({
|
|
36
|
+
top: element.offsetTop - scrollElement.offsetHeight / 2 + element.offsetHeight / 2
|
|
37
|
+
});
|
|
38
|
+
}, [
|
|
39
|
+
selected
|
|
40
|
+
]);
|
|
41
|
+
return /*#__PURE__*/ _jsx(CustomSelectOption, {
|
|
42
|
+
getRootRef: ref,
|
|
43
|
+
onMouseDown: (event)=>{
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
},
|
|
46
|
+
onClick: ()=>{
|
|
47
|
+
onClickOption?.(option.value);
|
|
48
|
+
},
|
|
49
|
+
selected: selected,
|
|
50
|
+
disabled: option.disabled,
|
|
51
|
+
textNoWrap: true,
|
|
52
|
+
children: option.label
|
|
53
|
+
}, option.value);
|
|
54
|
+
}
|
|
55
|
+
export function ComboBox({ getRootRef, onBlur, onFocus, after, labels = [], defaultValue, slotProps, onClickOption, ...restProps }) {
|
|
56
|
+
const ref = useExternRef(getRootRef);
|
|
57
|
+
const inputRef = useExternRef(slotProps?.input?.getRootRef);
|
|
58
|
+
const [focus, setFocus, setBlur] = useBooleanState(false);
|
|
59
|
+
const [popperPlacement, setPopperPlacement] = React.useState('bottom');
|
|
60
|
+
const labelsElements = focus ? labels.map((option)=>{
|
|
61
|
+
return /*#__PURE__*/ _jsx(Option, {
|
|
62
|
+
onClickOption: onClickOption,
|
|
63
|
+
selectedValue: restProps.value,
|
|
64
|
+
option: option
|
|
65
|
+
}, option.value);
|
|
66
|
+
}) : undefined;
|
|
67
|
+
/**
|
|
68
|
+
* При управлении стрелками необходима правильная очередность элементов в списке.
|
|
69
|
+
*/ if (popperPlacement.includes('top')) {
|
|
70
|
+
labelsElements?.reverse();
|
|
71
|
+
}
|
|
72
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
73
|
+
children: [
|
|
74
|
+
/*#__PURE__*/ _jsx(Input, {
|
|
75
|
+
getRootRef: ref,
|
|
76
|
+
className: focus ? popperPlacement.includes('top') ? "vkuiCalendarTime__inputPopUp" : "vkuiCalendarTime__inputPopDown" : '',
|
|
77
|
+
type: "text",
|
|
78
|
+
onFocus: callMultiple(setFocus, onFocus),
|
|
79
|
+
onBlur: callMultiple(setBlur, onBlur),
|
|
80
|
+
onClick: ()=>inputRef.current?.focus(),
|
|
81
|
+
after: after || labels && /*#__PURE__*/ _jsx(DropdownIcon, {
|
|
82
|
+
opened: focus
|
|
83
|
+
}),
|
|
84
|
+
slotProps: {
|
|
85
|
+
...slotProps,
|
|
86
|
+
input: {
|
|
87
|
+
...slotProps?.input,
|
|
88
|
+
getRootRef: inputRef
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
...restProps
|
|
92
|
+
}),
|
|
93
|
+
focus && labels && /*#__PURE__*/ _jsx(Popper, {
|
|
94
|
+
targetRef: ref,
|
|
95
|
+
placement: popperPlacement,
|
|
96
|
+
onPlacementChange: setPopperPlacement,
|
|
97
|
+
className: classNames("vkuiCalendarTime__popper", popperPlacement.includes('top') ? "vkuiCalendarTime__popperTop" : "vkuiCalendarTime__popperBottom"),
|
|
98
|
+
sameWidth: true,
|
|
99
|
+
autoUpdateOnTargetResize: true,
|
|
100
|
+
flipMiddlewareFallbackAxisSideDirection: "none",
|
|
101
|
+
offsetByMainAxis: 0,
|
|
102
|
+
children: /*#__PURE__*/ _jsx(CustomScrollView, {
|
|
103
|
+
tabIndex: -1,
|
|
104
|
+
className: "vkuiCalendarTime__customScroll",
|
|
105
|
+
children: labelsElements
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
]
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
//# sourceMappingURL=ComboBox.js.map
|