@vkontakte/vkui 8.1.2 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ActionSheet/ActionSheet.d.ts +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/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/NavTransitionContext/NavTransitionContext.d.ts +2 -1
- package/dist/components/NavTransitionContext/NavTransitionContext.d.ts.map +1 -1
- package/dist/components/NavTransitionContext/NavTransitionContext.js +8 -4
- package/dist/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -5
- 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.d.ts.map +1 -1
- package/dist/components/Popper/Popper.js +7 -4
- 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 +43 -37
- 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/View/View.d.ts.map +1 -1
- package/dist/components/View/View.js +50 -53
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.d.ts.map +1 -1
- package/dist/components/View/ViewInfinite.js +34 -37
- package/dist/components/View/ViewInfinite.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/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/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/NavTransitionContext/NavTransitionContext.js +8 -4
- package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
- package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +4 -5
- 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 +7 -4
- 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 +43 -37
- 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/View/View.js +50 -53
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/ViewInfinite.js +34 -37
- package/dist/cssm/components/View/ViewInfinite.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/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +4 -4
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.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/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +4 -4
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.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.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/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/NavTransitionContext/NavTransitionContext.tsx +5 -1
- package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -6
- package/src/components/PanelHeader/PanelHeader.tsx +1 -1
- package/src/components/Popper/Popper.tsx +8 -5
- package/src/components/PullToRefresh/PullToRefresh.module.css +1 -1
- package/src/components/PullToRefresh/PullToRefresh.tsx +10 -3
- package/src/components/Root/Root.tsx +60 -59
- 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/View/View.tsx +83 -89
- package/src/components/View/ViewInfinite.tsx +65 -69
- 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/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +4 -5
- 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/dist/cssm/lib/floating/LockFloatingPosition/LockFloatingPosition.js +0 -6
- package/dist/cssm/lib/floating/LockFloatingPosition/LockFloatingPosition.js.map +0 -1
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.d.ts +0 -6
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.d.ts.map +0 -1
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.js +0 -6
- package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.js.map +0 -1
- package/src/components/WriteBar/WriteBar.module.css +0 -116
- package/src/components/WriteBar/WriteBar.module.css.d.ts.map +0 -1
- package/src/lib/floating/LockFloatingPosition/LockFloatingPosition.tsx +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CalendarDay/CalendarDay.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { Tappable } from '../Tappable/Tappable';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarDay.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nexport type CalendarDayElementProps = Omit<\n React.AllHTMLAttributes<HTMLElement>,\n 'onChange' | 'size' | 'disabled' | 'selected' | 'onFocus'\n>;\n\nexport type CalendarDayTestsProps = {\n /**\n * Передает атрибут `data-testid` для дня в календаре.\n */\n testId?: string | ((day: Date) => string) | undefined;\n};\n\nexport interface CalendarDayProps extends CalendarDayElementProps, CalendarDayTestsProps {\n /**\n * Дата, которую представляет этот день.\n */\n day: Date;\n /**\n * Является ли день сегодняшним.\n */\n today?: boolean | undefined;\n /**\n * Выбран ли день (в режиме одиночного выбора или как часть диапазона).\n */\n selected?: boolean | undefined;\n /**\n * Является ли день началом выделенного диапазона.\n */\n selectionStart?: boolean | undefined;\n /**\n * Является ли день концом выделенного диапазона.\n */\n selectionEnd?: boolean | undefined;\n /**\n * Подсветить день как начало предполагаемого диапазона (при наведении).\n */\n hintedSelectionStart?: boolean | undefined;\n /**\n * Подсветить день как конец предполагаемого диапазона (при наведении).\n */\n hintedSelectionEnd?: boolean | undefined;\n /**\n * Активен ли день (текущая дата в календаре).\n */\n active?: boolean | undefined;\n /**\n * Скрыть день (например, дни соседних месяцев).\n */\n hidden?: boolean | undefined;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean | undefined;\n /**\n * Находится ли день в фокусе (клавиатурная навигация).\n */\n focused?: boolean | undefined;\n /**\n * Подсвечен ли день (ховер).\n */\n hinted?: boolean | undefined;\n /**\n * Принадлежит ли день текущему отображаемому месяцу.\n */\n sameMonth?: boolean | undefined;\n /**\n * Размер компонента.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Обработчик выбора/изменения дня.\n */\n onChange: (value: Date) => void;\n /**\n * Обработчик наведения на день.\n */\n onEnter?: ((value: Date) => void) | undefined;\n /**\n * Обработчик снятия ховера с дня.\n */\n onLeave?: ((value: Date) => void) | undefined;\n /**\n * Обработчик фокуса на дне.\n */\n onFocus?: ((value: Date) => void) | undefined;\n /**\n * Кастомизация отображения содержимого дня.\n */\n renderDayContent?: ((day: Date) => React.ReactNode) | undefined;\n}\n\n// eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\nexport const CalendarDay = React.memo(\n ({\n day,\n today,\n selected,\n onChange,\n hidden,\n disabled,\n active,\n selectionStart,\n selectionEnd,\n focused,\n onEnter,\n onLeave,\n onFocus,\n onBlur,\n hinted,\n hintedSelectionStart,\n hintedSelectionEnd,\n sameMonth,\n size,\n children,\n renderDayContent,\n testId,\n role,\n 'aria-colindex': colIndex,\n ...restProps\n }: CalendarDayProps) => {\n const { locale, direction } = useConfigProvider();\n const ref = React.useRef<HTMLElement>(null);\n const onClick = React.useCallback(() => onChange(day), [day, onChange]);\n const handleEnter = React.useCallback(() => onEnter?.(day), [day, onEnter]);\n const handleLeave = React.useCallback(() => onLeave?.(day), [day, onLeave]);\n const handleFocus = React.useCallback(() => onFocus?.(day), [day, onFocus]);\n\n const focusVisibleMode = active ? 'outside' : 'inside';\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({\n focusVisible,\n mode: focusVisibleMode,\n });\n const focusHandlers = mergeCalls(focusEvents, { onFocus: handleFocus, onBlur });\n\n const label = labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(day);\n\n React.useEffect(() => {\n if (focused && ref.current) {\n ref.current.focus();\n }\n }, [focused]);\n\n const content = React.useMemo(() => {\n if (renderDayContent) {\n return renderDayContent(day);\n }\n return (\n <div className={styles.dayNumber}>\n <VisuallyHidden>{children ?? label}</VisuallyHidden>\n <span aria-hidden>{day.getDate()}</span>\n </div>\n );\n }, [renderDayContent, day, children, label]);\n\n if (hidden) {\n return (\n <div\n role={role}\n aria-colindex={colIndex}\n className={classNames(styles.hidden, size === 's' && styles.sizeS)}\n />\n );\n }\n\n return (\n <Tappable\n baseClassName={classNames(\n styles.host,\n size === 's' && styles.sizeS,\n direction === 'rtl' && styles.rtl,\n focusVisibleClassNames,\n )}\n role={role}\n aria-colindex={colIndex}\n hoverMode={styles.hostHovered}\n activeMode={styles.hostActivated}\n hasActive={false}\n onClick={onClick}\n disabled={disabled}\n getRootRef={ref}\n onPointerEnter={handleEnter}\n onPointerLeave={handleLeave}\n data-testid={typeof testId === 'string' ? testId : testId?.(day)}\n {...restProps}\n {...focusHandlers}\n >\n <div\n className={classNames(\n styles.content,\n size === 's' && styles.sizeS,\n today && styles.today,\n selected && !disabled && styles.selected,\n selectionStart && styles.selectionStart,\n selectionEnd && styles.selectionEnd,\n disabled && styles.disabled,\n !sameMonth && styles.notSameMonth,\n )}\n >\n <div\n className={classNames(\n styles.hinted,\n hinted && styles.hintedActive,\n hintedSelectionStart && styles.hintedSelectionStart,\n hintedSelectionEnd && styles.hintedSelectionEnd,\n )}\n >\n <div className={classNames(styles.inner, active && !disabled && styles.innerActive)}>\n {content}\n </div>\n </div>\n </div>\n </Tappable>\n );\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(CalendarDay, 'CalendarDay');\n}\n"],"names":["React","classNames","useFocusVisible","useFocusVisibleClassName","cacheDateTimeFormat","mergeCalls","defineComponentDisplayNames","useConfigProvider","Tappable","VisuallyHidden","labelDateTimeFormatOptions","weekday","month","day","labelDateTimeFormat","CalendarDay","memo","today","selected","onChange","hidden","disabled","active","selectionStart","selectionEnd","focused","onEnter","onLeave","onFocus","onBlur","hinted","hintedSelectionStart","hintedSelectionEnd","sameMonth","size","children","renderDayContent","testId","role","colIndex","restProps","locale","direction","ref","useRef","onClick","useCallback","handleEnter","handleLeave","handleFocus","focusVisibleMode","focusVisible","focusEvents","focusVisibleClassNames","mode","focusHandlers","label","format","useEffect","current","focus","content","useMemo","div","className","span","aria-hidden","getDate","aria-colindex","baseClassName","hoverMode","activeMode","hasActive","getRootRef","onPointerEnter","onPointerLeave","data-testid","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,eAAe,QAAQ,iCAA8B;AAC9D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,mBAAmB,QAAQ,yBAAsB;AAC1D,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,2BAA2B,QAAQ,iDAA8C;AAC1F,SAASC,iBAAiB,QAAQ,6CAA0C;AAC5E,SAASC,QAAQ,QAAQ,0BAAuB;AAChD,SAASC,cAAc,QAAQ,sCAAmC;AAGlE,MAAMC,6BAA6B;IACjCC,SAAS;IACTC,OAAO;IACPC,KAAK;AACP;AAEA,MAAMC,sBAAsB,WAAW,GAAGV;AA6F1C,0FAA0F;AAC1F,OAAO,MAAMW,4BAAcf,MAAMgB,IAAI,CACnC,CAAC,EACCH,GAAG,EACHI,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,MAAM,EACNC,QAAQ,EACRC,MAAM,EACNC,cAAc,EACdC,YAAY,EACZC,OAAO,EACPC,OAAO,EACPC,OAAO,EACPC,OAAO,EACPC,MAAM,EACNC,MAAM,EACNC,oBAAoB,EACpBC,kBAAkB,EAClBC,SAAS,EACTC,IAAI,EACJC,QAAQ,EACRC,gBAAgB,EAChBC,MAAM,EACNC,IAAI,EACJ,iBAAiBC,QAAQ,EACzB,GAAGC,WACc;IACjB,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAE,GAAGnC;IAC9B,MAAMoC,MAAM3C,MAAM4C,MAAM,CAAc;IACtC,MAAMC,UAAU7C,MAAM8C,WAAW,CAAC,IAAM3B,SAASN,MAAM;QAACA;QAAKM;KAAS;IACtE,MAAM4B,cAAc/C,MAAM8C,WAAW,CAAC,IAAMpB,UAAUb,MAAM;QAACA;QAAKa;KAAQ;IAC1E,MAAMsB,cAAchD,MAAM8C,WAAW,CAAC,IAAMnB,UAAUd,MAAM;QAACA;QAAKc;KAAQ;IAC1E,MAAMsB,cAAcjD,MAAM8C,WAAW,CAAC,IAAMlB,UAAUf,MAAM;QAACA;QAAKe;KAAQ;IAE1E,MAAMsB,mBAAmB5B,SAAS,YAAY;IAC9C,MAAM,EAAE6B,YAAY,EAAE,GAAGC,aAAa,GAAGlD;IACzC,MAAMmD,yBAAyBlD,yBAAyB;QACtDgD;QACAG,MAAMJ;IACR;IACA,MAAMK,gBAAgBlD,WAAW+C,aAAa;QAAExB,SAASqB;QAAapB;IAAO;IAE7E,MAAM2B,QAAQ1C,oBAAoB2B,QAAQ/B,4BAA4B+C,MAAM,CAAC5C;IAE7Eb,MAAM0D,SAAS,CAAC;QACd,IAAIjC,WAAWkB,IAAIgB,OAAO,EAAE;YAC1BhB,IAAIgB,OAAO,CAACC,KAAK;QACnB;IACF,GAAG;QAACnC;KAAQ;IAEZ,MAAMoC,UAAU7D,MAAM8D,OAAO,CAAC;QAC5B,IAAI1B,kBAAkB;YACpB,OAAOA,iBAAiBvB;QAC1B;QACA,qBACE,MAACkD;YAAIC,SAAS;;8BACZ,KAACvD;8BAAgB0B,YAAYqB;;8BAC7B,KAACS;oBAAKC,aAAW;8BAAErD,IAAIsD,OAAO;;;;IAGpC,GAAG;QAAC/B;QAAkBvB;QAAKsB;QAAUqB;KAAM;IAE3C,IAAIpC,QAAQ;QACV,qBACE,KAAC2C;YACCzB,MAAMA;YACN8B,iBAAe7B;YACfyB,WAAW/D,sCAA0BiC,SAAS;;IAGpD;IAEA,qBACE,KAAC1B;QACC6D,eAAepE,oCAEbiC,SAAS,iCACTQ,cAAc,iCACdW;QAEFf,MAAMA;QACN8B,iBAAe7B;QACf+B,SAAS;QACTC,UAAU;QACVC,WAAW;QACX3B,SAASA;QACTxB,UAAUA;QACVoD,YAAY9B;QACZ+B,gBAAgB3B;QAChB4B,gBAAgB3B;QAChB4B,eAAa,OAAOvC,WAAW,WAAWA,SAASA,SAASxB;QAC3D,GAAG2B,SAAS;QACZ,GAAGe,aAAa;kBAEjB,cAAA,KAACQ;YACCC,WAAW/D,uCAETiC,SAAS,iCACTjB,mCACAC,YAAY,CAACG,yCACbE,qDACAC,iDACAH,yCACA,CAACY;sBAGH,cAAA,KAAC8B;gBACCC,WAAW/D,sCAET6B,2CACAC,iEACAC;0BAGF,cAAA,KAAC+B;oBAAIC,WAAW/D,qCAAyBqB,UAAU,CAACD;8BACjDwC;;;;;AAMb,GACA;AAEF,IAAIgB,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzCzE,4BAA4BS,aAAa;AAC3C"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CalendarDay/CalendarDay.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { useLocale } from '../../hooks/useLocale';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport { Tappable } from '../Tappable/Tappable';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarDay.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nexport type CalendarDayElementProps = Omit<\n React.AllHTMLAttributes<HTMLElement>,\n 'onChange' | 'size' | 'disabled' | 'selected' | 'onFocus'\n>;\n\nexport type CalendarDayTestsProps = {\n /**\n * Передает атрибут `data-testid` для дня в календаре.\n */\n testId?: string | ((day: Date) => string) | undefined;\n};\n\nexport interface CalendarDayProps extends CalendarDayElementProps, CalendarDayTestsProps {\n /**\n * Дата, которую представляет этот день.\n */\n day: Date;\n /**\n * Является ли день сегодняшним.\n */\n today?: boolean | undefined;\n /**\n * Выбран ли день (в режиме одиночного выбора или как часть диапазона).\n */\n selected?: boolean | undefined;\n /**\n * Является ли день началом выделенного диапазона.\n */\n selectionStart?: boolean | undefined;\n /**\n * Является ли день концом выделенного диапазона.\n */\n selectionEnd?: boolean | undefined;\n /**\n * Подсветить день как начало предполагаемого диапазона (при наведении).\n */\n hintedSelectionStart?: boolean | undefined;\n /**\n * Подсветить день как конец предполагаемого диапазона (при наведении).\n */\n hintedSelectionEnd?: boolean | undefined;\n /**\n * Активен ли день (текущая дата в календаре).\n */\n active?: boolean | undefined;\n /**\n * Скрыть день (например, дни соседних месяцев).\n */\n hidden?: boolean | undefined;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean | undefined;\n /**\n * Находится ли день в фокусе (клавиатурная навигация).\n */\n focused?: boolean | undefined;\n /**\n * Подсвечен ли день (ховер).\n */\n hinted?: boolean | undefined;\n /**\n * Принадлежит ли день текущему отображаемому месяцу.\n */\n sameMonth?: boolean | undefined;\n /**\n * Размер компонента.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Обработчик выбора/изменения дня.\n */\n onChange: (value: Date) => void;\n /**\n * Обработчик наведения на день.\n */\n onEnter?: ((value: Date) => void) | undefined;\n /**\n * Обработчик снятия ховера с дня.\n */\n onLeave?: ((value: Date) => void) | undefined;\n /**\n * Обработчик фокуса на дне.\n */\n onFocus?: ((value: Date) => void) | undefined;\n /**\n * Кастомизация отображения содержимого дня.\n */\n renderDayContent?: ((day: Date) => React.ReactNode) | undefined;\n}\n\n// eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\nexport const CalendarDay = React.memo(\n ({\n day,\n today,\n selected,\n onChange,\n hidden,\n disabled,\n active,\n selectionStart,\n selectionEnd,\n focused,\n onEnter,\n onLeave,\n onFocus,\n onBlur,\n hinted,\n hintedSelectionStart,\n hintedSelectionEnd,\n sameMonth,\n size,\n children,\n renderDayContent,\n testId,\n role,\n 'aria-colindex': colIndex,\n ...restProps\n }: CalendarDayProps) => {\n const locale = useLocale();\n const direction = useConfigDirection();\n const ref = React.useRef<HTMLElement>(null);\n const onClick = React.useCallback(() => onChange(day), [day, onChange]);\n const handleEnter = React.useCallback(() => onEnter?.(day), [day, onEnter]);\n const handleLeave = React.useCallback(() => onLeave?.(day), [day, onLeave]);\n const handleFocus = React.useCallback(() => onFocus?.(day), [day, onFocus]);\n\n const focusVisibleMode = active ? 'outside' : 'inside';\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({\n focusVisible,\n mode: focusVisibleMode,\n });\n const focusHandlers = mergeCalls(focusEvents, { onFocus: handleFocus, onBlur });\n\n const label = labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(day);\n\n React.useEffect(() => {\n if (focused && ref.current) {\n ref.current.focus();\n }\n }, [focused]);\n\n const content = React.useMemo(() => {\n if (renderDayContent) {\n return renderDayContent(day);\n }\n return (\n <div className={styles.dayNumber}>\n <VisuallyHidden>{children ?? label}</VisuallyHidden>\n <span aria-hidden>{day.getDate()}</span>\n </div>\n );\n }, [renderDayContent, day, children, label]);\n\n if (hidden) {\n return (\n <div\n role={role}\n aria-colindex={colIndex}\n className={classNames(styles.hidden, size === 's' && styles.sizeS)}\n />\n );\n }\n\n return (\n <Tappable\n baseClassName={classNames(\n styles.host,\n size === 's' && styles.sizeS,\n direction === 'rtl' && styles.rtl,\n focusVisibleClassNames,\n )}\n role={role}\n aria-colindex={colIndex}\n hoverMode={styles.hostHovered}\n activeMode={styles.hostActivated}\n hasActive={false}\n onClick={onClick}\n disabled={disabled}\n getRootRef={ref}\n onPointerEnter={handleEnter}\n onPointerLeave={handleLeave}\n data-testid={typeof testId === 'string' ? testId : testId?.(day)}\n {...restProps}\n {...focusHandlers}\n >\n <div\n className={classNames(\n styles.content,\n size === 's' && styles.sizeS,\n today && styles.today,\n selected && !disabled && styles.selected,\n selectionStart && styles.selectionStart,\n selectionEnd && styles.selectionEnd,\n disabled && styles.disabled,\n !sameMonth && styles.notSameMonth,\n )}\n >\n <div\n className={classNames(\n styles.hinted,\n hinted && styles.hintedActive,\n hintedSelectionStart && styles.hintedSelectionStart,\n hintedSelectionEnd && styles.hintedSelectionEnd,\n )}\n >\n <div className={classNames(styles.inner, active && !disabled && styles.innerActive)}>\n {content}\n </div>\n </div>\n </div>\n </Tappable>\n );\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(CalendarDay, 'CalendarDay');\n}\n"],"names":["React","classNames","useConfigDirection","useFocusVisible","useFocusVisibleClassName","useLocale","cacheDateTimeFormat","mergeCalls","defineComponentDisplayNames","Tappable","VisuallyHidden","labelDateTimeFormatOptions","weekday","month","day","labelDateTimeFormat","CalendarDay","memo","today","selected","onChange","hidden","disabled","active","selectionStart","selectionEnd","focused","onEnter","onLeave","onFocus","onBlur","hinted","hintedSelectionStart","hintedSelectionEnd","sameMonth","size","children","renderDayContent","testId","role","colIndex","restProps","locale","direction","ref","useRef","onClick","useCallback","handleEnter","handleLeave","handleFocus","focusVisibleMode","focusVisible","focusEvents","focusVisibleClassNames","mode","focusHandlers","label","format","useEffect","current","focus","content","useMemo","div","className","span","aria-hidden","getDate","aria-colindex","baseClassName","hoverMode","activeMode","hasActive","getRootRef","onPointerEnter","onPointerLeave","data-testid","process","env","NODE_ENV"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarDays.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarDays/CalendarDays.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CalendarDays.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarDays/CalendarDays.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { classNames, isSameDate } from "@vkontakte/vkjs";
|
|
5
|
+
import { useLocale } from "../../hooks/useLocale.js";
|
|
5
6
|
import { useTodayDate } from "../../hooks/useTodayDate.js";
|
|
6
7
|
import { getDaysNames, getWeeks } from "../../lib/calendar.js";
|
|
7
8
|
import { isSameMonth } from "../../lib/date.js";
|
|
8
9
|
import { cacheDateTimeFormat } from "../../lib/intlCache.js";
|
|
9
10
|
import { CalendarDay } from "../CalendarDay/CalendarDay.js";
|
|
10
|
-
import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
|
|
11
11
|
import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
12
12
|
import { Footnote } from "../Typography/Footnote/Footnote.js";
|
|
13
13
|
import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
|
|
@@ -17,7 +17,7 @@ const labelDateTimeFormatOptions = {
|
|
|
17
17
|
};
|
|
18
18
|
const labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();
|
|
19
19
|
export const CalendarDays = ({ viewDate, value, weekStartsOn, onDayChange, isDaySelected, isDayActive, isDaySelectionEnd, isDaySelectionStart, onDayEnter, onDayLeave, onDayFocus, isDayHinted, isHintedDaySelectionStart, isHintedDaySelectionEnd, isDayFocused, isDayFocusable, isDayDisabled, size, showNeighboringMonth = false, dayProps, listenDayChangesForUpdate = false, getRootRef, renderDayContent, dayTestId, ...props })=>{
|
|
20
|
-
const
|
|
20
|
+
const locale = useLocale();
|
|
21
21
|
const now = useTodayDate(listenDayChangesForUpdate);
|
|
22
22
|
const weeks = React.useMemo(()=>getWeeks(viewDate, weekStartsOn), [
|
|
23
23
|
weekStartsOn,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CalendarDays/CalendarDays.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isSameDate } from '@vkontakte/vkjs';\nimport { useTodayDate } from '../../hooks/useTodayDate';\nimport { getDaysNames, getWeeks } from '../../lib/calendar';\nimport { isSameMonth } from '../../lib/date';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDay,\n type CalendarDayElementProps,\n type CalendarDayProps,\n type CalendarDayTestsProps,\n} from '../CalendarDay/CalendarDay';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarDays.module.css';\n\nconst labelDateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nexport type CalendarDaysTestsProps = {\n /**\n * Передает атрибут `data-testid` для дня в календаре.\n */\n dayTestId?: CalendarDayTestsProps['testId'] | undefined;\n};\n\nexport interface CalendarDaysProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n Pick<CalendarDayProps, 'renderDayContent'>,\n CalendarDaysTestsProps {\n /**\n * Выбранная дата или диапазон дат.\n */\n value?: Date | Array<Date | null> | null | undefined;\n /**\n * Дата, определяющая отображаемый месяц.\n */\n viewDate: Date;\n /**\n * День недели, с которого начинается неделя (0 - воскресенье, 6 - суббота).\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Показывать дни соседних месяцев.\n */\n showNeighboringMonth?: boolean | undefined;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Дополнительные свойства для элементов дней.\n */\n dayProps?: CalendarDayElementProps | undefined;\n /**\n * Следить за изменениями дней для обновления UI.\n */\n listenDayChangesForUpdate?: boolean | undefined;\n /**\n * Обработчик изменения выбранного дня.\n */\n onDayChange: (value: Date) => void;\n /**\n * Проверяет, заблокирован ли день для выбора.\n */\n isDayDisabled: (value: Date) => boolean;\n /**\n * Определяет, является ли день началом выделенного диапазона.\n */\n isDaySelectionStart: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет, является ли день концом выделенного диапазона.\n */\n isDaySelectionEnd: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет начало диапазона при наведении (подсветка).\n */\n isHintedDaySelectionStart?: ((value: Date, dayOfWeek: number) => boolean) | undefined;\n /**\n * Определяет конец диапазона при наведении (подсветка).\n */\n isHintedDaySelectionEnd?: ((value: Date, dayOfWeek: number) => boolean) | undefined;\n /**\n * Проверяет, является ли день активным (текущая дата).\n */\n isDayActive: (value: Date) => boolean;\n /**\n * Проверяет, подсвечен ли день (при наведении).\n */\n isDayHinted?: ((value: Date) => boolean) | undefined;\n /**\n * Проверяет, возможно ли сфокусироваться на дне с клавиатуры.\n */\n isDayFocusable?: ((value: Date) => boolean) | undefined;\n /**\n * Проверяет, выбран ли день.\n */\n isDaySelected?: ((value: Date) => boolean) | undefined;\n /**\n * Проверяет, находится ли день в фокусе.\n */\n isDayFocused: (value: Date) => boolean;\n /**\n * Обработчик события 'pointerenter' на элементе дня.\n */\n onDayEnter?: ((value: Date) => void) | undefined;\n /**\n * Обработчик события 'pointerleave' на элементе дня.\n */\n onDayLeave?: ((value: Date) => void) | undefined;\n /**\n * Обработчик события `focus` на элементе дня.\n */\n onDayFocus?: ((value: Date) => void) | undefined;\n}\n\nexport const CalendarDays = ({\n viewDate,\n value,\n weekStartsOn,\n onDayChange,\n isDaySelected,\n isDayActive,\n isDaySelectionEnd,\n isDaySelectionStart,\n onDayEnter,\n onDayLeave,\n onDayFocus,\n isDayHinted,\n isHintedDaySelectionStart,\n isHintedDaySelectionEnd,\n isDayFocused,\n isDayFocusable,\n isDayDisabled,\n size,\n showNeighboringMonth = false,\n dayProps,\n listenDayChangesForUpdate = false,\n getRootRef,\n renderDayContent,\n dayTestId,\n ...props\n}: CalendarDaysProps): React.ReactNode => {\n const { locale } = useConfigProvider();\n const now = useTodayDate(listenDayChangesForUpdate);\n\n const weeks = React.useMemo(() => getWeeks(viewDate, weekStartsOn), [weekStartsOn, viewDate]);\n\n const daysNames = React.useMemo(\n () => getDaysNames(now, weekStartsOn, locale),\n [locale, now, weekStartsOn],\n );\n\n const handleDayChange = React.useCallback(\n (date: Date) => {\n onDayChange(date);\n },\n [onDayChange],\n );\n\n const viewDateLabelId = React.useId();\n const currentMonthLabel = value\n ? labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(viewDate)\n : null;\n\n return (\n <React.Fragment>\n {/*\n * Нельзя помещать текст currentMonthLabel внутрь role=\"grid\" или с помощью aria-label,\n * иначе пользователи NVDA не смогут ходить по таблице\n * с помощью горячих клавиш <Ctrl+Alt+стрелочки>.\n * Имеется ввиду связка (применение которой визуально не видно):\n * - из заголовка календаря прыжок в таблицу с помощью клавиши <T>\n * - переход по ячейкам с помощью <Ctrl+Alrt+стрелочки>\n * NVDA будет говорить, что пользователь вне ячейки таблицы.\n * Также важно оставить aria-live=\"polite\". Так NVDA зачитывает текущий\n * месяц и год при переключении месяца и года в заголовке календаря.\n */}\n <VisuallyHidden aria-live=\"polite\" id={viewDateLabelId}>\n {currentMonthLabel}\n </VisuallyHidden>\n <RootComponent\n role=\"grid\"\n {...props}\n baseClassName={styles.host}\n aria-labelledby={viewDateLabelId}\n >\n <div\n role=\"row\"\n aria-rowindex={1}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n >\n {daysNames.map(({ short: shortDayName, long: longDayName }) => (\n <Footnote\n role=\"columnheader\"\n aria-label={longDayName}\n key={shortDayName}\n className={styles.weekday}\n >\n {shortDayName}\n </Footnote>\n ))}\n </div>\n\n {weeks.map((week, i) => (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n key={i}\n >\n {week.map((day, i) => {\n const sameMonth = isSameMonth(day, viewDate);\n const isHidden = !showNeighboringMonth && !sameMonth;\n const isToday = isSameDate(day, now);\n const isActive = isDayActive(day);\n const isFocused = isDayFocused(day);\n return (\n <CalendarDay\n role=\"gridcell\"\n aria-current={isToday ? 'date' : undefined}\n aria-selected={isActive ? 'true' : 'false'}\n aria-colindex={i + 1}\n tabIndex={isDayFocusable?.(day) ? 0 : -1}\n key={day.toISOString()}\n day={day}\n today={isToday}\n active={isActive}\n onChange={handleDayChange}\n hidden={isHidden}\n disabled={isDayDisabled(day)}\n selectionStart={isDaySelectionStart(day, i)}\n selectionEnd={isDaySelectionEnd(day, i)}\n hintedSelectionStart={isHintedDaySelectionStart?.(day, i)}\n hintedSelectionEnd={isHintedDaySelectionEnd?.(day, i)}\n selected={isDaySelected?.(day)}\n focused={isFocused}\n onEnter={onDayEnter}\n onLeave={onDayLeave}\n onFocus={onDayFocus}\n hinted={isDayHinted?.(day)}\n sameMonth={sameMonth}\n size={size}\n renderDayContent={renderDayContent}\n testId={dayTestId}\n {...dayProps}\n className={classNames(dayProps?.className, styles.rowDay)}\n />\n );\n })}\n </div>\n ))}\n </RootComponent>\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","isSameDate","useTodayDate","getDaysNames","getWeeks","isSameMonth","cacheDateTimeFormat","CalendarDay","useConfigProvider","RootComponent","Footnote","VisuallyHidden","labelDateTimeFormatOptions","year","month","labelDateTimeFormat","CalendarDays","viewDate","value","weekStartsOn","onDayChange","isDaySelected","isDayActive","isDaySelectionEnd","isDaySelectionStart","onDayEnter","onDayLeave","onDayFocus","isDayHinted","isHintedDaySelectionStart","isHintedDaySelectionEnd","isDayFocused","isDayFocusable","isDayDisabled","size","showNeighboringMonth","dayProps","listenDayChangesForUpdate","getRootRef","renderDayContent","dayTestId","props","locale","now","weeks","useMemo","daysNames","handleDayChange","useCallback","date","viewDateLabelId","useId","currentMonthLabel","format","Fragment","aria-live","id","role","baseClassName","aria-labelledby","div","aria-rowindex","className","map","short","shortDayName","long","longDayName","aria-label","week","i","day","sameMonth","isHidden","isToday","isActive","isFocused","aria-current","undefined","aria-selected","aria-colindex","tabIndex","today","active","onChange","hidden","disabled","selectionStart","selectionEnd","hintedSelectionStart","hintedSelectionEnd","selected","focused","onEnter","onLeave","onFocus","hinted","testId","toISOString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CalendarDays/CalendarDays.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isSameDate } from '@vkontakte/vkjs';\nimport { useLocale } from '../../hooks/useLocale';\nimport { useTodayDate } from '../../hooks/useTodayDate';\nimport { getDaysNames, getWeeks } from '../../lib/calendar';\nimport { isSameMonth } from '../../lib/date';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDay,\n type CalendarDayElementProps,\n type CalendarDayProps,\n type CalendarDayTestsProps,\n} from '../CalendarDay/CalendarDay';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarDays.module.css';\n\nconst labelDateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nexport type CalendarDaysTestsProps = {\n /**\n * Передает атрибут `data-testid` для дня в календаре.\n */\n dayTestId?: CalendarDayTestsProps['testId'] | undefined;\n};\n\nexport interface CalendarDaysProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n Pick<CalendarDayProps, 'renderDayContent'>,\n CalendarDaysTestsProps {\n /**\n * Выбранная дата или диапазон дат.\n */\n value?: Date | Array<Date | null> | null | undefined;\n /**\n * Дата, определяющая отображаемый месяц.\n */\n viewDate: Date;\n /**\n * День недели, с которого начинается неделя (0 - воскресенье, 6 - суббота).\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Показывать дни соседних месяцев.\n */\n showNeighboringMonth?: boolean | undefined;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Дополнительные свойства для элементов дней.\n */\n dayProps?: CalendarDayElementProps | undefined;\n /**\n * Следить за изменениями дней для обновления UI.\n */\n listenDayChangesForUpdate?: boolean | undefined;\n /**\n * Обработчик изменения выбранного дня.\n */\n onDayChange: (value: Date) => void;\n /**\n * Проверяет, заблокирован ли день для выбора.\n */\n isDayDisabled: (value: Date) => boolean;\n /**\n * Определяет, является ли день началом выделенного диапазона.\n */\n isDaySelectionStart: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет, является ли день концом выделенного диапазона.\n */\n isDaySelectionEnd: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет начало диапазона при наведении (подсветка).\n */\n isHintedDaySelectionStart?: ((value: Date, dayOfWeek: number) => boolean) | undefined;\n /**\n * Определяет конец диапазона при наведении (подсветка).\n */\n isHintedDaySelectionEnd?: ((value: Date, dayOfWeek: number) => boolean) | undefined;\n /**\n * Проверяет, является ли день активным (текущая дата).\n */\n isDayActive: (value: Date) => boolean;\n /**\n * Проверяет, подсвечен ли день (при наведении).\n */\n isDayHinted?: ((value: Date) => boolean) | undefined;\n /**\n * Проверяет, возможно ли сфокусироваться на дне с клавиатуры.\n */\n isDayFocusable?: ((value: Date) => boolean) | undefined;\n /**\n * Проверяет, выбран ли день.\n */\n isDaySelected?: ((value: Date) => boolean) | undefined;\n /**\n * Проверяет, находится ли день в фокусе.\n */\n isDayFocused: (value: Date) => boolean;\n /**\n * Обработчик события 'pointerenter' на элементе дня.\n */\n onDayEnter?: ((value: Date) => void) | undefined;\n /**\n * Обработчик события 'pointerleave' на элементе дня.\n */\n onDayLeave?: ((value: Date) => void) | undefined;\n /**\n * Обработчик события `focus` на элементе дня.\n */\n onDayFocus?: ((value: Date) => void) | undefined;\n}\n\nexport const CalendarDays = ({\n viewDate,\n value,\n weekStartsOn,\n onDayChange,\n isDaySelected,\n isDayActive,\n isDaySelectionEnd,\n isDaySelectionStart,\n onDayEnter,\n onDayLeave,\n onDayFocus,\n isDayHinted,\n isHintedDaySelectionStart,\n isHintedDaySelectionEnd,\n isDayFocused,\n isDayFocusable,\n isDayDisabled,\n size,\n showNeighboringMonth = false,\n dayProps,\n listenDayChangesForUpdate = false,\n getRootRef,\n renderDayContent,\n dayTestId,\n ...props\n}: CalendarDaysProps): React.ReactNode => {\n const locale = useLocale();\n const now = useTodayDate(listenDayChangesForUpdate);\n\n const weeks = React.useMemo(() => getWeeks(viewDate, weekStartsOn), [weekStartsOn, viewDate]);\n\n const daysNames = React.useMemo(\n () => getDaysNames(now, weekStartsOn, locale),\n [locale, now, weekStartsOn],\n );\n\n const handleDayChange = React.useCallback(\n (date: Date) => {\n onDayChange(date);\n },\n [onDayChange],\n );\n\n const viewDateLabelId = React.useId();\n const currentMonthLabel = value\n ? labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(viewDate)\n : null;\n\n return (\n <React.Fragment>\n {/*\n * Нельзя помещать текст currentMonthLabel внутрь role=\"grid\" или с помощью aria-label,\n * иначе пользователи NVDA не смогут ходить по таблице\n * с помощью горячих клавиш <Ctrl+Alt+стрелочки>.\n * Имеется ввиду связка (применение которой визуально не видно):\n * - из заголовка календаря прыжок в таблицу с помощью клавиши <T>\n * - переход по ячейкам с помощью <Ctrl+Alrt+стрелочки>\n * NVDA будет говорить, что пользователь вне ячейки таблицы.\n * Также важно оставить aria-live=\"polite\". Так NVDA зачитывает текущий\n * месяц и год при переключении месяца и года в заголовке календаря.\n */}\n <VisuallyHidden aria-live=\"polite\" id={viewDateLabelId}>\n {currentMonthLabel}\n </VisuallyHidden>\n <RootComponent\n role=\"grid\"\n {...props}\n baseClassName={styles.host}\n aria-labelledby={viewDateLabelId}\n >\n <div\n role=\"row\"\n aria-rowindex={1}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n >\n {daysNames.map(({ short: shortDayName, long: longDayName }) => (\n <Footnote\n role=\"columnheader\"\n aria-label={longDayName}\n key={shortDayName}\n className={styles.weekday}\n >\n {shortDayName}\n </Footnote>\n ))}\n </div>\n\n {weeks.map((week, i) => (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n key={i}\n >\n {week.map((day, i) => {\n const sameMonth = isSameMonth(day, viewDate);\n const isHidden = !showNeighboringMonth && !sameMonth;\n const isToday = isSameDate(day, now);\n const isActive = isDayActive(day);\n const isFocused = isDayFocused(day);\n return (\n <CalendarDay\n role=\"gridcell\"\n aria-current={isToday ? 'date' : undefined}\n aria-selected={isActive ? 'true' : 'false'}\n aria-colindex={i + 1}\n tabIndex={isDayFocusable?.(day) ? 0 : -1}\n key={day.toISOString()}\n day={day}\n today={isToday}\n active={isActive}\n onChange={handleDayChange}\n hidden={isHidden}\n disabled={isDayDisabled(day)}\n selectionStart={isDaySelectionStart(day, i)}\n selectionEnd={isDaySelectionEnd(day, i)}\n hintedSelectionStart={isHintedDaySelectionStart?.(day, i)}\n hintedSelectionEnd={isHintedDaySelectionEnd?.(day, i)}\n selected={isDaySelected?.(day)}\n focused={isFocused}\n onEnter={onDayEnter}\n onLeave={onDayLeave}\n onFocus={onDayFocus}\n hinted={isDayHinted?.(day)}\n sameMonth={sameMonth}\n size={size}\n renderDayContent={renderDayContent}\n testId={dayTestId}\n {...dayProps}\n className={classNames(dayProps?.className, styles.rowDay)}\n />\n );\n })}\n </div>\n ))}\n </RootComponent>\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","isSameDate","useLocale","useTodayDate","getDaysNames","getWeeks","isSameMonth","cacheDateTimeFormat","CalendarDay","RootComponent","Footnote","VisuallyHidden","labelDateTimeFormatOptions","year","month","labelDateTimeFormat","CalendarDays","viewDate","value","weekStartsOn","onDayChange","isDaySelected","isDayActive","isDaySelectionEnd","isDaySelectionStart","onDayEnter","onDayLeave","onDayFocus","isDayHinted","isHintedDaySelectionStart","isHintedDaySelectionEnd","isDayFocused","isDayFocusable","isDayDisabled","size","showNeighboringMonth","dayProps","listenDayChangesForUpdate","getRootRef","renderDayContent","dayTestId","props","locale","now","weeks","useMemo","daysNames","handleDayChange","useCallback","date","viewDateLabelId","useId","currentMonthLabel","format","Fragment","aria-live","id","role","baseClassName","aria-labelledby","div","aria-rowindex","className","map","short","shortDayName","long","longDayName","aria-label","week","i","day","sameMonth","isHidden","isToday","isActive","isFocused","aria-current","undefined","aria-selected","aria-colindex","tabIndex","today","active","onChange","hidden","disabled","selectionStart","selectionEnd","hintedSelectionStart","hintedSelectionEnd","selected","focused","onEnter","onLeave","onFocus","hinted","testId","toISOString"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarHeader.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CalendarHeader.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AA4B7D,KAAK,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC;AAE5F,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5E;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IACrE;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACjE,wBAAwB;IAC1B;;OAEG;IACH,QAAQ,EAAE,IAAI,CAAC;IACf;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5C;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5C;;OAEG;IACH,cAAc,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C;;OAEG;IACH,cAAc,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAChF;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/D;;OAEG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACxC;AAED,eAAO,MAAM,cAAc,GAAI,qZA2B5B,mBAAmB,KAAG,KAAK,CAAC,SAkK9B,CAAC"}
|
|
@@ -3,12 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Icon12Dropdown, Icon20ChevronLeftOutline, Icon20ChevronRightOutline } from "@vkontakte/icons";
|
|
5
5
|
import { classNames } from "@vkontakte/vkjs";
|
|
6
|
+
import { useConfigDirection } from "../../hooks/useConfigDirection.js";
|
|
7
|
+
import { useLocale } from "../../hooks/useLocale.js";
|
|
6
8
|
import { ViewWidth } from "../../lib/adaptivity/index.js";
|
|
7
9
|
import { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, getMonths, getYears } from "../../lib/calendar.js";
|
|
8
10
|
import { addMonths, setMonth, setYear, subMonths } from "../../lib/date.js";
|
|
9
11
|
import { cacheDateTimeFormat } from "../../lib/intlCache.js";
|
|
10
12
|
import { AdaptivityProvider } from "../AdaptivityProvider/AdaptivityProvider.js";
|
|
11
|
-
import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
|
|
12
13
|
import { CustomSelect } from "../CustomSelect/CustomSelect.js";
|
|
13
14
|
import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
14
15
|
import { Tappable } from "../Tappable/Tappable.js";
|
|
@@ -36,7 +37,8 @@ export const CalendarHeader = ({ viewDate, onChange, prevMonthHidden: prevMonthH
|
|
|
36
37
|
width: 30,
|
|
37
38
|
height: 30
|
|
38
39
|
}), isMonthDisabled, isYearDisabled, monthDropdownTestId, yearDropdownTestId, prevMonthButtonTestId, nextMonthButtonTestId, ...restProps })=>{
|
|
39
|
-
const
|
|
40
|
+
const locale = useLocale();
|
|
41
|
+
const direction = useConfigDirection();
|
|
40
42
|
const onMonthsChange = React.useCallback((_, newValue)=>onChange(setMonth(viewDate, Number(newValue))), [
|
|
41
43
|
onChange,
|
|
42
44
|
viewDate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["'use client';\n\nimport type { ChangeEvent } from 'react';\nimport * as React from 'react';\nimport {\n Icon12Dropdown,\n Icon20ChevronLeftOutline,\n Icon20ChevronRightOutline,\n} from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { ViewWidth } from '../../lib/adaptivity';\nimport { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, getMonths, getYears } from '../../lib/calendar';\nimport { addMonths, setMonth, setYear, subMonths } from '../../lib/date';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarHeader.module.css';\n\nconst formatterDateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n} as const;\n\nconst formatterDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst monthDateTimeFormatOptions = {\n month: 'long',\n} as const;\n\nconst monthDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst yearDateTimeFormatOptions = {\n year: 'numeric',\n} as const;\n\nconst yearDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\ntype ArrowMonthProps = Omit<React.AllHTMLAttributes<HTMLElement>, 'onClick' | 'aria-label'>;\n\nexport type CalendarHeaderTestsProps = {\n /**\n * Передает атрибут `data-testid` для дропдауна выбора месяца в заголовке календаря.\n */\n monthDropdownTestId?: string | ((monthIndex: number) => string) | undefined;\n /**\n * Передает атрибут `data-testid` для дропдауна выбора года в заголовке календаря.\n */\n yearDropdownTestId?: string | ((year: number) => string) | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к следующему месяцу в заголовке календаря.\n */\n nextMonthButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к предыдущему месяцу в заголовке календаря.\n */\n prevMonthButtonTestId?: string | undefined;\n};\n\nexport interface CalendarHeaderProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n CalendarHeaderTestsProps {\n /**\n * Отображаемая дата.\n */\n viewDate: Date;\n /**\n * Скрывает иконку для переключения на предыдущий месяц.\n */\n prevMonthHidden?: boolean | undefined;\n /**\n * Скрывает иконку для переключения на следующий месяц.\n */\n nextMonthHidden?: boolean | undefined;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean | undefined;\n /**\n * `aria-label` для кнопки предыдущего месяца.\n */\n prevMonthLabel?: string | undefined;\n /**\n * `aria-label` для кнопки следующего месяца.\n */\n nextMonthLabel?: string | undefined;\n /**\n * `aria-label` для селектора месяца.\n */\n changeMonthLabel?: string | undefined;\n /**\n * `aria-label` для селектора года.\n */\n changeYearLabel?: string | undefined;\n /**\n * Кастомная иконка для кнопки предыдущего месяца.\n */\n prevMonthIcon?: React.ReactNode | undefined;\n /**\n * Кастомная иконка для кнопки следующего месяца.\n */\n nextMonthIcon?: React.ReactNode | undefined;\n /**\n * Дополнительные свойства для кнопки предыдущего месяца.\n */\n prevMonthProps?: ArrowMonthProps | undefined;\n /**\n * Дополнительные свойства для кнопки следующего месяца.\n */\n nextMonthProps?: ArrowMonthProps | undefined;\n /**\n * Функция для проверки блокировки месяца.\n */\n isMonthDisabled?: ((monthNumber: number, year?: number) => boolean) | undefined;\n /**\n * Функция для проверки блокировки года.\n */\n isYearDisabled?: ((yearNumber: number) => boolean) | undefined;\n /**\n * Обработчик изменения отображаемой даты.\n */\n onChange: (viewDate: Date) => void;\n /**\n * Нажатие на кнопку переключения на следующий месяц.\n */\n onNextMonth?: (() => void) | undefined;\n /**\n * Нажатие на кнопку переключения на предыдущий месяц.\n */\n onPrevMonth?: (() => void) | undefined;\n}\n\nexport const CalendarHeader = ({\n viewDate,\n onChange,\n prevMonthHidden: prevMonthHiddenProp = false,\n nextMonthHidden: nextMonthHiddenProp = false,\n disablePickers = false,\n onNextMonth,\n onPrevMonth,\n prevMonthProps = {},\n nextMonthProps = {},\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n prevMonthIcon = (\n <Icon20ChevronLeftOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n nextMonthIcon = (\n <Icon20ChevronRightOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n isMonthDisabled,\n isYearDisabled,\n monthDropdownTestId,\n yearDropdownTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n ...restProps\n}: CalendarHeaderProps): React.ReactNode => {\n const { locale, direction } = useConfigProvider();\n\n const onMonthsChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange(setMonth(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n const onYearChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange(setYear(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n\n const currentYear = viewDate.getFullYear();\n const currentMonth = viewDate.getMonth();\n\n const months = React.useMemo(\n () =>\n getMonths(locale).map(({ value, label }) => ({\n value,\n label: <span className={styles.month}>{label}</span>,\n disabled: isMonthDisabled && isMonthDisabled(value),\n })),\n [locale, isMonthDisabled],\n );\n\n const years = React.useMemo(\n () =>\n getYears(currentYear, 100).map((year) => ({\n ...year,\n disabled: isYearDisabled && isYearDisabled(year.value),\n })),\n [currentYear, isYearDisabled],\n );\n\n const formatter = formatterDateTimeFormat(locale, formatterDateTimeFormatOptions);\n\n const { className: prevMonthClassName, ...restPrevMonthProps } = prevMonthProps;\n const { className: nextMonthClassName, ...restNextMonthProps } = nextMonthProps;\n\n let nextMonthHidden =\n nextMonthHiddenProp || (currentMonth === 11 && currentYear === DEFAULT_MAX_YEAR);\n if (isMonthDisabled && !nextMonthHidden) {\n nextMonthHidden = isMonthDisabled(\n currentMonth === 11 ? 0 : currentMonth + 1,\n currentMonth === 11 ? Math.min(currentYear + 1, DEFAULT_MAX_YEAR) : currentYear,\n );\n }\n\n let prevMonthHidden =\n prevMonthHiddenProp || (currentMonth === 0 && currentYear === DEFAULT_MIN_YEAR);\n if (isMonthDisabled && !prevMonthHidden) {\n prevMonthHidden = isMonthDisabled(\n currentMonth === 0 ? 11 : currentMonth - 1,\n currentMonth === 0 ? Math.max(currentYear - 1, DEFAULT_MIN_YEAR) : currentYear,\n );\n }\n\n const stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen = React.useCallback(\n (event: React.KeyboardEvent, isOpen: boolean) => {\n if (isOpen && event.key === 'Escape') {\n event.stopPropagation();\n }\n },\n [],\n );\n\n return (\n <RootComponent baseClassName={styles.host} {...restProps}>\n {!prevMonthHidden && (\n <AdaptivityProvider viewWidth={ViewWidth.SMALL_TABLET}>\n <Tappable\n baseClassName={classNames(styles.navIcon, styles.navIconPrev, prevMonthClassName)}\n onClick={onPrevMonth}\n data-testid={prevMonthButtonTestId}\n {...restPrevMonthProps}\n >\n <VisuallyHidden>\n {prevMonthLabel}, {formatter.format(subMonths(viewDate, 1))}\n </VisuallyHidden>\n {direction === 'ltr' ? prevMonthIcon : nextMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n {disablePickers ? (\n <Paragraph\n className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}\n weight=\"2\"\n >\n <span className={styles.month}>\n {monthDateTimeFormat(locale, monthDateTimeFormatOptions).format(viewDate)}\n </span>\n \n {yearDateTimeFormat(locale, yearDateTimeFormatOptions).format(viewDate)}\n </Paragraph>\n ) : (\n <AdaptivityProvider density=\"compact\">\n <div className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}>\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentMonth}\n options={months}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onMonthsChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n onInputKeyDown={stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen}\n slotProps={{\n input: {\n 'aria-label': changeMonthLabel,\n 'data-testid':\n typeof monthDropdownTestId === 'string'\n ? monthDropdownTestId\n : monthDropdownTestId?.(currentMonth),\n },\n }}\n />\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentYear}\n options={years}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onYearChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n onInputKeyDown={stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen}\n slotProps={{\n input: {\n 'aria-label': changeYearLabel,\n 'data-testid':\n typeof yearDropdownTestId === 'string'\n ? yearDropdownTestId\n : yearDropdownTestId?.(currentYear),\n },\n }}\n />\n </div>\n </AdaptivityProvider>\n )}\n {!nextMonthHidden && (\n <AdaptivityProvider viewWidth={ViewWidth.SMALL_TABLET}>\n <Tappable\n baseClassName={classNames(styles.navIcon, styles.navIconNext, nextMonthClassName)}\n onClick={onNextMonth}\n data-testid={nextMonthButtonTestId}\n {...restNextMonthProps}\n >\n <VisuallyHidden>\n {nextMonthLabel}, {formatter.format(addMonths(viewDate, 1))}\n </VisuallyHidden>\n {direction === 'ltr' ? nextMonthIcon : prevMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon12Dropdown","Icon20ChevronLeftOutline","Icon20ChevronRightOutline","classNames","ViewWidth","DEFAULT_MAX_YEAR","DEFAULT_MIN_YEAR","getMonths","getYears","addMonths","setMonth","setYear","subMonths","cacheDateTimeFormat","AdaptivityProvider","useConfigProvider","CustomSelect","RootComponent","Tappable","Paragraph","VisuallyHidden","formatterDateTimeFormatOptions","year","month","formatterDateTimeFormat","monthDateTimeFormatOptions","monthDateTimeFormat","yearDateTimeFormatOptions","yearDateTimeFormat","CalendarHeader","viewDate","onChange","prevMonthHidden","prevMonthHiddenProp","nextMonthHidden","nextMonthHiddenProp","disablePickers","onNextMonth","onPrevMonth","prevMonthProps","nextMonthProps","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","prevMonthIcon","className","width","height","nextMonthIcon","isMonthDisabled","isYearDisabled","monthDropdownTestId","yearDropdownTestId","prevMonthButtonTestId","nextMonthButtonTestId","restProps","locale","direction","onMonthsChange","useCallback","_","newValue","Number","onYearChange","currentYear","getFullYear","currentMonth","getMonth","months","useMemo","map","value","label","span","disabled","years","formatter","prevMonthClassName","restPrevMonthProps","nextMonthClassName","restNextMonthProps","Math","min","max","stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen","event","isOpen","key","stopPropagation","baseClassName","viewWidth","SMALL_TABLET","onClick","data-testid","format","weight","density","div","options","dropdownOffsetDistance","dropdownAutoWidth","icon","forceDropdownPortal","selectType","onInputKeyDown","slotProps","input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["'use client';\n\nimport type { ChangeEvent } from 'react';\nimport * as React from 'react';\nimport {\n Icon12Dropdown,\n Icon20ChevronLeftOutline,\n Icon20ChevronRightOutline,\n} from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useLocale } from '../../hooks/useLocale';\nimport { ViewWidth } from '../../lib/adaptivity';\nimport { DEFAULT_MAX_YEAR, DEFAULT_MIN_YEAR, getMonths, getYears } from '../../lib/calendar';\nimport { addMonths, setMonth, setYear, subMonths } from '../../lib/date';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarHeader.module.css';\n\nconst formatterDateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n} as const;\n\nconst formatterDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst monthDateTimeFormatOptions = {\n month: 'long',\n} as const;\n\nconst monthDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst yearDateTimeFormatOptions = {\n year: 'numeric',\n} as const;\n\nconst yearDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\ntype ArrowMonthProps = Omit<React.AllHTMLAttributes<HTMLElement>, 'onClick' | 'aria-label'>;\n\nexport type CalendarHeaderTestsProps = {\n /**\n * Передает атрибут `data-testid` для дропдауна выбора месяца в заголовке календаря.\n */\n monthDropdownTestId?: string | ((monthIndex: number) => string) | undefined;\n /**\n * Передает атрибут `data-testid` для дропдауна выбора года в заголовке календаря.\n */\n yearDropdownTestId?: string | ((year: number) => string) | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к следующему месяцу в заголовке календаря.\n */\n nextMonthButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к предыдущему месяцу в заголовке календаря.\n */\n prevMonthButtonTestId?: string | undefined;\n};\n\nexport interface CalendarHeaderProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n CalendarHeaderTestsProps {\n /**\n * Отображаемая дата.\n */\n viewDate: Date;\n /**\n * Скрывает иконку для переключения на предыдущий месяц.\n */\n prevMonthHidden?: boolean | undefined;\n /**\n * Скрывает иконку для переключения на следующий месяц.\n */\n nextMonthHidden?: boolean | undefined;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean | undefined;\n /**\n * `aria-label` для кнопки предыдущего месяца.\n */\n prevMonthLabel?: string | undefined;\n /**\n * `aria-label` для кнопки следующего месяца.\n */\n nextMonthLabel?: string | undefined;\n /**\n * `aria-label` для селектора месяца.\n */\n changeMonthLabel?: string | undefined;\n /**\n * `aria-label` для селектора года.\n */\n changeYearLabel?: string | undefined;\n /**\n * Кастомная иконка для кнопки предыдущего месяца.\n */\n prevMonthIcon?: React.ReactNode | undefined;\n /**\n * Кастомная иконка для кнопки следующего месяца.\n */\n nextMonthIcon?: React.ReactNode | undefined;\n /**\n * Дополнительные свойства для кнопки предыдущего месяца.\n */\n prevMonthProps?: ArrowMonthProps | undefined;\n /**\n * Дополнительные свойства для кнопки следующего месяца.\n */\n nextMonthProps?: ArrowMonthProps | undefined;\n /**\n * Функция для проверки блокировки месяца.\n */\n isMonthDisabled?: ((monthNumber: number, year?: number) => boolean) | undefined;\n /**\n * Функция для проверки блокировки года.\n */\n isYearDisabled?: ((yearNumber: number) => boolean) | undefined;\n /**\n * Обработчик изменения отображаемой даты.\n */\n onChange: (viewDate: Date) => void;\n /**\n * Нажатие на кнопку переключения на следующий месяц.\n */\n onNextMonth?: (() => void) | undefined;\n /**\n * Нажатие на кнопку переключения на предыдущий месяц.\n */\n onPrevMonth?: (() => void) | undefined;\n}\n\nexport const CalendarHeader = ({\n viewDate,\n onChange,\n prevMonthHidden: prevMonthHiddenProp = false,\n nextMonthHidden: nextMonthHiddenProp = false,\n disablePickers = false,\n onNextMonth,\n onPrevMonth,\n prevMonthProps = {},\n nextMonthProps = {},\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n prevMonthIcon = (\n <Icon20ChevronLeftOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n nextMonthIcon = (\n <Icon20ChevronRightOutline className={styles.navIconAccent} width={30} height={30} />\n ),\n isMonthDisabled,\n isYearDisabled,\n monthDropdownTestId,\n yearDropdownTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n ...restProps\n}: CalendarHeaderProps): React.ReactNode => {\n const locale = useLocale();\n const direction = useConfigDirection();\n\n const onMonthsChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange(setMonth(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n const onYearChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange(setYear(viewDate, Number(newValue))),\n [onChange, viewDate],\n );\n\n const currentYear = viewDate.getFullYear();\n const currentMonth = viewDate.getMonth();\n\n const months = React.useMemo(\n () =>\n getMonths(locale).map(({ value, label }) => ({\n value,\n label: <span className={styles.month}>{label}</span>,\n disabled: isMonthDisabled && isMonthDisabled(value),\n })),\n [locale, isMonthDisabled],\n );\n\n const years = React.useMemo(\n () =>\n getYears(currentYear, 100).map((year) => ({\n ...year,\n disabled: isYearDisabled && isYearDisabled(year.value),\n })),\n [currentYear, isYearDisabled],\n );\n\n const formatter = formatterDateTimeFormat(locale, formatterDateTimeFormatOptions);\n\n const { className: prevMonthClassName, ...restPrevMonthProps } = prevMonthProps;\n const { className: nextMonthClassName, ...restNextMonthProps } = nextMonthProps;\n\n let nextMonthHidden =\n nextMonthHiddenProp || (currentMonth === 11 && currentYear === DEFAULT_MAX_YEAR);\n if (isMonthDisabled && !nextMonthHidden) {\n nextMonthHidden = isMonthDisabled(\n currentMonth === 11 ? 0 : currentMonth + 1,\n currentMonth === 11 ? Math.min(currentYear + 1, DEFAULT_MAX_YEAR) : currentYear,\n );\n }\n\n let prevMonthHidden =\n prevMonthHiddenProp || (currentMonth === 0 && currentYear === DEFAULT_MIN_YEAR);\n if (isMonthDisabled && !prevMonthHidden) {\n prevMonthHidden = isMonthDisabled(\n currentMonth === 0 ? 11 : currentMonth - 1,\n currentMonth === 0 ? Math.max(currentYear - 1, DEFAULT_MIN_YEAR) : currentYear,\n );\n }\n\n const stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen = React.useCallback(\n (event: React.KeyboardEvent, isOpen: boolean) => {\n if (isOpen && event.key === 'Escape') {\n event.stopPropagation();\n }\n },\n [],\n );\n\n return (\n <RootComponent baseClassName={styles.host} {...restProps}>\n {!prevMonthHidden && (\n <AdaptivityProvider viewWidth={ViewWidth.SMALL_TABLET}>\n <Tappable\n baseClassName={classNames(styles.navIcon, styles.navIconPrev, prevMonthClassName)}\n onClick={onPrevMonth}\n data-testid={prevMonthButtonTestId}\n {...restPrevMonthProps}\n >\n <VisuallyHidden>\n {prevMonthLabel}, {formatter.format(subMonths(viewDate, 1))}\n </VisuallyHidden>\n {direction === 'ltr' ? prevMonthIcon : nextMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n {disablePickers ? (\n <Paragraph\n className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}\n weight=\"2\"\n >\n <span className={styles.month}>\n {monthDateTimeFormat(locale, monthDateTimeFormatOptions).format(viewDate)}\n </span>\n \n {yearDateTimeFormat(locale, yearDateTimeFormatOptions).format(viewDate)}\n </Paragraph>\n ) : (\n <AdaptivityProvider density=\"compact\">\n <div className={classNames(styles.pickers, 'vkuiInternalCalendarHeader__pickers')}>\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentMonth}\n options={months}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onMonthsChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n onInputKeyDown={stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen}\n slotProps={{\n input: {\n 'aria-label': changeMonthLabel,\n 'data-testid':\n typeof monthDropdownTestId === 'string'\n ? monthDropdownTestId\n : monthDropdownTestId?.(currentMonth),\n },\n }}\n />\n <CustomSelect\n className={classNames(styles.picker, 'vkuiInternalCalendarHeader__picker')}\n value={currentYear}\n options={years}\n dropdownOffsetDistance={4}\n dropdownAutoWidth\n icon={<Icon12Dropdown />}\n onChange={onYearChange}\n forceDropdownPortal={false}\n selectType=\"accent\"\n onInputKeyDown={stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen}\n slotProps={{\n input: {\n 'aria-label': changeYearLabel,\n 'data-testid':\n typeof yearDropdownTestId === 'string'\n ? yearDropdownTestId\n : yearDropdownTestId?.(currentYear),\n },\n }}\n />\n </div>\n </AdaptivityProvider>\n )}\n {!nextMonthHidden && (\n <AdaptivityProvider viewWidth={ViewWidth.SMALL_TABLET}>\n <Tappable\n baseClassName={classNames(styles.navIcon, styles.navIconNext, nextMonthClassName)}\n onClick={onNextMonth}\n data-testid={nextMonthButtonTestId}\n {...restNextMonthProps}\n >\n <VisuallyHidden>\n {nextMonthLabel}, {formatter.format(addMonths(viewDate, 1))}\n </VisuallyHidden>\n {direction === 'ltr' ? nextMonthIcon : prevMonthIcon}\n </Tappable>\n </AdaptivityProvider>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon12Dropdown","Icon20ChevronLeftOutline","Icon20ChevronRightOutline","classNames","useConfigDirection","useLocale","ViewWidth","DEFAULT_MAX_YEAR","DEFAULT_MIN_YEAR","getMonths","getYears","addMonths","setMonth","setYear","subMonths","cacheDateTimeFormat","AdaptivityProvider","CustomSelect","RootComponent","Tappable","Paragraph","VisuallyHidden","formatterDateTimeFormatOptions","year","month","formatterDateTimeFormat","monthDateTimeFormatOptions","monthDateTimeFormat","yearDateTimeFormatOptions","yearDateTimeFormat","CalendarHeader","viewDate","onChange","prevMonthHidden","prevMonthHiddenProp","nextMonthHidden","nextMonthHiddenProp","disablePickers","onNextMonth","onPrevMonth","prevMonthProps","nextMonthProps","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","prevMonthIcon","className","width","height","nextMonthIcon","isMonthDisabled","isYearDisabled","monthDropdownTestId","yearDropdownTestId","prevMonthButtonTestId","nextMonthButtonTestId","restProps","locale","direction","onMonthsChange","useCallback","_","newValue","Number","onYearChange","currentYear","getFullYear","currentMonth","getMonth","months","useMemo","map","value","label","span","disabled","years","formatter","prevMonthClassName","restPrevMonthProps","nextMonthClassName","restNextMonthProps","Math","min","max","stopPropogationOfEscapeKeyboardEventWhenSelectIsOpen","event","isOpen","key","stopPropagation","baseClassName","viewWidth","SMALL_TABLET","onClick","data-testid","format","weight","density","div","options","dropdownOffsetDistance","dropdownAutoWidth","icon","forceDropdownPortal","selectType","onInputKeyDown","slotProps","input"],"mappings":"AAAA;;AAGA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,cAAc,EACdC,wBAAwB,EACxBC,yBAAyB,QACpB,mBAAmB;AAC1B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,kBAAkB,QAAQ,oCAAiC;AACpE,SAASC,SAAS,QAAQ,2BAAwB;AAClD,SAASC,SAAS,QAAQ,gCAAuB;AACjD,SAASC,gBAAgB,EAAEC,gBAAgB,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,wBAAqB;AAC7F,SAASC,SAAS,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,SAAS,QAAQ,oBAAiB;AACzE,SAASC,mBAAmB,QAAQ,yBAAsB;AAE1D,SAASC,kBAAkB,QAAQ,8CAA2C;AAC9E,SAASC,YAAY,QAA0B,kCAA+B;AAC9E,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,QAAQ,QAAQ,0BAAuB;AAChD,SAASC,SAAS,QAAQ,uCAAoC;AAC9D,SAASC,cAAc,QAAQ,sCAAmC;AAGlE,MAAMC,iCAAiC;IACrCC,MAAM;IACNC,OAAO;AACT;AAEA,MAAMC,0BAA0B,WAAW,GAAGV;AAE9C,MAAMW,6BAA6B;IACjCF,OAAO;AACT;AAEA,MAAMG,sBAAsB,WAAW,GAAGZ;AAE1C,MAAMa,4BAA4B;IAChCL,MAAM;AACR;AAEA,MAAMM,qBAAqB,WAAW,GAAGd;AAgGzC,OAAO,MAAMe,iBAAiB,CAAC,EAC7BC,QAAQ,EACRC,QAAQ,EACRC,iBAAiBC,sBAAsB,KAAK,EAC5CC,iBAAiBC,sBAAsB,KAAK,EAC5CC,iBAAiB,KAAK,EACtBC,WAAW,EACXC,WAAW,EACXC,iBAAiB,CAAC,CAAC,EACnBC,iBAAiB,CAAC,CAAC,EACnBC,iBAAiB,kBAAkB,EACnCC,iBAAiB,iBAAiB,EAClCC,mBAAmB,gBAAgB,EACnCC,kBAAkB,cAAc,EAChCC,8BACE,KAAC7C;IAAyB8C,SAAS;IAAwBC,OAAO;IAAIC,QAAQ;EAC/E,EACDC,8BACE,KAAChD;IAA0B6C,SAAS;IAAwBC,OAAO;IAAIC,QAAQ;EAChF,EACDE,eAAe,EACfC,cAAc,EACdC,mBAAmB,EACnBC,kBAAkB,EAClBC,qBAAqB,EACrBC,qBAAqB,EACrB,GAAGC,WACiB;IACpB,MAAMC,SAASrD;IACf,MAAMsD,YAAYvD;IAElB,MAAMwD,iBAAiB7D,MAAM8D,WAAW,CACtC,CAACC,GAAmCC,WAClC/B,SAASpB,SAASmB,UAAUiC,OAAOD,aACrC;QAAC/B;QAAUD;KAAS;IAEtB,MAAMkC,eAAelE,MAAM8D,WAAW,CACpC,CAACC,GAAmCC,WAClC/B,SAASnB,QAAQkB,UAAUiC,OAAOD,aACpC;QAAC/B;QAAUD;KAAS;IAGtB,MAAMmC,cAAcnC,SAASoC,WAAW;IACxC,MAAMC,eAAerC,SAASsC,QAAQ;IAEtC,MAAMC,SAASvE,MAAMwE,OAAO,CAC1B,IACE9D,UAAUiD,QAAQc,GAAG,CAAC,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAM,CAAA;gBAC3CD;gBACAC,qBAAO,KAACC;oBAAK5B,SAAS;8BAAiB2B;;gBACvCE,UAAUzB,mBAAmBA,gBAAgBsB;YAC/C,CAAA,IACF;QAACf;QAAQP;KAAgB;IAG3B,MAAM0B,QAAQ9E,MAAMwE,OAAO,CACzB,IACE7D,SAASwD,aAAa,KAAKM,GAAG,CAAC,CAACjD,OAAU,CAAA;gBACxC,GAAGA,IAAI;gBACPqD,UAAUxB,kBAAkBA,eAAe7B,KAAKkD,KAAK;YACvD,CAAA,IACF;QAACP;QAAad;KAAe;IAG/B,MAAM0B,YAAYrD,wBAAwBiC,QAAQpC;IAElD,MAAM,EAAEyB,WAAWgC,kBAAkB,EAAE,GAAGC,oBAAoB,GAAGxC;IACjE,MAAM,EAAEO,WAAWkC,kBAAkB,EAAE,GAAGC,oBAAoB,GAAGzC;IAEjE,IAAIN,kBACFC,uBAAwBgC,iBAAiB,MAAMF,gBAAgB3D;IACjE,IAAI4C,mBAAmB,CAAChB,iBAAiB;QACvCA,kBAAkBgB,gBAChBiB,iBAAiB,KAAK,IAAIA,eAAe,GACzCA,iBAAiB,KAAKe,KAAKC,GAAG,CAAClB,cAAc,GAAG3D,oBAAoB2D;IAExE;IAEA,IAAIjC,kBACFC,uBAAwBkC,iBAAiB,KAAKF,gBAAgB1D;IAChE,IAAI2C,mBAAmB,CAAClB,iBAAiB;QACvCA,kBAAkBkB,gBAChBiB,iBAAiB,IAAI,KAAKA,eAAe,GACzCA,iBAAiB,IAAIe,KAAKE,GAAG,CAACnB,cAAc,GAAG1D,oBAAoB0D;IAEvE;IAEA,MAAMoB,uDAAuDvF,MAAM8D,WAAW,CAC5E,CAAC0B,OAA4BC;QAC3B,IAAIA,UAAUD,MAAME,GAAG,KAAK,UAAU;YACpCF,MAAMG,eAAe;QACvB;IACF,GACA,EAAE;IAGJ,qBACE,MAACxE;QAAcyE,aAAa;QAAgB,GAAGlC,SAAS;;YACrD,CAACxB,iCACA,KAACjB;gBAAmB4E,WAAWtF,UAAUuF,YAAY;0BACnD,cAAA,MAAC1E;oBACCwE,eAAexF,6EAA+C4E;oBAC9De,SAASvD;oBACTwD,eAAaxC;oBACZ,GAAGyB,kBAAkB;;sCAEtB,MAAC3D;;gCACEqB;gCAAe;gCAAGoC,UAAUkB,MAAM,CAAClF,UAAUiB,UAAU;;;wBAEzD4B,cAAc,QAAQb,gBAAgBI;;;;YAI5Cb,+BACC,MAACjB;gBACC2B,WAAW5C,0CAA2B;gBACtC8F,QAAO;;kCAEP,KAACtB;wBAAK5B,SAAS;kCACZpB,oBAAoB+B,QAAQhC,4BAA4BsE,MAAM,CAACjE;;oBAC3D;oBAENF,mBAAmB6B,QAAQ9B,2BAA2BoE,MAAM,CAACjE;;+BAGhE,KAACf;gBAAmBkF,SAAQ;0BAC1B,cAAA,MAACC;oBAAIpD,WAAW5C,0CAA2B;;sCACzC,KAACc;4BACC8B,WAAW5C,yCAA0B;4BACrCsE,OAAOL;4BACPgC,SAAS9B;4BACT+B,wBAAwB;4BACxBC,iBAAiB;4BACjBC,oBAAM,KAACvG;4BACPgC,UAAU4B;4BACV4C,qBAAqB;4BACrBC,YAAW;4BACXC,gBAAgBpB;4BAChBqB,WAAW;gCACTC,OAAO;oCACL,cAAchE;oCACd,eACE,OAAOS,wBAAwB,WAC3BA,sBACAA,sBAAsBe;gCAC9B;4BACF;;sCAEF,KAACnD;4BACC8B,WAAW5C,yCAA0B;4BACrCsE,OAAOP;4BACPkC,SAASvB;4BACTwB,wBAAwB;4BACxBC,iBAAiB;4BACjBC,oBAAM,KAACvG;4BACPgC,UAAUiC;4BACVuC,qBAAqB;4BACrBC,YAAW;4BACXC,gBAAgBpB;4BAChBqB,WAAW;gCACTC,OAAO;oCACL,cAAc/D;oCACd,eACE,OAAOS,uBAAuB,WAC1BA,qBACAA,qBAAqBY;gCAC7B;4BACF;;;;;YAKP,CAAC/B,iCACA,KAACnB;gBAAmB4E,WAAWtF,UAAUuF,YAAY;0BACnD,cAAA,MAAC1E;oBACCwE,eAAexF,6EAA+C8E;oBAC9Da,SAASxD;oBACTyD,eAAavC;oBACZ,GAAG0B,kBAAkB;;sCAEtB,MAAC7D;;gCACEsB;gCAAe;gCAAGmC,UAAUkB,MAAM,CAACrF,UAAUoB,UAAU;;;wBAEzD4B,cAAc,QAAQT,gBAAgBJ;;;;;;AAMnD,EAAE"}
|
|
@@ -40,7 +40,7 @@ export interface CalendarRangeProps extends Omit<HTMLAttributesWithRootRef<HTMLD
|
|
|
40
40
|
/**
|
|
41
41
|
* `aria-label` для изменения дня.
|
|
42
42
|
*
|
|
43
|
-
* @deprecated Since 7.4.0. Будет
|
|
43
|
+
* @deprecated Since 7.4.0. Будет удалено в **VKUI v9**.
|
|
44
44
|
*
|
|
45
45
|
* Использовалось для задания aria-label для контейнера дней в календаре.
|
|
46
46
|
* Теперь этот контейнер является таблицей (с помощью role="grid") и
|
|
@@ -60,7 +60,7 @@ export interface CalendarRangeProps extends Omit<HTMLAttributesWithRootRef<HTMLD
|
|
|
60
60
|
*/
|
|
61
61
|
shouldDisableDate?: ((value: Date) => boolean) | undefined;
|
|
62
62
|
/**
|
|
63
|
-
* @deprecated Since 7.3.0. Будет
|
|
63
|
+
* @deprecated Since 7.3.0. Будет удалено в **VKUI v9**.
|
|
64
64
|
*/
|
|
65
65
|
onClose?: (() => void) | undefined;
|
|
66
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { isSameDate } from '@vkontakte/vkjs';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { isFirstDay, isLastDay } from '../../lib/calendar';\nimport {\n addMonths,\n endOfDay,\n isWithinInterval,\n MONDAY,\n startOfDay,\n subMonths,\n} from '../../lib/date';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDays,\n type CalendarDaysProps,\n type CalendarDaysTestsProps,\n} from '../CalendarDays/CalendarDays';\nimport {\n CalendarHeader,\n type CalendarHeaderProps,\n type CalendarHeaderTestsProps,\n} from '../CalendarHeader/CalendarHeader';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { DateRangeType } from './types';\nimport { useCalendarKeyboardNavigation, useIsDayFocusable } from './utils';\nimport styles from './CalendarRange.module.css';\n\nexport type { DateRangeType };\n\nexport type CalendarRangeTestsProps = CalendarDaysTestsProps & {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в левой части.\n */\n leftPartHeaderTestsData?: CalendarHeaderTestsProps | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в правой части.\n */\n rightPartHeaderTestsData?: CalendarHeaderTestsProps | undefined;\n};\n\nexport interface CalendarRangeProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n >,\n Pick<CalendarDaysProps, 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarRangeTestsProps {\n /**\n * Текущий выбранный промежуток.\n */\n value?: DateRangeType | null | undefined;\n /**\n * Начальный промежуток при монтировании.\n */\n defaultValue?: DateRangeType | null | undefined;\n /**\n * Запрещает выбор даты в прошлом.\n * Применяется, если не заданы `shouldDisableDate` и `disableFuture`.\n */\n disablePast?: boolean | undefined;\n /**\n * Запрещает выбор даты в будущем.\n * Применяется, если не задано `shouldDisableDate`.\n */\n disableFuture?: boolean | undefined;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean | undefined;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Since 7.4.0. Будет удалeно в **VKUI v9**.\n *\n * Использовалось для задания aria-label для контейнера дней в календаре.\n * Теперь этот контейнер является таблицей (с помощью role=\"grid\") и\n * в aria-label рендерится текущий открытый в календаре месяц и год.\n */\n changeDayLabel?: string | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n /**\n * День недели, с которого начинается неделя.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined;\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: ((value: DateRangeType) => void) | undefined;\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: ((value: Date) => boolean) | undefined;\n /**\n * @deprecated Since 7.3.0. Будет удалeно в **VKUI v9**.\n */\n onClose?: (() => void) | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n}\n\nconst getIsDaySelected = (day: Date, value?: DateRangeType | null) => {\n if (!value?.[0] || !value[1]) {\n return false;\n }\n\n return isWithinInterval(day, [startOfDay(value[0]), endOfDay(value[1])]);\n};\n\n/**\n * @see https://vkui.io/components/calendar-range\n */\nexport const CalendarRange = ({\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n weekStartsOn = MONDAY,\n disablePickers,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n 'aria-label': ariaLabel = 'Календарь',\n prevMonthIcon,\n nextMonthIcon,\n listenDayChangesForUpdate,\n renderDayContent,\n dayTestId,\n leftPartHeaderTestsData,\n rightPartHeaderTestsData,\n getRootRef,\n ...props\n}: CalendarRangeProps): React.ReactNode => {\n const _onChange = (newRange: DateRangeType | null) => {\n if (newRange && onChange) {\n onChange(newRange);\n }\n };\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null>({\n value: valueProp,\n defaultValue: defaultValue as DateRangeType | null,\n onChange: _onChange,\n });\n\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n } = useCalendar({ value, disableFuture, disablePast, shouldDisableDate });\n\n const [hintedDate, setHintedDate] = React.useState<DateRangeType>();\n const secondViewDate = addMonths(viewDate, 1);\n\n const {\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n handleFirstCalendarKeyDown,\n handleSecondCalendarKeyDown,\n handleDayFocus,\n } = useCalendarKeyboardNavigation({\n focusedDay,\n setFocusedDay,\n value,\n viewDates: [viewDate, secondViewDate],\n setViewDate,\n });\n\n const getNewValue = React.useCallback(\n (date: Date): DateRangeType => {\n const isValueEmpty = !value || (value[0] === null && value[1] === null);\n const isRangeSelected = value && !!value[0] && !!value[1];\n if (isValueEmpty || isRangeSelected) {\n return [date, null];\n }\n\n const [start] = value;\n if (start && isSameDate(date, start)) {\n return [startOfDay(start), endOfDay(start)];\n } else if (start && date < start) {\n return [startOfDay(date), endOfDay(start)];\n } else if (start && date > start) {\n return [start, endOfDay(date)];\n }\n return value;\n },\n [value],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n updateValue(getNewValue(date));\n setHintedDate(undefined);\n },\n [updateValue, getNewValue],\n );\n\n const isDaySelected = React.useCallback((day: Date) => getIsDaySelected(day, value), [value]);\n\n const isDayActive = React.useCallback(\n (day: Date) =>\n Boolean(\n (value?.[0] && isSameDate(day, value[0])) || (value?.[1] && isSameDate(day, value[1])),\n ),\n [value],\n );\n\n const isDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (value?.[1] && isSameDate(day, value[1]))),\n [value],\n );\n\n const isHintedDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (hintedDate?.[1] && isSameDate(day, hintedDate[1]))),\n [hintedDate],\n );\n\n const isDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (value?.[0] && isSameDate(day, value[0]))),\n [value],\n );\n\n const isHintedDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (hintedDate?.[0] && isSameDate(day, hintedDate[0]))),\n [hintedDate],\n );\n\n const onDayEnter = React.useCallback(\n (date: Date) => setHintedDate(getNewValue(date)),\n [setHintedDate, getNewValue],\n );\n\n const onDayLeave = React.useCallback(() => setHintedDate(undefined), [setHintedDate]);\n\n const isDayHinted = React.useCallback(\n (day: Date) => getIsDaySelected(day, hintedDate),\n [hintedDate],\n );\n\n const onRightPartViewDateChange = React.useCallback(\n (newDate: Date) => setViewDate(subMonths(newDate, 1)),\n [setViewDate],\n );\n\n const isDayFocusableInFirstCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate,\n isDayActive,\n });\n\n const isDayFocusableInSecondCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate: secondViewDate,\n isDayActive,\n });\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDate(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n handleDayFocus(date);\n },\n [focusedDay, handleDayFocus, setFocusedDay],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={styles.host}\n getRootRef={getRootRef}\n >\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={viewDate}\n onChange={setViewDate}\n nextMonthHidden\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...leftPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={viewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleFirstCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInFirstCalendar}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={secondViewDate}\n onChange={onRightPartViewDateChange}\n prevMonthHidden\n onNextMonth={setNextMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n nextMonthIcon={nextMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...rightPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={secondViewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleSecondCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInSecondCalendar}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","isSameDate","useCalendar","useCustomEnsuredControl","isFirstDay","isLastDay","addMonths","endOfDay","isWithinInterval","MONDAY","startOfDay","subMonths","CalendarDays","CalendarHeader","RootComponent","useCalendarKeyboardNavigation","useIsDayFocusable","getIsDaySelected","day","value","CalendarRange","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","weekStartsOn","disablePickers","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","ariaLabel","prevMonthIcon","nextMonthIcon","listenDayChangesForUpdate","renderDayContent","dayTestId","leftPartHeaderTestsData","rightPartHeaderTestsData","getRootRef","props","_onChange","newRange","updateValue","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","hintedDate","setHintedDate","useState","secondViewDate","focusableDayOnFirstCalendar","focusableDayOnSecondCalendar","handleFirstCalendarKeyDown","handleSecondCalendarKeyDown","handleDayFocus","viewDates","getNewValue","useCallback","date","isValueEmpty","isRangeSelected","start","onDayChange","undefined","isDaySelected","isDayActive","Boolean","isDaySelectionEnd","dayOfWeek","isHintedDaySelectionEnd","isDaySelectionStart","isHintedDaySelectionStart","onDayEnter","onDayLeave","isDayHinted","onRightPartViewDateChange","newDate","isDayFocusableInFirstCalendar","isDayFocusableInSecondCalendar","onDayFocus","aria-label","baseClassName","div","className","nextMonthHidden","onPrevMonth","onKeyDown","isDayFocusable","prevMonthHidden","onNextMonth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { isSameDate } from '@vkontakte/vkjs';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { isFirstDay, isLastDay } from '../../lib/calendar';\nimport {\n addMonths,\n endOfDay,\n isWithinInterval,\n MONDAY,\n startOfDay,\n subMonths,\n} from '../../lib/date';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDays,\n type CalendarDaysProps,\n type CalendarDaysTestsProps,\n} from '../CalendarDays/CalendarDays';\nimport {\n CalendarHeader,\n type CalendarHeaderProps,\n type CalendarHeaderTestsProps,\n} from '../CalendarHeader/CalendarHeader';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { DateRangeType } from './types';\nimport { useCalendarKeyboardNavigation, useIsDayFocusable } from './utils';\nimport styles from './CalendarRange.module.css';\n\nexport type { DateRangeType };\n\nexport type CalendarRangeTestsProps = CalendarDaysTestsProps & {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в левой части.\n */\n leftPartHeaderTestsData?: CalendarHeaderTestsProps | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в правой части.\n */\n rightPartHeaderTestsData?: CalendarHeaderTestsProps | undefined;\n};\n\nexport interface CalendarRangeProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n >,\n Pick<CalendarDaysProps, 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarRangeTestsProps {\n /**\n * Текущий выбранный промежуток.\n */\n value?: DateRangeType | null | undefined;\n /**\n * Начальный промежуток при монтировании.\n */\n defaultValue?: DateRangeType | null | undefined;\n /**\n * Запрещает выбор даты в прошлом.\n * Применяется, если не заданы `shouldDisableDate` и `disableFuture`.\n */\n disablePast?: boolean | undefined;\n /**\n * Запрещает выбор даты в будущем.\n * Применяется, если не задано `shouldDisableDate`.\n */\n disableFuture?: boolean | undefined;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean | undefined;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Since 7.4.0. Будет удалено в **VKUI v9**.\n *\n * Использовалось для задания aria-label для контейнера дней в календаре.\n * Теперь этот контейнер является таблицей (с помощью role=\"grid\") и\n * в aria-label рендерится текущий открытый в календаре месяц и год.\n */\n changeDayLabel?: string | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n /**\n * День недели, с которого начинается неделя.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined;\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: ((value: DateRangeType) => void) | undefined;\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: ((value: Date) => boolean) | undefined;\n /**\n * @deprecated Since 7.3.0. Будет удалено в **VKUI v9**.\n */\n onClose?: (() => void) | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n}\n\nconst getIsDaySelected = (day: Date, value?: DateRangeType | null) => {\n if (!value?.[0] || !value[1]) {\n return false;\n }\n\n return isWithinInterval(day, [startOfDay(value[0]), endOfDay(value[1])]);\n};\n\n/**\n * @see https://vkui.io/components/calendar-range\n */\nexport const CalendarRange = ({\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n weekStartsOn = MONDAY,\n disablePickers,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n 'aria-label': ariaLabel = 'Календарь',\n prevMonthIcon,\n nextMonthIcon,\n listenDayChangesForUpdate,\n renderDayContent,\n dayTestId,\n leftPartHeaderTestsData,\n rightPartHeaderTestsData,\n getRootRef,\n ...props\n}: CalendarRangeProps): React.ReactNode => {\n const _onChange = (newRange: DateRangeType | null) => {\n if (newRange && onChange) {\n onChange(newRange);\n }\n };\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null>({\n value: valueProp,\n defaultValue: defaultValue as DateRangeType | null,\n onChange: _onChange,\n });\n\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n } = useCalendar({ value, disableFuture, disablePast, shouldDisableDate });\n\n const [hintedDate, setHintedDate] = React.useState<DateRangeType>();\n const secondViewDate = addMonths(viewDate, 1);\n\n const {\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n handleFirstCalendarKeyDown,\n handleSecondCalendarKeyDown,\n handleDayFocus,\n } = useCalendarKeyboardNavigation({\n focusedDay,\n setFocusedDay,\n value,\n viewDates: [viewDate, secondViewDate],\n setViewDate,\n });\n\n const getNewValue = React.useCallback(\n (date: Date): DateRangeType => {\n const isValueEmpty = !value || (value[0] === null && value[1] === null);\n const isRangeSelected = value && !!value[0] && !!value[1];\n if (isValueEmpty || isRangeSelected) {\n return [date, null];\n }\n\n const [start] = value;\n if (start && isSameDate(date, start)) {\n return [startOfDay(start), endOfDay(start)];\n } else if (start && date < start) {\n return [startOfDay(date), endOfDay(start)];\n } else if (start && date > start) {\n return [start, endOfDay(date)];\n }\n return value;\n },\n [value],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n updateValue(getNewValue(date));\n setHintedDate(undefined);\n },\n [updateValue, getNewValue],\n );\n\n const isDaySelected = React.useCallback((day: Date) => getIsDaySelected(day, value), [value]);\n\n const isDayActive = React.useCallback(\n (day: Date) =>\n Boolean(\n (value?.[0] && isSameDate(day, value[0])) || (value?.[1] && isSameDate(day, value[1])),\n ),\n [value],\n );\n\n const isDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (value?.[1] && isSameDate(day, value[1]))),\n [value],\n );\n\n const isHintedDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (hintedDate?.[1] && isSameDate(day, hintedDate[1]))),\n [hintedDate],\n );\n\n const isDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (value?.[0] && isSameDate(day, value[0]))),\n [value],\n );\n\n const isHintedDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (hintedDate?.[0] && isSameDate(day, hintedDate[0]))),\n [hintedDate],\n );\n\n const onDayEnter = React.useCallback(\n (date: Date) => setHintedDate(getNewValue(date)),\n [setHintedDate, getNewValue],\n );\n\n const onDayLeave = React.useCallback(() => setHintedDate(undefined), [setHintedDate]);\n\n const isDayHinted = React.useCallback(\n (day: Date) => getIsDaySelected(day, hintedDate),\n [hintedDate],\n );\n\n const onRightPartViewDateChange = React.useCallback(\n (newDate: Date) => setViewDate(subMonths(newDate, 1)),\n [setViewDate],\n );\n\n const isDayFocusableInFirstCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate,\n isDayActive,\n });\n\n const isDayFocusableInSecondCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate: secondViewDate,\n isDayActive,\n });\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDate(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n handleDayFocus(date);\n },\n [focusedDay, handleDayFocus, setFocusedDay],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={styles.host}\n getRootRef={getRootRef}\n >\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={viewDate}\n onChange={setViewDate}\n nextMonthHidden\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...leftPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={viewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleFirstCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInFirstCalendar}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={secondViewDate}\n onChange={onRightPartViewDateChange}\n prevMonthHidden\n onNextMonth={setNextMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n nextMonthIcon={nextMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...rightPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={secondViewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleSecondCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInSecondCalendar}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","isSameDate","useCalendar","useCustomEnsuredControl","isFirstDay","isLastDay","addMonths","endOfDay","isWithinInterval","MONDAY","startOfDay","subMonths","CalendarDays","CalendarHeader","RootComponent","useCalendarKeyboardNavigation","useIsDayFocusable","getIsDaySelected","day","value","CalendarRange","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","weekStartsOn","disablePickers","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","ariaLabel","prevMonthIcon","nextMonthIcon","listenDayChangesForUpdate","renderDayContent","dayTestId","leftPartHeaderTestsData","rightPartHeaderTestsData","getRootRef","props","_onChange","newRange","updateValue","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","hintedDate","setHintedDate","useState","secondViewDate","focusableDayOnFirstCalendar","focusableDayOnSecondCalendar","handleFirstCalendarKeyDown","handleSecondCalendarKeyDown","handleDayFocus","viewDates","getNewValue","useCallback","date","isValueEmpty","isRangeSelected","start","onDayChange","undefined","isDaySelected","isDayActive","Boolean","isDaySelectionEnd","dayOfWeek","isHintedDaySelectionEnd","isDaySelectionStart","isHintedDaySelectionStart","onDayEnter","onDayLeave","isDayHinted","onRightPartViewDateChange","newDate","isDayFocusableInFirstCalendar","isDayFocusableInSecondCalendar","onDayFocus","aria-label","baseClassName","div","className","nextMonthHidden","onPrevMonth","onKeyDown","isDayFocusable","prevMonthHidden","onNextMonth"],"mappings":"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"}
|
|
@@ -66,5 +66,5 @@ export interface CalendarTimeProps extends CalendarTimeTestsProps, CalendarDoneB
|
|
|
66
66
|
*/
|
|
67
67
|
isDayDisabled?: ((day: Date, withTime?: boolean) => boolean) | undefined;
|
|
68
68
|
}
|
|
69
|
-
export declare const CalendarTime: ({ value, onChange, onDoneButtonClick, changeHoursLabel, changeMinutesLabel, setHours: setHoursFn, setMinutes: setMinutesFn,
|
|
69
|
+
export declare const CalendarTime: ({ value, onChange, onDoneButtonClick, changeHoursLabel, changeMinutesLabel, setHours: setHoursFn, setMinutes: setMinutesFn, doneButtonText, doneButtonDisabled, doneButtonShow, minutesTestId, hoursTestId, doneButtonTestId, DoneButton, isDayDisabled, }: CalendarTimeProps) => React.ReactNode;
|
|
70
70
|
//# sourceMappingURL=CalendarTime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarTime.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"CalendarTime.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarTime/CalendarTime.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA6B5D,MAAM,MAAM,sBAAsB,GAAG;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAC1D;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB,EAAE,uBAAuB;IACxF;;OAEG;IACH,KAAK,EAAE,IAAI,CAAC;IACZ;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjE;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC1E;AAED,eAAO,MAAM,YAAY,GAAI,4PAgB1B,iBAAiB,KAAG,KAAK,CAAC,SA4G5B,CAAC"}
|
|
@@ -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",
|