@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
|
@@ -5,6 +5,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { classNames, hasReactNode } from "@vkontakte/vkjs";
|
|
7
7
|
import { defineComponentDisplayNames } from "../../lib/react/defineComponentDisplayNames.js";
|
|
8
|
+
import { animationVisibilityDelayStyles } from "../../styles/animationVisibilityDelay.js";
|
|
8
9
|
import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
9
10
|
import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
|
|
10
11
|
import { SpinnerAnimation } from "./SpinnerAnimation.js";
|
|
@@ -19,18 +20,20 @@ const spinnerIconMap = {
|
|
|
19
20
|
* @see https://vkcom.github.io/VKUI/#/Spinner
|
|
20
21
|
*/ // eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames
|
|
21
22
|
export const Spinner = /*#__PURE__*/ React.memo((_param)=>{
|
|
22
|
-
var { size = 'm', children = 'Загружается...', disableAnimation = false, noColor = false } = _param, restProps = _object_without_properties(_param, [
|
|
23
|
+
var { size = 'm', children = 'Загружается...', disableAnimation = false, noColor = false, visibilityDelay } = _param, restProps = _object_without_properties(_param, [
|
|
23
24
|
"size",
|
|
24
25
|
"children",
|
|
25
26
|
"disableAnimation",
|
|
26
|
-
"noColor"
|
|
27
|
+
"noColor",
|
|
28
|
+
"visibilityDelay"
|
|
27
29
|
]);
|
|
28
30
|
const SpinnerIcon = spinnerIconMap[size];
|
|
29
31
|
return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({
|
|
30
32
|
Component: "span",
|
|
31
33
|
role: "status"
|
|
32
34
|
}, restProps), {
|
|
33
|
-
baseClassName: classNames("vkuiSpinner__host", noColor && "vkuiSpinner__noColor"),
|
|
35
|
+
baseClassName: classNames("vkuiSpinner__host", noColor && "vkuiSpinner__noColor", visibilityDelay && "vkuistyles__visibilityDelay"),
|
|
36
|
+
baseStyle: animationVisibilityDelayStyles(visibilityDelay),
|
|
34
37
|
children: [
|
|
35
38
|
/*#__PURE__*/ _jsx(SpinnerIcon, {
|
|
36
39
|
children: disableAnimation ? null : /*#__PURE__*/ _jsx(SpinnerAnimation, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { SpinnerAnimation } from './SpinnerAnimation';\nimport { Icon16Spinner, Icon24Spinner, Icon32Spinner, Icon44Spinner } from './icons';\nimport styles from './Spinner.module.css';\n\nconst spinnerIconMap = {\n s: Icon16Spinner,\n m: Icon24Spinner,\n l: Icon32Spinner,\n xl: Icon44Spinner,\n};\n\nexport interface SpinnerProps extends HTMLAttributesWithRootRef<HTMLSpanElement> {\n /**\n * Размер спиннера.\n */\n size?: 's' | 'm' | 'l' | 'xl';\n /**\n * Отключение анимации.\n */\n disableAnimation?: boolean;\n /**\n * Задать цвет можно будет через свойство color родителя.\n */\n noColor?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Spinner\n */\n// eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\nexport const Spinner = React.memo(\n ({\n size = 'm',\n children = 'Загружается...',\n disableAnimation = false,\n noColor = false,\n ...restProps\n }: SpinnerProps) => {\n const SpinnerIcon = spinnerIconMap[size];\n\n return (\n <RootComponent\n Component=\"span\"\n role=\"status\"\n {...restProps}\n baseClassName={classNames(styles.host
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Spinner/Spinner.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport { animationVisibilityDelayStyles } from '../../styles/animationVisibilityDelay';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { SpinnerAnimation } from './SpinnerAnimation';\nimport { Icon16Spinner, Icon24Spinner, Icon32Spinner, Icon44Spinner } from './icons';\nimport styles from './Spinner.module.css';\nimport stylesDelay from '../../styles/animationVisibilityDelay.module.css';\n\nconst spinnerIconMap = {\n s: Icon16Spinner,\n m: Icon24Spinner,\n l: Icon32Spinner,\n xl: Icon44Spinner,\n};\n\nexport interface SpinnerProps extends HTMLAttributesWithRootRef<HTMLSpanElement> {\n /**\n * Размер спиннера.\n */\n size?: 's' | 'm' | 'l' | 'xl';\n /**\n * Отключение анимации.\n */\n disableAnimation?: boolean;\n /**\n * Задать цвет можно будет через свойство color родителя.\n */\n noColor?: boolean;\n /**\n * Задерживает отрисовку элемента на заданное количество миллисекунд.\n */\n visibilityDelay?: number;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Spinner\n */\n// eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\nexport const Spinner = React.memo(\n ({\n size = 'm',\n children = 'Загружается...',\n disableAnimation = false,\n noColor = false,\n visibilityDelay,\n ...restProps\n }: SpinnerProps) => {\n const SpinnerIcon = spinnerIconMap[size];\n\n return (\n <RootComponent\n Component=\"span\"\n role=\"status\"\n {...restProps}\n baseClassName={classNames(\n styles.host,\n noColor && styles.noColor,\n visibilityDelay && stylesDelay.visibilityDelay,\n )}\n baseStyle={animationVisibilityDelayStyles(visibilityDelay)}\n >\n <SpinnerIcon>{disableAnimation ? null : <SpinnerAnimation size={size} />}</SpinnerIcon>\n {hasReactNode(children) && <VisuallyHidden>{children}</VisuallyHidden>}\n </RootComponent>\n );\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(Spinner, 'Spinner');\n}\n"],"names":["React","classNames","hasReactNode","defineComponentDisplayNames","animationVisibilityDelayStyles","RootComponent","VisuallyHidden","SpinnerAnimation","Icon16Spinner","Icon24Spinner","Icon32Spinner","Icon44Spinner","spinnerIconMap","s","m","l","xl","Spinner","memo","size","children","disableAnimation","noColor","visibilityDelay","restProps","SpinnerIcon","Component","role","baseClassName","baseStyle","process","env","NODE_ENV"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,2BAA2B,QAAQ,iDAA8C;AAC1F,SAASC,8BAA8B,QAAQ,2CAAwC;AAEvF,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,cAAc,QAAQ,sCAAmC;AAClE,SAASC,gBAAgB,QAAQ,wBAAqB;AACtD,SAASC,aAAa,EAAEC,aAAa,EAAEC,aAAa,EAAEC,aAAa,QAAQ,aAAU;AAIrF,MAAMC,iBAAiB;IACrBC,GAAGL;IACHM,GAAGL;IACHM,GAAGL;IACHM,IAAIL;AACN;AAqBA;;CAEC,GACD,0FAA0F;AAC1F,OAAO,MAAMM,wBAAUjB,MAAMkB,IAAI,CAC/B;QAAC,EACCC,OAAO,GAAG,EACVC,WAAW,gBAAgB,EAC3BC,mBAAmB,KAAK,EACxBC,UAAU,KAAK,EACfC,eAAe,EAEF,WADVC;QALHL;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,cAAcb,cAAc,CAACO,KAAK;IAExC,qBACE,MAACd;QACCqB,WAAU;QACVC,MAAK;OACDH;QACJI,eAAe3B,gCAEbqB,mCACAC;QAEFM,WAAWzB,+BAA+BmB;;0BAE1C,KAACE;0BAAaJ,mBAAmB,qBAAO,KAACd;oBAAiBY,MAAMA;;;YAC/DjB,aAAakB,2BAAa,KAACd;0BAAgBc;;;;AAGlD,GACA;AAEF,IAAIU,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzC7B,4BAA4Bc,SAAS;AACvC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { type
|
|
3
|
-
export interface SubnavigationButtonProps extends Omit<
|
|
2
|
+
import { type TappableOmitProps } from '../Tappable/Tappable';
|
|
3
|
+
export interface SubnavigationButtonProps extends Omit<TappableOmitProps, 'size'> {
|
|
4
4
|
/**
|
|
5
5
|
* Стиль отображения кнопки.
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubnavigationButton.d.ts","sourceRoot":"","sources":["../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAY,KAAK,
|
|
1
|
+
{"version":3,"file":"SubnavigationButton.d.ts","sourceRoot":"","sources":["../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA2BxE,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC/E;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC;;OAEG;IACH,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoBD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,iGAWjC,wBAAwB,KAAG,KAAK,CAAC,SAgCnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Dropdown } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport type { HasChildren, HasComponent } from '../../types';\nimport { Tappable, type
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Dropdown } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport type { HasChildren, HasComponent } from '../../types';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport styles from './SubnavigationButton.module.css';\n\nconst appearanceStyles = {\n accent: styles.appearanceAccent,\n neutral: styles.appearanceNeutral,\n};\n\nconst modeStyles = {\n primary: styles.modePrimary,\n outline: styles.modeOutline,\n tertiary: styles.modeTertiary,\n};\n\nconst sizeStyles = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SubnavigationButtonProps extends Omit<TappableOmitProps, 'size'> {\n /**\n * Стиль отображения кнопки.\n */\n mode?: 'primary' | 'outline' | 'tertiary';\n /**\n * Тип внешнего вида кнопки.\n */\n appearance?: 'accent' | 'neutral';\n /**\n * Размер кнопки.\n */\n size?: 's' | 'm' | 'l';\n /**\n * Выбранное состояние.\n */\n selected?: boolean;\n /**\n * Размер шрифта. Этим свойством рекомендуется пользоваться, чтобы отрегулировать размер шрифта у кнопок в `<SubnavigationBar fixed />`.\n */\n textLevel?: '1' | '2' | '3';\n /**\n * Рекомендуется использовать только иконки с размером 24.\n */\n before?: React.ReactNode;\n /**\n * Рекомендуется использовать только `<Counter size=\"s\" />` или `<Badge />`.\n */\n after?: React.ReactNode;\n /**\n * Нужно ли отображать иконку `\"chevron\"`.\n */\n chevron?: boolean;\n}\n\ntype SubnavigationButtonTypographyProps = Pick<\n SubnavigationButtonProps,\n 'textLevel' | 'className'\n> &\n HasComponent &\n HasChildren;\n\nconst SubnavigationButtonTypography = ({\n textLevel,\n ...restProps\n}: SubnavigationButtonTypographyProps) => {\n if (textLevel === '1') {\n return <Subhead {...restProps} />;\n }\n\n return <Caption level={textLevel === '2' ? '1' : '2'} {...restProps} />;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SubnavigationButton\n */\nexport const SubnavigationButton = ({\n mode = 'primary',\n appearance = 'accent',\n size = 'm',\n selected,\n textLevel = '1',\n before,\n after,\n chevron,\n children,\n ...restProps\n}: SubnavigationButtonProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n hasActive={false}\n focusVisibleMode=\"outside\"\n {...restProps}\n baseClassName={classNames(\n styles.host,\n sizeStyles[size],\n modeStyles[mode],\n appearanceStyles[appearance],\n selected && styles.selected,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n restProps.disabled && styles.disabled,\n )}\n >\n <span className={styles.in}>\n {before && <span className={styles.before}>{before}</span>}\n <SubnavigationButtonTypography\n textLevel={textLevel}\n className={styles.label}\n Component=\"span\"\n >\n {children}\n </SubnavigationButtonTypography>\n {after && <span className={styles.after}>{after}</span>}\n {chevron && <Icon16Dropdown className={styles.chevronIcon} />}\n </span>\n </Tappable>\n );\n};\n"],"names":["React","Icon16Dropdown","classNames","useAdaptivity","Tappable","Caption","Subhead","appearanceStyles","accent","neutral","modeStyles","primary","outline","tertiary","sizeStyles","s","m","l","sizeYClassNames","none","compact","SubnavigationButtonTypography","textLevel","restProps","level","SubnavigationButton","mode","appearance","size","selected","before","after","chevron","children","sizeY","hasActive","focusVisibleMode","baseClassName","disabled","span","className","Component"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,cAAc,QAAQ,mBAAmB;AAClD,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAE1D,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,OAAO,QAAQ,mCAAgC;AAGxD,MAAMC,mBAAmB;IACvBC,MAAM;IACNC,OAAO;AACT;AAEA,MAAMC,aAAa;IACjBC,OAAO;IACPC,OAAO;IACPC,QAAQ;AACV;AAEA,MAAMC,aAAa;IACjBC,CAAC;IACDC,CAAC;IACDC,CAAC;AACH;AAEA,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AA4CA,MAAMC,gCAAgC;QAAC,EACrCC,SAAS,EAE0B,WADhCC;QADHD;;IAGA,IAAIA,cAAc,KAAK;QACrB,qBAAO,KAAChB,4BAAYiB;IACtB;IAEA,qBAAO,KAAClB;QAAQmB,OAAOF,cAAc,MAAM,MAAM;OAASC;AAC5D;AAEA;;CAEC,GACD,OAAO,MAAME,sBAAsB;QAAC,EAClCC,OAAO,SAAS,EAChBC,aAAa,QAAQ,EACrBC,OAAO,GAAG,EACVC,QAAQ,EACRP,YAAY,GAAG,EACfQ,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,QAAQ,EAEiB,WADtBV;QATHG;QACAC;QACAC;QACAC;QACAP;QACAQ;QACAC;QACAC;QACAC;;IAGA,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAG/B;IAE3B,qBACE,KAACC;QACC+B,WAAW;QACXC,kBAAiB;OACbb;QACJc,eAAenC,4CAEbY,UAAU,CAACc,KAAK,EAChBlB,UAAU,CAACgB,KAAK,EAChBnB,gBAAgB,CAACoB,WAAW,EAC5BE,iDACAK,UAAU,aAAahB,eAAe,CAACgB,MAAM,EAC7CX,UAAUe,QAAQ;kBAGpB,cAAA,MAACC;YAAKC,SAAS;;gBACZV,wBAAU,KAACS;oBAAKC,SAAS;8BAAkBV;;8BAC5C,KAACT;oBACCC,WAAWA;oBACXkB,SAAS;oBACTC,WAAU;8BAETR;;gBAEFF,uBAAS,KAACQ;oBAAKC,SAAS;8BAAiBT;;gBACzCC,yBAAW,KAAC/B;oBAAeuC,SAAS;;;;;AAI7C,EAAE"}
|
|
@@ -24,17 +24,21 @@ export interface TabsProps extends HTMLAttributesWithRootRef<HTMLDivElement> {
|
|
|
24
24
|
* либо выравниваются по контенту соответственно.
|
|
25
25
|
*/
|
|
26
26
|
layoutFillMode?: 'auto' | 'stretched' | 'shrinked';
|
|
27
|
+
/**
|
|
28
|
+
* Идентификатор выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.
|
|
29
|
+
*/
|
|
30
|
+
selectedId?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Идентификатор выбранной вкладки по умолчанию. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.
|
|
33
|
+
*/
|
|
34
|
+
defaultSelectedId?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Обработчик изменения выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.
|
|
37
|
+
*/
|
|
38
|
+
onSelectedIdChange?: (id: string) => void;
|
|
27
39
|
}
|
|
28
|
-
export interface TabsContextProps {
|
|
29
|
-
mode: TabsProps['mode'];
|
|
30
|
-
withGaps: boolean;
|
|
31
|
-
layoutFillMode: NonNullable<TabsProps['layoutFillMode']>;
|
|
32
|
-
withScrollToSelectedTab: TabsProps['withScrollToSelectedTab'];
|
|
33
|
-
scrollBehaviorToSelectedTab: Required<TabsProps['scrollBehaviorToSelectedTab']>;
|
|
34
|
-
}
|
|
35
|
-
export declare const TabsModeContext: React.Context<TabsContextProps>;
|
|
36
40
|
/**
|
|
37
41
|
* @see https://vkcom.github.io/VKUI/#/Tabs
|
|
38
42
|
*/
|
|
39
|
-
export declare const Tabs: ({ children, mode, role, withScrollToSelectedTab, scrollBehaviorToSelectedTab, layoutFillMode, ...restProps }: TabsProps) => React.ReactNode;
|
|
43
|
+
export declare const Tabs: ({ children, mode, role, withScrollToSelectedTab, scrollBehaviorToSelectedTab, layoutFillMode, selectedId, defaultSelectedId, onSelectedIdChange, ...restProps }: TabsProps) => React.ReactNode;
|
|
40
44
|
//# sourceMappingURL=Tabs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAM7D,MAAM,WAAW,SAAU,SAAQ,yBAAyB,CAAC,cAAc,CAAC;IAC1E;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IACnD;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,iKAWlB,SAAS,KAAG,KAAK,CAAC,SAyCpB,CAAC"}
|
|
@@ -9,24 +9,27 @@ import { useConfigDirection } from "../../hooks/useConfigDirection.js";
|
|
|
9
9
|
import { usePlatform } from "../../hooks/usePlatform.js";
|
|
10
10
|
import { useTabsNavigation } from "../../hooks/useTabsNavigation.js";
|
|
11
11
|
import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
withGaps: false,
|
|
15
|
-
layoutFillMode: 'auto',
|
|
16
|
-
withScrollToSelectedTab: false,
|
|
17
|
-
scrollBehaviorToSelectedTab: 'nearest'
|
|
18
|
-
});
|
|
12
|
+
import { useTabsController } from "./TabsController.js";
|
|
13
|
+
import { TabsModeContext } from "./TabsModeContext.js";
|
|
19
14
|
/**
|
|
20
15
|
* @see https://vkcom.github.io/VKUI/#/Tabs
|
|
21
16
|
*/ export const Tabs = (_param)=>{
|
|
22
|
-
var { children, mode = 'default', role = 'tablist', withScrollToSelectedTab, scrollBehaviorToSelectedTab = 'nearest', layoutFillMode = 'auto' } = _param, restProps = _object_without_properties(_param, [
|
|
17
|
+
var { children, mode = 'default', role = 'tablist', withScrollToSelectedTab, scrollBehaviorToSelectedTab = 'nearest', layoutFillMode = 'auto', selectedId, defaultSelectedId, onSelectedIdChange } = _param, restProps = _object_without_properties(_param, [
|
|
23
18
|
"children",
|
|
24
19
|
"mode",
|
|
25
20
|
"role",
|
|
26
21
|
"withScrollToSelectedTab",
|
|
27
22
|
"scrollBehaviorToSelectedTab",
|
|
28
|
-
"layoutFillMode"
|
|
23
|
+
"layoutFillMode",
|
|
24
|
+
"selectedId",
|
|
25
|
+
"defaultSelectedId",
|
|
26
|
+
"onSelectedIdChange"
|
|
29
27
|
]);
|
|
28
|
+
const controller = useTabsController({
|
|
29
|
+
selectedId,
|
|
30
|
+
defaultSelectedId,
|
|
31
|
+
onSelectedIdChange
|
|
32
|
+
});
|
|
30
33
|
const platform = usePlatform();
|
|
31
34
|
const direction = useConfigDirection();
|
|
32
35
|
const isTabFlow = role === 'tablist';
|
|
@@ -44,7 +47,8 @@ import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
|
44
47
|
withGaps,
|
|
45
48
|
layoutFillMode,
|
|
46
49
|
withScrollToSelectedTab,
|
|
47
|
-
scrollBehaviorToSelectedTab
|
|
50
|
+
scrollBehaviorToSelectedTab,
|
|
51
|
+
controller
|
|
48
52
|
},
|
|
49
53
|
children: children
|
|
50
54
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTabsNavigation } from '../../hooks/useTabsNavigation';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Tabs.module.css';\n\nexport interface TabsProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Режим отображения компонента.\n */\n mode?: 'default' | 'accent' | 'secondary';\n /**\n * Включает прокрутку контейнера до активной (`selected`) вкладки.\n * @since 5.10.0\n */\n withScrollToSelectedTab?: boolean;\n /**\n * Отвечает за горизонтальное выравнивание при прокрутке до активной вкладки.\n * @see [scrollIntoView](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView)\n * @since 5.10.0\n */\n scrollBehaviorToSelectedTab?: ScrollIntoViewOptions['inline'];\n /**\n * При `auto` ширина вкладок определяется контекстом:\n * - равномерно занимают всю доступную ширину при вложении в `HorizontalScroll`\n * - равномерно занимают всю доступную ширину при `mode=default` и platform !== 'VKCOM'\n * При `stretched` и `shrinked` вкладки либо равномерно занимают всю ширину,\n * либо выравниваются по контенту соответственно.\n */\n layoutFillMode?: 'auto' | 'stretched' | 'shrinked';\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTabsNavigation } from '../../hooks/useTabsNavigation';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { useTabsController } from './TabsController';\nimport { TabsModeContext } from './TabsModeContext';\nimport styles from './Tabs.module.css';\n\nexport interface TabsProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Режим отображения компонента.\n */\n mode?: 'default' | 'accent' | 'secondary';\n /**\n * Включает прокрутку контейнера до активной (`selected`) вкладки.\n * @since 5.10.0\n */\n withScrollToSelectedTab?: boolean;\n /**\n * Отвечает за горизонтальное выравнивание при прокрутке до активной вкладки.\n * @see [scrollIntoView](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView)\n * @since 5.10.0\n */\n scrollBehaviorToSelectedTab?: ScrollIntoViewOptions['inline'];\n /**\n * При `auto` ширина вкладок определяется контекстом:\n * - равномерно занимают всю доступную ширину при вложении в `HorizontalScroll`\n * - равномерно занимают всю доступную ширину при `mode=default` и platform !== 'VKCOM'\n * При `stretched` и `shrinked` вкладки либо равномерно занимают всю ширину,\n * либо выравниваются по контенту соответственно.\n */\n layoutFillMode?: 'auto' | 'stretched' | 'shrinked';\n /**\n * Идентификатор выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n selectedId?: string;\n /**\n * Идентификатор выбранной вкладки по умолчанию. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n defaultSelectedId?: string;\n /**\n * Обработчик изменения выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n onSelectedIdChange?: (id: string) => void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tabs\n */\nexport const Tabs = ({\n children,\n mode = 'default',\n role = 'tablist',\n withScrollToSelectedTab,\n scrollBehaviorToSelectedTab = 'nearest',\n layoutFillMode = 'auto',\n selectedId,\n defaultSelectedId,\n onSelectedIdChange,\n ...restProps\n}: TabsProps): React.ReactNode => {\n const controller = useTabsController({\n selectedId,\n defaultSelectedId,\n onSelectedIdChange,\n });\n const platform = usePlatform();\n const direction = useConfigDirection();\n const isTabFlow = role === 'tablist';\n const withGaps = mode === 'accent' || mode === 'secondary';\n\n const { tabsRef } = useTabsNavigation(isTabFlow, direction === 'rtl');\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalTabs',\n platform === 'vkcom' && 'vkuiInternalTabs--vkcom',\n withGaps && classNames(styles.withGaps, 'vkuiInternalTabs--withGaps'),\n mode === 'default' && styles.modeDefault,\n )}\n role={role}\n >\n <div className={styles.in} ref={tabsRef}>\n <TabsModeContext.Provider\n value={{\n mode,\n withGaps,\n layoutFillMode,\n withScrollToSelectedTab,\n scrollBehaviorToSelectedTab,\n controller,\n }}\n >\n {children}\n </TabsModeContext.Provider>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useConfigDirection","usePlatform","useTabsNavigation","RootComponent","useTabsController","TabsModeContext","Tabs","children","mode","role","withScrollToSelectedTab","scrollBehaviorToSelectedTab","layoutFillMode","selectedId","defaultSelectedId","onSelectedIdChange","restProps","controller","platform","direction","isTabFlow","withGaps","tabsRef","baseClassName","div","className","ref","Provider","value"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,kBAAkB,QAAQ,oCAAiC;AACpE,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,iBAAiB,QAAQ,mCAAgC;AAElE,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,iBAAiB,QAAQ,sBAAmB;AACrD,SAASC,eAAe,QAAQ,uBAAoB;AAyCpD;;CAEC,GACD,OAAO,MAAMC,OAAO;QAAC,EACnBC,QAAQ,EACRC,OAAO,SAAS,EAChBC,OAAO,SAAS,EAChBC,uBAAuB,EACvBC,8BAA8B,SAAS,EACvCC,iBAAiB,MAAM,EACvBC,UAAU,EACVC,iBAAiB,EACjBC,kBAAkB,EAER,WADPC;QATHT;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,aAAab,kBAAkB;QACnCS;QACAC;QACAC;IACF;IACA,MAAMG,WAAWjB;IACjB,MAAMkB,YAAYnB;IAClB,MAAMoB,YAAYX,SAAS;IAC3B,MAAMY,WAAWb,SAAS,YAAYA,SAAS;IAE/C,MAAM,EAAEc,OAAO,EAAE,GAAGpB,kBAAkBkB,WAAWD,cAAc;IAE/D,qBACE,KAAChB,uDACKa;QACJO,eAAexB,6BAEb,oBACAmB,aAAa,WAAW,2BACxBG,YAAYtB,iCAA4B,+BACxCS,SAAS;QAEXC,MAAMA;kBAEN,cAAA,KAACe;YAAIC,SAAS;YAAaC,KAAKJ;sBAC9B,cAAA,KAACjB,gBAAgBsB,QAAQ;gBACvBC,OAAO;oBACLpB;oBACAa;oBACAT;oBACAF;oBACAC;oBACAM;gBACF;0BAECV;;;;AAKX,EAAE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type TabsProps } from './Tabs';
|
|
2
|
+
export type TabsController = {
|
|
3
|
+
onChange: (id: string) => void;
|
|
4
|
+
selectedTab: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const useTabsController: ({ selectedId, defaultSelectedId, onSelectedIdChange: onSelectedIdChangeProp, }: Pick<TabsProps, "selectedId" | "defaultSelectedId" | "onSelectedIdChange">) => TabsController | null;
|
|
7
|
+
//# sourceMappingURL=TabsController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsController.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/TabsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,gFAI/B,IAAI,CACL,SAAS,EACT,YAAY,GAAG,mBAAmB,GAAG,oBAAoB,CAC1D,KAAG,cAAc,GAAG,IAkBpB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
|
|
2
|
+
import { useStableCallback } from "../../hooks/useStableCallback.js";
|
|
3
|
+
/* eslint-enable jsdoc/require-jsdoc */ export const useTabsController = ({ selectedId, defaultSelectedId, onSelectedIdChange: onSelectedIdChangeProp })=>{
|
|
4
|
+
const onSelectedIdChange = useStableCallback((id)=>id && (onSelectedIdChangeProp === null || onSelectedIdChangeProp === void 0 ? void 0 : onSelectedIdChangeProp(id)));
|
|
5
|
+
const [value, onChange] = useCustomEnsuredControl({
|
|
6
|
+
onChange: onSelectedIdChange,
|
|
7
|
+
value: selectedId,
|
|
8
|
+
defaultValue: defaultSelectedId
|
|
9
|
+
});
|
|
10
|
+
if (!selectedId && !defaultSelectedId || !value) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
onChange,
|
|
15
|
+
selectedTab: value
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=TabsController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Tabs/TabsController.ts"],"sourcesContent":["import { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { type TabsProps } from './Tabs';\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport type TabsController = {\n onChange: (id: string) => void;\n selectedTab: string;\n};\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const useTabsController = ({\n selectedId,\n defaultSelectedId,\n onSelectedIdChange: onSelectedIdChangeProp,\n}: Pick<\n TabsProps,\n 'selectedId' | 'defaultSelectedId' | 'onSelectedIdChange'\n>): TabsController | null => {\n const onSelectedIdChange = useStableCallback(\n (id: string | undefined) => id && onSelectedIdChangeProp?.(id),\n );\n\n const [value, onChange] = useCustomEnsuredControl<string | undefined>({\n onChange: onSelectedIdChange,\n value: selectedId,\n defaultValue: defaultSelectedId,\n });\n\n if ((!selectedId && !defaultSelectedId) || !value) {\n return null;\n }\n return {\n onChange,\n selectedTab: value,\n };\n};\n"],"names":["useCustomEnsuredControl","useStableCallback","useTabsController","selectedId","defaultSelectedId","onSelectedIdChange","onSelectedIdChangeProp","id","value","onChange","defaultValue","selectedTab"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,mCAAgC;AACxE,SAASC,iBAAiB,QAAQ,mCAAgC;AAQlE,qCAAqC,GAErC,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,UAAU,EACVC,iBAAiB,EACjBC,oBAAoBC,sBAAsB,EAI3C;IACC,MAAMD,qBAAqBJ,kBACzB,CAACM,KAA2BA,OAAMD,mCAAAA,6CAAAA,uBAAyBC;IAG7D,MAAM,CAACC,OAAOC,SAAS,GAAGT,wBAA4C;QACpES,UAAUJ;QACVG,OAAOL;QACPO,cAAcN;IAChB;IAEA,IAAI,AAAC,CAACD,cAAc,CAACC,qBAAsB,CAACI,OAAO;QACjD,OAAO;IACT;IACA,OAAO;QACLC;QACAE,aAAaH;IACf;AACF,EAAE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type TabsProps } from './Tabs';
|
|
3
|
+
import { type TabsController } from './TabsController';
|
|
4
|
+
export interface TabsContextProps {
|
|
5
|
+
mode: TabsProps['mode'];
|
|
6
|
+
withGaps: boolean;
|
|
7
|
+
layoutFillMode: NonNullable<TabsProps['layoutFillMode']>;
|
|
8
|
+
withScrollToSelectedTab: TabsProps['withScrollToSelectedTab'];
|
|
9
|
+
scrollBehaviorToSelectedTab: Required<TabsProps['scrollBehaviorToSelectedTab']>;
|
|
10
|
+
controller: TabsController | null;
|
|
11
|
+
}
|
|
12
|
+
export declare const TabsModeContext: React.Context<TabsContextProps>;
|
|
13
|
+
//# sourceMappingURL=TabsModeContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsModeContext.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/TabsModeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzD,uBAAuB,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC9D,2BAA2B,EAAE,QAAQ,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAChF,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CACnC;AAGD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAQxD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/* eslint-enable jsdoc/require-jsdoc */ export const TabsModeContext = React.createContext({
|
|
3
|
+
mode: 'default',
|
|
4
|
+
withGaps: false,
|
|
5
|
+
layoutFillMode: 'auto',
|
|
6
|
+
withScrollToSelectedTab: false,
|
|
7
|
+
scrollBehaviorToSelectedTab: 'nearest',
|
|
8
|
+
controller: null
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=TabsModeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Tabs/TabsModeContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { type TabsProps } from './Tabs';\nimport { type TabsController } from './TabsController';\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport interface TabsContextProps {\n mode: TabsProps['mode'];\n withGaps: boolean;\n layoutFillMode: NonNullable<TabsProps['layoutFillMode']>;\n withScrollToSelectedTab: TabsProps['withScrollToSelectedTab'];\n scrollBehaviorToSelectedTab: Required<TabsProps['scrollBehaviorToSelectedTab']>;\n controller: TabsController | null;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const TabsModeContext: React.Context<TabsContextProps> =\n React.createContext<TabsContextProps>({\n mode: 'default',\n withGaps: false,\n layoutFillMode: 'auto',\n withScrollToSelectedTab: false,\n scrollBehaviorToSelectedTab: 'nearest',\n controller: null,\n });\n"],"names":["React","TabsModeContext","createContext","mode","withGaps","layoutFillMode","withScrollToSelectedTab","scrollBehaviorToSelectedTab","controller"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAa/B,qCAAqC,GAErC,OAAO,MAAMC,kBACXD,MAAME,aAAa,CAAmB;IACpCC,MAAM;IACNC,UAAU;IACVC,gBAAgB;IAChBC,yBAAyB;IACzBC,6BAA6B;IAC7BC,YAAY;AACd,GAAG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { AnchorHTMLAttributesOnly, HTMLAttributesWithRootRef } from '../../types';
|
|
3
|
-
import { type
|
|
4
|
-
export interface TabsItemProps extends HTMLAttributesWithRootRef<HTMLElement>, AnchorHTMLAttributesOnly, Pick<
|
|
3
|
+
import { type TappableOmitProps } from '../Tappable/Tappable';
|
|
4
|
+
export interface TabsItemProps extends HTMLAttributesWithRootRef<HTMLElement>, AnchorHTMLAttributesOnly, Pick<TappableOmitProps, 'Component' | 'activeMode' | 'hoverMode' | 'hovered' | 'activated' | 'hasActive' | 'hasHover' | 'focusVisibleMode'> {
|
|
5
5
|
/**
|
|
6
6
|
* Добавляет иконку слева.
|
|
7
7
|
*
|
|
@@ -35,5 +35,5 @@ export interface TabsItemProps extends HTMLAttributesWithRootRef<HTMLElement>, A
|
|
|
35
35
|
/**
|
|
36
36
|
* @see https://vkcom.github.io/VKUI/#/TabsItem
|
|
37
37
|
*/
|
|
38
|
-
export declare const TabsItem: ({ before, children, status, after, selected, role, tabIndex: tabIndexProp, getRootRef, hoverMode, activeMode, hasActive, focusVisibleMode, ...restProps }: TabsItemProps) => React.ReactNode;
|
|
38
|
+
export declare const TabsItem: ({ before, children, status, after, selected: selectedProp, role, tabIndex: tabIndexProp, getRootRef, hoverMode, activeMode, hasActive, focusVisibleMode, id, onClick, ...restProps }: TabsItemProps) => React.ReactNode;
|
|
39
39
|
//# sourceMappingURL=TabsItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsItem.d.ts","sourceRoot":"","sources":["../../../src/components/TabsItem/TabsItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAY,KAAK,
|
|
1
|
+
{"version":3,"file":"TabsItem.d.ts","sourceRoot":"","sources":["../../../src/components/TabsItem/TabsItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAsBxE,MAAM,WAAW,aACf,SAAQ,yBAAyB,CAAC,WAAW,CAAC,EAC5C,wBAAwB,EACxB,IAAI,CACF,iBAAiB,EACf,WAAW,GACX,YAAY,GACZ,WAAW,GACX,SAAS,GACT,WAAW,GACX,WAAW,GACX,UAAU,GACV,kBAAkB,CACrB;IACH;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IACrC;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,sLAgBtB,aAAa,KAAG,KAAK,CAAC,SA2IxB,CAAC"}
|
|
@@ -10,7 +10,7 @@ import { useExternRef } from "../../hooks/useExternRef.js";
|
|
|
10
10
|
import { usePrevious } from "../../hooks/usePrevious.js";
|
|
11
11
|
import { useDOM } from "../../lib/dom.js";
|
|
12
12
|
import { warnOnce } from "../../lib/warnOnce.js";
|
|
13
|
-
import { TabsModeContext } from "../Tabs/
|
|
13
|
+
import { TabsModeContext } from "../Tabs/TabsModeContext.js";
|
|
14
14
|
import { Tappable } from "../Tappable/Tappable.js";
|
|
15
15
|
import { Headline } from "../Typography/Headline/Headline.js";
|
|
16
16
|
import { Subhead } from "../Typography/Subhead/Subhead.js";
|
|
@@ -32,7 +32,7 @@ const warn = warnOnce('TabsItem');
|
|
|
32
32
|
/**
|
|
33
33
|
* @see https://vkcom.github.io/VKUI/#/TabsItem
|
|
34
34
|
*/ export const TabsItem = (_param)=>{
|
|
35
|
-
var { before, children, status, after, selected = false, role = 'tab', tabIndex: tabIndexProp, getRootRef, hoverMode = "vkuiTabsItem__hover", activeMode = '', hasActive = false, focusVisibleMode = 'inside' } = _param, restProps = _object_without_properties(_param, [
|
|
35
|
+
var { before, children, status, after, selected: selectedProp = false, role = 'tab', tabIndex: tabIndexProp, getRootRef, hoverMode = "vkuiTabsItem__hover", activeMode = '', hasActive = false, focusVisibleMode = 'inside', id, onClick } = _param, restProps = _object_without_properties(_param, [
|
|
36
36
|
"before",
|
|
37
37
|
"children",
|
|
38
38
|
"status",
|
|
@@ -44,12 +44,15 @@ const warn = warnOnce('TabsItem');
|
|
|
44
44
|
"hoverMode",
|
|
45
45
|
"activeMode",
|
|
46
46
|
"hasActive",
|
|
47
|
-
"focusVisibleMode"
|
|
47
|
+
"focusVisibleMode",
|
|
48
|
+
"id",
|
|
49
|
+
"onClick"
|
|
48
50
|
]);
|
|
49
51
|
const { sizeY = 'none' } = useAdaptivity();
|
|
50
|
-
const { mode, withGaps, layoutFillMode, scrollBehaviorToSelectedTab, withScrollToSelectedTab } = React.useContext(TabsModeContext);
|
|
52
|
+
const { mode, withGaps, layoutFillMode, scrollBehaviorToSelectedTab, withScrollToSelectedTab, controller } = React.useContext(TabsModeContext);
|
|
51
53
|
let statusComponent = null;
|
|
52
54
|
const isTabFlow = role === 'tab';
|
|
55
|
+
const selected = selectedProp || !!id && (controller === null || controller === void 0 ? void 0 : controller.selectedTab) === id;
|
|
53
56
|
if (hasReactNode(status)) {
|
|
54
57
|
statusComponent = typeof status === 'number' ? /*#__PURE__*/ _jsxs(Subhead, {
|
|
55
58
|
Component: "span",
|
|
@@ -74,7 +77,7 @@ const warn = warnOnce('TabsItem');
|
|
|
74
77
|
if (process.env.NODE_ENV === 'development' && isTabFlow) {
|
|
75
78
|
if (!restProps['aria-controls']) {
|
|
76
79
|
warn(`Передайте в "aria-controls" id контролируемого блока`, 'warn');
|
|
77
|
-
} else if (!
|
|
80
|
+
} else if (!id) {
|
|
78
81
|
warn(`Передайте "id" компоненту для использования в "aria-labelledby" контролируемого блока`, 'warn');
|
|
79
82
|
}
|
|
80
83
|
}
|
|
@@ -113,6 +116,16 @@ const warn = warnOnce('TabsItem');
|
|
|
113
116
|
shouldScrollToSelected,
|
|
114
117
|
scrollBehaviorToSelectedTab
|
|
115
118
|
]);
|
|
119
|
+
const _onClick = React.useCallback((e)=>{
|
|
120
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
121
|
+
if (id) {
|
|
122
|
+
controller === null || controller === void 0 ? void 0 : controller.onChange(id);
|
|
123
|
+
}
|
|
124
|
+
}, [
|
|
125
|
+
id,
|
|
126
|
+
onClick,
|
|
127
|
+
controller
|
|
128
|
+
]);
|
|
116
129
|
return /*#__PURE__*/ _jsxs(Tappable, _object_spread_props(_object_spread({
|
|
117
130
|
getRootRef: rootRef,
|
|
118
131
|
hoverMode: hoverMode,
|
|
@@ -122,7 +135,9 @@ const warn = warnOnce('TabsItem');
|
|
|
122
135
|
role: role,
|
|
123
136
|
"aria-selected": selected,
|
|
124
137
|
tabIndex: tabIndex,
|
|
125
|
-
baseClassName: classNames("vkuiTabsItem__host", mode && stylesMode[mode], selected && "vkuiTabsItem__selected", sizeY !== 'regular' && sizeYClassNames[sizeY], withGaps && "vkuiTabsItem__withGaps", layoutFillMode !== 'auto' && fillModeClassNames[layoutFillMode])
|
|
138
|
+
baseClassName: classNames("vkuiTabsItem__host", mode && stylesMode[mode], selected && "vkuiTabsItem__selected", sizeY !== 'regular' && sizeYClassNames[sizeY], withGaps && "vkuiTabsItem__withGaps", layoutFillMode !== 'auto' && fillModeClassNames[layoutFillMode]),
|
|
139
|
+
onClick: _onClick,
|
|
140
|
+
id: id
|
|
126
141
|
}, restProps), {
|
|
127
142
|
children: [
|
|
128
143
|
before && /*#__PURE__*/ _jsx("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/TabsItem/TabsItem.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useDOM } from '../../lib/dom';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { AnchorHTMLAttributesOnly, HTMLAttributesWithRootRef } from '../../types';\nimport { type TabsContextProps, TabsModeContext } from '../Tabs/Tabs';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './TabsItem.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst stylesMode = {\n default: styles.modeDefault,\n accent: styles.modeAccent,\n secondary: styles.modeSecondary,\n};\n\nconst fillModeClassNames = {\n stretched: styles.stretched,\n shrinked: styles.shrinked,\n};\n\nexport interface TabsItemProps\n extends HTMLAttributesWithRootRef<HTMLElement>,\n AnchorHTMLAttributesOnly,\n Pick<\n TappableProps,\n | 'Component'\n | 'activeMode'\n | 'hoverMode'\n | 'hovered'\n | 'activated'\n | 'hasActive'\n | 'hasHover'\n | 'focusVisibleMode'\n > {\n /**\n * Добавляет иконку слева.\n *\n * - Для `mode=\"default\"` используйте иконки размером 24.\n * - Для всех остальных `mode` используйте иконки размером 20.\n */\n before?: React.ReactNode;\n /**\n * Добавляет элемент слева от `after`.\n *\n * - `React.ReactElement` – либо [`Badge`](https://vkcom.github.io/VKUI/#/Badge) с параметром `mode=\"prominent\"`.\n * Либо [`Counter`](https://vkcom.github.io/VKUI/#/Counter) с параметрами `mode=\"prominent\" size=\"s\"`.\n * - `number` – для показа текстового блока с переданным числом.\n */\n status?: React.ReactElement | number;\n /**\n * Добавляет иконку справа.\n *\n * Например, `<Icon16Dropdown />`.\n */\n after?: React.ReactNode;\n /**\n * Флаг для отображения выбранного состояния.\n */\n selected?: boolean;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n}\n\nconst warn = warnOnce('TabsItem');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/TabsItem\n */\nexport const TabsItem = ({\n before,\n children,\n status,\n after,\n selected = false,\n role = 'tab',\n tabIndex: tabIndexProp,\n getRootRef,\n hoverMode = styles.hover,\n activeMode = '',\n hasActive = false,\n focusVisibleMode = 'inside',\n ...restProps\n}: TabsItemProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const {\n mode,\n withGaps,\n layoutFillMode,\n scrollBehaviorToSelectedTab,\n withScrollToSelectedTab,\n }: TabsContextProps = React.useContext(TabsModeContext);\n let statusComponent = null;\n\n const isTabFlow = role === 'tab';\n\n if (hasReactNode(status)) {\n statusComponent =\n typeof status === 'number' ? (\n <Subhead\n Component=\"span\"\n className={classNames(styles.status, styles.statusCount)}\n weight=\"2\"\n >\n <VisuallyHidden> </VisuallyHidden>\n {status}\n </Subhead>\n ) : (\n <span className={styles.status}>\n <VisuallyHidden> </VisuallyHidden>\n {status}\n </span>\n );\n }\n\n if (process.env.NODE_ENV === 'development' && isTabFlow) {\n if (!restProps['aria-controls']) {\n warn(`Передайте в \"aria-controls\" id контролируемого блока`, 'warn');\n } else if (!restProps['id']) {\n warn(\n `Передайте \"id\" компоненту для использования в \"aria-labelledby\" контролируемого блока`,\n 'warn',\n );\n }\n }\n\n let tabIndex = tabIndexProp;\n if (isTabFlow && tabIndex === undefined) {\n tabIndex = selected ? 0 : -1;\n }\n\n const rootRef = useExternRef(getRootRef);\n\n const prevSelected = usePrevious(selected);\n const isInitialRender = prevSelected === undefined;\n const shouldScrollToSelected =\n withScrollToSelectedTab && !isInitialRender && prevSelected !== selected && selected;\n\n const { document } = useDOM();\n React.useEffect(\n function scrollToSelectedItem() {\n if (!shouldScrollToSelected || !rootRef.current || !document) {\n return;\n }\n\n const tabDOMRect = rootRef.current.getBoundingClientRect();\n const isTabVerticallyOutsideOfViewport =\n tabDOMRect.top < 0 || tabDOMRect.bottom > document.documentElement.clientHeight;\n\n /* проверяем, возможен ли вертикальный скролл, а он возможен для scrollIntoView если\n * элемент вертикально вне зоны видимости */\n if (isTabVerticallyOutsideOfViewport) {\n return;\n }\n\n /* Не все браузеры поддерживают используемые нами опции. */\n try {\n rootRef.current.scrollIntoView({\n inline: scrollBehaviorToSelectedTab,\n block: 'nearest',\n behavior: 'smooth',\n });\n } catch {\n /* Вызывать scrollIntoView с булевым аргументом не следует, потому что это повлечёт\n * вертикальный скролл.\n **/\n }\n },\n [rootRef, document, shouldScrollToSelected, scrollBehaviorToSelectedTab],\n );\n\n return (\n <Tappable\n getRootRef={rootRef}\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n role={role}\n aria-selected={selected}\n tabIndex={tabIndex}\n baseClassName={classNames(\n styles.host,\n mode && stylesMode[mode],\n selected && styles.selected,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withGaps && styles.withGaps,\n layoutFillMode !== 'auto' && fillModeClassNames[layoutFillMode],\n )}\n {...restProps}\n >\n {before && <div className={styles.before}>{before}</div>}\n <Headline\n Component=\"span\"\n className={styles.label}\n level={mode === 'default' ? '1' : '2'}\n weight=\"2\"\n >\n {children}\n </Headline>\n {statusComponent}\n {after && <div className={styles.after}>{after}</div>}\n {mode === 'default' && (\n <div className={styles.underline} aria-hidden data-selected={selected} />\n )}\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","useExternRef","usePrevious","useDOM","warnOnce","TabsModeContext","Tappable","Headline","Subhead","VisuallyHidden","sizeYClassNames","none","compact","stylesMode","default","accent","secondary","fillModeClassNames","stretched","shrinked","warn","TabsItem","before","children","status","after","selected","role","tabIndex","tabIndexProp","getRootRef","hoverMode","activeMode","hasActive","focusVisibleMode","restProps","sizeY","mode","withGaps","layoutFillMode","scrollBehaviorToSelectedTab","withScrollToSelectedTab","useContext","statusComponent","isTabFlow","Component","className","weight","span","process","env","NODE_ENV","undefined","rootRef","prevSelected","isInitialRender","shouldScrollToSelected","document","useEffect","scrollToSelectedItem","current","tabDOMRect","getBoundingClientRect","isTabVerticallyOutsideOfViewport","top","bottom","documentElement","clientHeight","scrollIntoView","inline","block","behavior","aria-selected","baseClassName","div","level","aria-hidden","data-selected"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/TabsItem/TabsItem.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useDOM } from '../../lib/dom';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { AnchorHTMLAttributesOnly, HTMLAttributesWithRootRef } from '../../types';\nimport { type TabsContextProps, TabsModeContext } from '../Tabs/TabsModeContext';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './TabsItem.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst stylesMode = {\n default: styles.modeDefault,\n accent: styles.modeAccent,\n secondary: styles.modeSecondary,\n};\n\nconst fillModeClassNames = {\n stretched: styles.stretched,\n shrinked: styles.shrinked,\n};\n\nexport interface TabsItemProps\n extends HTMLAttributesWithRootRef<HTMLElement>,\n AnchorHTMLAttributesOnly,\n Pick<\n TappableOmitProps,\n | 'Component'\n | 'activeMode'\n | 'hoverMode'\n | 'hovered'\n | 'activated'\n | 'hasActive'\n | 'hasHover'\n | 'focusVisibleMode'\n > {\n /**\n * Добавляет иконку слева.\n *\n * - Для `mode=\"default\"` используйте иконки размером 24.\n * - Для всех остальных `mode` используйте иконки размером 20.\n */\n before?: React.ReactNode;\n /**\n * Добавляет элемент слева от `after`.\n *\n * - `React.ReactElement` – либо [`Badge`](https://vkcom.github.io/VKUI/#/Badge) с параметром `mode=\"prominent\"`.\n * Либо [`Counter`](https://vkcom.github.io/VKUI/#/Counter) с параметрами `mode=\"prominent\" size=\"s\"`.\n * - `number` – для показа текстового блока с переданным числом.\n */\n status?: React.ReactElement | number;\n /**\n * Добавляет иконку справа.\n *\n * Например, `<Icon16Dropdown />`.\n */\n after?: React.ReactNode;\n /**\n * Флаг для отображения выбранного состояния.\n */\n selected?: boolean;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n}\n\nconst warn = warnOnce('TabsItem');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/TabsItem\n */\nexport const TabsItem = ({\n before,\n children,\n status,\n after,\n selected: selectedProp = false,\n role = 'tab',\n tabIndex: tabIndexProp,\n getRootRef,\n hoverMode = styles.hover,\n activeMode = '',\n hasActive = false,\n focusVisibleMode = 'inside',\n id,\n onClick,\n ...restProps\n}: TabsItemProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const {\n mode,\n withGaps,\n layoutFillMode,\n scrollBehaviorToSelectedTab,\n withScrollToSelectedTab,\n controller,\n }: TabsContextProps = React.useContext(TabsModeContext);\n let statusComponent = null;\n\n const isTabFlow = role === 'tab';\n\n const selected = selectedProp || (!!id && controller?.selectedTab === id);\n\n if (hasReactNode(status)) {\n statusComponent =\n typeof status === 'number' ? (\n <Subhead\n Component=\"span\"\n className={classNames(styles.status, styles.statusCount)}\n weight=\"2\"\n >\n <VisuallyHidden> </VisuallyHidden>\n {status}\n </Subhead>\n ) : (\n <span className={styles.status}>\n <VisuallyHidden> </VisuallyHidden>\n {status}\n </span>\n );\n }\n\n if (process.env.NODE_ENV === 'development' && isTabFlow) {\n if (!restProps['aria-controls']) {\n warn(`Передайте в \"aria-controls\" id контролируемого блока`, 'warn');\n } else if (!id) {\n warn(\n `Передайте \"id\" компоненту для использования в \"aria-labelledby\" контролируемого блока`,\n 'warn',\n );\n }\n }\n\n let tabIndex = tabIndexProp;\n if (isTabFlow && tabIndex === undefined) {\n tabIndex = selected ? 0 : -1;\n }\n\n const rootRef = useExternRef(getRootRef);\n\n const prevSelected = usePrevious(selected);\n const isInitialRender = prevSelected === undefined;\n const shouldScrollToSelected =\n withScrollToSelectedTab && !isInitialRender && prevSelected !== selected && selected;\n\n const { document } = useDOM();\n React.useEffect(\n function scrollToSelectedItem() {\n if (!shouldScrollToSelected || !rootRef.current || !document) {\n return;\n }\n\n const tabDOMRect = rootRef.current.getBoundingClientRect();\n const isTabVerticallyOutsideOfViewport =\n tabDOMRect.top < 0 || tabDOMRect.bottom > document.documentElement.clientHeight;\n\n /* проверяем, возможен ли вертикальный скролл, а он возможен для scrollIntoView если\n * элемент вертикально вне зоны видимости */\n if (isTabVerticallyOutsideOfViewport) {\n return;\n }\n\n /* Не все браузеры поддерживают используемые нами опции. */\n try {\n rootRef.current.scrollIntoView({\n inline: scrollBehaviorToSelectedTab,\n block: 'nearest',\n behavior: 'smooth',\n });\n } catch {\n /* Вызывать scrollIntoView с булевым аргументом не следует, потому что это повлечёт\n * вертикальный скролл.\n **/\n }\n },\n [rootRef, document, shouldScrollToSelected, scrollBehaviorToSelectedTab],\n );\n\n const _onClick: React.MouseEventHandler<HTMLElement> = React.useCallback(\n (e) => {\n onClick?.(e);\n if (id) {\n controller?.onChange(id);\n }\n },\n [id, onClick, controller],\n );\n\n return (\n <Tappable\n getRootRef={rootRef}\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n role={role}\n aria-selected={selected}\n tabIndex={tabIndex}\n baseClassName={classNames(\n styles.host,\n mode && stylesMode[mode],\n selected && styles.selected,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withGaps && styles.withGaps,\n layoutFillMode !== 'auto' && fillModeClassNames[layoutFillMode],\n )}\n onClick={_onClick}\n id={id}\n {...restProps}\n >\n {before && <div className={styles.before}>{before}</div>}\n <Headline\n Component=\"span\"\n className={styles.label}\n level={mode === 'default' ? '1' : '2'}\n weight=\"2\"\n >\n {children}\n </Headline>\n {statusComponent}\n {after && <div className={styles.after}>{after}</div>}\n {mode === 'default' && (\n <div className={styles.underline} aria-hidden data-selected={selected} />\n )}\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","useExternRef","usePrevious","useDOM","warnOnce","TabsModeContext","Tappable","Headline","Subhead","VisuallyHidden","sizeYClassNames","none","compact","stylesMode","default","accent","secondary","fillModeClassNames","stretched","shrinked","warn","TabsItem","before","children","status","after","selected","selectedProp","role","tabIndex","tabIndexProp","getRootRef","hoverMode","activeMode","hasActive","focusVisibleMode","id","onClick","restProps","sizeY","mode","withGaps","layoutFillMode","scrollBehaviorToSelectedTab","withScrollToSelectedTab","controller","useContext","statusComponent","isTabFlow","selectedTab","Component","className","weight","span","process","env","NODE_ENV","undefined","rootRef","prevSelected","isInitialRender","shouldScrollToSelected","document","useEffect","scrollToSelectedItem","current","tabDOMRect","getBoundingClientRect","isTabVerticallyOutsideOfViewport","top","bottom","documentElement","clientHeight","scrollIntoView","inline","block","behavior","_onClick","useCallback","e","onChange","aria-selected","baseClassName","div","level","aria-hidden","data-selected"],"mappings":"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"}
|
|
@@ -19,5 +19,6 @@ export interface TappableProps extends ClickableProps, StateProps {
|
|
|
19
19
|
*/
|
|
20
20
|
hoverClassName?: string;
|
|
21
21
|
}
|
|
22
|
+
export type TappableOmitProps = Omit<TappableProps, 'DefaultComponent'>;
|
|
22
23
|
export declare const Tappable: ({ baseClassName, borderRadiusMode, children, hoverMode, activeMode, onPointerDown, onPointerCancel, ...restProps }: TappableProps) => React.ReactNode;
|
|
23
24
|
//# sourceMappingURL=Tappable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tappable.d.ts","sourceRoot":"","sources":["../../../src/components/Tappable/Tappable.tsx"],"names":[],"mappings":"AAMA,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExF,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAmBvF,MAAM,WAAW,aAAc,SAAQ,cAAc,EAAE,UAAU;IAC/D;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"Tappable.d.ts","sourceRoot":"","sources":["../../../src/components/Tappable/Tappable.tsx"],"names":[],"mappings":"AAMA,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExF,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAmBvF,MAAM,WAAW,aAAc,SAAQ,cAAc,EAAE,UAAU;IAC/D;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAExE,eAAO,MAAM,QAAQ,GAAI,oHAStB,aAAa,KAAG,KAAK,CAAC,SAqCxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Tappable/Tappable.tsx"],"sourcesContent":["'use client';\n\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { SizeType } from '../../lib/adaptivity';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { checkClickable, Clickable, type ClickableProps } from '../Clickable/Clickable';\nimport { Ripple, useMaybeNeedRipple, useRipple } from './Ripple';\nimport { activeClass, DEFAULT_STATE_MODE, hoverClass, type StateProps } from './state';\nimport styles from './Tappable.module.css';\n\nconst sizeXClassNames = {\n none: styles.sizeXNone,\n compact: styles.sizeXCompact,\n};\n\nfunction hasPointerClassName(hasPointer: boolean | undefined) {\n switch (hasPointer) {\n case undefined:\n return styles.hasPointerNone;\n case false:\n return styles.hasPointerFalse;\n }\n\n return undefined;\n}\n\nexport interface TappableProps extends ClickableProps, StateProps {\n /**\n * Задает border-radius элементу\n * В режиме `auto` на маленьких экранах `border-radius: 0`, иначе определяется токеном `--vkui--size_border_radius--regular`.\n */\n borderRadiusMode?: 'auto' | 'inherit';\n /**\n * @deprecated Since 7.3.0.\n *\n * Свойство устарело и будет удалено в `v8`, используйте свойство `activeMode`.\n */\n activeClassName?: string; // Переделать на Omit<ClickableProps, 'activeClassName' | 'hoverClassName'>\n /**\n * @deprecated Since 7.3.0.\n *\n * Свойство устарело и будет удалено в `v8`, используйте свойство `hoverMode`.\n */\n hoverClassName?: string; // Переделать на Omit<ClickableProps, 'activeClassName' | 'hoverClassName'>\n}\n\nexport const Tappable = ({\n baseClassName,\n borderRadiusMode = 'auto',\n children,\n hoverMode = DEFAULT_STATE_MODE,\n activeMode = DEFAULT_STATE_MODE,\n onPointerDown,\n onPointerCancel,\n ...restProps\n}: TappableProps): React.ReactNode => {\n const isClickable = checkClickable(restProps);\n\n const { sizeX = 'none', hasPointer } = useAdaptivity();\n\n const needRipple = useMaybeNeedRipple(activeMode, hasPointer);\n const { clicks, ...rippleEvents } = useRipple(needRipple, hasPointer);\n\n const handlers = mergeCalls(rippleEvents, {\n onPointerDown,\n onPointerCancel,\n });\n\n const typeProps = restProps.Component === 'button' ? { type: 'button' } : {};\n\n return (\n <Clickable\n baseClassName={classNames(\n 'vkuiInternalTappable',\n baseClassName,\n styles.host,\n sizeX !== SizeType.REGULAR && sizeXClassNames[sizeX],\n borderRadiusMode === 'inherit' && styles.borderRadiusInherit,\n hasPointerClassName(hasPointer),\n )}\n hoverClassName={hoverClass(hoverMode)}\n activeClassName={activeClass(activeMode)}\n {...typeProps}\n {...handlers}\n {...restProps}\n >\n {children}\n {isClickable && (hoverMode === 'background' || activeMode === 'background') && (\n <Ripple needRipple={needRipple} clicks={clicks} />\n )}\n </Clickable>\n );\n};\n"],"names":["classNames","useAdaptivity","SizeType","mergeCalls","checkClickable","Clickable","Ripple","useMaybeNeedRipple","useRipple","activeClass","DEFAULT_STATE_MODE","hoverClass","sizeXClassNames","none","compact","hasPointerClassName","hasPointer","undefined","Tappable","baseClassName","borderRadiusMode","children","hoverMode","activeMode","onPointerDown","onPointerCancel","restProps","isClickable","sizeX","needRipple","clicks","rippleEvents","handlers","typeProps","Component","type","REGULAR","hoverClassName","activeClassName"],"mappings":"AAAA;;;;;AAEA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAAQ,gCAAuB;AAChD,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,cAAc,EAAEC,SAAS,QAA6B,4BAAyB;AACxF,SAASC,MAAM,EAAEC,kBAAkB,EAAEC,SAAS,QAAQ,cAAW;AACjE,SAASC,WAAW,EAAEC,kBAAkB,EAAEC,UAAU,QAAyB,aAAU;AAGvF,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAEA,SAASC,oBAAoBC,UAA+B;IAC1D,OAAQA;QACN,KAAKC;YACH;QACF,KAAK;YACH;IACJ;IAEA,OAAOA;AACT;
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Tappable/Tappable.tsx"],"sourcesContent":["'use client';\n\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { SizeType } from '../../lib/adaptivity';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { checkClickable, Clickable, type ClickableProps } from '../Clickable/Clickable';\nimport { Ripple, useMaybeNeedRipple, useRipple } from './Ripple';\nimport { activeClass, DEFAULT_STATE_MODE, hoverClass, type StateProps } from './state';\nimport styles from './Tappable.module.css';\n\nconst sizeXClassNames = {\n none: styles.sizeXNone,\n compact: styles.sizeXCompact,\n};\n\nfunction hasPointerClassName(hasPointer: boolean | undefined) {\n switch (hasPointer) {\n case undefined:\n return styles.hasPointerNone;\n case false:\n return styles.hasPointerFalse;\n }\n\n return undefined;\n}\n\nexport interface TappableProps extends ClickableProps, StateProps {\n /**\n * Задает border-radius элементу\n * В режиме `auto` на маленьких экранах `border-radius: 0`, иначе определяется токеном `--vkui--size_border_radius--regular`.\n */\n borderRadiusMode?: 'auto' | 'inherit';\n /**\n * @deprecated Since 7.3.0.\n *\n * Свойство устарело и будет удалено в `v8`, используйте свойство `activeMode`.\n */\n activeClassName?: string; // Переделать на Omit<ClickableProps, 'activeClassName' | 'hoverClassName'>\n /**\n * @deprecated Since 7.3.0.\n *\n * Свойство устарело и будет удалено в `v8`, используйте свойство `hoverMode`.\n */\n hoverClassName?: string; // Переделать на Omit<ClickableProps, 'activeClassName' | 'hoverClassName'>\n}\n\n// TODO [>=8]: = React.AllHTMLAttributes<HTMLElement> & HasRootRef<HTMLElement>\n//\n// NOTE: Возможно стоит вообще запретить компонентам расширяться от TappableProps?\nexport type TappableOmitProps = Omit<TappableProps, 'DefaultComponent'>;\n\nexport const Tappable = ({\n baseClassName,\n borderRadiusMode = 'auto',\n children,\n hoverMode = DEFAULT_STATE_MODE,\n activeMode = DEFAULT_STATE_MODE,\n onPointerDown,\n onPointerCancel,\n ...restProps\n}: TappableProps): React.ReactNode => {\n const isClickable = checkClickable(restProps);\n\n const { sizeX = 'none', hasPointer } = useAdaptivity();\n\n const needRipple = useMaybeNeedRipple(activeMode, hasPointer);\n const { clicks, ...rippleEvents } = useRipple(needRipple, hasPointer);\n\n const handlers = mergeCalls(rippleEvents, {\n onPointerDown,\n onPointerCancel,\n });\n\n const typeProps = restProps.Component === 'button' ? { type: 'button' } : {};\n\n return (\n <Clickable\n baseClassName={classNames(\n 'vkuiInternalTappable',\n baseClassName,\n styles.host,\n sizeX !== SizeType.REGULAR && sizeXClassNames[sizeX],\n borderRadiusMode === 'inherit' && styles.borderRadiusInherit,\n hasPointerClassName(hasPointer),\n )}\n hoverClassName={hoverClass(hoverMode)}\n activeClassName={activeClass(activeMode)}\n {...typeProps}\n {...handlers}\n {...restProps}\n >\n {children}\n {isClickable && (hoverMode === 'background' || activeMode === 'background') && (\n <Ripple needRipple={needRipple} clicks={clicks} />\n )}\n </Clickable>\n );\n};\n"],"names":["classNames","useAdaptivity","SizeType","mergeCalls","checkClickable","Clickable","Ripple","useMaybeNeedRipple","useRipple","activeClass","DEFAULT_STATE_MODE","hoverClass","sizeXClassNames","none","compact","hasPointerClassName","hasPointer","undefined","Tappable","baseClassName","borderRadiusMode","children","hoverMode","activeMode","onPointerDown","onPointerCancel","restProps","isClickable","sizeX","needRipple","clicks","rippleEvents","handlers","typeProps","Component","type","REGULAR","hoverClassName","activeClassName"],"mappings":"AAAA;;;;;AAEA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAAQ,gCAAuB;AAChD,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,cAAc,EAAEC,SAAS,QAA6B,4BAAyB;AACxF,SAASC,MAAM,EAAEC,kBAAkB,EAAEC,SAAS,QAAQ,cAAW;AACjE,SAASC,WAAW,EAAEC,kBAAkB,EAAEC,UAAU,QAAyB,aAAU;AAGvF,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAEA,SAASC,oBAAoBC,UAA+B;IAC1D,OAAQA;QACN,KAAKC;YACH;QACF,KAAK;YACH;IACJ;IAEA,OAAOA;AACT;AA2BA,OAAO,MAAMC,WAAW;QAAC,EACvBC,aAAa,EACbC,mBAAmB,MAAM,EACzBC,QAAQ,EACRC,YAAYZ,kBAAkB,EAC9Ba,aAAab,kBAAkB,EAC/Bc,aAAa,EACbC,eAAe,EAED,WADXC;QAPHP;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,cAAcvB,eAAesB;IAEnC,MAAM,EAAEE,QAAQ,MAAM,EAAEZ,UAAU,EAAE,GAAGf;IAEvC,MAAM4B,aAAatB,mBAAmBgB,YAAYP;IAClD,MAAoCR,aAAAA,UAAUqB,YAAYb,aAApD,EAAEc,MAAM,EAAmB,GAAGtB,YAAjBuB,0CAAiBvB;QAA5BsB;;IAER,MAAME,WAAW7B,WAAW4B,cAAc;QACxCP;QACAC;IACF;IAEA,MAAMQ,YAAYP,UAAUQ,SAAS,KAAK,WAAW;QAAEC,MAAM;IAAS,IAAI,CAAC;IAE3E,qBACE,MAAC9B;QACCc,eAAenB,WACb,wBACAmB,qCAEAS,UAAU1B,SAASkC,OAAO,IAAIxB,eAAe,CAACgB,MAAM,EACpDR,qBAAqB,kDACrBL,oBAAoBC;QAEtBqB,gBAAgB1B,WAAWW;QAC3BgB,iBAAiB7B,YAAYc;OACzBU,WACAD,UACAN;;YAEHL;YACAM,eAAgBL,CAAAA,cAAc,gBAAgBC,eAAe,YAAW,mBACvE,KAACjB;gBAAOuB,YAAYA;gBAAYC,QAAQA;;;;AAIhD,EAAE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type AdaptiveIconRendererProps } from '../AdaptiveIconRenderer/AdaptiveIconRenderer';
|
|
2
|
-
import { type
|
|
3
|
-
export interface ToolButtonProps extends
|
|
2
|
+
import { type TappableOmitProps } from '../Tappable/Tappable';
|
|
3
|
+
export interface ToolButtonProps extends TappableOmitProps, AdaptiveIconRendererProps {
|
|
4
4
|
/**
|
|
5
5
|
* Режим отображения компонента.
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolButton.d.ts","sourceRoot":"","sources":["../../../src/components/ToolButton/ToolButton.tsx"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAY,KAAK,
|
|
1
|
+
{"version":3,"file":"ToolButton.d.ts","sourceRoot":"","sources":["../../../src/components/ToolButton/ToolButton.tsx"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAyBxE,MAAM,WAAW,eAAgB,SAAQ,iBAAiB,EAAE,yBAAyB;IACnF;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IACxD;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,4FASxB,eAAe,KAAG,KAAK,CAAC,SAyB1B,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,KAAK,GAAG,QAAQ,EAC3B,WAAW,EAAE,OAAO,GACnB,MAAM,GAAG,SAAS,CAOpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ToolButton/ToolButton.tsx"],"sourcesContent":["'use client';\n\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport {\n AdaptiveIconRenderer,\n type AdaptiveIconRendererProps,\n} from '../AdaptiveIconRenderer/AdaptiveIconRenderer';\nimport { Tappable, type
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ToolButton/ToolButton.tsx"],"sourcesContent":["'use client';\n\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport {\n AdaptiveIconRenderer,\n type AdaptiveIconRendererProps,\n} from '../AdaptiveIconRenderer/AdaptiveIconRenderer';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport styles from './ToolButton.module.css';\n\nconst stylesMode = {\n primary: styles.modePrimary,\n secondary: styles.modeSecondary,\n tertiary: styles.modeTertiary,\n outline: styles.modeOutline,\n};\n\nconst stylesAppearance = {\n accent: styles.appearanceAccent,\n neutral: styles.appearanceNeutral,\n};\n\nconst stylesDirection = {\n row: styles.directionRow,\n column: styles.directionColumn,\n};\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n regular: styles.sizeYRegular,\n};\n\nexport interface ToolButtonProps extends TappableOmitProps, AdaptiveIconRendererProps {\n /**\n * Режим отображения компонента.\n */\n mode?: 'primary' | 'secondary' | 'tertiary' | 'outline';\n /**\n * Внешний вид компонента.\n */\n appearance?: 'accent' | 'neutral';\n /**\n * Направление контента.\n */\n direction?: 'row' | 'column';\n /**\n * Задаёт `50%` закругления для контейнера.\n *\n * > Note: игнорируется при `direction=\"column\"` если передан `children`.\n */\n rounded?: boolean;\n}\n\n/**\n * Кнопки, которые используются для вызова инструмента, вставки аттачей или\n * для форматирования. Их можно использовать как кнопки для разового действия\n * или для включения/выключения режима.\n *\n * @see https://vkcom.github.io/VKUI/#/ToolButton\n */\nexport const ToolButton = ({\n mode = 'primary',\n appearance = 'accent',\n direction = 'row',\n children,\n IconCompact,\n IconRegular,\n rounded,\n ...restProps\n}: ToolButtonProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const hasChildren = hasReactNode(children);\n\n return (\n <Tappable\n hoverMode={styles.hover}\n activeMode={styles.active}\n Component={restProps.href ? 'a' : 'button'}\n focusVisibleMode=\"outside\"\n baseClassName={classNames(\n styles.host,\n rounded && getRoundedClassName(direction, hasChildren),\n hasChildren && direction === 'row' && styles.withFakeEndIcon,\n stylesMode[mode],\n stylesAppearance[appearance],\n stylesDirection[direction],\n sizeY !== 'compact' && sizeYClassNames[sizeY],\n )}\n {...restProps}\n >\n <AdaptiveIconRenderer IconCompact={IconCompact} IconRegular={IconRegular} />\n {hasChildren && <span className={styles.text}>{children}</span>}\n </Tappable>\n );\n};\n\nexport function getRoundedClassName(\n direction: 'row' | 'column',\n hasChildren: boolean,\n): string | undefined {\n switch (direction) {\n case 'row':\n return styles.rounded;\n case 'column':\n return hasChildren ? undefined : styles.rounded;\n }\n}\n"],"names":["classNames","hasReactNode","useAdaptivity","AdaptiveIconRenderer","Tappable","stylesMode","primary","secondary","tertiary","outline","stylesAppearance","accent","neutral","stylesDirection","row","column","sizeYClassNames","none","regular","ToolButton","mode","appearance","direction","children","IconCompact","IconRegular","rounded","restProps","sizeY","hasChildren","hoverMode","activeMode","Component","href","focusVisibleMode","baseClassName","getRoundedClassName","span","className","undefined"],"mappings":"AAAA;;;;;AAEA,SAASA,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SACEC,oBAAoB,QAEf,kDAA+C;AACtD,SAASC,QAAQ,QAAgC,0BAAuB;AAGxE,MAAMC,aAAa;IACjBC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,OAAO;AACT;AAEA,MAAMC,mBAAmB;IACvBC,MAAM;IACNC,OAAO;AACT;AAEA,MAAMC,kBAAkB;IACtBC,GAAG;IACHC,MAAM;AACR;AAEA,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAuBA;;;;;;CAMC,GACD,OAAO,MAAMC,aAAa;QAAC,EACzBC,OAAO,SAAS,EAChBC,aAAa,QAAQ,EACrBC,YAAY,KAAK,EACjBC,QAAQ,EACRC,WAAW,EACXC,WAAW,EACXC,OAAO,EAES,WADbC;QAPHP;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAG1B;IAC3B,MAAM2B,cAAc5B,aAAasB;IAEjC,qBACE,MAACnB;QACC0B,SAAS;QACTC,UAAU;QACVC,WAAWL,UAAUM,IAAI,GAAG,MAAM;QAClCC,kBAAiB;QACjBC,eAAenC,mCAEb0B,WAAWU,oBAAoBd,WAAWO,cAC1CA,eAAeP,cAAc,4CAC7BjB,UAAU,CAACe,KAAK,EAChBV,gBAAgB,CAACW,WAAW,EAC5BR,eAAe,CAACS,UAAU,EAC1BM,UAAU,aAAaZ,eAAe,CAACY,MAAM;OAE3CD;;0BAEJ,KAACxB;gBAAqBqB,aAAaA;gBAAaC,aAAaA;;YAC5DI,6BAAe,KAACQ;gBAAKC,SAAS;0BAAgBf;;;;AAGrD,EAAE;AAEF,OAAO,SAASa,oBACdd,SAA2B,EAC3BO,WAAoB;IAEpB,OAAQP;QACN,KAAK;YACH;QACF,KAAK;YACH,OAAOO,cAAcU;IACzB;AACF"}
|