@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
|
@@ -17,7 +17,7 @@ import { ActionSheetDropdownSheet } from "./ActionSheetDropdownSheet.js";
|
|
|
17
17
|
import styles from "./ActionSheet.module.css";
|
|
18
18
|
/**
|
|
19
19
|
* @see https://vkui.io/components/action-sheet
|
|
20
|
-
*/ export const ActionSheet = ({ children, className, title, description, style, iosCloseItem, slotProps, popupOffsetDistance, placement, mode: modeProp, onClose: onCloseProp, onClosed, ...restProps })=>{
|
|
20
|
+
*/ export const ActionSheet = ({ children, className, title, description, style, iosCloseItem, slotProps, popupOffsetDistance, placement, mode: modeProp, onClose: onCloseProp, onClosed, usePortal, ...restProps })=>{
|
|
21
21
|
const platform = usePlatform();
|
|
22
22
|
const [closedReason, setClosedReason] = React.useState(undefined);
|
|
23
23
|
const onCloseStable = useStableCallback(onCloseProp || noop);
|
|
@@ -113,6 +113,7 @@ import styles from "./ActionSheet.module.css";
|
|
|
113
113
|
})
|
|
114
114
|
});
|
|
115
115
|
return /*#__PURE__*/ _jsx(AppRootPortal, {
|
|
116
|
+
usePortal: usePortal,
|
|
116
117
|
children: /*#__PURE__*/ _jsx(PopoutWrapper, {
|
|
117
118
|
noBackground: mode === 'menu',
|
|
118
119
|
closing: Boolean(closedReason),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport type { HasRootRef } from '../../types';\nimport type { ActionSheetItemProps } from '../ActionSheetItem/ActionSheetItem';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n ActionSheetContext,\n type ActionSheetContextType,\n type ItemClickHandler,\n} from './ActionSheetContext';\nimport { ActionSheetDefaultIosCloseItem } from './ActionSheetDefaultIosCloseItem';\nimport { ActionSheetDropdownMenu } from './ActionSheetDropdownMenu';\nimport { ActionSheetDropdownSheet } from './ActionSheetDropdownSheet';\nimport type { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nexport type ActionSheetOnCloseReason =\n | 'click-action-item'\n | 'click-cancel-item'\n | 'click-overlay'\n | 'keydown-item'\n | 'escape-key';\n\nexport type ActionSheetOnClosedReason = 'action-item' | 'cancel-item' | 'other';\n\n/**\n * @deprecated Since 8.0.0 аргумент, переданный в функцию `onClosed`, устарел и будет удален в **VKUI v10**.\n * Для получения причины закрытия всплывающего окна используйте свойство `onClose`.\n */\nexport interface ActionSheetOnCloseOptions {\n /**\n * Причина закрытия всплывающего элемента.\n *\n * @deprecated Since 8.0.0 аргумент, переданный в функцию `onClosed`, устарел и будет удален в **VKUI v10**.\n * Для получения причины закрытия всплывающего окна используйте свойство `onClose`.\n */\n closedBy: ActionSheetOnClosedReason;\n}\n\nexport interface ActionSheetProps\n extends Pick<\n SharedDropdownProps,\n | 'toggleRef'\n | 'popupOffsetDistance'\n | 'placement'\n | 'allowClickPropagation'\n | 'timeout'\n | 'restoreFocus'\n | 'autoFocus'\n >,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'autoFocus' | 'title'> {\n /**\n * Заголовок всплывающего окна.\n */\n title?: React.ReactNode | undefined;\n /**\n * Описание всплывающего окна, под заголовком.\n */\n description?: React.ReactNode | undefined;\n /**\n * Обработчик закрытия всплывающего окна.\n */\n onClose?: ((reason: ActionSheetOnCloseReason) => void) | undefined;\n /**\n * Обработчик закрытия всплывающего окна срабатывающий после завершения анимации закрытия.\n *\n * > Since 8.0.0 аргумент, переданный в данную функцию, устарел и будет удален в **VKUI v10**.\n * > Для получения причины закрытия всплывающего окна используйте свойство `onClose`.\n */\n onClosed: (options: ActionSheetOnCloseOptions) => void;\n /**\n * Только мобильный iOS.\n */\n iosCloseItem?: React.ReactNode | undefined;\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `iosCloseItem`: свойства для прокидывания в кнопку отмены на iOS.\n */\n slotProps?:\n | {\n iosCloseItem?:\n | (Omit<ActionSheetItemProps, 'mode' | 'isCancelItem'> & HasRootRef<HTMLElement>)\n | undefined;\n }\n | undefined;\n /**\n * Режим отображения компонента:\n *\n * - `sheet` – отображение снизу экрана в виде всплывающего окна, подходит для мобильных устройств\n * - `menu` – отображение в виде всплывающего элемента, относительно якорного элемента.\n */\n mode?: 'sheet' | 'menu' | undefined;\n /**\n * @deprecated Since 7.3.0. Будет удалeно в **VKUI v9**.\n */\n mount?: boolean | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n /**\n * @deprecated Since 7.3.0. Будет удалeно в **VKUI v9**.\n */\n disabled?: boolean | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n}\n\n/**\n * @see https://vkui.io/components/action-sheet\n */\nexport const ActionSheet = ({\n children,\n className,\n title,\n description,\n style,\n iosCloseItem,\n slotProps,\n popupOffsetDistance,\n placement,\n mode: modeProp,\n onClose: onCloseProp,\n onClosed,\n ...restProps\n}: ActionSheetProps): React.ReactNode => {\n const platform = usePlatform();\n const [closedReason, setClosedReason] = React.useState<undefined | ActionSheetOnClosedReason>(\n undefined,\n );\n const onCloseStable = useStableCallback(onCloseProp || noop);\n\n const onClose = React.useCallback(\n (onCloseReason: ActionSheetOnCloseReason, onClosedReason: ActionSheetOnClosedReason) => {\n onCloseStable(onCloseReason);\n setClosedReason(onClosedReason);\n },\n [onCloseStable],\n );\n\n const onOverlayClick = React.useCallback(() => onClose('click-overlay', 'other'), [onClose]);\n\n const actionCallbackRef = React.useRef(noop);\n\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n closedReason !== undefined ? 'exit' : 'enter',\n {\n onExited() {\n onClosed({ closedBy: closedReason || 'other' });\n actionCallbackRef.current();\n actionCallbackRef.current = noop;\n },\n },\n );\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const mode = modeProp ?? (isDesktop ? 'menu' : 'sheet');\n\n useScrollLock(mode === 'sheet');\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n ({ action, immediateAction, autoClose, isCancelItem }) =>\n (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n if (action) {\n actionCallbackRef.current = () => action(event);\n }\n onClose(\n isCancelItem ? 'click-cancel-item' : 'click-action-item',\n isCancelItem ? 'cancel-item' : 'action-item',\n );\n } else {\n action && action(event);\n }\n },\n [onClose],\n );\n const contextValue = React.useMemo<ActionSheetContextType>(\n () => ({ onItemClick, mode, onClose: (reason) => onClose(reason, 'other') }),\n [mode, onClose, onItemClick],\n );\n\n const DropdownComponent = mode === 'menu' ? ActionSheetDropdownMenu : ActionSheetDropdownSheet;\n\n const dropdownProps =\n mode === 'menu' ? Object.assign(restProps, { popupOffsetDistance, placement }) : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={Boolean(closedReason)}\n role=\"dialog\"\n aria-modal=\"true\"\n autoFocus={animationState === 'entered'}\n {...dropdownProps}\n {...animationHandlers}\n className={mode === 'menu' ? className : undefined}\n style={mode === 'menu' ? style : undefined}\n >\n <div className={styles.contentWrapper}>\n {(title || description) && (\n <div className={styles.header}>\n {title && (\n <Footnote weight=\"2\" className={styles.title}>\n {title}\n </Footnote>\n )}\n {description && <Footnote className={styles.description}>{description}</Footnote>}\n </div>\n )}\n {children}\n </div>\n {platform === 'ios' && mode === 'sheet' && (\n <div className={styles.closeItemWrapperIos}>\n {iosCloseItem ?? <ActionSheetDefaultIosCloseItem {...slotProps?.iosCloseItem} />}\n </div>\n )}\n </DropdownComponent>\n </ActionSheetContext.Provider>\n );\n\n return (\n <AppRootPortal>\n <PopoutWrapper\n noBackground={mode === 'menu'}\n closing={Boolean(closedReason)}\n alignY=\"bottom\"\n className={className}\n style={style}\n onClick={onOverlayClick}\n >\n {actionSheet}\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n"],"names":["React","noop","useAdaptivityWithJSMediaQueries","usePlatform","useStableCallback","useCSSKeyframesAnimationController","AppRootPortal","useScrollLock","PopoutWrapper","Footnote","ActionSheetContext","ActionSheetDefaultIosCloseItem","ActionSheetDropdownMenu","ActionSheetDropdownSheet","styles","ActionSheet","children","className","title","description","style","iosCloseItem","slotProps","popupOffsetDistance","placement","mode","modeProp","onClose","onCloseProp","onClosed","restProps","platform","closedReason","setClosedReason","useState","undefined","onCloseStable","useCallback","onCloseReason","onClosedReason","onOverlayClick","actionCallbackRef","useRef","animationState","animationHandlers","onExited","closedBy","current","isDesktop","onItemClick","action","immediateAction","autoClose","isCancelItem","event","persist","contextValue","useMemo","reason","DropdownComponent","dropdownProps","Object","assign","actionSheet","Provider","value","closing","Boolean","role","aria-modal","autoFocus","div","contentWrapper","header","weight","closeItemWrapperIos","noBackground","alignY","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport type { HasRootRef } from '../../types';\nimport type { ActionSheetItemProps } from '../ActionSheetItem/ActionSheetItem';\nimport type { AppRootPortalProps } from '../AppRoot/AppRootPortal';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n ActionSheetContext,\n type ActionSheetContextType,\n type ItemClickHandler,\n} from './ActionSheetContext';\nimport { ActionSheetDefaultIosCloseItem } from './ActionSheetDefaultIosCloseItem';\nimport { ActionSheetDropdownMenu } from './ActionSheetDropdownMenu';\nimport { ActionSheetDropdownSheet } from './ActionSheetDropdownSheet';\nimport type { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nexport type ActionSheetOnCloseReason =\n | 'click-action-item'\n | 'click-cancel-item'\n | 'click-overlay'\n | 'keydown-item'\n | 'escape-key';\n\nexport type ActionSheetOnClosedReason = 'action-item' | 'cancel-item' | 'other';\n\n/**\n * @deprecated Since 8.0.0 аргумент, переданный в функцию `onClosed`, устарел и будет удален в **VKUI v10**.\n * Для получения причины закрытия всплывающего окна используйте свойство `onClose`.\n */\nexport interface ActionSheetOnCloseOptions {\n /**\n * Причина закрытия всплывающего элемента.\n *\n * @deprecated Since 8.0.0 аргумент, переданный в функцию `onClosed`, устарел и будет удален в **VKUI v10**.\n * Для получения причины закрытия всплывающего окна используйте свойство `onClose`.\n */\n closedBy: ActionSheetOnClosedReason;\n}\n\nexport interface ActionSheetProps\n extends Pick<\n SharedDropdownProps,\n | 'toggleRef'\n | 'popupOffsetDistance'\n | 'placement'\n | 'allowClickPropagation'\n | 'timeout'\n | 'restoreFocus'\n | 'autoFocus'\n >,\n Pick<AppRootPortalProps, 'usePortal'>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'autoFocus' | 'title'> {\n /**\n * Заголовок всплывающего окна.\n */\n title?: React.ReactNode | undefined;\n /**\n * Описание всплывающего окна, под заголовком.\n */\n description?: React.ReactNode | undefined;\n /**\n * Обработчик закрытия всплывающего окна.\n */\n onClose?: ((reason: ActionSheetOnCloseReason) => void) | undefined;\n /**\n * Обработчик закрытия всплывающего окна срабатывающий после завершения анимации закрытия.\n *\n * > Since 8.0.0 аргумент, переданный в данную функцию, устарел и будет удален в **VKUI v10**.\n * > Для получения причины закрытия всплывающего окна используйте свойство `onClose`.\n */\n onClosed: (options: ActionSheetOnCloseOptions) => void;\n /**\n * Только мобильный iOS.\n */\n iosCloseItem?: React.ReactNode | undefined;\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `iosCloseItem`: свойства для прокидывания в кнопку отмены на iOS.\n */\n slotProps?:\n | {\n iosCloseItem?:\n | (Omit<ActionSheetItemProps, 'mode' | 'isCancelItem'> & HasRootRef<HTMLElement>)\n | undefined;\n }\n | undefined;\n /**\n * Режим отображения компонента:\n *\n * - `sheet` – отображение снизу экрана в виде всплывающего окна, подходит для мобильных устройств\n * - `menu` – отображение в виде всплывающего элемента, относительно якорного элемента.\n */\n mode?: 'sheet' | 'menu' | undefined;\n /**\n * @deprecated Since 7.3.0. Будет удалено в **VKUI v9**.\n */\n mount?: boolean | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n /**\n * @deprecated Since 7.3.0. Будет удалено в **VKUI v9**.\n */\n disabled?: boolean | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n}\n\n/**\n * @see https://vkui.io/components/action-sheet\n */\nexport const ActionSheet = ({\n children,\n className,\n title,\n description,\n style,\n iosCloseItem,\n slotProps,\n popupOffsetDistance,\n placement,\n mode: modeProp,\n onClose: onCloseProp,\n onClosed,\n usePortal,\n ...restProps\n}: ActionSheetProps): React.ReactNode => {\n const platform = usePlatform();\n const [closedReason, setClosedReason] = React.useState<undefined | ActionSheetOnClosedReason>(\n undefined,\n );\n const onCloseStable = useStableCallback(onCloseProp || noop);\n\n const onClose = React.useCallback(\n (onCloseReason: ActionSheetOnCloseReason, onClosedReason: ActionSheetOnClosedReason) => {\n onCloseStable(onCloseReason);\n setClosedReason(onClosedReason);\n },\n [onCloseStable],\n );\n\n const onOverlayClick = React.useCallback(() => onClose('click-overlay', 'other'), [onClose]);\n\n const actionCallbackRef = React.useRef(noop);\n\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n closedReason !== undefined ? 'exit' : 'enter',\n {\n onExited() {\n onClosed({ closedBy: closedReason || 'other' });\n actionCallbackRef.current();\n actionCallbackRef.current = noop;\n },\n },\n );\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const mode = modeProp ?? (isDesktop ? 'menu' : 'sheet');\n\n useScrollLock(mode === 'sheet');\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n ({ action, immediateAction, autoClose, isCancelItem }) =>\n (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n if (action) {\n actionCallbackRef.current = () => action(event);\n }\n onClose(\n isCancelItem ? 'click-cancel-item' : 'click-action-item',\n isCancelItem ? 'cancel-item' : 'action-item',\n );\n } else {\n action && action(event);\n }\n },\n [onClose],\n );\n const contextValue = React.useMemo<ActionSheetContextType>(\n () => ({ onItemClick, mode, onClose: (reason) => onClose(reason, 'other') }),\n [mode, onClose, onItemClick],\n );\n\n const DropdownComponent = mode === 'menu' ? ActionSheetDropdownMenu : ActionSheetDropdownSheet;\n\n const dropdownProps =\n mode === 'menu' ? Object.assign(restProps, { popupOffsetDistance, placement }) : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={Boolean(closedReason)}\n role=\"dialog\"\n aria-modal=\"true\"\n autoFocus={animationState === 'entered'}\n {...dropdownProps}\n {...animationHandlers}\n className={mode === 'menu' ? className : undefined}\n style={mode === 'menu' ? style : undefined}\n >\n <div className={styles.contentWrapper}>\n {(title || description) && (\n <div className={styles.header}>\n {title && (\n <Footnote weight=\"2\" className={styles.title}>\n {title}\n </Footnote>\n )}\n {description && <Footnote className={styles.description}>{description}</Footnote>}\n </div>\n )}\n {children}\n </div>\n {platform === 'ios' && mode === 'sheet' && (\n <div className={styles.closeItemWrapperIos}>\n {iosCloseItem ?? <ActionSheetDefaultIosCloseItem {...slotProps?.iosCloseItem} />}\n </div>\n )}\n </DropdownComponent>\n </ActionSheetContext.Provider>\n );\n\n return (\n <AppRootPortal usePortal={usePortal}>\n <PopoutWrapper\n noBackground={mode === 'menu'}\n closing={Boolean(closedReason)}\n alignY=\"bottom\"\n className={className}\n style={style}\n onClick={onOverlayClick}\n >\n {actionSheet}\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n"],"names":["React","noop","useAdaptivityWithJSMediaQueries","usePlatform","useStableCallback","useCSSKeyframesAnimationController","AppRootPortal","useScrollLock","PopoutWrapper","Footnote","ActionSheetContext","ActionSheetDefaultIosCloseItem","ActionSheetDropdownMenu","ActionSheetDropdownSheet","styles","ActionSheet","children","className","title","description","style","iosCloseItem","slotProps","popupOffsetDistance","placement","mode","modeProp","onClose","onCloseProp","onClosed","usePortal","restProps","platform","closedReason","setClosedReason","useState","undefined","onCloseStable","useCallback","onCloseReason","onClosedReason","onOverlayClick","actionCallbackRef","useRef","animationState","animationHandlers","onExited","closedBy","current","isDesktop","onItemClick","action","immediateAction","autoClose","isCancelItem","event","persist","contextValue","useMemo","reason","DropdownComponent","dropdownProps","Object","assign","actionSheet","Provider","value","closing","Boolean","role","aria-modal","autoFocus","div","contentWrapper","header","weight","closeItemWrapperIos","noBackground","alignY","onClick"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/AdaptivityProvider/AdaptivityContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type {\n DensityTypeValues,\n SizeTypeValues,\n ViewHeightType,\n ViewWidthType,\n} from '../../lib/adaptivity';\n\nexport interface DensityProps {\n /**\n * Тип размера экрана по горизонтали.\n * @deprecated Since 8.0.0. Будет удалено в **VKUI v10** – используйте `sizeX=\"compact\"` → `viewWidth={ViewWidth.MOBILE}` или `sizeX=\"compact\"` → `viewWidth={ViewWidth.SMALL_TABLET}` (
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/AdaptivityProvider/AdaptivityContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type {\n DensityTypeValues,\n SizeTypeValues,\n ViewHeightType,\n ViewWidthType,\n} from '../../lib/adaptivity';\n\nexport interface DensityProps {\n /**\n * Тип размера экрана по горизонтали.\n * @deprecated Since 8.0.0. Будет удалено в **VKUI v10** – используйте `sizeX=\"compact\"` → `viewWidth={ViewWidth.MOBILE}` или `sizeX=\"compact\"` → `viewWidth={ViewWidth.SMALL_TABLET}` (https://github.com/VKCOM/VKUI/issues/9015).\n */\n sizeX?: SizeTypeValues | undefined; // TODO [>=10]: #9015 удалить свойство\n /**\n * Тип размера экрана по вертикали.\n * @deprecated Since 8.0.0. Будет удалено в **VKUI v10** – используйте `density` (https://github.com/VKCOM/VKUI/issues/9015).\n */\n sizeY?: SizeTypeValues | undefined; // TODO [>=10]: #9015 удалить свойство\n /**\n * Тип размера экрана.\n */\n density?: DensityTypeValues | undefined;\n}\n\nexport interface AdaptivityProps extends DensityProps {\n /**\n * Тип ширины экрана для адаптивного отображения.\n */\n viewWidth?: ViewWidthType | undefined;\n /**\n * Тип высоты экрана для адаптивного отображения.\n */\n viewHeight?: ViewHeightType | undefined;\n /**\n * Флаг наличия указателя (например, мыши) на устройстве.\n */\n hasPointer?: boolean | undefined;\n /**\n * @deprecated Since 7.3.0. Будет удалено в **VKUI v9** (https://github.com/VKCOM/VKUI/pull/8490).\n */\n hasHover?: boolean | undefined; // TODO [>=9]: удалить неиспользуемое свойство\n}\n\nexport const AdaptivityContext: React.Context<AdaptivityProps> =\n React.createContext<AdaptivityProps>({});\n"],"names":["React","AdaptivityContext","createContext"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AA4C/B,OAAO,MAAMC,kCACXD,MAAME,aAAa,CAAkB,CAAC,GAAG"}
|
|
@@ -20,10 +20,10 @@ const warn = warnOnce('AdaptivityProvider');
|
|
|
20
20
|
};
|
|
21
21
|
if (process.env.NODE_ENV === 'development') {
|
|
22
22
|
if (sizeXProp !== undefined) {
|
|
23
|
-
warn('Свойство устарело начиная с 8.0.0 и будет удалено в **VKUI v10**. Для обратной совместимости, используйте `viewWidth={ViewWidth.MOBILE}` вместо `sizeX="compact"` и `viewWidth={ViewWidth.SMALL_TABLET}` вместо `sizeX="
|
|
23
|
+
warn('Свойство устарело начиная с 8.0.0 и будет удалено в **VKUI v10**. Для обратной совместимости, используйте `viewWidth={ViewWidth.MOBILE}` вместо `sizeX="compact"` и `viewWidth={ViewWidth.SMALL_TABLET}` вместо `sizeX="regular"` (см. https://github.com/VKCOM/VKUI/issues/9015).');
|
|
24
24
|
}
|
|
25
25
|
if (sizeYProp !== undefined) {
|
|
26
|
-
warn('Свойство устарело начиная с 8.0.0 и будет удалено в **VKUI v10**. Используйте `density` (см.
|
|
26
|
+
warn('Свойство устарело начиная с 8.0.0 и будет удалено в **VKUI v10**. Используйте `density` (см. https://github.com/VKCOM/VKUI/issues/9015).');
|
|
27
27
|
}
|
|
28
28
|
if (hasHover !== undefined) {
|
|
29
29
|
warn('Свойство устарело начиная с 7.3.0 и будет удалено в **VKUI v9**. Используйте `hasPointer` (см. https://github.com/VKCOM/VKUI/pull/8490).');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/AdaptivityProvider/AdaptivityProvider.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { getSizeX, isCompactByViewHeight, isCompactByViewWidth } from '../../lib/adaptivity';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasChildren } from '../../types';\nimport { AdaptivityContext, type AdaptivityProps } from './AdaptivityContext';\n\nconst warn = warnOnce('AdaptivityProvider');\n\nexport interface AdaptivityProviderProps extends AdaptivityProps, HasChildren {}\n\n/**\n * @see https://vkui.io/components/adaptivity-provider\n */\nexport const AdaptivityProvider = ({\n viewWidth,\n viewHeight,\n sizeX: sizeXProp,\n sizeY: sizeYProp,\n density: densityProp,\n hasPointer,\n hasHover,\n children,\n}: AdaptivityProviderProps): React.ReactNode => {\n const adaptivity = React.useMemo(() => {\n const nextProps: AdaptivityProps = {\n viewWidth,\n viewHeight,\n sizeX: sizeXProp,\n sizeY: sizeYProp || densityProp,\n density: densityProp || sizeYProp,\n hasPointer,\n hasHover,\n };\n\n if (process.env.NODE_ENV === 'development') {\n if (sizeXProp !== undefined) {\n warn(\n 'Свойство устарело начиная с 8.0.0 и будет удалено в **VKUI v10**. Для обратной совместимости, используйте `viewWidth={ViewWidth.MOBILE}` вместо `sizeX=\"compact\"` и `viewWidth={ViewWidth.SMALL_TABLET}` вместо `sizeX=\"
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/AdaptivityProvider/AdaptivityProvider.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { getSizeX, isCompactByViewHeight, isCompactByViewWidth } from '../../lib/adaptivity';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasChildren } from '../../types';\nimport { AdaptivityContext, type AdaptivityProps } from './AdaptivityContext';\n\nconst warn = warnOnce('AdaptivityProvider');\n\nexport interface AdaptivityProviderProps extends AdaptivityProps, HasChildren {}\n\n/**\n * @see https://vkui.io/components/adaptivity-provider\n */\nexport const AdaptivityProvider = ({\n viewWidth,\n viewHeight,\n sizeX: sizeXProp,\n sizeY: sizeYProp,\n density: densityProp,\n hasPointer,\n hasHover,\n children,\n}: AdaptivityProviderProps): React.ReactNode => {\n const adaptivity = React.useMemo(() => {\n const nextProps: AdaptivityProps = {\n viewWidth,\n viewHeight,\n sizeX: sizeXProp,\n sizeY: sizeYProp || densityProp,\n density: densityProp || sizeYProp,\n hasPointer,\n hasHover,\n };\n\n if (process.env.NODE_ENV === 'development') {\n if (sizeXProp !== undefined) {\n warn(\n 'Свойство устарело начиная с 8.0.0 и будет удалено в **VKUI v10**. Для обратной совместимости, используйте `viewWidth={ViewWidth.MOBILE}` вместо `sizeX=\"compact\"` и `viewWidth={ViewWidth.SMALL_TABLET}` вместо `sizeX=\"regular\"` (см. https://github.com/VKCOM/VKUI/issues/9015).',\n );\n }\n if (sizeYProp !== undefined) {\n warn(\n 'Свойство устарело начиная с 8.0.0 и будет удалено в **VKUI v10**. Используйте `density` (см. https://github.com/VKCOM/VKUI/issues/9015).',\n );\n }\n if (hasHover !== undefined) {\n warn(\n 'Свойство устарело начиная с 7.3.0 и будет удалено в **VKUI v9**. Используйте `hasPointer` (см. https://github.com/VKCOM/VKUI/pull/8490).',\n );\n }\n }\n\n // TODO [>=10]: #9015 удалить этот блок\n if (sizeXProp === undefined && viewWidth !== undefined) {\n nextProps.sizeX = getSizeX(viewWidth);\n }\n\n // TODO [>=10]: #9015 удалить sizeY\n if (sizeYProp === undefined && densityProp === undefined) {\n if (isCompactByViewWidth(viewWidth, hasPointer) || isCompactByViewHeight(viewHeight)) {\n nextProps.sizeY = 'compact';\n nextProps.density = 'compact';\n } else if (viewWidth !== undefined || viewHeight !== undefined) {\n nextProps.sizeY = 'regular';\n nextProps.density = 'regular';\n }\n }\n\n return nextProps;\n }, [viewWidth, viewHeight, sizeXProp, sizeYProp, densityProp, hasPointer, hasHover]);\n\n return <AdaptivityContext.Provider value={adaptivity}>{children}</AdaptivityContext.Provider>;\n};\n"],"names":["React","getSizeX","isCompactByViewHeight","isCompactByViewWidth","warnOnce","AdaptivityContext","warn","AdaptivityProvider","viewWidth","viewHeight","sizeX","sizeXProp","sizeY","sizeYProp","density","densityProp","hasPointer","hasHover","children","adaptivity","useMemo","nextProps","process","env","NODE_ENV","undefined","Provider","value"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,QAAQ,EAAEC,qBAAqB,EAAEC,oBAAoB,QAAQ,gCAAuB;AAC7F,SAASC,QAAQ,QAAQ,wBAAqB;AAE9C,SAASC,iBAAiB,QAA8B,yBAAsB;AAE9E,MAAMC,OAAOF,SAAS;AAItB;;CAEC,GACD,OAAO,MAAMG,qBAAqB,CAAC,EACjCC,SAAS,EACTC,UAAU,EACVC,OAAOC,SAAS,EAChBC,OAAOC,SAAS,EAChBC,SAASC,WAAW,EACpBC,UAAU,EACVC,QAAQ,EACRC,QAAQ,EACgB;IACxB,MAAMC,aAAanB,MAAMoB,OAAO,CAAC;QAC/B,MAAMC,YAA6B;YACjCb;YACAC;YACAC,OAAOC;YACPC,OAAOC,aAAaE;YACpBD,SAASC,eAAeF;YACxBG;YACAC;QACF;QAEA,IAAIK,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;YAC1C,IAAIb,cAAcc,WAAW;gBAC3BnB,KACE;YAEJ;YACA,IAAIO,cAAcY,WAAW;gBAC3BnB,KACE;YAEJ;YACA,IAAIW,aAAaQ,WAAW;gBAC1BnB,KACE;YAEJ;QACF;QAEA,uCAAuC;QACvC,IAAIK,cAAcc,aAAajB,cAAciB,WAAW;YACtDJ,UAAUX,KAAK,GAAGT,SAASO;QAC7B;QAEA,mCAAmC;QACnC,IAAIK,cAAcY,aAAaV,gBAAgBU,WAAW;YACxD,IAAItB,qBAAqBK,WAAWQ,eAAed,sBAAsBO,aAAa;gBACpFY,UAAUT,KAAK,GAAG;gBAClBS,UAAUP,OAAO,GAAG;YACtB,OAAO,IAAIN,cAAciB,aAAahB,eAAegB,WAAW;gBAC9DJ,UAAUT,KAAK,GAAG;gBAClBS,UAAUP,OAAO,GAAG;YACtB;QACF;QAEA,OAAOO;IACT,GAAG;QAACb;QAAWC;QAAYE;QAAWE;QAAWE;QAAaC;QAAYC;KAAS;IAEnF,qBAAO,KAACZ,kBAAkBqB,QAAQ;QAACC,OAAOR;kBAAaD;;AACzD,EAAE"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { classNames } from "@vkontakte/vkjs";
|
|
5
|
-
import { useKeyboardInputTracker } from "../../hooks/useKeyboardInputTracker.js";
|
|
6
5
|
import { useSyncHTMLWithBaseVKUIClasses } from "../../hooks/useSyncHTMLWithBaseVKUIClasses.js";
|
|
7
6
|
import { useSyncHTMLWithTokens } from "../../hooks/useSyncHTMLWithTokens.js";
|
|
8
7
|
import { AppRootContext } from "./AppRootContext.js";
|
|
@@ -18,7 +17,6 @@ const layoutClassNames = {
|
|
|
18
17
|
* @see https://vkui.io/components/app-root
|
|
19
18
|
*/ export const AppRoot = ({ children, mode = 'full', scroll = 'global', portalRoot, disablePortal = false, disableParentTransformForPositionFixedElements, safeAreaInsets: safeAreaInsetsProp, layout, userSelectMode, disableSettingVKUIClassesInRuntime, className, ...props })=>{
|
|
20
19
|
const appRootRef = React.useRef(null);
|
|
21
|
-
const isKeyboardInputActiveRef = useKeyboardInputTracker();
|
|
22
20
|
const safeAreaInsets = useSafeAreaInsetsMemo(safeAreaInsetsProp);
|
|
23
21
|
const contextValue = React.useMemo(()=>({
|
|
24
22
|
appRoot: appRootRef,
|
|
@@ -28,14 +26,10 @@ const layoutClassNames = {
|
|
|
28
26
|
mode,
|
|
29
27
|
disablePortal,
|
|
30
28
|
layout,
|
|
31
|
-
get keyboardInput () {
|
|
32
|
-
return isKeyboardInputActiveRef.current;
|
|
33
|
-
},
|
|
34
29
|
userSelectMode
|
|
35
30
|
}), [
|
|
36
31
|
portalRoot,
|
|
37
32
|
disablePortal,
|
|
38
|
-
isKeyboardInputActiveRef,
|
|
39
33
|
layout,
|
|
40
34
|
mode,
|
|
41
35
|
safeAreaInsets,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/AppRoot/AppRoot.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/AppRoot/AppRoot.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useSyncHTMLWithBaseVKUIClasses } from '../../hooks/useSyncHTMLWithBaseVKUIClasses';\nimport { useSyncHTMLWithTokens } from '../../hooks/useSyncHTMLWithTokens';\nimport { AppRootContext } from './AppRootContext';\nimport { AppRootStyleContainer } from './AppRootStyleContainer/AppRootStyleContainer';\nimport { ElementScrollController, GlobalScrollController } from './ScrollContext';\nimport { useSafeAreaInsetsMemo } from './helpers';\nimport type {\n AppRootLayout,\n AppRootMode,\n AppRootScroll,\n AppRootUserSelectMode,\n SafeAreaInsets,\n} from './types';\nimport styles from './AppRoot.module.css';\n\nconst layoutClassNames = {\n card: styles.layoutCard,\n plain: styles.layoutPlain,\n};\n\nexport interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Режим встраивания.\n */\n mode?: AppRootMode | undefined;\n /**\n * - `global` (по умолчанию) — VKUI-приложение скроллится вместе со страницей.\n * - `contain` — VKUI-приложение живет в отдельной зоне и скроллится независимо внутри `AppRoot` (например, в модалке).\n *\n * Полезно при использовании `mode=\"embedded\"`.\n */\n scroll?: AppRootScroll | undefined;\n /**\n * См. Документацию [mdn web docs | env#values](https://developer.mozilla.org/en-US/docs/Web/CSS/env#values).\n */\n safeAreaInsets?: SafeAreaInsets | undefined;\n /**\n * Кастомный root-элемент портала.\n */\n portalRoot?: HTMLElement | React.RefObject<HTMLElement | null> | null | undefined;\n /**\n * Отключает рендер всплывающих компонентов в отдельном контейнере.\n */\n disablePortal?: boolean | undefined;\n /**\n * По умолчанию, mode=\"embedded\" переносит систему координат элементов с `position: fixed` на\n * свой контейнер через `transform: translate3d(0, 0, 0)`.\n *\n * Это поведение можно отключить с помощью этого параметра.\n */\n disableParentTransformForPositionFixedElements?: boolean | undefined;\n /**\n * Глобально задаёт тип оформления макета для компонентов\n * [Panel](https://vkui.io/components/panel) и [Group](https://vkui.io/components/group).\n */\n layout?: AppRootLayout | undefined;\n /**\n * Задаёт режим выбора текста (выделения текста) для всего приложения.\n * По умолчанию, если режим не задан, запрещает выбор текста в приложениях,\n * запущенных в webview (по значению свойства `isWebView` из [ConfigProvider](https://vkui.io/components/config-provider)).\n *\n * - `enabled-with-pointer` – разрешает выбор текста, если устройство ввода типа `pointer` (например, `мышь`), в остальных случаях запрещает;\n * - `disabled` – запрещает выбор текста;\n * - `enabled` – разрешает выбор текста.\n *\n * @since 6.2.0\n */\n userSelectMode?: AppRootUserSelectMode | undefined;\n /**\n * По умолчанию в режиме `mode=\"full\"` VKUI в рантайме выставляет:\n * - класс .vkui на html элемент\n * - класс .vkui__root на элемент-контейнер, в который монтируется VKUI\n * С помощью этой опции такое поведение можно отключить.\n *\n * Для корректной работы SSR рекоммендуется выставлять эти классы самостоятельно\n * и отключить это поведение.\n */\n disableSettingVKUIClassesInRuntime?: boolean | undefined;\n}\n\n/**\n * @see https://vkui.io/components/app-root\n */\nexport const AppRoot = ({\n children,\n mode = 'full',\n scroll = 'global',\n portalRoot,\n disablePortal = false,\n disableParentTransformForPositionFixedElements,\n safeAreaInsets: safeAreaInsetsProp,\n layout,\n userSelectMode,\n disableSettingVKUIClassesInRuntime,\n className,\n ...props\n}: AppRootProps): React.ReactNode => {\n const appRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const safeAreaInsets = useSafeAreaInsetsMemo(safeAreaInsetsProp);\n\n const contextValue = React.useMemo(\n () => ({\n appRoot: appRootRef,\n portalRoot,\n safeAreaInsets,\n embedded: mode === 'embedded',\n mode,\n disablePortal,\n layout,\n userSelectMode,\n }),\n [portalRoot, disablePortal, layout, mode, safeAreaInsets, userSelectMode],\n );\n\n /*\n * Вешаем класс токенов на html в режиме full.\n * Это необходимо, чтобы цвета html элемента и скроллбара соответствовали текущей цветовой схеме:\n * - фон html элемента виден, если пользователь оверскролит. Тогда возникает анимация bounce-эффекта и виден фон html элемента. Без токенов в черной теме будет выглядывать белый фон.\n * - цвет системного сколлбара зависит от color-sheme свойства, значение которого задётся токенами и должно быть выставлено именно на html элементе.\n * В режме SSR пользователи сами могу задать этот класс на html-элементе. главное, чтобы он соответствовал переданным platform и appearence свойствам.\n */\n useSyncHTMLWithTokens({ appRootRef, enable: mode === 'full' });\n /*\n * По умолчанию VKUI будет выставлять .vkui на html и .vkui__root на контейнере в режиме full.\n * В режиме embedded будет выставлять только .vkui__root и .vkui__root--embedded на контейнере.\n * В режиме partial мы классы не выставляем.\n */\n useSyncHTMLWithBaseVKUIClasses({\n appRootRef,\n mode,\n layout,\n enable: mode !== 'partial' && !disableSettingVKUIClassesInRuntime,\n });\n\n const ScrollController = React.useMemo(\n () => (scroll === 'contain' ? ElementScrollController : GlobalScrollController),\n [scroll],\n );\n\n return mode === 'partial' ? (\n <AppRootContext.Provider value={contextValue}>\n <ScrollController elRef={appRootRef}>{children}</ScrollController>\n </AppRootContext.Provider>\n ) : (\n <AppRootContext.Provider value={contextValue}>\n <AppRootStyleContainer\n getRootRef={appRootRef}\n className={classNames(\n className,\n styles.host,\n layout && layoutClassNames[layout],\n mode === 'embedded' && !disableParentTransformForPositionFixedElements\n ? styles.transformForPositionFixedElements\n : undefined,\n )}\n {...props}\n >\n <ScrollController elRef={appRootRef}>{children}</ScrollController>\n </AppRootStyleContainer>\n </AppRootContext.Provider>\n );\n};\n"],"names":["React","classNames","useSyncHTMLWithBaseVKUIClasses","useSyncHTMLWithTokens","AppRootContext","AppRootStyleContainer","ElementScrollController","GlobalScrollController","useSafeAreaInsetsMemo","styles","layoutClassNames","card","layoutCard","plain","layoutPlain","AppRoot","children","mode","scroll","portalRoot","disablePortal","disableParentTransformForPositionFixedElements","safeAreaInsets","safeAreaInsetsProp","layout","userSelectMode","disableSettingVKUIClassesInRuntime","className","props","appRootRef","useRef","contextValue","useMemo","appRoot","embedded","enable","ScrollController","Provider","value","elRef","getRootRef","host","transformForPositionFixedElements","undefined"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,8BAA8B,QAAQ,gDAA6C;AAC5F,SAASC,qBAAqB,QAAQ,uCAAoC;AAC1E,SAASC,cAAc,QAAQ,sBAAmB;AAClD,SAASC,qBAAqB,QAAQ,mDAAgD;AACtF,SAASC,uBAAuB,EAAEC,sBAAsB,QAAQ,qBAAkB;AAClF,SAASC,qBAAqB,QAAQ,eAAY;AAQlD,OAAOC,YAAY,uBAAuB;AAE1C,MAAMC,mBAAmB;IACvBC,MAAMF,OAAOG,UAAU;IACvBC,OAAOJ,OAAOK,WAAW;AAC3B;AA8DA;;CAEC,GACD,OAAO,MAAMC,UAAU,CAAC,EACtBC,QAAQ,EACRC,OAAO,MAAM,EACbC,SAAS,QAAQ,EACjBC,UAAU,EACVC,gBAAgB,KAAK,EACrBC,8CAA8C,EAC9CC,gBAAgBC,kBAAkB,EAClCC,MAAM,EACNC,cAAc,EACdC,kCAAkC,EAClCC,SAAS,EACT,GAAGC,OACU;IACb,MAAMC,aAAa7B,MAAM8B,MAAM,CAAwB;IAEvD,MAAMR,iBAAiBd,sBAAsBe;IAE7C,MAAMQ,eAAe/B,MAAMgC,OAAO,CAChC,IAAO,CAAA;YACLC,SAASJ;YACTV;YACAG;YACAY,UAAUjB,SAAS;YACnBA;YACAG;YACAI;YACAC;QACF,CAAA,GACA;QAACN;QAAYC;QAAeI;QAAQP;QAAMK;QAAgBG;KAAe;IAG3E;;;;;;GAMC,GACDtB,sBAAsB;QAAE0B;QAAYM,QAAQlB,SAAS;IAAO;IAC5D;;;;GAIC,GACDf,+BAA+B;QAC7B2B;QACAZ;QACAO;QACAW,QAAQlB,SAAS,aAAa,CAACS;IACjC;IAEA,MAAMU,mBAAmBpC,MAAMgC,OAAO,CACpC,IAAOd,WAAW,YAAYZ,0BAA0BC,wBACxD;QAACW;KAAO;IAGV,OAAOD,SAAS,0BACd,KAACb,eAAeiC,QAAQ;QAACC,OAAOP;kBAC9B,cAAA,KAACK;YAAiBG,OAAOV;sBAAab;;uBAGxC,KAACZ,eAAeiC,QAAQ;QAACC,OAAOP;kBAC9B,cAAA,KAAC1B;YACCmC,YAAYX;YACZF,WAAW1B,WACT0B,WACAlB,OAAOgC,IAAI,EACXjB,UAAUd,gBAAgB,CAACc,OAAO,EAClCP,SAAS,cAAc,CAACI,iDACpBZ,OAAOiC,iCAAiC,GACxCC;YAEL,GAAGf,KAAK;sBAET,cAAA,KAACQ;gBAAiBG,OAAOV;0BAAab;;;;AAI9C,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/AppRoot/AppRootContext.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport type { AppRootUserSelectMode, SafeAreaInsets } from './types';\n\nexport interface AppRootContextInterface {\n appRoot: React.RefObject<HTMLElement | null>;\n portalRoot?: HTMLElement | React.RefObject<HTMLElement | null> | null | undefined;\n safeAreaInsets?: SafeAreaInsets | undefined;\n embedded: boolean;\n mode: 'partial' | 'embedded' | 'full';\n
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/AppRoot/AppRootContext.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport type { AppRootUserSelectMode, SafeAreaInsets } from './types';\n\nexport interface AppRootContextInterface {\n appRoot: React.RefObject<HTMLElement | null>;\n portalRoot?: HTMLElement | React.RefObject<HTMLElement | null> | null | undefined;\n safeAreaInsets?: SafeAreaInsets | undefined;\n embedded: boolean;\n mode: 'partial' | 'embedded' | 'full';\n disablePortal: boolean;\n layout?: 'card' | 'plain' | undefined;\n userSelectMode?: AppRootUserSelectMode | undefined;\n}\n\n/**\n * Вынесен в константу, чтобы можно было в тестах создавать свой контекст и сливать перед этим значения по-умолчанию.\n *\n * > Note: не смог убрать из покрытия через 'istanbul ignore next'.\n */\nexport const DEFAULT_APP_ROOT_CONTEXT_VALUE: AppRootContextInterface = {\n appRoot: React.createRef(),\n mode: 'full',\n portalRoot: null,\n safeAreaInsets: undefined,\n embedded: false,\n disablePortal: false,\n};\n\nexport const AppRootContext: React.Context<AppRootContextInterface> =\n React.createContext<AppRootContextInterface>(DEFAULT_APP_ROOT_CONTEXT_VALUE);\n"],"names":["React","DEFAULT_APP_ROOT_CONTEXT_VALUE","appRoot","createRef","mode","portalRoot","safeAreaInsets","undefined","embedded","disablePortal","AppRootContext","createContext"],"mappings":"AAAA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAc/B;;;;CAIC,GACD,OAAO,MAAMC,iCAA0D;IACrEC,SAASF,MAAMG,SAAS;IACxBC,MAAM;IACNC,YAAY;IACZC,gBAAgBC;IAChBC,UAAU;IACVC,eAAe;AACjB,EAAE;AAEF,OAAO,MAAMC,iBACXV,MAAMW,aAAa,CAA0BV,gCAAgC"}
|
|
@@ -55,7 +55,8 @@ const warn = warnOnce('Calendar');
|
|
|
55
55
|
setViewDate(timeZonedValue);
|
|
56
56
|
}
|
|
57
57
|
}, [
|
|
58
|
-
timeZonedValue
|
|
58
|
+
timeZonedValue,
|
|
59
|
+
setViewDate
|
|
59
60
|
]);
|
|
60
61
|
if (process.env.NODE_ENV === 'development' && !disablePickers && size === 's') {
|
|
61
62
|
warn("Нельзя включить селекты выбора месяца/года, если размер календаря 's'", 'error');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isSameDate } from '@vkontakte/vkjs';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { clamp, isFirstDay, isLastDay, navigateDate, NAVIGATION_KEYS } from '../../lib/calendar';\nimport {\n convertDateFromTimeZone,\n convertDateToTimeZone,\n createDateInTimeZone,\n isSameMonth,\n startOfMonth,\n} from '../../lib/date';\nimport { isHTMLElement } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\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 {\n type CalendarDoneButtonProps,\n CalendarTime,\n type CalendarTimeProps,\n type CalendarTimeTestsProps,\n} from '../CalendarTime/CalendarTime';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Calendar.module.css';\n\nexport type CalendarTestsProps = CalendarDaysTestsProps &\n CalendarHeaderTestsProps &\n CalendarTimeTestsProps;\n\nexport interface CalendarProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'prevMonthProps'\n | 'nextMonthProps'\n >,\n Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarDoneButtonProps,\n CalendarTestsProps {\n /**\n * Текущая выбранная дата.\n */\n value?: Date | null | undefined;\n /**\n * Начальная дата при монтировании.\n */\n defaultValue?: Date | 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 enableTime?: boolean | undefined;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean | undefined;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Будет удалeно в **VKUI v9**.\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 showNeighboringMonth?: boolean | undefined;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: ((value: Date) => void) | undefined;\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: ((value: Date) => boolean) | undefined;\n /**\n * Дата отображаемого месяца.\n * При использовании обновление даты должно происходить вне компонента.\n */\n viewDate?: Date | undefined;\n /**\n * Обработчик изменения даты в шапке календаря.\n */\n onHeaderChange?: ((value: Date) => void) | undefined;\n /**\n * Минимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n minDateTime?: Date | undefined;\n /**\n * Максимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n maxDateTime?: Date | undefined;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string | undefined;\n}\n\nconst warn = warnOnce('Calendar');\n\n/**\n * @see https://vkui.io/components/calendar\n */\nexport const Calendar = ({\n getRootRef,\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onDoneButtonClick,\n enableTime = false,\n doneButtonText,\n doneButtonDisabled,\n doneButtonShow,\n DoneButton,\n weekStartsOn = 1,\n disablePickers,\n 'aria-label': ariaLabel = 'Календарь',\n changeHoursLabel = 'Изменить час',\n changeMinutesLabel = 'Изменить минуту',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n showNeighboringMonth,\n size = 'm',\n 'viewDate': externalViewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n prevMonthProps,\n nextMonthProps,\n dayProps,\n listenDayChangesForUpdate,\n renderDayContent,\n minDateTime,\n maxDateTime,\n timezone,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n monthDropdownTestId,\n yearDropdownTestId,\n dayTestId,\n ...props\n}: CalendarProps): React.ReactNode => {\n const _onChange = React.useCallback(\n (date: Date | null) => {\n const newDate = convertDateFromTimeZone(date, timezone);\n if (newDate && onChange) {\n onChange(newDate);\n }\n },\n [onChange, timezone],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<Date | null>({\n value: valueProp,\n defaultValue: defaultValue as Date | null,\n onChange: _onChange,\n });\n\n const timeZonedValue: Date | null | undefined = React.useMemo(\n () => convertDateToTimeZone(value, timezone),\n [timezone, value],\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({\n value: timeZonedValue,\n disableFuture,\n disablePast,\n shouldDisableDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n minDateTime,\n maxDateTime,\n });\n // соотвествует дню, на котором можно сфокусироваться с помощью Tab\n const [focusableDay, setFocusableDay] = React.useState<Date>();\n\n useIsomorphicLayoutEffect(() => {\n if (timeZonedValue) {\n setViewDate(timeZonedValue);\n }\n }, [timeZonedValue]);\n\n if (process.env.NODE_ENV === 'development' && !disablePickers && size === 's') {\n warn(\"Нельзя включить селекты выбора месяца/года, если размер календаря 's'\", 'error');\n }\n\n if (process.env.NODE_ENV === 'development' && enableTime && size === 's') {\n warn(\"Нельзя включить выбор времени, если размер календаря 's'\", 'error');\n }\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n const key = pressedKey(event);\n if (key && NAVIGATION_KEYS.includes(key)) {\n event.preventDefault();\n\n const newFocusedDay = navigateDate(focusedDay ?? timeZonedValue, key);\n\n if (newFocusedDay && !isSameMonth(newFocusedDay, viewDate)) {\n setViewDate(newFocusedDay);\n }\n setFocusedDay(newFocusedDay);\n setFocusableDay(newFocusedDay);\n\n return;\n }\n\n if (key === Keys.TAB) {\n setFocusedDay(undefined);\n setFocusableDay(focusedDay);\n\n return;\n }\n\n if ((key === Keys.ENTER || key === Keys.SPACE) && isHTMLElement(event.target)) {\n event.preventDefault();\n event.target.click?.();\n }\n },\n [focusedDay, setFocusedDay, setFocusableDay, setViewDate, timeZonedValue, viewDate],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n let actualDate = createDateInTimeZone(timeZonedValue ?? date, timezone, {\n year: date.getFullYear(),\n month: date.getMonth(),\n date: date.getDate(),\n });\n\n if (minDateTime || maxDateTime) {\n actualDate = clamp(actualDate, { min: minDateTime, max: maxDateTime });\n }\n updateValue(actualDate);\n },\n [timezone, timeZonedValue, updateValue, maxDateTime, minDateTime],\n );\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDate(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n if (!focusableDay || !isSameDate(date, focusableDay)) {\n setFocusableDay(date);\n }\n },\n [focusableDay, focusedDay, setFocusedDay],\n );\n\n // activeDay это день в календаре соответствующий значению в инпуте\n const isDayActive = React.useCallback(\n (day: Date) => Boolean(timeZonedValue && isSameDate(day, timeZonedValue)),\n [timeZonedValue],\n );\n\n const timeZoneSetHours = React.useCallback(\n (date: Date, hours: number) => createDateInTimeZone(date, timezone, { hours }),\n [timezone],\n );\n\n const timeZoneSetMinutes = React.useCallback(\n (date: Date, minutes: number) => createDateInTimeZone(date, timezone, { minutes }),\n [timezone],\n );\n\n const isFocusableDayInViewDateMonth = focusableDay && isSameMonth(focusableDay, viewDate);\n const isInputValueDateInViewDateMonth = timeZonedValue && isSameMonth(timeZonedValue, viewDate);\n /**\n * Функция позволяет проверить является ли день в календаре днём на который\n * можно попасть с помощью Tab.\n * Единственный день в таблице календаря у которого есть tabIndex=\"0\"\n * Чтобы на него можно было попасть из заголовка календаря.\n */\n const isDayFocusable = React.useCallback(\n (day: Date) => {\n // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex=\"0\",\n if (isFocusableDayInViewDateMonth) {\n return isSameDate(focusableDay, day);\n }\n\n // при открытии календаря focusableDay не определён,\n // поэтому tabIndex=\"0\" будет у дня, соответствующего дню в инпуте\n if (isInputValueDateInViewDateMonth) {\n return isDayActive(day);\n }\n\n // при переключении месяца любая навигация с помощью Tab начинается\n // с первого дня месяца.\n return isSameDate(startOfMonth(viewDate), day);\n },\n [\n focusableDay,\n viewDate,\n isDayActive,\n isFocusableDayInViewDateMonth,\n isInputValueDateInViewDateMonth,\n ],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={classNames(styles.host, size === 's' && styles.sizeS)}\n getRootRef={getRootRef}\n >\n <CalendarHeader\n viewDate={externalViewDate || viewDate}\n onChange={setViewDate}\n onNextMonth={setNextMonth}\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers || size === 's'}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n prevMonthProps={prevMonthProps}\n nextMonthProps={nextMonthProps}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n nextMonthButtonTestId={nextMonthButtonTestId}\n prevMonthButtonTestId={prevMonthButtonTestId}\n monthDropdownTestId={monthDropdownTestId}\n yearDropdownTestId={yearDropdownTestId}\n />\n <CalendarDays\n viewDate={externalViewDate || viewDate}\n value={timeZonedValue}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleKeyDown}\n onDayChange={onDayChange}\n isDayActive={isDayActive}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusable}\n isDaySelectionStart={isFirstDay}\n isDaySelectionEnd={isLastDay}\n isDayDisabled={isDayDisabled}\n showNeighboringMonth={showNeighboringMonth}\n size={size}\n dayProps={dayProps}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n {enableTime && timeZonedValue && size !== 's' && (\n <div className={styles.time}>\n <CalendarTime\n value={timeZonedValue}\n onChange={updateValue}\n setHours={timeZoneSetHours}\n setMinutes={timeZoneSetMinutes}\n onDoneButtonClick={onDoneButtonClick}\n doneButtonText={doneButtonText}\n doneButtonDisabled={doneButtonDisabled}\n doneButtonShow={doneButtonShow}\n DoneButton={DoneButton}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n isDayDisabled={minDateTime || maxDateTime ? isDayDisabled : undefined}\n minutesTestId={minutesTestId}\n hoursTestId={hoursTestId}\n doneButtonTestId={doneButtonTestId}\n />\n </div>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","isSameDate","useCalendar","useCustomEnsuredControl","Keys","pressedKey","clamp","isFirstDay","isLastDay","navigateDate","NAVIGATION_KEYS","convertDateFromTimeZone","convertDateToTimeZone","createDateInTimeZone","isSameMonth","startOfMonth","isHTMLElement","useIsomorphicLayoutEffect","warnOnce","CalendarDays","CalendarHeader","CalendarTime","RootComponent","styles","warn","Calendar","getRootRef","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","onDoneButtonClick","enableTime","doneButtonText","doneButtonDisabled","doneButtonShow","DoneButton","weekStartsOn","disablePickers","ariaLabel","changeHoursLabel","changeMinutesLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","showNeighboringMonth","size","externalViewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","prevMonthProps","nextMonthProps","dayProps","listenDayChangesForUpdate","renderDayContent","minDateTime","maxDateTime","timezone","minutesTestId","hoursTestId","doneButtonTestId","prevMonthButtonTestId","nextMonthButtonTestId","monthDropdownTestId","yearDropdownTestId","dayTestId","props","_onChange","useCallback","date","newDate","value","updateValue","timeZonedValue","useMemo","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","focusableDay","setFocusableDay","useState","process","env","NODE_ENV","handleKeyDown","event","key","includes","preventDefault","newFocusedDay","TAB","undefined","ENTER","SPACE","target","click","onDayChange","actualDate","year","getFullYear","month","getMonth","getDate","min","max","onDayFocus","isDayActive","day","Boolean","timeZoneSetHours","hours","timeZoneSetMinutes","minutes","isFocusableDayInViewDateMonth","isInputValueDateInViewDateMonth","isDayFocusable","aria-label","baseClassName","host","sizeS","className","header","onKeyDown","isDaySelectionStart","isDaySelectionEnd","div","time","setHours","setMinutes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isSameDate } from '@vkontakte/vkjs';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { clamp, isFirstDay, isLastDay, navigateDate, NAVIGATION_KEYS } from '../../lib/calendar';\nimport {\n convertDateFromTimeZone,\n convertDateToTimeZone,\n createDateInTimeZone,\n isSameMonth,\n startOfMonth,\n} from '../../lib/date';\nimport { isHTMLElement } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\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 {\n type CalendarDoneButtonProps,\n CalendarTime,\n type CalendarTimeProps,\n type CalendarTimeTestsProps,\n} from '../CalendarTime/CalendarTime';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Calendar.module.css';\n\nexport type CalendarTestsProps = CalendarDaysTestsProps &\n CalendarHeaderTestsProps &\n CalendarTimeTestsProps;\n\nexport interface CalendarProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'prevMonthProps'\n | 'nextMonthProps'\n >,\n Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarDoneButtonProps,\n CalendarTestsProps {\n /**\n * Текущая выбранная дата.\n */\n value?: Date | null | undefined;\n /**\n * Начальная дата при монтировании.\n */\n defaultValue?: Date | 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 enableTime?: boolean | undefined;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean | undefined;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Будет удалено в **VKUI v9**.\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 showNeighboringMonth?: boolean | undefined;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm' | undefined;\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: ((value: Date) => void) | undefined;\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: ((value: Date) => boolean) | undefined;\n /**\n * Дата отображаемого месяца.\n * При использовании обновление даты должно происходить вне компонента.\n */\n viewDate?: Date | undefined;\n /**\n * Обработчик изменения даты в шапке календаря.\n */\n onHeaderChange?: ((value: Date) => void) | undefined;\n /**\n * Минимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n minDateTime?: Date | undefined;\n /**\n * Максимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n maxDateTime?: Date | undefined;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string | undefined;\n}\n\nconst warn = warnOnce('Calendar');\n\n/**\n * @see https://vkui.io/components/calendar\n */\nexport const Calendar = ({\n getRootRef,\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onDoneButtonClick,\n enableTime = false,\n doneButtonText,\n doneButtonDisabled,\n doneButtonShow,\n DoneButton,\n weekStartsOn = 1,\n disablePickers,\n 'aria-label': ariaLabel = 'Календарь',\n changeHoursLabel = 'Изменить час',\n changeMinutesLabel = 'Изменить минуту',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n showNeighboringMonth,\n size = 'm',\n 'viewDate': externalViewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n prevMonthProps,\n nextMonthProps,\n dayProps,\n listenDayChangesForUpdate,\n renderDayContent,\n minDateTime,\n maxDateTime,\n timezone,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n monthDropdownTestId,\n yearDropdownTestId,\n dayTestId,\n ...props\n}: CalendarProps): React.ReactNode => {\n const _onChange = React.useCallback(\n (date: Date | null) => {\n const newDate = convertDateFromTimeZone(date, timezone);\n if (newDate && onChange) {\n onChange(newDate);\n }\n },\n [onChange, timezone],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<Date | null>({\n value: valueProp,\n defaultValue: defaultValue as Date | null,\n onChange: _onChange,\n });\n\n const timeZonedValue: Date | null | undefined = React.useMemo(\n () => convertDateToTimeZone(value, timezone),\n [timezone, value],\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({\n value: timeZonedValue,\n disableFuture,\n disablePast,\n shouldDisableDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n minDateTime,\n maxDateTime,\n });\n // соотвествует дню, на котором можно сфокусироваться с помощью Tab\n const [focusableDay, setFocusableDay] = React.useState<Date>();\n\n useIsomorphicLayoutEffect(() => {\n if (timeZonedValue) {\n setViewDate(timeZonedValue);\n }\n }, [timeZonedValue, setViewDate]);\n\n if (process.env.NODE_ENV === 'development' && !disablePickers && size === 's') {\n warn(\"Нельзя включить селекты выбора месяца/года, если размер календаря 's'\", 'error');\n }\n\n if (process.env.NODE_ENV === 'development' && enableTime && size === 's') {\n warn(\"Нельзя включить выбор времени, если размер календаря 's'\", 'error');\n }\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n const key = pressedKey(event);\n if (key && NAVIGATION_KEYS.includes(key)) {\n event.preventDefault();\n\n const newFocusedDay = navigateDate(focusedDay ?? timeZonedValue, key);\n\n if (newFocusedDay && !isSameMonth(newFocusedDay, viewDate)) {\n setViewDate(newFocusedDay);\n }\n setFocusedDay(newFocusedDay);\n setFocusableDay(newFocusedDay);\n\n return;\n }\n\n if (key === Keys.TAB) {\n setFocusedDay(undefined);\n setFocusableDay(focusedDay);\n\n return;\n }\n\n if ((key === Keys.ENTER || key === Keys.SPACE) && isHTMLElement(event.target)) {\n event.preventDefault();\n event.target.click?.();\n }\n },\n [focusedDay, setFocusedDay, setFocusableDay, setViewDate, timeZonedValue, viewDate],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n let actualDate = createDateInTimeZone(timeZonedValue ?? date, timezone, {\n year: date.getFullYear(),\n month: date.getMonth(),\n date: date.getDate(),\n });\n\n if (minDateTime || maxDateTime) {\n actualDate = clamp(actualDate, { min: minDateTime, max: maxDateTime });\n }\n updateValue(actualDate);\n },\n [timezone, timeZonedValue, updateValue, maxDateTime, minDateTime],\n );\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDate(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n if (!focusableDay || !isSameDate(date, focusableDay)) {\n setFocusableDay(date);\n }\n },\n [focusableDay, focusedDay, setFocusedDay],\n );\n\n // activeDay это день в календаре соответствующий значению в инпуте\n const isDayActive = React.useCallback(\n (day: Date) => Boolean(timeZonedValue && isSameDate(day, timeZonedValue)),\n [timeZonedValue],\n );\n\n const timeZoneSetHours = React.useCallback(\n (date: Date, hours: number) => createDateInTimeZone(date, timezone, { hours }),\n [timezone],\n );\n\n const timeZoneSetMinutes = React.useCallback(\n (date: Date, minutes: number) => createDateInTimeZone(date, timezone, { minutes }),\n [timezone],\n );\n\n const isFocusableDayInViewDateMonth = focusableDay && isSameMonth(focusableDay, viewDate);\n const isInputValueDateInViewDateMonth = timeZonedValue && isSameMonth(timeZonedValue, viewDate);\n /**\n * Функция позволяет проверить является ли день в календаре днём на который\n * можно попасть с помощью Tab.\n * Единственный день в таблице календаря у которого есть tabIndex=\"0\"\n * Чтобы на него можно было попасть из заголовка календаря.\n */\n const isDayFocusable = React.useCallback(\n (day: Date) => {\n // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex=\"0\",\n if (isFocusableDayInViewDateMonth) {\n return isSameDate(focusableDay, day);\n }\n\n // при открытии календаря focusableDay не определён,\n // поэтому tabIndex=\"0\" будет у дня, соответствующего дню в инпуте\n if (isInputValueDateInViewDateMonth) {\n return isDayActive(day);\n }\n\n // при переключении месяца любая навигация с помощью Tab начинается\n // с первого дня месяца.\n return isSameDate(startOfMonth(viewDate), day);\n },\n [\n focusableDay,\n viewDate,\n isDayActive,\n isFocusableDayInViewDateMonth,\n isInputValueDateInViewDateMonth,\n ],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={classNames(styles.host, size === 's' && styles.sizeS)}\n getRootRef={getRootRef}\n >\n <CalendarHeader\n viewDate={externalViewDate || viewDate}\n onChange={setViewDate}\n onNextMonth={setNextMonth}\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers || size === 's'}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n prevMonthProps={prevMonthProps}\n nextMonthProps={nextMonthProps}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n nextMonthButtonTestId={nextMonthButtonTestId}\n prevMonthButtonTestId={prevMonthButtonTestId}\n monthDropdownTestId={monthDropdownTestId}\n yearDropdownTestId={yearDropdownTestId}\n />\n <CalendarDays\n viewDate={externalViewDate || viewDate}\n value={timeZonedValue}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleKeyDown}\n onDayChange={onDayChange}\n isDayActive={isDayActive}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusable}\n isDaySelectionStart={isFirstDay}\n isDaySelectionEnd={isLastDay}\n isDayDisabled={isDayDisabled}\n showNeighboringMonth={showNeighboringMonth}\n size={size}\n dayProps={dayProps}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n {enableTime && timeZonedValue && size !== 's' && (\n <div className={styles.time}>\n <CalendarTime\n value={timeZonedValue}\n onChange={updateValue}\n setHours={timeZoneSetHours}\n setMinutes={timeZoneSetMinutes}\n onDoneButtonClick={onDoneButtonClick}\n doneButtonText={doneButtonText}\n doneButtonDisabled={doneButtonDisabled}\n doneButtonShow={doneButtonShow}\n DoneButton={DoneButton}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n isDayDisabled={minDateTime || maxDateTime ? isDayDisabled : undefined}\n minutesTestId={minutesTestId}\n hoursTestId={hoursTestId}\n doneButtonTestId={doneButtonTestId}\n />\n </div>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","isSameDate","useCalendar","useCustomEnsuredControl","Keys","pressedKey","clamp","isFirstDay","isLastDay","navigateDate","NAVIGATION_KEYS","convertDateFromTimeZone","convertDateToTimeZone","createDateInTimeZone","isSameMonth","startOfMonth","isHTMLElement","useIsomorphicLayoutEffect","warnOnce","CalendarDays","CalendarHeader","CalendarTime","RootComponent","styles","warn","Calendar","getRootRef","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","onDoneButtonClick","enableTime","doneButtonText","doneButtonDisabled","doneButtonShow","DoneButton","weekStartsOn","disablePickers","ariaLabel","changeHoursLabel","changeMinutesLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","showNeighboringMonth","size","externalViewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","prevMonthProps","nextMonthProps","dayProps","listenDayChangesForUpdate","renderDayContent","minDateTime","maxDateTime","timezone","minutesTestId","hoursTestId","doneButtonTestId","prevMonthButtonTestId","nextMonthButtonTestId","monthDropdownTestId","yearDropdownTestId","dayTestId","props","_onChange","useCallback","date","newDate","value","updateValue","timeZonedValue","useMemo","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","focusableDay","setFocusableDay","useState","process","env","NODE_ENV","handleKeyDown","event","key","includes","preventDefault","newFocusedDay","TAB","undefined","ENTER","SPACE","target","click","onDayChange","actualDate","year","getFullYear","month","getMonth","getDate","min","max","onDayFocus","isDayActive","day","Boolean","timeZoneSetHours","hours","timeZoneSetMinutes","minutes","isFocusableDayInViewDateMonth","isInputValueDateInViewDateMonth","isDayFocusable","aria-label","baseClassName","host","sizeS","className","header","onKeyDown","isDaySelectionStart","isDaySelectionEnd","div","time","setHours","setMinutes"],"mappings":"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"}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { classNames } from "@vkontakte/vkjs";
|
|
5
|
+
import { useConfigDirection } from "../../hooks/useConfigDirection.js";
|
|
5
6
|
import { useFocusVisible } from "../../hooks/useFocusVisible.js";
|
|
6
7
|
import { useFocusVisibleClassName } from "../../hooks/useFocusVisibleClassName.js";
|
|
8
|
+
import { useLocale } from "../../hooks/useLocale.js";
|
|
7
9
|
import { cacheDateTimeFormat } from "../../lib/intlCache.js";
|
|
8
10
|
import { mergeCalls } from "../../lib/mergeCalls.js";
|
|
9
11
|
import { defineComponentDisplayNames } from "../../lib/react/defineComponentDisplayNames.js";
|
|
10
|
-
import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
|
|
11
12
|
import { Tappable } from "../Tappable/Tappable.js";
|
|
12
13
|
import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
|
|
13
14
|
import styles from "./CalendarDay.module.css";
|
|
@@ -19,7 +20,8 @@ const labelDateTimeFormatOptions = {
|
|
|
19
20
|
const labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();
|
|
20
21
|
// eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames
|
|
21
22
|
export const CalendarDay = /*#__PURE__*/ React.memo(({ day, today, selected, onChange, hidden, disabled, active, selectionStart, selectionEnd, focused, onEnter, onLeave, onFocus, onBlur, hinted, hintedSelectionStart, hintedSelectionEnd, sameMonth, size, children, renderDayContent, testId, role, 'aria-colindex': colIndex, ...restProps })=>{
|
|
22
|
-
const
|
|
23
|
+
const locale = useLocale();
|
|
24
|
+
const direction = useConfigDirection();
|
|
23
25
|
const ref = React.useRef(null);
|
|
24
26
|
const onClick = React.useCallback(()=>onChange(day), [
|
|
25
27
|
day,
|
|
@@ -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","styles","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","dayNumber","span","aria-hidden","getDate","aria-colindex","sizeS","baseClassName","host","rtl","hoverMode","hostHovered","activeMode","hostActivated","hasActive","getRootRef","onPointerEnter","onPointerLeave","data-testid","notSameMonth","hintedActive","inner","innerActive","process","env","NODE_ENV"],"mappings":"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"}
|
|
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","styles","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","dayNumber","span","aria-hidden","getDate","aria-colindex","sizeS","baseClassName","host","rtl","hoverMode","hostHovered","activeMode","hostActivated","hasActive","getRootRef","onPointerEnter","onPointerLeave","data-testid","notSameMonth","hintedActive","inner","innerActive","process","env","NODE_ENV"],"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";
|
|
@@ -18,7 +18,7 @@ const labelDateTimeFormatOptions = {
|
|
|
18
18
|
};
|
|
19
19
|
const labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();
|
|
20
20
|
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 })=>{
|
|
21
|
-
const
|
|
21
|
+
const locale = useLocale();
|
|
22
22
|
const now = useTodayDate(listenDayChangesForUpdate);
|
|
23
23
|
const weeks = React.useMemo(()=>getWeeks(viewDate, weekStartsOn), [
|
|
24
24
|
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","styles","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","host","aria-labelledby","div","aria-rowindex","className","row","rowSizeS","map","short","shortDayName","long","longDayName","aria-label","weekday","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","rowDay","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","styles","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","host","aria-labelledby","div","aria-rowindex","className","row","rowSizeS","map","short","shortDayName","long","longDayName","aria-label","weekday","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","rowDay","toISOString"],"mappings":"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"}
|