@vkontakte/vkui 7.3.8 → 7.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ActionSheet/ActionSheet.d.ts +1 -1
- package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/components/AppRoot/ScrollContext.js +2 -2
- package/dist/components/AppRoot/ScrollContext.js.map +1 -1
- package/dist/components/Banner/Banner.d.ts +2 -2
- package/dist/components/Banner/Banner.d.ts.map +1 -1
- package/dist/components/Banner/Banner.js.map +1 -1
- package/dist/components/Button/Button.d.ts +2 -2
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/components/Calendar/Calendar.js +9 -7
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts +9 -2
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +48 -35
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/CalendarRange/types.d.ts +2 -0
- package/dist/components/CalendarRange/types.d.ts.map +1 -0
- package/dist/components/CalendarRange/types.js +3 -0
- package/dist/components/CalendarRange/types.js.map +1 -0
- package/dist/components/CalendarRange/utils.d.ts +29 -0
- package/dist/components/CalendarRange/utils.d.ts.map +1 -0
- package/dist/components/CalendarRange/utils.js +123 -0
- package/dist/components/CalendarRange/utils.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +2 -2
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/ChipsInput/useChipsInput.d.ts.map +1 -1
- package/dist/components/ChipsInput/useChipsInput.js +21 -2
- package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
- package/dist/components/ChipsInputBase/types.d.ts +5 -1
- package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
- package/dist/components/ChipsInputBase/types.js.map +1 -1
- package/dist/components/Clickable/Clickable.d.ts +4 -0
- package/dist/components/Clickable/Clickable.d.ts.map +1 -1
- package/dist/components/Clickable/Clickable.js +9 -5
- package/dist/components/Clickable/Clickable.js.map +1 -1
- package/dist/components/Clickable/RealClickable.d.ts +1 -1
- package/dist/components/Clickable/RealClickable.d.ts.map +1 -1
- package/dist/components/Clickable/RealClickable.js +3 -2
- package/dist/components/Clickable/RealClickable.js.map +1 -1
- package/dist/components/ContentCard/ContentCard.d.ts +2 -2
- package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
- package/dist/components/ContentCard/ContentCard.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/DateInput/DateInput.d.ts +1 -1
- package/dist/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/components/DateInput/DateInput.js +48 -50
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.d.ts +22 -2
- package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.js +159 -66
- package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
- package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
- package/dist/components/FocusTrap/FocusTrap.js +6 -3
- package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/components/HorizontalCell/HorizontalCell.d.ts +2 -2
- package/dist/components/HorizontalCell/HorizontalCell.d.ts.map +1 -1
- package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.d.ts +2 -2
- package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.d.ts.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.js.map +1 -1
- package/dist/components/IconButton/IconButton.d.ts +2 -2
- package/dist/components/IconButton/IconButton.d.ts.map +1 -1
- package/dist/components/IconButton/IconButton.js.map +1 -1
- package/dist/components/InputLike/InputLike.d.ts +1 -1
- package/dist/components/InputLike/InputLike.d.ts.map +1 -1
- package/dist/components/InputLike/InputLike.js +7 -6
- package/dist/components/InputLike/InputLike.js.map +1 -1
- package/dist/components/Link/Link.d.ts +2 -2
- package/dist/components/Link/Link.d.ts.map +1 -1
- package/dist/components/Link/Link.js +2 -1
- package/dist/components/Link/Link.js.map +1 -1
- package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
- package/dist/components/MiniInfoCell/MiniInfoCell.js +1 -8
- package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/components/ModalOutsideButton/ModalOutsideButton.d.ts +2 -2
- package/dist/components/ModalOutsideButton/ModalOutsideButton.d.ts.map +1 -1
- package/dist/components/ModalOutsideButton/ModalOutsideButton.js.map +1 -1
- package/dist/components/NumberInputLike/NumberInputLike.d.ts +8 -0
- package/dist/components/NumberInputLike/NumberInputLike.d.ts.map +1 -0
- package/dist/components/NumberInputLike/NumberInputLike.js +45 -0
- package/dist/components/NumberInputLike/NumberInputLike.js.map +1 -0
- package/dist/components/Pagination/PaginationPage/PaginationPageButton.d.ts +2 -2
- package/dist/components/Pagination/PaginationPage/PaginationPageButton.d.ts.map +1 -1
- package/dist/components/Pagination/PaginationPage/PaginationPageButton.js.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.d.ts +3 -1
- package/dist/components/PanelHeader/PanelHeader.d.ts.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts +2 -2
- package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/Radio/Radio.d.ts +2 -2
- package/dist/components/Radio/Radio.d.ts.map +1 -1
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/Removable/Removable.d.ts +1 -4
- package/dist/components/Removable/Removable.d.ts.map +1 -1
- package/dist/components/Removable/Removable.js +39 -116
- package/dist/components/Removable/Removable.js.map +1 -1
- package/dist/components/Removable/RemovableIos.d.ts +10 -0
- package/dist/components/Removable/RemovableIos.d.ts.map +1 -0
- package/dist/components/Removable/RemovableIos.js +124 -0
- package/dist/components/Removable/RemovableIos.js.map +1 -0
- package/dist/components/RichCell/RichCell.d.ts +2 -2
- package/dist/components/RichCell/RichCell.d.ts.map +1 -1
- package/dist/components/RichCell/RichCell.js.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinner.js +4 -2
- package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +2 -2
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js +4 -3
- package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
- package/dist/components/SelectionControl/SelectionControl.d.ts +2 -2
- package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
- package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.d.ts +2 -2
- package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.d.ts +5 -1
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +7 -4
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Spinner/Spinner.d.ts +5 -1
- package/dist/components/Spinner/Spinner.d.ts.map +1 -1
- package/dist/components/Spinner/Spinner.js +6 -3
- package/dist/components/Spinner/Spinner.js.map +1 -1
- package/dist/components/SubnavigationButton/SubnavigationButton.d.ts +2 -2
- package/dist/components/SubnavigationButton/SubnavigationButton.d.ts.map +1 -1
- package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts +13 -9
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +14 -10
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tabs/TabsController.d.ts +7 -0
- package/dist/components/Tabs/TabsController.d.ts.map +1 -0
- package/dist/components/Tabs/TabsController.js +19 -0
- package/dist/components/Tabs/TabsController.js.map +1 -0
- package/dist/components/Tabs/TabsModeContext.d.ts +13 -0
- package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -0
- package/dist/components/Tabs/TabsModeContext.js +11 -0
- package/dist/components/Tabs/TabsModeContext.js.map +1 -0
- package/dist/components/TabsItem/TabsItem.d.ts +3 -3
- package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
- package/dist/components/TabsItem/TabsItem.js +21 -6
- package/dist/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +1 -0
- package/dist/components/Tappable/Tappable.d.ts.map +1 -1
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/ToolButton/ToolButton.d.ts +2 -2
- package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
- package/dist/components/ToolButton/ToolButton.js.map +1 -1
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cssm/components/AppRoot/ScrollContext.js +2 -2
- package/dist/cssm/components/AppRoot/ScrollContext.js.map +1 -1
- package/dist/cssm/components/Banner/Banner.js.map +1 -1
- package/dist/cssm/components/Button/Button.js.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.js +9 -7
- package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +44 -31
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/CalendarRange/types.js +3 -0
- package/dist/cssm/components/CalendarRange/types.js.map +1 -0
- package/dist/cssm/components/CalendarRange/utils.js +122 -0
- package/dist/cssm/components/CalendarRange/utils.js.map +1 -0
- package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/cssm/components/ChipsInput/useChipsInput.js +21 -2
- package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
- package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
- package/dist/cssm/components/Clickable/Clickable.js +4 -3
- package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
- package/dist/cssm/components/Clickable/RealClickable.js +1 -1
- package/dist/cssm/components/Clickable/RealClickable.js.map +1 -1
- package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.js +45 -46
- package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js +148 -58
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.js +4 -2
- package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +2 -3
- package/dist/cssm/components/IconButton/IconButton.js.map +1 -1
- package/dist/cssm/components/ImageBase/ImageBase.module.css +2 -3
- package/dist/cssm/components/InputLike/InputLike.js +3 -3
- package/dist/cssm/components/InputLike/InputLike.js.map +1 -1
- package/dist/cssm/components/Link/Link.js +1 -0
- package/dist/cssm/components/Link/Link.js.map +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js +1 -8
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
- package/dist/cssm/components/ModalOutsideButton/ModalOutsideButton.js.map +1 -1
- package/dist/cssm/components/NumberInputLike/NumberInputLike.js +33 -0
- package/dist/cssm/components/NumberInputLike/NumberInputLike.js.map +1 -0
- package/dist/cssm/components/Pagination/PaginationPage/PaginationPageButton.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/Radio/Radio.js.map +1 -1
- package/dist/cssm/components/Removable/Removable.js +39 -115
- package/dist/cssm/components/Removable/Removable.js.map +1 -1
- package/dist/cssm/components/Removable/Removable.module.css +9 -0
- package/dist/cssm/components/Removable/RemovableIos.js +118 -0
- package/dist/cssm/components/Removable/RemovableIos.js.map +1 -0
- package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +2 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js +3 -2
- package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
- package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.js +6 -3
- package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/cssm/components/Spinner/Spinner.js +5 -2
- package/dist/cssm/components/Spinner/Spinner.js.map +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/cssm/components/Tabs/Tabs.js +10 -9
- package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
- package/dist/cssm/components/Tabs/TabsController.js +19 -0
- package/dist/cssm/components/Tabs/TabsController.js.map +1 -0
- package/dist/cssm/components/Tabs/TabsModeContext.js +11 -0
- package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -0
- package/dist/cssm/components/TabsItem/TabsItem.js +17 -4
- package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/ToolButton/ToolButton.js.map +1 -1
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/hooks/useCalendar.js +0 -10
- package/dist/cssm/hooks/useCalendar.js.map +1 -1
- package/dist/cssm/hooks/useDateInput.js +28 -17
- package/dist/cssm/hooks/useDateInput.js.map +1 -1
- package/dist/cssm/hooks/useEventListener.js.map +1 -1
- package/dist/cssm/hooks/useExternRef.js.map +1 -1
- package/dist/cssm/hooks/useFocusTrap.js +2 -2
- package/dist/cssm/hooks/useFocusTrap.js.map +1 -1
- package/dist/cssm/hooks/useMutationObserver.js +6 -5
- package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
- package/dist/cssm/lib/dom.js +7 -1
- package/dist/cssm/lib/dom.js.map +1 -1
- package/dist/cssm/lib/floating/customResizeObserver.js.map +1 -1
- package/dist/cssm/lib/floating/index.js.map +1 -1
- package/dist/cssm/lib/floating/types/common.js.map +1 -1
- package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
- package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
- package/dist/cssm/styles/animationVisibilityDelay.js +10 -0
- package/dist/cssm/styles/animationVisibilityDelay.js.map +1 -0
- package/dist/cssm/styles/animationVisibilityDelay.module.css +13 -0
- package/dist/cssm/styles/themes.css +4 -2
- package/dist/hooks/useCalendar.d.ts +0 -3
- package/dist/hooks/useCalendar.d.ts.map +1 -1
- package/dist/hooks/useCalendar.js +0 -10
- package/dist/hooks/useCalendar.js.map +1 -1
- package/dist/hooks/useDateInput.d.ts.map +1 -1
- package/dist/hooks/useDateInput.js +29 -18
- package/dist/hooks/useDateInput.js.map +1 -1
- package/dist/hooks/useEventListener.js.map +1 -1
- package/dist/hooks/useExternRef.js.map +1 -1
- package/dist/hooks/useFocusTrap.d.ts +5 -1
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +2 -2
- package/dist/hooks/useFocusTrap.js.map +1 -1
- package/dist/hooks/useMutationObserver.d.ts +2 -1
- package/dist/hooks/useMutationObserver.d.ts.map +1 -1
- package/dist/hooks/useMutationObserver.js +6 -5
- package/dist/hooks/useMutationObserver.js.map +1 -1
- package/dist/lib/dom.d.ts.map +1 -1
- package/dist/lib/dom.js +7 -1
- package/dist/lib/dom.js.map +1 -1
- package/dist/lib/floating/customResizeObserver.js.map +1 -1
- package/dist/lib/floating/index.d.ts +1 -1
- package/dist/lib/floating/index.d.ts.map +1 -1
- package/dist/lib/floating/index.js.map +1 -1
- package/dist/lib/floating/types/common.d.ts +1 -1
- package/dist/lib/floating/types/common.d.ts.map +1 -1
- package/dist/lib/floating/types/common.js.map +1 -1
- package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
- package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
- package/dist/styles/animationVisibilityDelay.d.ts +3 -0
- package/dist/styles/animationVisibilityDelay.d.ts.map +1 -0
- package/dist/styles/animationVisibilityDelay.js +10 -0
- package/dist/styles/animationVisibilityDelay.js.map +1 -0
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +3 -6
- package/src/components/ActionSheet/ActionSheet.tsx +4 -1
- package/src/components/AppRoot/AppRoot.mdx +1 -1
- package/src/components/AppRoot/ScrollContext.tsx +2 -2
- package/src/components/Banner/Banner.tsx +2 -2
- package/src/components/Button/Button.tsx +2 -2
- package/src/components/Calendar/Calendar.tsx +8 -7
- package/src/components/CalendarRange/CalendarRange.tsx +65 -42
- package/src/components/CalendarRange/types.ts +1 -0
- package/src/components/CalendarRange/utils.ts +190 -0
- package/src/components/Checkbox/Checkbox.tsx +2 -2
- package/src/components/ChipsInput/useChipsInput.ts +23 -2
- package/src/components/ChipsInputBase/types.ts +5 -1
- package/src/components/Clickable/Clickable.tsx +12 -4
- package/src/components/Clickable/RealClickable.tsx +1 -0
- package/src/components/ContentCard/ContentCard.tsx +2 -2
- package/src/components/CustomSelect/CustomSelect.tsx +11 -7
- package/src/components/DateInput/DateInput.tsx +41 -43
- package/src/components/DateRangeInput/DateRangeInput.tsx +183 -65
- package/src/components/FocusTrap/FocusTrap.tsx +3 -0
- package/src/components/FormItem/FormItemTop/FormItemTop.mdx +1 -1
- package/src/components/HorizontalCell/HorizontalCell.tsx +2 -2
- package/src/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.tsx +2 -2
- package/src/components/HorizontalScroll/HorizontalScroll.module.css +2 -3
- package/src/components/HorizontalScroll/HorizontalScroll.module.css.d.ts.map +1 -1
- package/src/components/IconButton/IconButton.tsx +2 -2
- package/src/components/ImageBase/ImageBase.module.css +2 -3
- package/src/components/ImageBase/ImageBase.module.css.d.ts.map +1 -1
- package/src/components/InputLike/InputLike.tsx +4 -3
- package/src/components/Link/Link.tsx +3 -2
- package/src/components/MiniInfoCell/MiniInfoCell.tsx +2 -7
- package/src/components/ModalOutsideButton/ModalOutsideButton.tsx +2 -2
- package/src/components/NumberInputLike/NumberInputLike.tsx +56 -0
- package/src/components/Pagination/PaginationPage/PaginationPageButton.tsx +2 -2
- package/src/components/PanelHeader/PanelHeader.tsx +3 -1
- package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +2 -2
- package/src/components/Radio/Radio.tsx +2 -2
- package/src/components/Removable/Removable.module.css +9 -0
- package/src/components/Removable/Removable.module.css.d.ts.map +1 -1
- package/src/components/Removable/Removable.tsx +50 -120
- package/src/components/Removable/RemovableIos.tsx +135 -0
- package/src/components/RichCell/RichCell.tsx +2 -2
- package/src/components/ScreenSpinner/ScreenSpinner.tsx +8 -1
- package/src/components/ScreenSpinner/ScreenSpinnerContainer.tsx +4 -1
- package/src/components/SelectionControl/SelectionControl.tsx +2 -2
- package/src/components/SimpleCell/SimpleCell.tsx +2 -2
- package/src/components/Skeleton/Skeleton.tsx +15 -2
- package/src/components/Spinner/Spinner.tsx +13 -1
- package/src/components/SubnavigationButton/SubnavigationButton.tsx +2 -2
- package/src/components/Tabs/Tabs.tsx +23 -19
- package/src/components/Tabs/TabsController.ts +37 -0
- package/src/components/Tabs/TabsModeContext.ts +24 -0
- package/src/components/TabsItem/TabsItem.tsx +22 -5
- package/src/components/Tappable/Tappable.tsx +5 -0
- package/src/components/ToolButton/ToolButton.tsx +2 -2
- package/src/components/UnstyledTextField/UnstyledTextField.mdx +1 -1
- package/src/hooks/useCalendar.ts +0 -12
- package/src/hooks/useDateInput.ts +21 -12
- package/src/hooks/useFocusTrap.ts +10 -1
- package/src/hooks/useMutationObserver.ts +7 -4
- package/src/lib/dom.tsx +7 -1
- package/src/lib/floating/index.ts +2 -0
- package/src/lib/floating/types/common.ts +2 -0
- package/src/styles/animationVisibilityDelay.module.css +13 -0
- package/src/styles/animationVisibilityDelay.module.css.d.ts.map +1 -0
- package/src/styles/animationVisibilityDelay.ts +13 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { startOfDay, startOfMinute } from 'date-fns';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLike } from '../InputLike/InputLike';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: (opened: boolean) => void;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: (value?: Date) => void;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: (date: Date | undefined) => React.ReactNode;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string;\n /**\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/DateInput\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n onClick,\n onFocus,\n accessible,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n disableCalendar = false,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n 'aria-label': ariaLabel = '',\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n updateValue(\n parse(formattedValue, mask, value ?? (enableTime ? startOfMinute(now) : startOfDay(now))),\n );\n }\n },\n [enableTime, maxElement, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value?: Date | undefined) => {\n if (!value) {\n return;\n }\n if (enableTime) {\n setInternalValue(value);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = value\n ? new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n after={\n <React.Fragment>\n {!disableCalendar && (accessible || (!accessible && !value)) ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {value ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={-1}\n name={name}\n value={value ? format(value, enableTime ? \"dd.MM.yyyy'T'HH:mm\" : 'dd.MM.yyyy') : ''}\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <InputLike\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n value={internalValue[0]}\n label={changeDayLabel}\n data-testid={dayFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={31}\n aria-valuetext={internalValue[0]}\n aria-label={changeDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n value={internalValue[1]}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={12}\n aria-valuetext={internalValue[1]}\n aria-label={changeMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n value={internalValue[2]}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={275750}\n aria-valuetext={internalValue[2]}\n aria-label={changeYearLabel}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n value={internalValue[3]}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={24}\n aria-valuetext={internalValue[3]}\n aria-label={changeHoursLabel}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n value={internalValue[4]}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={59}\n aria-valuetext={internalValue[4]}\n aria-label={changeMinutesLabel}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n onClose={closeCalendar}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n captureEscapeKeyboardEvent={false}\n >\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n {...calendarTestsProps}\n />\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","startOfDay","startOfMinute","useAdaptivity","useDateInput","useExternRef","format","isMatch","parse","useIsomorphicLayoutEffect","Calendar","useConfigProvider","FocusTrap","FormField","IconButton","InputLike","InputLikeDivider","Popper","Text","VisuallyHidden","useDateInputValue","sizeYClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","onClick","onFocus","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","disableCalendar","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","ariaLabel","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","sizeY","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","Intl","DateTimeFormat","weekday","year","month","day","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","role","aria-labelledby","after","Fragment","hoverMode","label","data-testid","div","Component","readOnly","aria-hidden","tabIndex","normalize","onKeyDown","onElementSelect","aria-valuemin","aria-valuemax","aria-valuetext","aria-label","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","onClose","Boolean","captureEscapeKeyboardEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { startOfDay, startOfMinute } from 'date-fns';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: (opened: boolean) => void;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: (value?: Date) => void;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: (date: Date | undefined) => React.ReactNode;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string;\n /**\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\nconst CALENDAR_MUTATION_OBSERVER_OPTIONS: MutationObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex'],\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/DateInput\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n accessible,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n 'aria-label': ariaLabel = '',\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n updateValue(\n parse(formattedValue, mask, value ?? (enableTime ? startOfMinute(now) : startOfDay(now))),\n );\n }\n },\n [enableTime, maxElement, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value?: Date | undefined) => {\n if (!value) {\n return;\n }\n if (enableTime) {\n setInternalValue(value);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = value\n ? new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n after={\n <React.Fragment>\n {!disableCalendar && (accessible || (!accessible && !value)) ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {value && !readOnly ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={readOnly ? 0 : -1}\n name={name}\n value={value ? format(value, enableTime ? \"dd.MM.yyyy'T'HH:mm\" : 'dd.MM.yyyy') : ''}\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n label={changeDayLabel}\n readOnly={readOnly}\n data-testid={dayFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n readOnly={readOnly}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={24}\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={59}\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n onClose={closeCalendar}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n captureEscapeKeyboardEvent={false}\n mutationObserverOptions={CALENDAR_MUTATION_OBSERVER_OPTIONS}\n >\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n {...calendarTestsProps}\n />\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","startOfDay","startOfMinute","useAdaptivity","useDateInput","useExternRef","format","isMatch","parse","useIsomorphicLayoutEffect","Calendar","useConfigProvider","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","useDateInputValue","sizeYClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","CALENDAR_MUTATION_OBSERVER_OPTIONS","childList","subtree","attributes","attributeFilter","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","readOnly","disableCalendarProp","ariaLabel","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","disableCalendar","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","sizeY","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","Intl","DateTimeFormat","weekday","year","month","day","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","role","aria-labelledby","after","Fragment","hoverMode","label","onClick","data-testid","div","Component","aria-hidden","tabIndex","onFocus","normalize","minValue","maxValue","onKeyDown","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","onClose","Boolean","captureEscapeKeyboardEvent","mutationObserverOptions","aria-label"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { type UseFocusTrapProps } from '../../hooks/useFocusTrap';
|
|
2
3
|
import type { PlacementWithAuto } from '../../lib/floating';
|
|
3
4
|
import type { HasRootRef } from '../../types';
|
|
4
5
|
import { type CalendarRangeProps, type CalendarRangeTestsProps } from '../CalendarRange/CalendarRange';
|
|
@@ -35,7 +36,7 @@ export type DateRangeInputTestsProps = {
|
|
|
35
36
|
*/
|
|
36
37
|
clearButtonTestId?: string;
|
|
37
38
|
};
|
|
38
|
-
export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>, Pick<CalendarRangeProps, 'disablePast' | 'disableFuture' | 'shouldDisableDate' | 'onChange' | 'value' | 'defaultValue' | 'weekStartsOn' | 'disablePickers' | 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'changeDayLabel' | 'prevMonthIcon' | 'nextMonthIcon' | 'renderDayContent'>, HasRootRef<HTMLDivElement>, Omit<FormFieldProps, 'maxHeight'>, DateRangeInputTestsProps {
|
|
39
|
+
export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>, Pick<CalendarRangeProps, 'disablePast' | 'disableFuture' | 'shouldDisableDate' | 'onChange' | 'value' | 'defaultValue' | 'weekStartsOn' | 'disablePickers' | 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'changeDayLabel' | 'prevMonthIcon' | 'nextMonthIcon' | 'renderDayContent'>, Pick<UseFocusTrapProps, 'restoreFocus'>, HasRootRef<HTMLDivElement>, Omit<FormFieldProps, 'maxHeight'>, DateRangeInputTestsProps {
|
|
39
40
|
/**
|
|
40
41
|
* Передает атрибуты `data-testid` для интерактивных элементов в календаре.
|
|
41
42
|
*/
|
|
@@ -52,6 +53,10 @@ export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTML
|
|
|
52
53
|
* Обработчик изменения состояния открытия календаря.
|
|
53
54
|
*/
|
|
54
55
|
onCalendarOpenChanged?: (opened: boolean) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Label для календаря.
|
|
58
|
+
*/
|
|
59
|
+
calendarLabel?: string;
|
|
55
60
|
/**
|
|
56
61
|
* Label для кнопки очистки. Делает доступным для ассистивных технологий.
|
|
57
62
|
*/
|
|
@@ -88,10 +93,25 @@ export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTML
|
|
|
88
93
|
* Отключение открытия календаря.
|
|
89
94
|
*/
|
|
90
95
|
disableCalendar?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Позволяет отключить захват фокуса при появлении календаря.
|
|
98
|
+
*/
|
|
99
|
+
disableFocusTrap?: UseFocusTrapProps['disabled'];
|
|
100
|
+
/**
|
|
101
|
+
* Включает режим в котором DateRangeInput доступен
|
|
102
|
+
* для ассистивных технологий.
|
|
103
|
+
* В этом режиме:
|
|
104
|
+
* - календарь больше не открывает при фокусе на DateRangeInput;
|
|
105
|
+
* - иконка календаря видна всегда, чтобы пользователи
|
|
106
|
+
* ассистивных технологий могли открыть календарь по клику на иконку;
|
|
107
|
+
* - календарь при открытии получает фокус, клавиатурный
|
|
108
|
+
* фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.
|
|
109
|
+
*/
|
|
110
|
+
accessible?: boolean;
|
|
91
111
|
}
|
|
92
112
|
/**
|
|
93
113
|
* @see https://vkcom.github.io/VKUI/#/DateRangeInput
|
|
94
114
|
*/
|
|
95
|
-
export declare const DateRangeInput: ({ shouldDisableDate, disableFuture, disablePast, value: valueProp, defaultValue, onChange, calendarPlacement: calendarPlacementProp, style, className, closeOnChange, disablePickers, getRootRef, name, autoFocus, disabled,
|
|
115
|
+
export declare const DateRangeInput: ({ shouldDisableDate, disableFuture, disablePast, "value": valueProp, defaultValue, onChange, "calendarPlacement": calendarPlacementProp, style, className, closeOnChange, disablePickers, getRootRef, name, autoFocus, disabled, disableFocusTrap, restoreFocus, calendarLabel, prevMonthLabel, nextMonthLabel, changeMonthLabel, changeYearLabel, changeStartDayLabel, changeStartMonthLabel, changeStartYearLabel, changeEndDayLabel, changeEndMonthLabel, changeEndYearLabel, clearFieldLabel, showCalendarLabel, "aria-label": ariaLabel, prevMonthIcon, nextMonthIcon, onCalendarOpenChanged, renderDayContent, calendarTestsProps, startDateTestsProps, endDateTestsProps, clearButtonTestId, showCalendarButtonTestId, id, accessible, readOnly, "disableCalendar": disableCalendarProp, ...props }: DateRangeInputProps) => React.ReactNode;
|
|
96
116
|
export {};
|
|
97
117
|
//# sourceMappingURL=DateRangeInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAexE,KAAK,cAAc,GAAG;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,mBAAmB,CAAC,EAAE,cAAc,CAAC;IACrC;;OAEG;IACH,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,EAC5F,IAAI,CACF,kBAAkB,EAChB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,UAAU,GACV,OAAO,GACP,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,kBAAkB,CACrB,EACD,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EACvC,UAAU,CAAC,cAAc,CAAC,EAC1B,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EACjC,wBAAwB;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAC7C;;OAEG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAiDD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,4wBA8C5B,mBAAmB,KAAG,KAAK,CAAC,SA8U9B,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
3
3
|
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
4
4
|
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
|
|
5
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
import { Icon16Clear, Icon20CalendarOutline } from "@vkontakte/icons";
|
|
8
8
|
import { classNames } from "@vkontakte/vkjs";
|
|
@@ -11,13 +11,14 @@ import { useAdaptivity } from "../../hooks/useAdaptivity.js";
|
|
|
11
11
|
import { useDateInput } from "../../hooks/useDateInput.js";
|
|
12
12
|
import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
|
|
13
13
|
import { useExternRef } from "../../hooks/useExternRef.js";
|
|
14
|
-
import { callMultiple } from "../../lib/callMultiple.js";
|
|
15
14
|
import { format, isMatch, parse } from "../../lib/date.js";
|
|
16
15
|
import { CalendarRange } from "../CalendarRange/CalendarRange.js";
|
|
16
|
+
import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
|
|
17
|
+
import { FocusTrap } from "../FocusTrap/FocusTrap.js";
|
|
17
18
|
import { FormField } from "../FormField/FormField.js";
|
|
18
19
|
import { IconButton } from "../IconButton/IconButton.js";
|
|
19
|
-
import { InputLike } from "../InputLike/InputLike.js";
|
|
20
20
|
import { InputLikeDivider } from "../InputLike/InputLikeDivider.js";
|
|
21
|
+
import { NumberInputLike } from "../NumberInputLike/NumberInputLike.js";
|
|
21
22
|
import { Popper } from "../Popper/Popper.js";
|
|
22
23
|
import { Text } from "../Typography/Text/Text.js";
|
|
23
24
|
import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
|
|
@@ -72,17 +73,25 @@ const getInternalValue = (value)=>{
|
|
|
72
73
|
}
|
|
73
74
|
return newValue;
|
|
74
75
|
};
|
|
76
|
+
const CALENDAR_MUTATION_OBSERVER_OPTIONS = {
|
|
77
|
+
childList: true,
|
|
78
|
+
subtree: true,
|
|
79
|
+
attributes: true,
|
|
80
|
+
attributeFilter: [
|
|
81
|
+
'tabindex'
|
|
82
|
+
]
|
|
83
|
+
};
|
|
75
84
|
/**
|
|
76
85
|
* @see https://vkcom.github.io/VKUI/#/DateRangeInput
|
|
77
86
|
*/ export const DateRangeInput = (_param)=>{
|
|
78
|
-
var { shouldDisableDate, disableFuture, disablePast, value: valueProp, defaultValue, onChange, calendarPlacement: calendarPlacementProp = 'bottom-start', style, className, closeOnChange = true, disablePickers, getRootRef, name, autoFocus, disabled,
|
|
87
|
+
var { shouldDisableDate, disableFuture, disablePast, 'value': valueProp, defaultValue, onChange, 'calendarPlacement': calendarPlacementProp = 'bottom-start', style, className, closeOnChange = true, disablePickers, getRootRef, name, autoFocus, disabled, disableFocusTrap, restoreFocus, calendarLabel = 'Календарь', prevMonthLabel = 'Предыдущий месяц', nextMonthLabel = 'Следующий месяц', changeMonthLabel = 'Месяц', changeYearLabel = 'Год', changeStartDayLabel = 'День начала', changeStartMonthLabel = 'Месяц начала', changeStartYearLabel = 'Год начала', changeEndDayLabel = 'День окончания', changeEndMonthLabel = 'Месяц окончания', changeEndYearLabel = 'Год окончания', clearFieldLabel = 'Очистить поле', showCalendarLabel = 'Показать календарь', 'aria-label': ariaLabel = '', prevMonthIcon, nextMonthIcon, onCalendarOpenChanged, renderDayContent, calendarTestsProps, startDateTestsProps, endDateTestsProps, clearButtonTestId, showCalendarButtonTestId, id, accessible, readOnly, 'disableCalendar': disableCalendarProp = false } = _param, props = _object_without_properties(_param, [
|
|
79
88
|
"shouldDisableDate",
|
|
80
89
|
"disableFuture",
|
|
81
90
|
"disablePast",
|
|
82
|
-
|
|
91
|
+
'value',
|
|
83
92
|
"defaultValue",
|
|
84
93
|
"onChange",
|
|
85
|
-
|
|
94
|
+
'calendarPlacement',
|
|
86
95
|
"style",
|
|
87
96
|
"className",
|
|
88
97
|
"closeOnChange",
|
|
@@ -91,11 +100,11 @@ const getInternalValue = (value)=>{
|
|
|
91
100
|
"name",
|
|
92
101
|
"autoFocus",
|
|
93
102
|
"disabled",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
103
|
+
"disableFocusTrap",
|
|
104
|
+
"restoreFocus",
|
|
105
|
+
"calendarLabel",
|
|
96
106
|
"prevMonthLabel",
|
|
97
107
|
"nextMonthLabel",
|
|
98
|
-
"changeDayLabel",
|
|
99
108
|
"changeMonthLabel",
|
|
100
109
|
"changeYearLabel",
|
|
101
110
|
"changeStartDayLabel",
|
|
@@ -106,9 +115,9 @@ const getInternalValue = (value)=>{
|
|
|
106
115
|
"changeEndYearLabel",
|
|
107
116
|
"clearFieldLabel",
|
|
108
117
|
"showCalendarLabel",
|
|
118
|
+
'aria-label',
|
|
109
119
|
"prevMonthIcon",
|
|
110
120
|
"nextMonthIcon",
|
|
111
|
-
"disableCalendar",
|
|
112
121
|
"onCalendarOpenChanged",
|
|
113
122
|
"renderDayContent",
|
|
114
123
|
"calendarTestsProps",
|
|
@@ -116,7 +125,10 @@ const getInternalValue = (value)=>{
|
|
|
116
125
|
"endDateTestsProps",
|
|
117
126
|
"clearButtonTestId",
|
|
118
127
|
"showCalendarButtonTestId",
|
|
119
|
-
"id"
|
|
128
|
+
"id",
|
|
129
|
+
"accessible",
|
|
130
|
+
"readOnly",
|
|
131
|
+
'disableCalendar'
|
|
120
132
|
]);
|
|
121
133
|
const daysStartRef = React.useRef(null);
|
|
122
134
|
const monthsStartRef = React.useRef(null);
|
|
@@ -124,6 +136,7 @@ const getInternalValue = (value)=>{
|
|
|
124
136
|
const daysEndRef = React.useRef(null);
|
|
125
137
|
const monthsEndRef = React.useRef(null);
|
|
126
138
|
const yearsEndRef = React.useRef(null);
|
|
139
|
+
const disableCalendar = readOnly ? true : disableCalendarProp;
|
|
127
140
|
const _onChange = React.useCallback((newValue)=>onChange === null || onChange === void 0 ? void 0 : onChange(newValue || undefined), [
|
|
128
141
|
onChange
|
|
129
142
|
]);
|
|
@@ -189,17 +202,18 @@ const getInternalValue = (value)=>{
|
|
|
189
202
|
const onClear = React.useCallback(()=>updateValue(undefined), [
|
|
190
203
|
updateValue
|
|
191
204
|
]);
|
|
192
|
-
const { rootRef, calendarRef, open, openCalendar, closeCalendar, internalValue, handleKeyDown, setFocusedElement, handleFieldEnter, clear, removeFocusFromField } = useDateInput({
|
|
205
|
+
const { rootRef, calendarRef, open, openCalendar, closeCalendar, toggleCalendar, internalValue, handleKeyDown, setFocusedElement, handleFieldEnter, clear, removeFocusFromField } = useDateInput({
|
|
193
206
|
maxElement: 5,
|
|
194
207
|
refs,
|
|
195
208
|
autoFocus,
|
|
196
|
-
disabled,
|
|
209
|
+
disabled: disabled || readOnly,
|
|
197
210
|
elementsConfig,
|
|
198
211
|
onClear,
|
|
199
212
|
onInternalValueChange,
|
|
200
213
|
getInternalValue,
|
|
201
214
|
value,
|
|
202
|
-
onCalendarOpenChanged
|
|
215
|
+
onCalendarOpenChanged,
|
|
216
|
+
accessible
|
|
203
217
|
});
|
|
204
218
|
const { sizeY = 'none' } = useAdaptivity();
|
|
205
219
|
const handleRootRef = useExternRef(rootRef, getRootRef);
|
|
@@ -219,115 +233,187 @@ const getInternalValue = (value)=>{
|
|
|
219
233
|
// лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался
|
|
220
234
|
// на ней, пока помещается.
|
|
221
235
|
const [calendarPlacement, setCalendarPlacement] = React.useState(calendarPlacementProp);
|
|
236
|
+
const { locale } = useConfigProvider();
|
|
237
|
+
const currentDateLabel = React.useMemo(()=>{
|
|
238
|
+
if (!value) {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
const [startDate, endDate] = value;
|
|
242
|
+
if (!startDate || !endDate) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
return [
|
|
246
|
+
new Intl.DateTimeFormat(locale, {
|
|
247
|
+
weekday: 'long',
|
|
248
|
+
year: 'numeric',
|
|
249
|
+
month: 'long',
|
|
250
|
+
day: 'numeric'
|
|
251
|
+
}).format(startDate),
|
|
252
|
+
new Intl.DateTimeFormat(locale, {
|
|
253
|
+
weekday: 'long',
|
|
254
|
+
year: 'numeric',
|
|
255
|
+
month: 'long',
|
|
256
|
+
day: 'numeric'
|
|
257
|
+
}).format(endDate)
|
|
258
|
+
].join(' - ');
|
|
259
|
+
}, [
|
|
260
|
+
locale,
|
|
261
|
+
value
|
|
262
|
+
]);
|
|
263
|
+
const currentDateLabelId = React.useId();
|
|
264
|
+
const ariaLabelId = React.useId();
|
|
265
|
+
const showCalendarOnInputAreaClick = React.useCallback(()=>{
|
|
266
|
+
handleFieldEnter();
|
|
267
|
+
if (accessible) {
|
|
268
|
+
openCalendar();
|
|
269
|
+
}
|
|
270
|
+
}, [
|
|
271
|
+
handleFieldEnter,
|
|
272
|
+
openCalendar,
|
|
273
|
+
accessible
|
|
274
|
+
]);
|
|
222
275
|
return /*#__PURE__*/ _jsxs(FormField, _object_spread_props(_object_spread({
|
|
223
276
|
style: style,
|
|
224
277
|
className: classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className),
|
|
225
278
|
getRootRef: handleRootRef,
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
"data-testid": clearButtonTestId,
|
|
230
|
-
children: [
|
|
231
|
-
/*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
232
|
-
children: clearFieldLabel
|
|
233
|
-
}),
|
|
234
|
-
/*#__PURE__*/ _jsx(Icon16Clear, {})
|
|
235
|
-
]
|
|
236
|
-
}) : /*#__PURE__*/ _jsxs(IconButton, {
|
|
237
|
-
hoverMode: "opacity",
|
|
238
|
-
onClick: openCalendar,
|
|
239
|
-
"data-testid": showCalendarButtonTestId,
|
|
279
|
+
role: "group",
|
|
280
|
+
"aria-labelledby": `${ariaLabelId} ${currentDateLabelId}`,
|
|
281
|
+
after: /*#__PURE__*/ _jsxs(_Fragment, {
|
|
240
282
|
children: [
|
|
241
|
-
/*#__PURE__*/ _jsx(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
283
|
+
!disableCalendar && (accessible || !accessible && !value) ? /*#__PURE__*/ _jsx(IconButton, {
|
|
284
|
+
hoverMode: "opacity",
|
|
285
|
+
label: showCalendarLabel,
|
|
286
|
+
onClick: toggleCalendar,
|
|
287
|
+
"data-testid": showCalendarButtonTestId,
|
|
288
|
+
children: /*#__PURE__*/ _jsx(Icon20CalendarOutline, {})
|
|
289
|
+
}) : null,
|
|
290
|
+
value && !readOnly ? /*#__PURE__*/ _jsx(IconButton, {
|
|
291
|
+
hoverMode: "opacity",
|
|
292
|
+
label: clearFieldLabel,
|
|
293
|
+
onClick: clear,
|
|
294
|
+
"data-testid": clearButtonTestId,
|
|
295
|
+
children: /*#__PURE__*/ _jsx(Icon16Clear, {})
|
|
296
|
+
}) : null
|
|
245
297
|
]
|
|
246
298
|
}),
|
|
247
|
-
disabled: disabled
|
|
248
|
-
onClick: callMultiple(handleFieldEnter, onClick),
|
|
249
|
-
onFocus: callMultiple(handleFieldEnter, onFocus)
|
|
299
|
+
disabled: disabled
|
|
250
300
|
}, props), {
|
|
251
301
|
children: [
|
|
252
302
|
/*#__PURE__*/ _jsxs("div", {
|
|
253
303
|
className: "vkuiDateInput__wrapper",
|
|
254
304
|
children: [
|
|
305
|
+
ariaLabel && /*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
306
|
+
id: ariaLabelId,
|
|
307
|
+
children: ariaLabel
|
|
308
|
+
}),
|
|
309
|
+
currentDateLabel && /*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
310
|
+
id: currentDateLabelId,
|
|
311
|
+
children: currentDateLabel
|
|
312
|
+
}),
|
|
255
313
|
/*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
256
314
|
id: id,
|
|
257
315
|
Component: "input",
|
|
316
|
+
readOnly: true,
|
|
317
|
+
"aria-hidden": true,
|
|
258
318
|
name: name,
|
|
259
|
-
|
|
319
|
+
tabIndex: readOnly ? 0 : -1,
|
|
320
|
+
value: value ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${value[1] ? format(value[1], 'dd.MM.yyyy') : ''}` : '',
|
|
321
|
+
onFocus: handleFieldEnter
|
|
260
322
|
}),
|
|
261
323
|
/*#__PURE__*/ _jsxs(Text, {
|
|
262
324
|
className: "vkuiDateInput__input",
|
|
263
|
-
|
|
325
|
+
onClick: showCalendarOnInputAreaClick,
|
|
264
326
|
children: [
|
|
265
|
-
/*#__PURE__*/ _jsx(
|
|
327
|
+
/*#__PURE__*/ _jsx(NumberInputLike, {
|
|
328
|
+
value: internalValue[0],
|
|
329
|
+
minValue: 1,
|
|
330
|
+
maxValue: 31,
|
|
331
|
+
onKeyDown: readOnly ? undefined : handleKeyDown,
|
|
266
332
|
length: 2,
|
|
267
333
|
getRootRef: daysStartRef,
|
|
268
334
|
index: 0,
|
|
335
|
+
readOnly: readOnly,
|
|
269
336
|
onElementSelect: setFocusedElement,
|
|
270
|
-
value: internalValue[0],
|
|
271
337
|
label: changeStartDayLabel,
|
|
272
338
|
"data-testid": startDateTestsProps === null || startDateTestsProps === void 0 ? void 0 : startDateTestsProps.day
|
|
273
339
|
}),
|
|
274
340
|
/*#__PURE__*/ _jsx(InputLikeDivider, {
|
|
275
341
|
children: "."
|
|
276
342
|
}),
|
|
277
|
-
/*#__PURE__*/ _jsx(
|
|
343
|
+
/*#__PURE__*/ _jsx(NumberInputLike, {
|
|
344
|
+
value: internalValue[1],
|
|
345
|
+
minValue: 1,
|
|
346
|
+
maxValue: 12,
|
|
347
|
+
onKeyDown: handleKeyDown,
|
|
278
348
|
length: 2,
|
|
279
349
|
getRootRef: monthsStartRef,
|
|
280
350
|
index: 1,
|
|
281
351
|
onElementSelect: setFocusedElement,
|
|
282
|
-
|
|
352
|
+
readOnly: readOnly,
|
|
283
353
|
label: changeStartMonthLabel,
|
|
284
354
|
"data-testid": startDateTestsProps === null || startDateTestsProps === void 0 ? void 0 : startDateTestsProps.month
|
|
285
355
|
}),
|
|
286
356
|
/*#__PURE__*/ _jsx(InputLikeDivider, {
|
|
287
357
|
children: "."
|
|
288
358
|
}),
|
|
289
|
-
/*#__PURE__*/ _jsx(
|
|
359
|
+
/*#__PURE__*/ _jsx(NumberInputLike, {
|
|
360
|
+
value: internalValue[2],
|
|
361
|
+
minValue: 1,
|
|
362
|
+
maxValue: 275750,
|
|
363
|
+
onKeyDown: handleKeyDown,
|
|
290
364
|
length: 4,
|
|
291
365
|
getRootRef: yearsStartRef,
|
|
292
366
|
index: 2,
|
|
293
367
|
onElementSelect: setFocusedElement,
|
|
294
|
-
|
|
368
|
+
readOnly: readOnly,
|
|
295
369
|
label: changeStartYearLabel,
|
|
296
370
|
"data-testid": startDateTestsProps === null || startDateTestsProps === void 0 ? void 0 : startDateTestsProps.year
|
|
297
371
|
}),
|
|
298
372
|
/*#__PURE__*/ _jsx(InputLikeDivider, {
|
|
299
373
|
children: ' — '
|
|
300
374
|
}),
|
|
301
|
-
/*#__PURE__*/ _jsx(
|
|
375
|
+
/*#__PURE__*/ _jsx(NumberInputLike, {
|
|
376
|
+
value: internalValue[3],
|
|
377
|
+
minValue: 1,
|
|
378
|
+
maxValue: 31,
|
|
379
|
+
onKeyDown: handleKeyDown,
|
|
302
380
|
length: 2,
|
|
303
381
|
getRootRef: daysEndRef,
|
|
304
382
|
index: 3,
|
|
305
383
|
onElementSelect: setFocusedElement,
|
|
306
|
-
|
|
384
|
+
readOnly: readOnly,
|
|
307
385
|
label: changeEndDayLabel,
|
|
308
386
|
"data-testid": endDateTestsProps === null || endDateTestsProps === void 0 ? void 0 : endDateTestsProps.day
|
|
309
387
|
}),
|
|
310
388
|
/*#__PURE__*/ _jsx(InputLikeDivider, {
|
|
311
389
|
children: "."
|
|
312
390
|
}),
|
|
313
|
-
/*#__PURE__*/ _jsx(
|
|
391
|
+
/*#__PURE__*/ _jsx(NumberInputLike, {
|
|
392
|
+
value: internalValue[4],
|
|
393
|
+
minValue: 1,
|
|
394
|
+
maxValue: 12,
|
|
395
|
+
onKeyDown: handleKeyDown,
|
|
314
396
|
length: 2,
|
|
315
397
|
getRootRef: monthsEndRef,
|
|
316
398
|
index: 4,
|
|
317
399
|
onElementSelect: setFocusedElement,
|
|
318
|
-
|
|
400
|
+
readOnly: readOnly,
|
|
319
401
|
label: changeEndMonthLabel,
|
|
320
402
|
"data-testid": endDateTestsProps === null || endDateTestsProps === void 0 ? void 0 : endDateTestsProps.month
|
|
321
403
|
}),
|
|
322
404
|
/*#__PURE__*/ _jsx(InputLikeDivider, {
|
|
323
405
|
children: "."
|
|
324
406
|
}),
|
|
325
|
-
/*#__PURE__*/ _jsx(
|
|
407
|
+
/*#__PURE__*/ _jsx(NumberInputLike, {
|
|
408
|
+
value: internalValue[5],
|
|
409
|
+
minValue: 1,
|
|
410
|
+
maxValue: 275750,
|
|
411
|
+
onKeyDown: handleKeyDown,
|
|
326
412
|
length: 4,
|
|
327
413
|
getRootRef: yearsEndRef,
|
|
328
414
|
index: 5,
|
|
329
415
|
onElementSelect: setFocusedElement,
|
|
330
|
-
|
|
416
|
+
readOnly: readOnly,
|
|
331
417
|
label: changeEndYearLabel,
|
|
332
418
|
"data-testid": endDateTestsProps === null || endDateTestsProps === void 0 ? void 0 : endDateTestsProps.year
|
|
333
419
|
})
|
|
@@ -340,24 +426,31 @@ const getInternalValue = (value)=>{
|
|
|
340
426
|
offsetByMainAxis: 8,
|
|
341
427
|
placement: calendarPlacement,
|
|
342
428
|
onPlacementChange: setCalendarPlacement,
|
|
343
|
-
children: /*#__PURE__*/ _jsx(
|
|
344
|
-
value: value,
|
|
345
|
-
onChange: onCalendarChange,
|
|
346
|
-
disablePast: disablePast,
|
|
347
|
-
disableFuture: disableFuture,
|
|
348
|
-
shouldDisableDate: shouldDisableDate,
|
|
429
|
+
children: /*#__PURE__*/ _jsx(FocusTrap, {
|
|
349
430
|
onClose: closeCalendar,
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
431
|
+
disabled: disableFocusTrap !== null && disableFocusTrap !== void 0 ? disableFocusTrap : !accessible,
|
|
432
|
+
restoreFocus: restoreFocus !== null && restoreFocus !== void 0 ? restoreFocus : Boolean(accessible),
|
|
433
|
+
captureEscapeKeyboardEvent: false,
|
|
434
|
+
mutationObserverOptions: CALENDAR_MUTATION_OBSERVER_OPTIONS,
|
|
435
|
+
children: /*#__PURE__*/ _jsx(CalendarRange, _object_spread({
|
|
436
|
+
value: value,
|
|
437
|
+
role: "dialog",
|
|
438
|
+
onChange: onCalendarChange,
|
|
439
|
+
"aria-label": calendarLabel,
|
|
440
|
+
disablePast: disablePast,
|
|
441
|
+
disableFuture: disableFuture,
|
|
442
|
+
shouldDisableDate: shouldDisableDate,
|
|
443
|
+
getRootRef: calendarRef,
|
|
444
|
+
disablePickers: disablePickers,
|
|
445
|
+
prevMonthLabel: prevMonthLabel,
|
|
446
|
+
nextMonthLabel: nextMonthLabel,
|
|
447
|
+
changeMonthLabel: changeMonthLabel,
|
|
448
|
+
changeYearLabel: changeYearLabel,
|
|
449
|
+
prevMonthIcon: prevMonthIcon,
|
|
450
|
+
nextMonthIcon: nextMonthIcon,
|
|
451
|
+
renderDayContent: renderDayContent
|
|
452
|
+
}, calendarTestsProps))
|
|
453
|
+
})
|
|
361
454
|
})
|
|
362
455
|
]
|
|
363
456
|
}));
|