@vkontakte/vkui 7.9.2 → 7.10.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/README.md +1 -0
- package/dist/components/Button/Button.js +6 -4
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/CarouselBase/CarouselBase.d.ts +1 -1
- package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
- package/dist/components/CarouselBase/CarouselBase.js +14 -6
- package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/components/CarouselBase/ScrollArrows.d.ts +1 -2
- package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -1
- package/dist/components/CarouselBase/ScrollArrows.js +2 -2
- package/dist/components/CarouselBase/ScrollArrows.js.map +1 -1
- package/dist/components/Clickable/useState.d.ts +15 -0
- package/dist/components/Clickable/useState.d.ts.map +1 -1
- package/dist/components/Clickable/useState.js +1 -1
- package/dist/components/Clickable/useState.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +1 -1
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/Footer/Footer.d.ts.map +1 -1
- package/dist/components/Footer/Footer.js +2 -1
- package/dist/components/Footer/Footer.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.js +20 -10
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/SubnavigationBar/SubnavigationBar.d.ts +6 -2
- package/dist/components/SubnavigationBar/SubnavigationBar.d.ts.map +1 -1
- package/dist/components/SubnavigationBar/SubnavigationBar.js +6 -3
- package/dist/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
- package/dist/components/Typography/Typography.d.ts +5 -1
- package/dist/components/Typography/Typography.d.ts.map +1 -1
- package/dist/components/Typography/Typography.js +9 -3
- package/dist/components/Typography/Typography.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.module.css +4 -4
- package/dist/cssm/components/Alert/Alert.module.css +4 -4
- package/dist/cssm/components/Button/Button.js +3 -1
- package/dist/cssm/components/Button/Button.js.map +1 -1
- package/dist/cssm/components/CarouselBase/CarouselBase.js +10 -5
- package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/cssm/components/CarouselBase/CarouselBase.module.css +1 -1
- package/dist/cssm/components/CarouselBase/ScrollArrows.js +2 -2
- package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -1
- package/dist/cssm/components/CellButton/CellButton.module.css +4 -2
- package/dist/cssm/components/Clickable/useState.js +1 -1
- package/dist/cssm/components/Clickable/useState.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +2 -2
- package/dist/cssm/components/DateInput/DateInput.module.css +3 -2
- package/dist/cssm/components/Epic/Epic.module.css +2 -1
- package/dist/cssm/components/FixedLayout/FixedLayout.module.css +6 -3
- package/dist/cssm/components/Flex/Flex.module.css +12 -4
- package/dist/cssm/components/Footer/Footer.js +1 -0
- package/dist/cssm/components/Footer/Footer.js.map +1 -1
- package/dist/cssm/components/Footer/Footer.module.css +0 -1
- package/dist/cssm/components/FormField/FormField.module.css +10 -6
- package/dist/cssm/components/FormItem/FormItem.module.css +24 -12
- package/dist/cssm/components/GridAvatar/GridAvatar.module.css +1 -1
- package/dist/cssm/components/Group/Group.module.css +5 -2
- package/dist/cssm/components/HorizontalCell/HorizontalCell.module.css +4 -2
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +14 -8
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +3 -3
- package/dist/cssm/components/IconButton/IconButton.module.css +6 -2
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +4 -2
- package/dist/cssm/components/ModalCard/ModalCard.module.css +2 -1
- package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +14 -10
- package/dist/cssm/components/ModalPage/ModalPage.module.css +2 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +5 -3
- package/dist/cssm/components/Panel/Panel.module.css +4 -2
- package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +2 -2
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +2 -2
- package/dist/cssm/components/Removable/Removable.module.css +9 -4
- package/dist/cssm/components/Root/Root.module.css +8 -8
- package/dist/cssm/components/Search/Search.module.css +2 -3
- package/dist/cssm/components/Snackbar/Snackbar.module.css +4 -2
- package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +15 -15
- package/dist/cssm/components/SplitLayout/SplitLayout.module.css +8 -4
- package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js +4 -3
- package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
- package/dist/cssm/components/SubnavigationBar/SubnavigationBar.module.css +9 -0
- package/dist/cssm/components/Switch/Switch.module.css +32 -20
- package/dist/cssm/components/Typography/Typography.js +7 -2
- package/dist/cssm/components/Typography/Typography.js.map +1 -1
- package/dist/cssm/components/Typography/Typography.module.css +12 -0
- package/dist/cssm/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js +1 -1
- package/dist/cssm/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js.map +1 -1
- package/dist/cssm/hooks/useKeyboardInputTracker.js +4 -4
- package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
- package/dist/cssm/index.js +1 -0
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
- package/dist/cssm/lib/animation/useReducedMotion.js +7 -2
- package/dist/cssm/lib/animation/useReducedMotion.js.map +1 -1
- package/dist/cssm/lib/dom.js +2 -2
- package/dist/cssm/lib/dom.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +1 -1
- package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
- package/dist/cssm/styles/constants.css +2 -1
- package/dist/cssm/styles/customMedias.generated.css +21 -21
- package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.d.ts.map +1 -1
- package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js +1 -1
- package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js.map +1 -1
- package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
- package/dist/hooks/useKeyboardInputTracker.js +4 -4
- package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/adaptivity/functions.d.ts.map +1 -1
- package/dist/lib/adaptivity/functions.js.map +1 -1
- package/dist/lib/animation/useReducedMotion.d.ts +6 -0
- package/dist/lib/animation/useReducedMotion.d.ts.map +1 -1
- package/dist/lib/animation/useReducedMotion.js +7 -2
- package/dist/lib/animation/useReducedMotion.js.map +1 -1
- package/dist/lib/dom.d.ts.map +1 -1
- package/dist/lib/dom.js +2 -2
- package/dist/lib/dom.js.map +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/dist/lib/sheet/controllers/BottomSheetController.js +1 -1
- package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +2 -1
- package/src/components/ActionSheet/ActionSheet.module.css +4 -4
- package/src/components/Alert/Alert.module.css +4 -4
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/CarouselBase/CarouselBase.module.css +1 -1
- package/src/components/CarouselBase/CarouselBase.module.css.d.ts.map +1 -1
- package/src/components/CarouselBase/CarouselBase.tsx +10 -4
- package/src/components/CarouselBase/ScrollArrows.tsx +1 -3
- package/src/components/CellButton/CellButton.module.css +2 -1
- package/src/components/CellButton/CellButton.module.css.d.ts.map +1 -1
- package/src/components/Clickable/useState.tsx +8 -3
- package/src/components/CustomSelect/CustomSelect.tsx +1 -1
- package/src/components/CustomSelectOption/CustomSelectOption.module.css +1 -1
- package/src/components/DateInput/DateInput.module.css +3 -2
- package/src/components/DateInput/DateInput.module.css.d.ts.map +1 -1
- package/src/components/Epic/Epic.module.css +2 -1
- package/src/components/FixedLayout/FixedLayout.module.css +4 -2
- package/src/components/FixedLayout/FixedLayout.module.css.d.ts.map +1 -1
- package/src/components/Flex/Flex.module.css +6 -2
- package/src/components/Flex/Flex.module.css.d.ts.map +1 -1
- package/src/components/Footer/Footer.module.css +0 -1
- package/src/components/Footer/Footer.tsx +1 -0
- package/src/components/FormField/FormField.module.css +10 -6
- package/src/components/FormField/FormField.module.css.d.ts.map +1 -1
- package/src/components/FormItem/FormItem.module.css +12 -6
- package/src/components/FormItem/FormItem.module.css.d.ts.map +1 -1
- package/src/components/GridAvatar/GridAvatar.module.css +1 -1
- package/src/components/GridAvatar/GridAvatar.module.css.d.ts.map +1 -1
- package/src/components/Group/Group.module.css +5 -2
- package/src/components/Group/Group.module.css.d.ts.map +1 -1
- package/src/components/HorizontalCell/HorizontalCell.module.css +4 -2
- package/src/components/HorizontalCell/HorizontalCell.module.css.d.ts.map +1 -1
- package/src/components/HorizontalScroll/HorizontalScroll.module.css +3 -3
- package/src/components/HorizontalScroll/HorizontalScroll.module.css.d.ts.map +1 -1
- package/src/components/HorizontalScroll/HorizontalScroll.tsx +15 -7
- package/src/components/IconButton/IconButton.module.css +6 -2
- package/src/components/IconButton/IconButton.module.css.d.ts.map +1 -1
- package/src/components/MiniInfoCell/MiniInfoCell.module.css +4 -2
- package/src/components/MiniInfoCell/MiniInfoCell.module.css.d.ts.map +1 -1
- package/src/components/ModalCard/ModalCard.module.css +2 -1
- package/src/components/ModalCard/ModalCard.module.css.d.ts.map +1 -1
- package/src/components/ModalCardBase/ModalCardBase.module.css +7 -5
- package/src/components/ModalCardBase/ModalCardBase.module.css.d.ts.map +1 -1
- package/src/components/ModalPage/ModalPage.module.css +2 -1
- package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
- package/src/components/ModalPageHeader/ModalPageHeader.module.css +5 -2
- package/src/components/ModalPageHeader/ModalPageHeader.module.css.d.ts.map +1 -1
- package/src/components/Panel/Panel.module.css +2 -1
- package/src/components/Panel/Panel.module.css.d.ts.map +1 -1
- package/src/components/PanelHeader/PanelHeader.module.css +1 -1
- package/src/components/PanelHeader/PanelHeader.module.css.d.ts.map +1 -1
- package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +2 -2
- package/src/components/PopoutWrapper/PopoutWrapper.module.css +2 -2
- package/src/components/Removable/Removable.module.css +9 -4
- package/src/components/Removable/Removable.module.css.d.ts.map +1 -1
- package/src/components/Root/Root.module.css +8 -8
- package/src/components/Search/Search.module.css +2 -2
- package/src/components/Snackbar/Snackbar.module.css +4 -2
- package/src/components/Snackbar/Snackbar.module.css.d.ts.map +1 -1
- package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +15 -15
- package/src/components/SplitLayout/SplitLayout.module.css +4 -2
- package/src/components/SplitLayout/SplitLayout.module.css.d.ts.map +1 -1
- package/src/components/SubnavigationBar/SubnavigationBar.module.css +9 -0
- package/src/components/SubnavigationBar/SubnavigationBar.module.css.d.ts.map +1 -1
- package/src/components/SubnavigationBar/SubnavigationBar.tsx +14 -3
- package/src/components/Switch/Switch.module.css +32 -20
- package/src/components/Switch/Switch.module.css.d.ts.map +1 -1
- package/src/components/Typography/Typography.module.css +12 -0
- package/src/components/Typography/Typography.module.css.d.ts.map +1 -1
- package/src/components/Typography/Typography.tsx +12 -0
- package/src/hooks/useDraggableWithDomApi/useDraggableWithDomApi.ts +7 -1
- package/src/hooks/useKeyboardInputTracker.ts +20 -4
- package/src/index.ts +1 -0
- package/src/lib/adaptivity/functions.ts +36 -6
- package/src/lib/animation/useReducedMotion.ts +7 -1
- package/src/lib/dom.tsx +11 -2
- package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +1 -1
- package/src/lib/sheet/controllers/BottomSheetController.ts +1 -1
- package/src/styles/constants.css +2 -1
- package/src/styles/customMedias.generated.css +21 -21
- package/dist/cssm/hooks/useAdaptivityHasPointer.js +0 -15
- package/dist/cssm/hooks/useAdaptivityHasPointer.js.map +0 -1
- package/dist/hooks/useAdaptivityHasPointer.d.ts +0 -9
- package/dist/hooks/useAdaptivityHasPointer.d.ts.map +0 -1
- package/dist/hooks/useAdaptivityHasPointer.js +0 -15
- package/dist/hooks/useAdaptivityHasPointer.js.map +0 -1
- package/src/hooks/useAdaptivityHasPointer.ts +0 -25
package/README.md
CHANGED
|
@@ -59,13 +59,15 @@ const sizeYClassNames = {
|
|
|
59
59
|
const hasIconOnly = !children && Boolean(after) !== Boolean(before);
|
|
60
60
|
const { sizeY = 'none' } = useAdaptivity();
|
|
61
61
|
const platform = usePlatform();
|
|
62
|
-
return /*#__PURE__*/ _jsxs(Tappable, _object_spread_props(_object_spread({
|
|
62
|
+
return /*#__PURE__*/ _jsxs(Tappable, _object_spread_props(_object_spread(_object_spread_props(_object_spread({
|
|
63
63
|
hoverMode: "vkuiButton__hover",
|
|
64
|
-
activeMode: "vkuiButton__active"
|
|
65
|
-
|
|
64
|
+
activeMode: "vkuiButton__active"
|
|
65
|
+
}, restProps.href === undefined && {
|
|
66
|
+
Component: 'button'
|
|
67
|
+
}), {
|
|
66
68
|
focusVisibleMode: "outside",
|
|
67
69
|
disabled: loading || disabled
|
|
68
|
-
}, restProps), {
|
|
70
|
+
}), restProps), {
|
|
69
71
|
onClick: loading ? undefined : onClick,
|
|
70
72
|
baseClassName: classNames("vkuiButton__host", stylesSize[size], stylesMode[mode], stylesAppearance[appearance], align !== 'center' && stylesAlign[align], sizeY !== 'compact' && sizeYClassNames[sizeY], platform === 'ios' && "vkuiButton__ios", stretched && "vkuiButton__stretched", hasIconOnly && !stretched && "vkuiButton__singleIcon", loading && "vkuiButton__loading", rounded && "vkuiButton__rounded", disabled && "vkuiButton__disabled"),
|
|
71
73
|
getRootRef: getRootRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasAlign } from '../../types';\nimport { Spinner } from '../Spinner/Spinner';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport '../Tappable/Tappable.module.css';\nimport '../Spinner/Spinner.module.css';\nimport styles from './Button.module.css';\n\nconst stylesSize = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nconst stylesMode = {\n primary: styles.modePrimary,\n secondary: styles.modeSecondary,\n tertiary: styles.modeTertiary,\n outline: styles.modeOutline,\n link: styles.modeLink,\n};\n\nconst stylesAppearance = {\n 'accent': styles.appearanceAccent,\n 'positive': styles.appearancePositive,\n 'negative': styles.appearanceNegative,\n 'neutral': styles.appearanceNeutral,\n 'overlay': styles.appearanceOverlay,\n 'accent-invariable': styles.appearanceAccentInvariable,\n};\n\nconst stylesAlign = {\n left: styles.alignLeft,\n right: styles.alignRight,\n};\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n regular: styles.sizeYRegular,\n};\n\nexport interface VKUIButtonProps extends HasAlign {\n /**\n * Режим отображения кнопки.\n */\n mode?: 'primary' | 'secondary' | 'tertiary' | 'outline' | 'link';\n /**\n * Цветовая схема кнопки.\n */\n appearance?: 'accent' | 'positive' | 'negative' | 'neutral' | 'overlay' | 'accent-invariable';\n /**\n * Размер кнопки.\n */\n size?: 's' | 'm' | 'l';\n /**\n * Растягивает кнопку на всю ширину контейнера.\n */\n stretched?: boolean;\n /**\n * Контент, отображаемый перед основным содержимым кнопки.\n */\n before?: React.ReactNode;\n /**\n * Контент, отображаемый после основного содержимого кнопки.\n */\n after?: React.ReactNode;\n /**\n * Включает состояние загрузки (отображает спиннер).\n */\n loading?: boolean;\n /**\n * Отключает анимацию спиннера загрузки.\n */\n disableSpinnerAnimation?: boolean;\n /**\n * Добавляет скругленные углы кнопке.\n */\n rounded?: boolean;\n}\n\nexport interface ButtonProps extends Omit<TappableOmitProps, 'size'>, VKUIButtonProps {}\n\n/**\n * @see https://vkui.io/components/button\n */\nexport const Button = ({\n size = 's',\n mode = 'primary',\n appearance = 'accent',\n stretched = false,\n align = 'center',\n children,\n before,\n after,\n getRootRef,\n loading,\n onClick,\n disableSpinnerAnimation,\n rounded,\n disabled,\n ...restProps\n}: ButtonProps): React.ReactNode => {\n const hasIconOnly = !children && Boolean(after) !== Boolean(before);\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n return (\n <Tappable\n hoverMode={styles.hover}\n activeMode={styles.active}\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasAlign } from '../../types';\nimport { Spinner } from '../Spinner/Spinner';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport '../Tappable/Tappable.module.css';\nimport '../Spinner/Spinner.module.css';\nimport styles from './Button.module.css';\n\nconst stylesSize = {\n s: styles.sizeS,\n m: styles.sizeM,\n l: styles.sizeL,\n};\n\nconst stylesMode = {\n primary: styles.modePrimary,\n secondary: styles.modeSecondary,\n tertiary: styles.modeTertiary,\n outline: styles.modeOutline,\n link: styles.modeLink,\n};\n\nconst stylesAppearance = {\n 'accent': styles.appearanceAccent,\n 'positive': styles.appearancePositive,\n 'negative': styles.appearanceNegative,\n 'neutral': styles.appearanceNeutral,\n 'overlay': styles.appearanceOverlay,\n 'accent-invariable': styles.appearanceAccentInvariable,\n};\n\nconst stylesAlign = {\n left: styles.alignLeft,\n right: styles.alignRight,\n};\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n regular: styles.sizeYRegular,\n};\n\nexport interface VKUIButtonProps extends HasAlign {\n /**\n * Режим отображения кнопки.\n */\n mode?: 'primary' | 'secondary' | 'tertiary' | 'outline' | 'link';\n /**\n * Цветовая схема кнопки.\n */\n appearance?: 'accent' | 'positive' | 'negative' | 'neutral' | 'overlay' | 'accent-invariable';\n /**\n * Размер кнопки.\n */\n size?: 's' | 'm' | 'l';\n /**\n * Растягивает кнопку на всю ширину контейнера.\n */\n stretched?: boolean;\n /**\n * Контент, отображаемый перед основным содержимым кнопки.\n */\n before?: React.ReactNode;\n /**\n * Контент, отображаемый после основного содержимого кнопки.\n */\n after?: React.ReactNode;\n /**\n * Включает состояние загрузки (отображает спиннер).\n */\n loading?: boolean;\n /**\n * Отключает анимацию спиннера загрузки.\n */\n disableSpinnerAnimation?: boolean;\n /**\n * Добавляет скругленные углы кнопке.\n */\n rounded?: boolean;\n}\n\nexport interface ButtonProps extends Omit<TappableOmitProps, 'size'>, VKUIButtonProps {}\n\n/**\n * @see https://vkui.io/components/button\n */\nexport const Button = ({\n size = 's',\n mode = 'primary',\n appearance = 'accent',\n stretched = false,\n align = 'center',\n children,\n before,\n after,\n getRootRef,\n loading,\n onClick,\n disableSpinnerAnimation,\n rounded,\n disabled,\n ...restProps\n}: ButtonProps): React.ReactNode => {\n const hasIconOnly = !children && Boolean(after) !== Boolean(before);\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n return (\n <Tappable\n hoverMode={styles.hover}\n activeMode={styles.active}\n {...(restProps.href === undefined && { Component: 'button' })}\n focusVisibleMode=\"outside\"\n disabled={loading || disabled}\n {...restProps}\n onClick={loading ? undefined : onClick}\n baseClassName={classNames(\n styles.host,\n stylesSize[size],\n stylesMode[mode],\n stylesAppearance[appearance],\n align !== 'center' && stylesAlign[align],\n sizeY !== 'compact' && sizeYClassNames[sizeY],\n platform === 'ios' && styles.ios,\n stretched && styles.stretched,\n hasIconOnly && !stretched && styles.singleIcon,\n loading && styles.loading,\n rounded && styles.rounded,\n disabled && styles.disabled,\n )}\n getRootRef={getRootRef}\n >\n {loading && (\n <Spinner\n size=\"s\"\n className={styles.spinner}\n disableAnimation={disableSpinnerAnimation}\n noColor\n />\n )}\n <span className={styles.in}>\n {hasReactNode(before) && (\n <span\n className={styles.before}\n role=\"presentation\"\n data-testid={process.env.NODE_ENV === 'test' ? 'before' : undefined}\n >\n {before}\n </span>\n )}\n {hasReactNode(children) && (\n <span\n className={styles.content}\n data-testid={process.env.NODE_ENV === 'test' ? 'children' : undefined}\n >\n {children}\n </span>\n )}\n {hasReactNode(after) && (\n <span\n className={styles.after}\n role=\"presentation\"\n data-testid={process.env.NODE_ENV === 'test' ? 'after' : undefined}\n >\n {after}\n </span>\n )}\n </span>\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","usePlatform","Spinner","Tappable","stylesSize","s","m","l","stylesMode","primary","secondary","tertiary","outline","link","stylesAppearance","stylesAlign","left","right","sizeYClassNames","none","regular","Button","size","mode","appearance","stretched","align","children","before","after","getRootRef","loading","onClick","disableSpinnerAnimation","rounded","disabled","restProps","hasIconOnly","Boolean","sizeY","platform","hoverMode","activeMode","href","undefined","Component","focusVisibleMode","baseClassName","className","disableAnimation","noColor","span","role","data-testid","process","env","NODE_ENV"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,OAAO,QAAQ,wBAAqB;AAC7C,SAASC,QAAQ,QAAgC,0BAAuB;AAKxE,MAAMC,aAAa;IACjBC,CAAC;IACDC,CAAC;IACDC,CAAC;AACH;AAEA,MAAMC,aAAa;IACjBC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,OAAO;IACPC,IAAI;AACN;AAEA,MAAMC,mBAAmB;IACvB,QAAQ;IACR,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,mBAAmB;AACrB;AAEA,MAAMC,cAAc;IAClBC,IAAI;IACJC,KAAK;AACP;AAEA,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AA2CA;;CAEC,GACD,OAAO,MAAMC,SAAS;QAAC,EACrBC,OAAO,GAAG,EACVC,OAAO,SAAS,EAChBC,aAAa,QAAQ,EACrBC,YAAY,KAAK,EACjBC,QAAQ,QAAQ,EAChBC,QAAQ,EACRC,MAAM,EACNC,KAAK,EACLC,UAAU,EACVC,OAAO,EACPC,OAAO,EACPC,uBAAuB,EACvBC,OAAO,EACPC,QAAQ,EAEI,WADTC;QAdHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,cAAc,CAACV,YAAYW,QAAQT,WAAWS,QAAQV;IAC5D,MAAM,EAAEW,QAAQ,MAAM,EAAE,GAAGvC;IAC3B,MAAMwC,WAAWvC;IAEjB,qBACE,MAACE;QACCsC,SAAS;QACTC,UAAU;OACLN,UAAUO,IAAI,KAAKC,aAAa;QAAEC,WAAW;IAAS;QAC3DC,kBAAiB;QACjBX,UAAUJ,WAAWI;QACjBC;QACJJ,SAASD,UAAUa,YAAYZ;QAC/Be,eAAejD,+BAEbM,UAAU,CAACkB,KAAK,EAChBd,UAAU,CAACe,KAAK,EAChBT,gBAAgB,CAACU,WAAW,EAC5BE,UAAU,YAAYX,WAAW,CAACW,MAAM,EACxCa,UAAU,aAAarB,eAAe,CAACqB,MAAM,EAC7CC,aAAa,4BACbf,sCACAY,eAAe,CAACZ,uCAChBM,kCACAG,kCACAC;QAEFL,YAAYA;;YAEXC,yBACC,KAAC7B;gBACCoB,MAAK;gBACL0B,SAAS;gBACTC,kBAAkBhB;gBAClBiB,OAAO;;0BAGX,MAACC;gBAAKH,SAAS;;oBACZjD,aAAa6B,yBACZ,KAACuB;wBACCH,SAAS;wBACTI,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,WAAWZ;kCAEzDhB;;oBAGJ7B,aAAa4B,2BACZ,KAACwB;wBACCH,SAAS;wBACTK,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,aAAaZ;kCAE3DjB;;oBAGJ5B,aAAa8B,wBACZ,KAACsB;wBACCH,SAAS;wBACTI,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,UAAUZ;kCAExDf;;;;;;AAMb,EAAE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { type BaseGalleryProps } from './types';
|
|
3
|
-
export declare const CarouselBase: ({ bullets, getRootRef, children, slideWidth, slideIndex, dragDisabled, resizeSource, onDragStart, onDragEnd, onChange, onPrevClick, onNextClick, align, showArrows, getRef, arrowSize, arrowAreaHeight, slideTestId, bulletTestId, nextArrowTestId, prevArrowTestId, looped, animationDuration, animationEasing, "aria-roledescription": ariaRoleDescription, arrowNextLabel, arrowPrevLabel, slideLabel, slideRoleDescription, ...restProps }: BaseGalleryProps) => React.ReactNode;
|
|
3
|
+
export declare const CarouselBase: ({ bullets, getRootRef, children, slideWidth, slideIndex, dragDisabled, resizeSource, onDragStart, onDragEnd, onChange, onPrevClick, onNextClick, onPointerEnter, onPointerLeave, align, showArrows, getRef, arrowSize, arrowAreaHeight, slideTestId, bulletTestId, nextArrowTestId, prevArrowTestId, looped, animationDuration, animationEasing, "aria-roledescription": ariaRoleDescription, arrowNextLabel, arrowPrevLabel, slideLabel, slideRoleDescription, ...restProps }: BaseGalleryProps) => React.ReactNode;
|
|
4
4
|
//# sourceMappingURL=CarouselBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselBase.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CarouselBase.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAmC/B,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,YAAY,GAAI,gdAmC1B,gBAAgB,KAAG,KAAK,CAAC,SAmhB3B,CAAC"}
|
|
@@ -5,14 +5,15 @@ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_
|
|
|
5
5
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
import { classNames } from "@vkontakte/vkjs";
|
|
8
|
-
import { useAdaptivityHasPointer } from "../../hooks/useAdaptivityHasPointer.js";
|
|
9
8
|
import { useConfigDirection } from "../../hooks/useConfigDirection.js";
|
|
10
9
|
import { useExternRef } from "../../hooks/useExternRef.js";
|
|
11
10
|
import { useMutationObserver } from "../../hooks/useMutationObserver.js";
|
|
12
11
|
import { useResizeObserver } from "../../hooks/useResizeObserver.js";
|
|
13
12
|
import { useDOM } from "../../lib/dom.js";
|
|
13
|
+
import { mergeCalls } from "../../lib/mergeCalls.js";
|
|
14
14
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
|
|
15
15
|
import { warnOnce } from "../../lib/warnOnce.js";
|
|
16
|
+
import { useHover } from "../Clickable/useState.js";
|
|
16
17
|
import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
17
18
|
import { Bullets } from "./Bullets.js";
|
|
18
19
|
import { CarouselViewPort } from "./CarouselViewPort.js";
|
|
@@ -22,7 +23,7 @@ import { calcMax, calcMin, calculateIndent, getLoopPoints, getTargetIndex, isBig
|
|
|
22
23
|
import { useSlideAnimation } from "./hooks.js";
|
|
23
24
|
const warn = warnOnce('Gallery');
|
|
24
25
|
export const CarouselBase = (_param)=>{
|
|
25
|
-
var { bullets = false, getRootRef, children, slideWidth = '100%', slideIndex = 0, dragDisabled = false, resizeSource = 'window', onDragStart, onDragEnd, onChange, onPrevClick, onNextClick, align = 'left', showArrows, getRef, arrowSize, arrowAreaHeight, slideTestId, bulletTestId, nextArrowTestId, prevArrowTestId, looped = false, animationDuration = DEFAULT_ANIMATION_DURATION, animationEasing = 'ease', // a11y
|
|
26
|
+
var { bullets = false, getRootRef, children, slideWidth = '100%', slideIndex = 0, dragDisabled = false, resizeSource = 'window', onDragStart, onDragEnd, onChange, onPrevClick, onNextClick, onPointerEnter, onPointerLeave, align = 'left', showArrows, getRef, arrowSize, arrowAreaHeight, slideTestId, bulletTestId, nextArrowTestId, prevArrowTestId, looped = false, animationDuration = DEFAULT_ANIMATION_DURATION, animationEasing = 'ease', // a11y
|
|
26
27
|
'aria-roledescription': ariaRoleDescription = 'Карусель', arrowNextLabel = 'Следующий слайд', arrowPrevLabel = 'Предыдущий слайд', slideLabel, slideRoleDescription } = _param, restProps = _object_without_properties(_param, [
|
|
27
28
|
"bullets",
|
|
28
29
|
"getRootRef",
|
|
@@ -36,6 +37,8 @@ export const CarouselBase = (_param)=>{
|
|
|
36
37
|
"onChange",
|
|
37
38
|
"onPrevClick",
|
|
38
39
|
"onNextClick",
|
|
40
|
+
"onPointerEnter",
|
|
41
|
+
"onPointerLeave",
|
|
39
42
|
"align",
|
|
40
43
|
"showArrows",
|
|
41
44
|
"getRef",
|
|
@@ -68,7 +71,6 @@ export const CarouselBase = (_param)=>{
|
|
|
68
71
|
const { animationInQueue, addToAnimationQueue, getAnimateFunction, startAnimation, getAnimationEasing } = useSlideAnimation(animationDuration, animationEasing);
|
|
69
72
|
const isDragging = React.useRef(false);
|
|
70
73
|
const [controlElementsState, setControlElementsState] = React.useState(CONTROL_ELEMENTS_STATE);
|
|
71
|
-
const hasPointer = useAdaptivityHasPointer();
|
|
72
74
|
const slidesContainerId = React.useId();
|
|
73
75
|
const isCenterAlign = align === 'center';
|
|
74
76
|
const calculateCanSlideLeft = ()=>{
|
|
@@ -411,15 +413,21 @@ export const CarouselBase = (_param)=>{
|
|
|
411
413
|
event.currentTarget.scrollLeft = 0;
|
|
412
414
|
}
|
|
413
415
|
};
|
|
414
|
-
|
|
416
|
+
const _useHover = useHover(), { isHovered } = _useHover, hoverHandlers = _object_without_properties(_useHover, [
|
|
417
|
+
"isHovered"
|
|
418
|
+
]);
|
|
419
|
+
const handlers = mergeCalls(hoverHandlers, {
|
|
420
|
+
onPointerEnter,
|
|
421
|
+
onPointerLeave
|
|
422
|
+
});
|
|
423
|
+
return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({}, restProps, handlers), {
|
|
415
424
|
role: "region",
|
|
416
425
|
onScroll: handleScrollForFixVoiceOverBehavior,
|
|
417
426
|
"aria-roledescription": ariaRoleDescription,
|
|
418
|
-
baseClassName: classNames("vkuiCarouselBase__host", slideWidth === 'custom' && "vkuiCarouselBase__customWidth", isDraggable && "vkuiCarouselBase__draggable"),
|
|
427
|
+
baseClassName: classNames("vkuiCarouselBase__host", slideWidth === 'custom' && "vkuiCarouselBase__customWidth", isHovered && "vkuiCarouselBase__hover", isDraggable && "vkuiCarouselBase__draggable"),
|
|
419
428
|
getRootRef: rootRef,
|
|
420
429
|
children: [
|
|
421
430
|
/*#__PURE__*/ _jsx(ScrollArrows, {
|
|
422
|
-
hasPointer: hasPointer,
|
|
423
431
|
canSlideLeft: canSlideLeft,
|
|
424
432
|
canSlideRight: canSlideRight,
|
|
425
433
|
onSlideRight: slideRight,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMutationObserver } from '../../hooks/useMutationObserver';\nimport { useResizeObserver } from '../../hooks/useResizeObserver';\nimport { useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { type CustomTouchEvent } from '../Touch/Touch';\nimport { Bullets } from './Bullets';\nimport { CarouselViewPort } from './CarouselViewPort';\nimport { ScrollArrows } from './ScrollArrows';\nimport {\n CONTROL_ELEMENTS_STATE,\n DEFAULT_ANIMATION_DURATION,\n SLIDE_THRESHOLD,\n SLIDES_MANAGER_STATE,\n} from './constants';\nimport {\n calcMax,\n calcMin,\n calculateIndent,\n getLoopPoints,\n getTargetIndex,\n isBigger,\n isBiggerOrEqual,\n isLowerOrEqual,\n revertRtlValue,\n validateIndent,\n} from './helpers';\nimport { useSlideAnimation } from './hooks';\nimport {\n type BaseGalleryProps,\n type ControlElementsState,\n type GallerySlidesState,\n type SlidesManagerState,\n} from './types';\nimport styles from './CarouselBase.module.css';\n\nconst warn = warnOnce('Gallery');\n\nexport const CarouselBase = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n resizeSource = 'window',\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n align = 'left',\n showArrows,\n getRef,\n arrowSize,\n arrowAreaHeight,\n slideTestId,\n bulletTestId,\n nextArrowTestId,\n prevArrowTestId,\n looped = false,\n animationDuration = DEFAULT_ANIMATION_DURATION,\n animationEasing = 'ease',\n\n // a11y\n 'aria-roledescription': ariaRoleDescription = 'Карусель',\n arrowNextLabel = 'Следующий слайд',\n arrowPrevLabel = 'Предыдущий слайд',\n slideLabel,\n slideRoleDescription,\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const slidesManager = React.useRef<SlidesManagerState>(SLIDES_MANAGER_STATE);\n const textDirection = useConfigDirection();\n const isRtl = textDirection === 'rtl';\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n const layerRef = React.useRef<HTMLDivElement>(null);\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const shiftXCurrentRef = React.useRef<number>(0);\n const shiftXDeltaRef = React.useRef<number>(0);\n const initialized = React.useRef<boolean>(false);\n const {\n animationInQueue,\n addToAnimationQueue,\n getAnimateFunction,\n startAnimation,\n getAnimationEasing,\n } = useSlideAnimation(animationDuration, animationEasing);\n const isDragging = React.useRef(false);\n\n const [controlElementsState, setControlElementsState] =\n React.useState<ControlElementsState>(CONTROL_ELEMENTS_STATE);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const slidesContainerId = React.useId();\n\n const isCenterAlign = align === 'center';\n\n const calculateCanSlideLeft = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n const isStartShiftX = isBiggerOrEqual(shiftXCurrentRef.current, 0, isRtl);\n return !slidesManager.current.isFullyVisible && !isStartShiftX;\n };\n\n const calculateCanSlideRight = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n return (\n !slidesManager.current.isFullyVisible &&\n // we can't move right when gallery layer fully scrolled right, if gallery aligned by left side\n ((align === 'left' &&\n slidesManager.current.containerWidth - revertRtlValue(shiftXCurrentRef.current, isRtl) <\n (slidesManager.current.layerWidth ?? 0)) ||\n // otherwise we need to check current slide index (align = right or align = center)\n (align !== 'left' && slideIndex < slidesManager.current.slides.length - 1))\n );\n };\n\n const transformCssStyles = (shiftX: number, animation = false) => {\n shiftX = Math.round(shiftX);\n if (looped) {\n slidesManager.current.loopPoints.forEach((loopPoint) => {\n const { target, index } = loopPoint;\n const slide = slidesStore.current[index];\n if (slide) {\n slide.style.transform = `translate3d(${target(shiftX)}px, 0, 0)`;\n }\n });\n } else {\n Object.values(slidesStore.current).forEach((slide) => {\n if (slide) {\n slide.style.transform = '';\n }\n });\n }\n\n if (layerRef.current) {\n const indent =\n isDragging.current && !looped\n ? validateIndent(\n slidesManager.current,\n shiftXCurrentRef.current + shiftXDeltaRef.current,\n isRtl,\n false,\n )\n : shiftX;\n\n layerRef.current.style.transform = `translate3d(${indent}px, 0, 0)`;\n layerRef.current.style.transition = animation\n ? `transform ${animationDuration}ms ${getAnimationEasing()}`\n : '';\n }\n };\n\n const checkShiftOutOfBoundsFromStart = (shiftX: number, snaps: number[]) =>\n isBigger(shiftX, snaps[0], isRtl);\n\n const checkShiftOutOfBoundsFromEnd = (shiftX: number, slides: GallerySlidesState[]) => {\n /**\n * Поскольку при `align=\"center\"` слайды сдвинуты, прежде чем рассчитать крайнюю правую точку,\n * нужно вычесть сдвиг слайдов.\n */\n const firstSlideShift =\n align === 'center'\n ? (slidesManager.current.containerWidth - slidesManager.current.slides[0].width) / 2\n : 0;\n\n const lastPoint =\n slides[slides.length - 1].width + slides[slides.length - 1].coordX - firstSlideShift;\n return isRtl ? shiftX >= lastPoint : shiftX <= -lastPoint;\n };\n\n const requestTransform = (shiftX: number, animation = false) => {\n const { snaps, contentSize, slides } = slidesManager.current;\n\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили левее, чем первый слайд,\n * чтобы сбросить `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromStart(shiftX, snaps)) {\n const firstSnap = revertRtlValue(snaps[0], isRtl);\n shiftXCurrentRef.current = revertRtlValue(-contentSize + firstSnap, isRtl);\n shiftX = shiftXCurrentRef.current + shiftXDeltaRef.current;\n }\n\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили правее, чем последний слайд,\n * чтобы правильно пересчитать `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromEnd(shiftX, slides)) {\n shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];\n }\n transformCssStyles(shiftX, animation);\n animationFrameRef.current = null;\n });\n };\n\n const initializeSlides = () => {\n if (!rootRef.current || !viewportRef.current || !layerRef.current) {\n return;\n }\n const layerOffsetWidth = layerRef.current.offsetWidth;\n\n const calcRtlCoord = (element: HTMLDivElement) => {\n const offsetLeft = element.offsetLeft;\n const offsetWidth = element.offsetWidth;\n return layerOffsetWidth - offsetLeft - offsetWidth;\n };\n\n let localSlides =\n React.Children.map(children, (_item, i): GallerySlidesState => {\n const elem = slidesStore.current[i];\n if (!elem) {\n return { coordX: 0, width: 0 };\n }\n const coordX = isRtl ? calcRtlCoord(elem) : elem.offsetLeft;\n return { coordX, width: elem.offsetWidth };\n }) || [];\n\n if (localSlides.length === 0) {\n initialized.current = false;\n return;\n }\n\n const containerWidth = rootRef.current.offsetWidth;\n const viewportOffsetWidth = viewportRef.current.offsetWidth;\n const layerWidth = localSlides.reduce((val, slide) => slide.width + val, 0);\n\n if (process.env.NODE_ENV === 'development' && looped) {\n let remainingWidth = containerWidth;\n let slideIndex = 0;\n\n while (remainingWidth > 0 && slideIndex < localSlides.length) {\n remainingWidth -= localSlides[slideIndex].width;\n slideIndex++;\n }\n if (remainingWidth <= 0 && slideIndex === localSlides.length) {\n warn(\n 'Ширины слайдов недостаточно для корректной работы свойства \"looped\". Пожалуйста, сделайте её больше.',\n );\n }\n }\n\n const currentSlideOffsetOnCenterAlignment =\n (containerWidth - (localSlides[slideIndex]?.width ?? 0)) / 2;\n const isFullyVisible =\n align === 'center'\n ? layerWidth + currentSlideOffsetOnCenterAlignment <= containerWidth\n : layerWidth <= containerWidth;\n\n const onlyOneSlide = localSlides.length === 1;\n\n slidesManager.current = {\n ...slidesManager.current,\n layerWidth,\n containerWidth,\n viewportOffsetWidth,\n slides: localSlides,\n isFullyVisible,\n max:\n looped || onlyOneSlide\n ? null\n : calcMax({\n slides: localSlides,\n containerWidth,\n isCenterAlign,\n isRtl,\n }),\n min:\n looped || onlyOneSlide\n ? null\n : calcMin({\n containerWidth,\n layerWidth,\n slides: localSlides,\n viewportOffsetWidth,\n isFullyVisible,\n align,\n isRtl,\n }),\n };\n const snaps = localSlides.map((_, index) =>\n calculateIndent({\n targetIndex: index,\n slidesManager: slidesManager.current,\n isCenter: isCenterAlign,\n looped,\n isRtl,\n }),\n );\n\n let contentSize = Math.abs(snaps[snaps.length - 1]) + localSlides[localSlides.length - 1].width;\n if (align === 'center') {\n contentSize += revertRtlValue(snaps[0], isRtl);\n }\n\n slidesManager.current.snaps = snaps;\n slidesManager.current.contentSize = contentSize;\n // Если галерея не зациклена и слайд всего один, то рассчитывать loopPoints тоже не надо\n if (looped && !onlyOneSlide && !isFullyVisible) {\n slidesManager.current.loopPoints = getLoopPoints(\n slidesManager.current,\n containerWidth,\n isRtl,\n );\n }\n\n const isAnimationInProgress = animationInQueue() || animationFrameRef.current !== null;\n\n if (isAnimationInProgress) {\n return;\n }\n\n shiftXCurrentRef.current = snaps[slideIndex];\n initialized.current = true;\n\n setControlElementsState({\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n });\n requestTransform(shiftXCurrentRef.current);\n };\n\n const onResize = () => {\n if (initialized.current) {\n initializeSlides();\n }\n };\n const { window } = useDOM();\n useResizeObserver(resizeSource === 'element' ? rootRef : window, onResize);\n\n const loopedSlideChangePerform = () => {\n const { snaps, slides } = slidesManager.current;\n const indent = snaps[slideIndex];\n let startPoint = shiftXCurrentRef.current;\n\n const fromLastToFirst = isLowerOrEqual(\n shiftXCurrentRef.current,\n snaps[snaps.length - 1],\n isRtl,\n );\n /**\n * Переключаемся с последнего элемента на первый\n * Для корректной анимации мы прокручиваем последний слайд на всю длину (shiftX) \"вперед\"\n * В конце анимации при отрисовке следующего кадра задаем всем слайдам начальные значения.\n */\n if (indent === snaps[0] && fromLastToFirst) {\n const endEdge = revertRtlValue(\n Math.abs(snaps[snaps.length - 1]) + slides[slides.length - 1].width,\n isRtl,\n );\n const distance = endEdge + startPoint;\n addToAnimationQueue(\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * -1;\n\n transformCssStyles(shiftX);\n\n if (shiftX <= snaps[snaps.length - 1] - slides[slides.length - 1].width) {\n requestAnimationFrame(() => {\n shiftXCurrentRef.current = indent;\n transformCssStyles(snaps[0]);\n });\n }\n }),\n );\n /**\n * Переключаемся с первого слайда на последний\n * Для корректной анимации сначала задаем первым видимым слайдам смещение\n * В следующем кадре начинаем анимация прокрутки \"назад\".\n */\n } else if (indent === snaps[snaps.length - 1] && shiftXCurrentRef.current === snaps[0]) {\n startPoint = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n\n addToAnimationQueue(() => {\n requestAnimationFrame(() => {\n const shiftX = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n transformCssStyles(shiftX);\n\n getAnimateFunction((progress) => {\n const diff = revertRtlValue(progress * slides[slides.length - 1].width, isRtl);\n transformCssStyles(startPoint + diff);\n })();\n });\n });\n /**\n * Если не обработаны `corner`-кейсы выше, то просто проигрываем анимацию смещения.\n */\n } else {\n addToAnimationQueue(() => {\n const distance = Math.abs(indent - startPoint);\n let direction = startPoint <= indent ? 1 : -1;\n\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * direction;\n transformCssStyles(shiftX);\n })();\n });\n }\n };\n\n const simpleSlideChangePerform = () => {\n const { snaps } = slidesManager.current;\n requestTransform(snaps[slideIndex], true);\n };\n\n useIsomorphicLayoutEffect(\n function performSlideChange() {\n if (!initialized.current) {\n return;\n }\n const { snaps } = slidesManager.current;\n const indent = snaps[slideIndex];\n\n if (looped) {\n loopedSlideChangePerform();\n } else {\n simpleSlideChangePerform();\n }\n\n startAnimation();\n\n shiftXCurrentRef.current = indent;\n\n setControlElementsState((v) => ({\n ...v,\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n }));\n },\n [slideIndex],\n );\n\n useIsomorphicLayoutEffect(\n function updateIsDraggable() {\n setControlElementsState((v) => ({\n ...v,\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n }));\n },\n [dragDisabled],\n );\n\n useMutationObserver(layerRef, initializeSlides);\n\n useIsomorphicLayoutEffect(initializeSlides, [align, slideWidth, looped, isRtl]);\n\n const calculateMinDeltaXToSlide = () => {\n return slidesManager.current.slides[slideIndex].width * SLIDE_THRESHOLD;\n };\n\n const slideLeft = (event: React.MouseEvent) => {\n if (slideIndex > 0) {\n shiftXCurrentRef.current += revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.(\n (slideIndex - 1 + slidesManager.current.slides.length) % slidesManager.current.slides.length,\n );\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n if (slideIndex < slidesManager.current.slides.length - 1) {\n shiftXCurrentRef.current -= revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.((slideIndex + 1) % slidesManager.current.slides.length);\n onNextClick?.(event);\n };\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (controlElementsState.isDraggable) {\n onDragStart?.(e);\n shiftXCurrentRef.current = slidesManager.current.snaps[slideIndex];\n shiftXDeltaRef.current = 0;\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n isDragging.current = true;\n if (shiftXDeltaRef.current !== e.shiftX) {\n shiftXDeltaRef.current = e.shiftX;\n requestTransform(shiftXCurrentRef.current + shiftXDeltaRef.current);\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n isDragging.current = false;\n let targetIndex = slideIndex;\n if (e.isSlide) {\n targetIndex = getTargetIndex({\n slides: slidesManager.current.slides,\n slideIndex,\n currentShiftX: shiftXCurrentRef.current,\n currentShiftXDelta: shiftXDeltaRef.current,\n max: slidesManager.current.max,\n looped,\n isRtl,\n });\n }\n onDragEnd?.(e, targetIndex);\n\n if (targetIndex !== slideIndex) {\n shiftXCurrentRef.current = shiftXCurrentRef.current + shiftXDeltaRef.current;\n onChange?.(targetIndex);\n } else {\n const initialShiftX = slidesManager.current.snaps[targetIndex];\n requestTransform(initialShiftX, true);\n }\n }\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[slideIndex] = slideRef;\n };\n\n const { isDraggable, canSlideRight, canSlideLeft } = controlElementsState;\n\n const handleScrollForFixVoiceOverBehavior = (event: React.UIEvent<HTMLDivElement>) => {\n restProps.onScroll?.(event);\n if (rootRef.current) {\n event.currentTarget.scrollLeft = 0;\n }\n };\n\n return (\n <RootComponent\n {...restProps}\n role=\"region\"\n onScroll={handleScrollForFixVoiceOverBehavior}\n aria-roledescription={ariaRoleDescription}\n baseClassName={classNames(\n styles.host,\n slideWidth === 'custom' && styles.customWidth,\n isDraggable && styles.draggable,\n )}\n getRootRef={rootRef}\n >\n <ScrollArrows\n hasPointer={hasPointer}\n canSlideLeft={canSlideLeft}\n canSlideRight={canSlideRight}\n onSlideRight={slideRight}\n onSlideLeft={slideLeft}\n showArrows={showArrows}\n arrowSize={arrowSize}\n arrowAreaHeight={arrowAreaHeight}\n arrowPrevLabel={arrowPrevLabel}\n arrowNextLabel={arrowNextLabel}\n prevArrowTestId={prevArrowTestId}\n nextArrowTestId={nextArrowTestId}\n slidesContainerId={slidesContainerId}\n />\n <CarouselViewPort\n slideWidth={slideWidth}\n slideTestId={slideTestId}\n onStart={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n getRootRef={viewportRef}\n layerRef={layerRef}\n setSlideRef={setSlideRef}\n slidesContainerId={slidesContainerId}\n slideLabel={slideLabel}\n slideRoleDescription={slideRoleDescription}\n onChange={onChange}\n >\n {children}\n </CarouselViewPort>\n\n {bullets && (\n <Bullets\n bullets={bullets}\n slideIndex={slideIndex}\n count={React.Children.count(children)}\n bulletTestId={bulletTestId}\n />\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useConfigDirection","useExternRef","useMutationObserver","useResizeObserver","useDOM","useIsomorphicLayoutEffect","warnOnce","RootComponent","Bullets","CarouselViewPort","ScrollArrows","CONTROL_ELEMENTS_STATE","DEFAULT_ANIMATION_DURATION","SLIDE_THRESHOLD","SLIDES_MANAGER_STATE","calcMax","calcMin","calculateIndent","getLoopPoints","getTargetIndex","isBigger","isBiggerOrEqual","isLowerOrEqual","revertRtlValue","validateIndent","useSlideAnimation","warn","CarouselBase","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","resizeSource","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","align","showArrows","getRef","arrowSize","arrowAreaHeight","slideTestId","bulletTestId","nextArrowTestId","prevArrowTestId","looped","animationDuration","animationEasing","ariaRoleDescription","arrowNextLabel","arrowPrevLabel","slideLabel","slideRoleDescription","restProps","slidesStore","useRef","slidesManager","textDirection","isRtl","rootRef","viewportRef","layerRef","animationFrameRef","shiftXCurrentRef","shiftXDeltaRef","initialized","animationInQueue","addToAnimationQueue","getAnimateFunction","startAnimation","getAnimationEasing","isDragging","controlElementsState","setControlElementsState","useState","hasPointer","slidesContainerId","useId","isCenterAlign","calculateCanSlideLeft","current","isFullyVisible","isStartShiftX","calculateCanSlideRight","containerWidth","layerWidth","slides","length","transformCssStyles","shiftX","animation","Math","round","loopPoints","forEach","loopPoint","target","index","slide","style","transform","Object","values","indent","transition","checkShiftOutOfBoundsFromStart","snaps","checkShiftOutOfBoundsFromEnd","firstSlideShift","width","lastPoint","coordX","requestTransform","contentSize","cancelAnimationFrame","requestAnimationFrame","firstSnap","abs","initializeSlides","localSlides","layerOffsetWidth","offsetWidth","calcRtlCoord","element","offsetLeft","Children","map","_item","i","elem","viewportOffsetWidth","reduce","val","process","env","NODE_ENV","remainingWidth","currentSlideOffsetOnCenterAlignment","onlyOneSlide","max","min","_","targetIndex","isCenter","isAnimationInProgress","canSlideLeft","canSlideRight","isDraggable","onResize","window","loopedSlideChangePerform","startPoint","fromLastToFirst","endEdge","distance","progress","diff","direction","simpleSlideChangePerform","performSlideChange","v","updateIsDraggable","calculateMinDeltaXToSlide","slideLeft","event","slideRight","onStart","e","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","isSlide","currentShiftX","currentShiftXDelta","initialShiftX","setSlideRef","slideRef","handleScrollForFixVoiceOverBehavior","onScroll","currentTarget","scrollLeft","role","aria-roledescription","baseClassName","onSlideRight","onSlideLeft","count"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CarouselBase/CarouselBase.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMutationObserver } from '../../hooks/useMutationObserver';\nimport { useResizeObserver } from '../../hooks/useResizeObserver';\nimport { useDOM } from '../../lib/dom';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useHover } from '../Clickable/useState';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { type CustomTouchEvent } from '../Touch/Touch';\nimport { Bullets } from './Bullets';\nimport { CarouselViewPort } from './CarouselViewPort';\nimport { ScrollArrows } from './ScrollArrows';\nimport {\n CONTROL_ELEMENTS_STATE,\n DEFAULT_ANIMATION_DURATION,\n SLIDE_THRESHOLD,\n SLIDES_MANAGER_STATE,\n} from './constants';\nimport {\n calcMax,\n calcMin,\n calculateIndent,\n getLoopPoints,\n getTargetIndex,\n isBigger,\n isBiggerOrEqual,\n isLowerOrEqual,\n revertRtlValue,\n validateIndent,\n} from './helpers';\nimport { useSlideAnimation } from './hooks';\nimport {\n type BaseGalleryProps,\n type ControlElementsState,\n type GallerySlidesState,\n type SlidesManagerState,\n} from './types';\nimport styles from './CarouselBase.module.css';\n\nconst warn = warnOnce('Gallery');\n\nexport const CarouselBase = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n resizeSource = 'window',\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n onPointerEnter,\n onPointerLeave,\n align = 'left',\n showArrows,\n getRef,\n arrowSize,\n arrowAreaHeight,\n slideTestId,\n bulletTestId,\n nextArrowTestId,\n prevArrowTestId,\n looped = false,\n animationDuration = DEFAULT_ANIMATION_DURATION,\n animationEasing = 'ease',\n\n // a11y\n 'aria-roledescription': ariaRoleDescription = 'Карусель',\n arrowNextLabel = 'Следующий слайд',\n arrowPrevLabel = 'Предыдущий слайд',\n slideLabel,\n slideRoleDescription,\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const slidesManager = React.useRef<SlidesManagerState>(SLIDES_MANAGER_STATE);\n const textDirection = useConfigDirection();\n const isRtl = textDirection === 'rtl';\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n const layerRef = React.useRef<HTMLDivElement>(null);\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const shiftXCurrentRef = React.useRef<number>(0);\n const shiftXDeltaRef = React.useRef<number>(0);\n const initialized = React.useRef<boolean>(false);\n const {\n animationInQueue,\n addToAnimationQueue,\n getAnimateFunction,\n startAnimation,\n getAnimationEasing,\n } = useSlideAnimation(animationDuration, animationEasing);\n const isDragging = React.useRef(false);\n\n const [controlElementsState, setControlElementsState] =\n React.useState<ControlElementsState>(CONTROL_ELEMENTS_STATE);\n\n const slidesContainerId = React.useId();\n\n const isCenterAlign = align === 'center';\n\n const calculateCanSlideLeft = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n const isStartShiftX = isBiggerOrEqual(shiftXCurrentRef.current, 0, isRtl);\n return !slidesManager.current.isFullyVisible && !isStartShiftX;\n };\n\n const calculateCanSlideRight = () => {\n if (looped) {\n return !slidesManager.current.isFullyVisible;\n }\n return (\n !slidesManager.current.isFullyVisible &&\n // we can't move right when gallery layer fully scrolled right, if gallery aligned by left side\n ((align === 'left' &&\n slidesManager.current.containerWidth - revertRtlValue(shiftXCurrentRef.current, isRtl) <\n (slidesManager.current.layerWidth ?? 0)) ||\n // otherwise we need to check current slide index (align = right or align = center)\n (align !== 'left' && slideIndex < slidesManager.current.slides.length - 1))\n );\n };\n\n const transformCssStyles = (shiftX: number, animation = false) => {\n shiftX = Math.round(shiftX);\n if (looped) {\n slidesManager.current.loopPoints.forEach((loopPoint) => {\n const { target, index } = loopPoint;\n const slide = slidesStore.current[index];\n if (slide) {\n slide.style.transform = `translate3d(${target(shiftX)}px, 0, 0)`;\n }\n });\n } else {\n Object.values(slidesStore.current).forEach((slide) => {\n if (slide) {\n slide.style.transform = '';\n }\n });\n }\n\n if (layerRef.current) {\n const indent =\n isDragging.current && !looped\n ? validateIndent(\n slidesManager.current,\n shiftXCurrentRef.current + shiftXDeltaRef.current,\n isRtl,\n false,\n )\n : shiftX;\n\n layerRef.current.style.transform = `translate3d(${indent}px, 0, 0)`;\n layerRef.current.style.transition = animation\n ? `transform ${animationDuration}ms ${getAnimationEasing()}`\n : '';\n }\n };\n\n const checkShiftOutOfBoundsFromStart = (shiftX: number, snaps: number[]) =>\n isBigger(shiftX, snaps[0], isRtl);\n\n const checkShiftOutOfBoundsFromEnd = (shiftX: number, slides: GallerySlidesState[]) => {\n /**\n * Поскольку при `align=\"center\"` слайды сдвинуты, прежде чем рассчитать крайнюю правую точку,\n * нужно вычесть сдвиг слайдов.\n */\n const firstSlideShift =\n align === 'center'\n ? (slidesManager.current.containerWidth - slidesManager.current.slides[0].width) / 2\n : 0;\n\n const lastPoint =\n slides[slides.length - 1].width + slides[slides.length - 1].coordX - firstSlideShift;\n return isRtl ? shiftX >= lastPoint : shiftX <= -lastPoint;\n };\n\n const requestTransform = (shiftX: number, animation = false) => {\n const { snaps, contentSize, slides } = slidesManager.current;\n\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили левее, чем первый слайд,\n * чтобы сбросить `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromStart(shiftX, snaps)) {\n const firstSnap = revertRtlValue(snaps[0], isRtl);\n shiftXCurrentRef.current = revertRtlValue(-contentSize + firstSnap, isRtl);\n shiftX = shiftXCurrentRef.current + shiftXDeltaRef.current;\n }\n\n /**\n * Для бесконечной галереи проверяем, что при dnd мы прокрутили правее, чем последний слайд,\n * чтобы правильно пересчитать `shiftXCurrentRef`.\n */\n if (looped && checkShiftOutOfBoundsFromEnd(shiftX, slides)) {\n shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];\n }\n transformCssStyles(shiftX, animation);\n animationFrameRef.current = null;\n });\n };\n\n const initializeSlides = () => {\n if (!rootRef.current || !viewportRef.current || !layerRef.current) {\n return;\n }\n const layerOffsetWidth = layerRef.current.offsetWidth;\n\n const calcRtlCoord = (element: HTMLDivElement) => {\n const offsetLeft = element.offsetLeft;\n const offsetWidth = element.offsetWidth;\n return layerOffsetWidth - offsetLeft - offsetWidth;\n };\n\n let localSlides =\n React.Children.map(children, (_item, i): GallerySlidesState => {\n const elem = slidesStore.current[i];\n if (!elem) {\n return { coordX: 0, width: 0 };\n }\n const coordX = isRtl ? calcRtlCoord(elem) : elem.offsetLeft;\n return { coordX, width: elem.offsetWidth };\n }) || [];\n\n if (localSlides.length === 0) {\n initialized.current = false;\n return;\n }\n\n const containerWidth = rootRef.current.offsetWidth;\n const viewportOffsetWidth = viewportRef.current.offsetWidth;\n const layerWidth = localSlides.reduce((val, slide) => slide.width + val, 0);\n\n if (process.env.NODE_ENV === 'development' && looped) {\n let remainingWidth = containerWidth;\n let slideIndex = 0;\n\n while (remainingWidth > 0 && slideIndex < localSlides.length) {\n remainingWidth -= localSlides[slideIndex].width;\n slideIndex++;\n }\n if (remainingWidth <= 0 && slideIndex === localSlides.length) {\n warn(\n 'Ширины слайдов недостаточно для корректной работы свойства \"looped\". Пожалуйста, сделайте её больше.',\n );\n }\n }\n\n const currentSlideOffsetOnCenterAlignment =\n (containerWidth - (localSlides[slideIndex]?.width ?? 0)) / 2;\n const isFullyVisible =\n align === 'center'\n ? layerWidth + currentSlideOffsetOnCenterAlignment <= containerWidth\n : layerWidth <= containerWidth;\n\n const onlyOneSlide = localSlides.length === 1;\n\n slidesManager.current = {\n ...slidesManager.current,\n layerWidth,\n containerWidth,\n viewportOffsetWidth,\n slides: localSlides,\n isFullyVisible,\n max:\n looped || onlyOneSlide\n ? null\n : calcMax({\n slides: localSlides,\n containerWidth,\n isCenterAlign,\n isRtl,\n }),\n min:\n looped || onlyOneSlide\n ? null\n : calcMin({\n containerWidth,\n layerWidth,\n slides: localSlides,\n viewportOffsetWidth,\n isFullyVisible,\n align,\n isRtl,\n }),\n };\n const snaps = localSlides.map((_, index) =>\n calculateIndent({\n targetIndex: index,\n slidesManager: slidesManager.current,\n isCenter: isCenterAlign,\n looped,\n isRtl,\n }),\n );\n\n let contentSize = Math.abs(snaps[snaps.length - 1]) + localSlides[localSlides.length - 1].width;\n if (align === 'center') {\n contentSize += revertRtlValue(snaps[0], isRtl);\n }\n\n slidesManager.current.snaps = snaps;\n slidesManager.current.contentSize = contentSize;\n // Если галерея не зациклена и слайд всего один, то рассчитывать loopPoints тоже не надо\n if (looped && !onlyOneSlide && !isFullyVisible) {\n slidesManager.current.loopPoints = getLoopPoints(\n slidesManager.current,\n containerWidth,\n isRtl,\n );\n }\n\n const isAnimationInProgress = animationInQueue() || animationFrameRef.current !== null;\n\n if (isAnimationInProgress) {\n return;\n }\n\n shiftXCurrentRef.current = snaps[slideIndex];\n initialized.current = true;\n\n setControlElementsState({\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n });\n requestTransform(shiftXCurrentRef.current);\n };\n\n const onResize = () => {\n if (initialized.current) {\n initializeSlides();\n }\n };\n const { window } = useDOM();\n useResizeObserver(resizeSource === 'element' ? rootRef : window, onResize);\n\n const loopedSlideChangePerform = () => {\n const { snaps, slides } = slidesManager.current;\n const indent = snaps[slideIndex];\n let startPoint = shiftXCurrentRef.current;\n\n const fromLastToFirst = isLowerOrEqual(\n shiftXCurrentRef.current,\n snaps[snaps.length - 1],\n isRtl,\n );\n /**\n * Переключаемся с последнего элемента на первый\n * Для корректной анимации мы прокручиваем последний слайд на всю длину (shiftX) \"вперед\"\n * В конце анимации при отрисовке следующего кадра задаем всем слайдам начальные значения.\n */\n if (indent === snaps[0] && fromLastToFirst) {\n const endEdge = revertRtlValue(\n Math.abs(snaps[snaps.length - 1]) + slides[slides.length - 1].width,\n isRtl,\n );\n const distance = endEdge + startPoint;\n addToAnimationQueue(\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * -1;\n\n transformCssStyles(shiftX);\n\n if (shiftX <= snaps[snaps.length - 1] - slides[slides.length - 1].width) {\n requestAnimationFrame(() => {\n shiftXCurrentRef.current = indent;\n transformCssStyles(snaps[0]);\n });\n }\n }),\n );\n /**\n * Переключаемся с первого слайда на последний\n * Для корректной анимации сначала задаем первым видимым слайдам смещение\n * В следующем кадре начинаем анимация прокрутки \"назад\".\n */\n } else if (indent === snaps[snaps.length - 1] && shiftXCurrentRef.current === snaps[0]) {\n startPoint = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n\n addToAnimationQueue(() => {\n requestAnimationFrame(() => {\n const shiftX = indent - revertRtlValue(slides[slides.length - 1].width, isRtl);\n transformCssStyles(shiftX);\n\n getAnimateFunction((progress) => {\n const diff = revertRtlValue(progress * slides[slides.length - 1].width, isRtl);\n transformCssStyles(startPoint + diff);\n })();\n });\n });\n /**\n * Если не обработаны `corner`-кейсы выше, то просто проигрываем анимацию смещения.\n */\n } else {\n addToAnimationQueue(() => {\n const distance = Math.abs(indent - startPoint);\n let direction = startPoint <= indent ? 1 : -1;\n\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * direction;\n transformCssStyles(shiftX);\n })();\n });\n }\n };\n\n const simpleSlideChangePerform = () => {\n const { snaps } = slidesManager.current;\n requestTransform(snaps[slideIndex], true);\n };\n\n useIsomorphicLayoutEffect(\n function performSlideChange() {\n if (!initialized.current) {\n return;\n }\n const { snaps } = slidesManager.current;\n const indent = snaps[slideIndex];\n\n if (looped) {\n loopedSlideChangePerform();\n } else {\n simpleSlideChangePerform();\n }\n\n startAnimation();\n\n shiftXCurrentRef.current = indent;\n\n setControlElementsState((v) => ({\n ...v,\n canSlideLeft: calculateCanSlideLeft(),\n canSlideRight: calculateCanSlideRight(),\n }));\n },\n [slideIndex],\n );\n\n useIsomorphicLayoutEffect(\n function updateIsDraggable() {\n setControlElementsState((v) => ({\n ...v,\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n }));\n },\n [dragDisabled],\n );\n\n useMutationObserver(layerRef, initializeSlides);\n\n useIsomorphicLayoutEffect(initializeSlides, [align, slideWidth, looped, isRtl]);\n\n const calculateMinDeltaXToSlide = () => {\n return slidesManager.current.slides[slideIndex].width * SLIDE_THRESHOLD;\n };\n\n const slideLeft = (event: React.MouseEvent) => {\n if (slideIndex > 0) {\n shiftXCurrentRef.current += revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.(\n (slideIndex - 1 + slidesManager.current.slides.length) % slidesManager.current.slides.length,\n );\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n if (slideIndex < slidesManager.current.slides.length - 1) {\n shiftXCurrentRef.current -= revertRtlValue(calculateMinDeltaXToSlide(), isRtl);\n }\n onChange?.((slideIndex + 1) % slidesManager.current.slides.length);\n onNextClick?.(event);\n };\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (controlElementsState.isDraggable) {\n onDragStart?.(e);\n shiftXCurrentRef.current = slidesManager.current.snaps[slideIndex];\n shiftXDeltaRef.current = 0;\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n isDragging.current = true;\n if (shiftXDeltaRef.current !== e.shiftX) {\n shiftXDeltaRef.current = e.shiftX;\n requestTransform(shiftXCurrentRef.current + shiftXDeltaRef.current);\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n isDragging.current = false;\n let targetIndex = slideIndex;\n if (e.isSlide) {\n targetIndex = getTargetIndex({\n slides: slidesManager.current.slides,\n slideIndex,\n currentShiftX: shiftXCurrentRef.current,\n currentShiftXDelta: shiftXDeltaRef.current,\n max: slidesManager.current.max,\n looped,\n isRtl,\n });\n }\n onDragEnd?.(e, targetIndex);\n\n if (targetIndex !== slideIndex) {\n shiftXCurrentRef.current = shiftXCurrentRef.current + shiftXDeltaRef.current;\n onChange?.(targetIndex);\n } else {\n const initialShiftX = slidesManager.current.snaps[targetIndex];\n requestTransform(initialShiftX, true);\n }\n }\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[slideIndex] = slideRef;\n };\n\n const { isDraggable, canSlideRight, canSlideLeft } = controlElementsState;\n\n const handleScrollForFixVoiceOverBehavior = (event: React.UIEvent<HTMLDivElement>) => {\n restProps.onScroll?.(event);\n if (rootRef.current) {\n event.currentTarget.scrollLeft = 0;\n }\n };\n\n const { isHovered, ...hoverHandlers } = useHover();\n\n const handlers = mergeCalls(hoverHandlers, { onPointerEnter, onPointerLeave });\n\n return (\n <RootComponent\n {...restProps}\n {...handlers}\n role=\"region\"\n onScroll={handleScrollForFixVoiceOverBehavior}\n aria-roledescription={ariaRoleDescription}\n baseClassName={classNames(\n styles.host,\n slideWidth === 'custom' && styles.customWidth,\n isHovered && styles.hover,\n isDraggable && styles.draggable,\n )}\n getRootRef={rootRef}\n >\n <ScrollArrows\n canSlideLeft={canSlideLeft}\n canSlideRight={canSlideRight}\n onSlideRight={slideRight}\n onSlideLeft={slideLeft}\n showArrows={showArrows}\n arrowSize={arrowSize}\n arrowAreaHeight={arrowAreaHeight}\n arrowPrevLabel={arrowPrevLabel}\n arrowNextLabel={arrowNextLabel}\n prevArrowTestId={prevArrowTestId}\n nextArrowTestId={nextArrowTestId}\n slidesContainerId={slidesContainerId}\n />\n <CarouselViewPort\n slideWidth={slideWidth}\n slideTestId={slideTestId}\n onStart={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n getRootRef={viewportRef}\n layerRef={layerRef}\n setSlideRef={setSlideRef}\n slidesContainerId={slidesContainerId}\n slideLabel={slideLabel}\n slideRoleDescription={slideRoleDescription}\n onChange={onChange}\n >\n {children}\n </CarouselViewPort>\n\n {bullets && (\n <Bullets\n bullets={bullets}\n slideIndex={slideIndex}\n count={React.Children.count(children)}\n bulletTestId={bulletTestId}\n />\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useConfigDirection","useExternRef","useMutationObserver","useResizeObserver","useDOM","mergeCalls","useIsomorphicLayoutEffect","warnOnce","useHover","RootComponent","Bullets","CarouselViewPort","ScrollArrows","CONTROL_ELEMENTS_STATE","DEFAULT_ANIMATION_DURATION","SLIDE_THRESHOLD","SLIDES_MANAGER_STATE","calcMax","calcMin","calculateIndent","getLoopPoints","getTargetIndex","isBigger","isBiggerOrEqual","isLowerOrEqual","revertRtlValue","validateIndent","useSlideAnimation","warn","CarouselBase","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","resizeSource","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","onPointerEnter","onPointerLeave","align","showArrows","getRef","arrowSize","arrowAreaHeight","slideTestId","bulletTestId","nextArrowTestId","prevArrowTestId","looped","animationDuration","animationEasing","ariaRoleDescription","arrowNextLabel","arrowPrevLabel","slideLabel","slideRoleDescription","restProps","slidesStore","useRef","slidesManager","textDirection","isRtl","rootRef","viewportRef","layerRef","animationFrameRef","shiftXCurrentRef","shiftXDeltaRef","initialized","animationInQueue","addToAnimationQueue","getAnimateFunction","startAnimation","getAnimationEasing","isDragging","controlElementsState","setControlElementsState","useState","slidesContainerId","useId","isCenterAlign","calculateCanSlideLeft","current","isFullyVisible","isStartShiftX","calculateCanSlideRight","containerWidth","layerWidth","slides","length","transformCssStyles","shiftX","animation","Math","round","loopPoints","forEach","loopPoint","target","index","slide","style","transform","Object","values","indent","transition","checkShiftOutOfBoundsFromStart","snaps","checkShiftOutOfBoundsFromEnd","firstSlideShift","width","lastPoint","coordX","requestTransform","contentSize","cancelAnimationFrame","requestAnimationFrame","firstSnap","abs","initializeSlides","localSlides","layerOffsetWidth","offsetWidth","calcRtlCoord","element","offsetLeft","Children","map","_item","i","elem","viewportOffsetWidth","reduce","val","process","env","NODE_ENV","remainingWidth","currentSlideOffsetOnCenterAlignment","onlyOneSlide","max","min","_","targetIndex","isCenter","isAnimationInProgress","canSlideLeft","canSlideRight","isDraggable","onResize","window","loopedSlideChangePerform","startPoint","fromLastToFirst","endEdge","distance","progress","diff","direction","simpleSlideChangePerform","performSlideChange","v","updateIsDraggable","calculateMinDeltaXToSlide","slideLeft","event","slideRight","onStart","e","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","isSlide","currentShiftX","currentShiftXDelta","initialShiftX","setSlideRef","slideRef","handleScrollForFixVoiceOverBehavior","onScroll","currentTarget","scrollLeft","isHovered","hoverHandlers","handlers","role","aria-roledescription","baseClassName","onSlideRight","onSlideLeft","count"],"mappings":"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"}
|
|
@@ -12,13 +12,12 @@ export interface ScrollArrowsTestIds {
|
|
|
12
12
|
prevArrowTestId?: string;
|
|
13
13
|
}
|
|
14
14
|
interface ScrollArrowsProps extends Pick<BaseGalleryProps, 'showArrows' | 'arrowSize' | 'arrowAreaHeight' | 'arrowPrevLabel' | 'arrowNextLabel'>, ScrollArrowsTestIds {
|
|
15
|
-
hasPointer?: boolean;
|
|
16
15
|
canSlideLeft: boolean;
|
|
17
16
|
canSlideRight: boolean;
|
|
18
17
|
onSlideLeft: (e: React.MouseEvent) => void;
|
|
19
18
|
onSlideRight: (e: React.MouseEvent) => void;
|
|
20
19
|
slidesContainerId: string;
|
|
21
20
|
}
|
|
22
|
-
export declare const ScrollArrows: ({
|
|
21
|
+
export declare const ScrollArrows: ({ canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows, arrowSize, arrowAreaHeight, arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId, slidesContainerId, }: ScrollArrowsProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
23
22
|
export {};
|
|
24
23
|
//# sourceMappingURL=ScrollArrows.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArrows.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQhD,eAAO,MAAM,iBAAiB,GAC5B,MAAM,OAAO,GAAG,KAAK,EACrB,iBAAiB,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,EACxE,cAAc,OAAO,WAQtB,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,iBACR,SAAQ,IAAI,CACR,gBAAgB,EAChB,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,CACrF,EACD,mBAAmB;IACrB,
|
|
1
|
+
{"version":3,"file":"ScrollArrows.d.ts","sourceRoot":"","sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQhD,eAAO,MAAM,iBAAiB,GAC5B,MAAM,OAAO,GAAG,KAAK,EACrB,iBAAiB,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,EACxE,cAAc,OAAO,WAQtB,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,iBACR,SAAQ,IAAI,CACR,gBAAgB,EAChB,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,CACrF,EACD,mBAAmB;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,GAAI,0LAa1B,iBAAiB,mDAgCnB,CAAC"}
|
|
@@ -13,14 +13,14 @@ const stylesArrowAreaHeight = {
|
|
|
13
13
|
export const getArrowClassName = (side, arrowAreaHeight, focusVisible)=>{
|
|
14
14
|
return classNames("vkuiCarouselBase__arrow", side === 'start' ? "vkuiCarouselBase__arrowStart" : "vkuiCarouselBase__arrowEnd", stylesArrowAreaHeight[arrowAreaHeight], focusVisible && "vkuiCarouselBase__arrowFocusVisible");
|
|
15
15
|
};
|
|
16
|
-
export const ScrollArrows = ({
|
|
16
|
+
export const ScrollArrows = ({ canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows = false, arrowSize = 'm', arrowAreaHeight = 'stretch', arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId, slidesContainerId })=>{
|
|
17
17
|
const _useFocusVisible = useFocusVisible(), { focusVisible: prevArrowFocusVisible } = _useFocusVisible, prevArrowFocusHandlers = _object_without_properties(_useFocusVisible, [
|
|
18
18
|
"focusVisible"
|
|
19
19
|
]);
|
|
20
20
|
const _useFocusVisible1 = useFocusVisible(), { focusVisible: nextArrowFocusVisible } = _useFocusVisible1, nextArrowFocusHandlers = _object_without_properties(_useFocusVisible1, [
|
|
21
21
|
"focusVisible"
|
|
22
22
|
]);
|
|
23
|
-
return showArrows
|
|
23
|
+
return showArrows ? /*#__PURE__*/ _jsxs(_Fragment, {
|
|
24
24
|
children: [
|
|
25
25
|
canSlideLeft && /*#__PURE__*/ _jsx(ScrollArrow, _object_spread({
|
|
26
26
|
className: getArrowClassName('start', arrowAreaHeight, prevArrowFocusVisible),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport { type BaseGalleryProps } from './types';\nimport styles from './CarouselBase.module.css';\n\nconst stylesArrowAreaHeight = {\n stretch: styles.arrowAreaStretch,\n fit: styles.arrowAreaFit,\n};\n\nexport const getArrowClassName = (\n side: 'start' | 'end',\n arrowAreaHeight: Exclude<BaseGalleryProps['arrowAreaHeight'], undefined>,\n focusVisible: boolean,\n) => {\n return classNames(\n styles.arrow,\n side === 'start' ? styles.arrowStart : styles.arrowEnd,\n stylesArrowAreaHeight[arrowAreaHeight],\n focusVisible && styles.arrowFocusVisible,\n );\n};\n\nexport interface ScrollArrowsTestIds {\n /**\n * Передает атрибут `data-testid` для кнопки перехода к следующему слайду.\n */\n nextArrowTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к предыдущему слайду.\n */\n prevArrowTestId?: string;\n}\n\ninterface ScrollArrowsProps\n extends Pick<\n BaseGalleryProps,\n 'showArrows' | 'arrowSize' | 'arrowAreaHeight' | 'arrowPrevLabel' | 'arrowNextLabel'\n >,\n ScrollArrowsTestIds {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CarouselBase/ScrollArrows.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport { type BaseGalleryProps } from './types';\nimport styles from './CarouselBase.module.css';\n\nconst stylesArrowAreaHeight = {\n stretch: styles.arrowAreaStretch,\n fit: styles.arrowAreaFit,\n};\n\nexport const getArrowClassName = (\n side: 'start' | 'end',\n arrowAreaHeight: Exclude<BaseGalleryProps['arrowAreaHeight'], undefined>,\n focusVisible: boolean,\n) => {\n return classNames(\n styles.arrow,\n side === 'start' ? styles.arrowStart : styles.arrowEnd,\n stylesArrowAreaHeight[arrowAreaHeight],\n focusVisible && styles.arrowFocusVisible,\n );\n};\n\nexport interface ScrollArrowsTestIds {\n /**\n * Передает атрибут `data-testid` для кнопки перехода к следующему слайду.\n */\n nextArrowTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки перехода к предыдущему слайду.\n */\n prevArrowTestId?: string;\n}\n\ninterface ScrollArrowsProps\n extends Pick<\n BaseGalleryProps,\n 'showArrows' | 'arrowSize' | 'arrowAreaHeight' | 'arrowPrevLabel' | 'arrowNextLabel'\n >,\n ScrollArrowsTestIds {\n canSlideLeft: boolean;\n canSlideRight: boolean;\n onSlideLeft: (e: React.MouseEvent) => void;\n onSlideRight: (e: React.MouseEvent) => void;\n slidesContainerId: string;\n}\n\nexport const ScrollArrows = ({\n canSlideLeft,\n canSlideRight,\n onSlideRight,\n onSlideLeft,\n showArrows = false,\n arrowSize = 'm',\n arrowAreaHeight = 'stretch',\n arrowPrevLabel,\n arrowNextLabel,\n nextArrowTestId,\n prevArrowTestId,\n slidesContainerId,\n}: ScrollArrowsProps) => {\n const { focusVisible: prevArrowFocusVisible, ...prevArrowFocusHandlers } = useFocusVisible();\n const { focusVisible: nextArrowFocusVisible, ...nextArrowFocusHandlers } = useFocusVisible();\n\n return showArrows ? (\n <>\n {canSlideLeft && (\n <ScrollArrow\n className={getArrowClassName('start', arrowAreaHeight, prevArrowFocusVisible)}\n direction=\"left\"\n onClick={onSlideLeft}\n size={arrowSize}\n data-testid={prevArrowTestId}\n label={arrowPrevLabel}\n aria-controls={slidesContainerId}\n {...prevArrowFocusHandlers}\n />\n )}\n {canSlideRight && (\n <ScrollArrow\n className={getArrowClassName('end', arrowAreaHeight, nextArrowFocusVisible)}\n direction=\"right\"\n onClick={onSlideRight}\n size={arrowSize}\n data-testid={nextArrowTestId}\n label={arrowNextLabel}\n aria-controls={slidesContainerId}\n {...nextArrowFocusHandlers}\n />\n )}\n </>\n ) : null;\n};\n"],"names":["React","classNames","useFocusVisible","ScrollArrow","stylesArrowAreaHeight","stretch","fit","getArrowClassName","side","arrowAreaHeight","focusVisible","ScrollArrows","canSlideLeft","canSlideRight","onSlideRight","onSlideLeft","showArrows","arrowSize","arrowPrevLabel","arrowNextLabel","nextArrowTestId","prevArrowTestId","slidesContainerId","prevArrowFocusVisible","prevArrowFocusHandlers","nextArrowFocusVisible","nextArrowFocusHandlers","className","direction","onClick","size","data-testid","label","aria-controls"],"mappings":"AAAA;;;;AACA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,eAAe,QAAQ,iCAA8B;AAC9D,SAASC,WAAW,QAAQ,gCAA6B;AAIzD,MAAMC,wBAAwB;IAC5BC,OAAO;IACPC,GAAG;AACL;AAEA,OAAO,MAAMC,oBAAoB,CAC/BC,MACAC,iBACAC;IAEA,OAAOT,sCAELO,SAAS,yEACTJ,qBAAqB,CAACK,gBAAgB,EACtCC;AAEJ,EAAE;AA0BF,OAAO,MAAMC,eAAe,CAAC,EAC3BC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,aAAa,KAAK,EAClBC,YAAY,GAAG,EACfR,kBAAkB,SAAS,EAC3BS,cAAc,EACdC,cAAc,EACdC,eAAe,EACfC,eAAe,EACfC,iBAAiB,EACC;IAClB,MAA2EpB,mBAAAA,mBAArE,EAAEQ,cAAca,qBAAqB,EAA6B,GAAGrB,kBAA3BsB,oDAA2BtB;QAAnEQ;;IACR,MAA2ER,oBAAAA,mBAArE,EAAEQ,cAAce,qBAAqB,EAA6B,GAAGvB,mBAA3BwB,oDAA2BxB;QAAnEQ;;IAER,OAAOM,2BACL;;YACGJ,8BACC,KAACT;gBACCwB,WAAWpB,kBAAkB,SAASE,iBAAiBc;gBACvDK,WAAU;gBACVC,SAASd;gBACTe,MAAMb;gBACNc,eAAaV;gBACbW,OAAOd;gBACPe,iBAAeX;eACXE;YAGPX,+BACC,KAACV;gBACCwB,WAAWpB,kBAAkB,OAAOE,iBAAiBgB;gBACrDG,WAAU;gBACVC,SAASf;gBACTgB,MAAMb;gBACNc,eAAaX;gBACbY,OAAOb;gBACPc,iBAAeX;eACXI;;SAIR;AACN,EAAE"}
|
|
@@ -60,6 +60,21 @@ export interface StateProps {
|
|
|
60
60
|
hoverClassName?: string;
|
|
61
61
|
}
|
|
62
62
|
export declare const DEFAULT_ACTIVE_EFFECT_DELAY = 600;
|
|
63
|
+
interface UseHoverProps extends Pick<StateProps, 'hovered' | 'hasHover'> {
|
|
64
|
+
/**
|
|
65
|
+
* Блокирование активации состояний.
|
|
66
|
+
*/
|
|
67
|
+
lockState?: boolean;
|
|
68
|
+
setParentStateLock?: (v: boolean) => void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Управляет наведением на компонент, игнорирует тач события.
|
|
72
|
+
*/
|
|
73
|
+
export declare function useHover({ hovered, hasHover, lockState, setParentStateLock, }?: UseHoverProps): {
|
|
74
|
+
isHovered: boolean;
|
|
75
|
+
onPointerEnter: React.PointerEventHandler<any>;
|
|
76
|
+
onPointerLeave: () => void;
|
|
77
|
+
};
|
|
63
78
|
interface ClickableLockStateContextInterface {
|
|
64
79
|
lockHoverStateBubbling?: (v: boolean) => void;
|
|
65
80
|
lockActiveStateBubbling?: (v: boolean) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useState.d.ts","sourceRoot":"","sources":["../../../src/components/Clickable/useState.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,2BAA2B,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"useState.d.ts","sourceRoot":"","sources":["../../../src/components/Clickable/useState.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAI/C,UAAU,aAAc,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC;IACtE;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,QAAe,EACf,SAAiB,EACjB,kBAAyB,GAC1B,GAAE,aAAkB;;;;EAoDpB;AA6ED,UAAU,kCAAkC;IAC1C,sBAAsB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,uBAAuB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD;AAED,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,kCAAkC,CAIpF,CAAC;AAqCL;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,EAAE,UAAU,GAAG;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACxD,8BAA8B,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CAC1D,CAiCA"}
|
|
@@ -8,7 +8,7 @@ export const DEFAULT_ACTIVE_EFFECT_DELAY = 600;
|
|
|
8
8
|
const ACTIVE_DELAY = 70;
|
|
9
9
|
/**
|
|
10
10
|
* Управляет наведением на компонент, игнорирует тач события.
|
|
11
|
-
*/ function useHover({ hovered, hasHover = true, lockState, setParentStateLock }) {
|
|
11
|
+
*/ export function useHover({ hovered, hasHover = true, lockState = false, setParentStateLock = noop } = {}) {
|
|
12
12
|
const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);
|
|
13
13
|
const prevIsHoveredRef = React.useRef(undefined);
|
|
14
14
|
const handleHover = React.useCallback((isHover)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Clickable/useState.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useStateWithDelay } from './useStateWithDelay';\n\nexport interface StateProps {\n /**\n * Указывает, должен ли компонент реагировать на `hover`-состояние.\n */\n hasHover?: boolean;\n /**\n * Позволяет управлять `hovered`-состоянием извне.\n */\n hovered?: boolean;\n /**\n * Позволяет управлять `activated`-состоянием извне.\n */\n activated?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на `active`-состояние.\n */\n hasActive?: boolean;\n\n /**\n * Позволяет родительскому компоненту\n * иметь `hovered`-cостояние при наведении\n * на любой дочерний элемент.\n * По умолчанию состояние hovered у родителя сбрасывается.\n *\n * Присваивается родителькому компоненту.\n *\n * @example\n * <Tappable hasHoverWithChildren>\n * <IconButton />\n * <IconButton />\n * <IconButton />\n * </Tappable>\n */\n hasHoverWithChildren?: boolean;\n\n /**\n * Позволяет родительскому компоненту показывать hovered-состояние при наведении\n * на текущий дочерний компонент.\n *\n * Присваивается дочернему компоненту.\n *\n * @example\n * <Tappable>\n * <IconButton unlockParentHover />\n * <IconButton unlockParentHover />\n * <IconButton />\n * </Tappable>\n */\n unlockParentHover?: boolean;\n\n /**\n * Длительность показа `active`-состояния.\n */\n activeEffectDelay?: number;\n\n /**\n * Стиль подсветки `active`-состояния.\n */\n activeClassName?: string;\n\n /**\n * Стиль подсветки `hover`-состояния.\n */\n hoverClassName?: string;\n}\n\nexport const DEFAULT_ACTIVE_EFFECT_DELAY = 600;\n\nconst ACTIVE_DELAY = 70;\n\ninterface UseHoverProps extends Pick<StateProps, 'hovered' | 'hasHover'> {\n /**\n * Блокирование активации состояний.\n */\n lockState: boolean;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет наведением на компонент, игнорирует тач события.\n */\nfunction useHover({ hovered, hasHover = true, lockState, setParentStateLock }: UseHoverProps) {\n const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);\n\n const prevIsHoveredRef = React.useRef<boolean | undefined>(undefined);\n\n const handleHover = React.useCallback(\n (isHover: boolean) => {\n setHoveredStateLocal(isHover);\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: isHover,\n });\n\n // проверка сделана чтобы реже вызывать обновление состояния\n // контекста родителя\n if (isHovered !== prevIsHoveredRef.current) {\n prevIsHoveredRef.current = isHovered;\n setParentStateLock(isHovered);\n }\n },\n [setParentStateLock, hasHover, hovered, lockState],\n );\n\n const onPointerEnter: React.PointerEventHandler<any> = (e) => {\n if (e.pointerType === 'touch') {\n return;\n }\n\n handleHover(true);\n };\n\n const onPointerLeave = () => {\n handleHover(false);\n };\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: hoveredStateLocal,\n });\n\n return {\n isHovered,\n onPointerEnter: hasHover ? onPointerEnter : noop,\n onPointerLeave: hasHover ? onPointerLeave : noop,\n };\n}\n\ninterface UseActiveProps extends Pick<StateProps, 'activated' | 'activeEffectDelay' | 'hasActive'> {\n /**\n * Блокирование активации состояний.\n */\n lockStateRef: React.RefObject<boolean>;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет активацией компонента.\n */\nfunction useActive({\n activated,\n activeEffectDelay,\n hasActive = true,\n lockStateRef,\n setParentStateLock,\n}: UseActiveProps) {\n // передаём setParentStateLock, чтобы функция вызывалась вместе с установкой стейта,\n // если установка отложена c помощью delay, то и вызов будет отложен\n const [activatedState, setActivated] = useStateWithDelay<boolean>(false, 0, setParentStateLock);\n\n // Список нажатий которые не требуется отменять\n const pointersUp = React.useMemo(() => new Set<number>(), []);\n\n const onPointerDown = () => {\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true, ACTIVE_DELAY);\n // намеренно выставляем lock, так как setActivated вызов отложен\n // а у отложенного setActivated setParentStateLock тоже вызовится отложенно\n // родитель сейчас тоже обработает это же событие PointerDown\n // если мы не залочим activatedState у родителя сейчас, то родитель выставит active состояние\n setParentStateLock(true);\n };\n\n const onPointerCancel: React.PointerEventHandler = (e) => {\n if (pointersUp.has(e.pointerId)) {\n pointersUp.delete(e.pointerId);\n return;\n }\n\n setActivated(false);\n };\n\n const onPointerUp: React.PointerEventHandler = (e) => {\n pointersUp.add(e.pointerId);\n\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true);\n setActivated(false, activeEffectDelay);\n };\n\n const isActivated =\n activated ??\n calculateStateValue({\n hasState: hasActive,\n isLocked: lockStateRef.current,\n stateValueLocal: activatedState,\n });\n\n return {\n isActivated,\n onPointerLeave: hasActive ? onPointerCancel : noop,\n onPointerDown: hasActive ? onPointerDown : noop,\n onPointerCancel: hasActive ? onPointerCancel : noop,\n onPointerUp: hasActive ? onPointerUp : noop,\n };\n}\n\ninterface ClickableLockStateContextInterface {\n lockHoverStateBubbling?: (v: boolean) => void;\n lockActiveStateBubbling?: (v: boolean) => void;\n}\n\nexport const ClickableLockStateContext: React.Context<ClickableLockStateContextInterface> =\n React.createContext<ClickableLockStateContextInterface>({\n lockHoverStateBubbling: undefined,\n lockActiveStateBubbling: undefined,\n });\n\n/**\n * Блокирует стейт на всплытие.\n */\nfunction useLockState(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [boolean, (v: boolean) => void, (...args: any[]) => void] {\n const [lockState, setLockState] = React.useState(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n setLockState(isLock);\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockState, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\nfunction useLockRef(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [React.RefObject<boolean>, (v: boolean) => void, (...args: any[]) => void] {\n const lockStateRef = React.useRef(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n lockStateRef.current = isLock;\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockStateRef, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\n/**\n * Управляет состоянием компонента.\n */\nexport function useState({\n hovered,\n hasHover,\n activated,\n hasActive,\n activeEffectDelay,\n unlockParentHover,\n hoverClassName,\n activeClassName,\n}: StateProps): {\n stateClassName: string;\n setLockHoverBubblingImmediate: (...args: any[]) => void;\n setLockActiveBubblingImmediate: (...args: any[]) => void;\n} {\n const { lockHoverStateBubbling = noop, lockActiveStateBubbling = noop } =\n React.useContext(ClickableLockStateContext);\n\n const [lockHoverState, setParentStateLockHoverBubbling, setLockHoverBubblingImmediate] =\n useLockState(unlockParentHover ? noop : lockHoverStateBubbling);\n const [lockActiveStateRef, setParentStateLockActiveBubbling, setLockActiveBubblingImmediate] =\n useLockRef(lockActiveStateBubbling);\n\n const { isHovered, ...hoverEvent } = useHover({\n hasHover,\n hovered,\n lockState: lockHoverState,\n setParentStateLock: setParentStateLockHoverBubbling,\n });\n\n const { isActivated, ...activeEvent } = useActive({\n activated,\n hasActive,\n activeEffectDelay,\n lockStateRef: lockActiveStateRef,\n setParentStateLock: setParentStateLockActiveBubbling,\n });\n\n const stateClassName = classNames(isHovered && hoverClassName, isActivated && activeClassName);\n const handlers = mergeCalls(hoverEvent, activeEvent);\n\n return {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...handlers,\n };\n}\n\n// Общая функция для определения конечного состояния active/hovered\nfunction calculateStateValue({\n hasState,\n isLocked,\n stateValueLocal,\n}: {\n hasState: boolean;\n isLocked: boolean;\n stateValueLocal: boolean;\n}): boolean {\n return hasState && !isLocked && stateValueLocal;\n}\n"],"names":["React","classNames","noop","mergeCalls","useStateWithDelay","DEFAULT_ACTIVE_EFFECT_DELAY","ACTIVE_DELAY","useHover","hovered","hasHover","lockState","setParentStateLock","hoveredStateLocal","setHoveredStateLocal","useState","prevIsHoveredRef","useRef","undefined","handleHover","useCallback","isHover","isHovered","calculateStateValue","hasState","isLocked","stateValueLocal","current","onPointerEnter","e","pointerType","onPointerLeave","useActive","activated","activeEffectDelay","hasActive","lockStateRef","activatedState","setActivated","pointersUp","useMemo","Set","onPointerDown","onPointerCancel","has","pointerId","delete","onPointerUp","add","isActivated","ClickableLockStateContext","createContext","lockHoverStateBubbling","lockActiveStateBubbling","useLockState","setParentStateLockBubbling","setLockState","setStateLockBubblingImmediate","isLock","useLockRef","unlockParentHover","hoverClassName","activeClassName","useContext","lockHoverState","setParentStateLockHoverBubbling","setLockHoverBubblingImmediate","lockActiveStateRef","setParentStateLockActiveBubbling","setLockActiveBubblingImmediate","hoverEvent","activeEvent","stateClassName","handlers"],"mappings":"AAAA,sCAAsC;;AAEtC,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,iBAAiB,QAAQ,yBAAsB;AAoExD,OAAO,MAAMC,8BAA8B,IAAI;AAE/C,MAAMC,eAAe;AAUrB;;CAEC,GACD,SAASC,SAAS,EAAEC,OAAO,EAAEC,WAAW,IAAI,EAAEC,SAAS,EAAEC,kBAAkB,EAAiB;IAC1F,MAAM,CAACC,mBAAmBC,qBAAqB,GAAGb,MAAMc,QAAQ,CAAC;IAEjE,MAAMC,mBAAmBf,MAAMgB,MAAM,CAAsBC;IAE3D,MAAMC,cAAclB,MAAMmB,WAAW,CACnC,CAACC;QACCP,qBAAqBO;QAErB,MAAMC,YACJb,oBAAAA,qBAAAA,UACAc,oBAAoB;YAClBC,UAAUd;YACVe,UAAUd;YACVe,iBAAiBL;QACnB;QAEF,4DAA4D;QAC5D,qBAAqB;QACrB,IAAIC,cAAcN,iBAAiBW,OAAO,EAAE;YAC1CX,iBAAiBW,OAAO,GAAGL;YAC3BV,mBAAmBU;QACrB;IACF,GACA;QAACV;QAAoBF;QAAUD;QAASE;KAAU;IAGpD,MAAMiB,iBAAiD,CAACC;QACtD,IAAIA,EAAEC,WAAW,KAAK,SAAS;YAC7B;QACF;QAEAX,YAAY;IACd;IAEA,MAAMY,iBAAiB;QACrBZ,YAAY;IACd;IAEA,MAAMG,YACJb,oBAAAA,qBAAAA,UACAc,oBAAoB;QAClBC,UAAUd;QACVe,UAAUd;QACVe,iBAAiBb;IACnB;IAEF,OAAO;QACLS;QACAM,gBAAgBlB,WAAWkB,iBAAiBzB;QAC5C4B,gBAAgBrB,WAAWqB,iBAAiB5B;IAC9C;AACF;AAUA;;CAEC,GACD,SAAS6B,UAAU,EACjBC,SAAS,EACTC,iBAAiB,EACjBC,YAAY,IAAI,EAChBC,YAAY,EACZxB,kBAAkB,EACH;IACf,oFAAoF;IACpF,oEAAoE;IACpE,MAAM,CAACyB,gBAAgBC,aAAa,GAAGjC,kBAA2B,OAAO,GAAGO;IAE5E,+CAA+C;IAC/C,MAAM2B,aAAatC,MAAMuC,OAAO,CAAC,IAAM,IAAIC,OAAe,EAAE;IAE5D,MAAMC,gBAAgB;QACpB,IAAIN,aAAaT,OAAO,EAAE;YACxB;QACF;QAEAW,aAAa,MAAM/B;QACnB,gEAAgE;QAChE,2EAA2E;QAC3E,6DAA6D;QAC7D,6FAA6F;QAC7FK,mBAAmB;IACrB;IAEA,MAAM+B,kBAA6C,CAACd;QAClD,IAAIU,WAAWK,GAAG,CAACf,EAAEgB,SAAS,GAAG;YAC/BN,WAAWO,MAAM,CAACjB,EAAEgB,SAAS;YAC7B;QACF;QAEAP,aAAa;IACf;IAEA,MAAMS,cAAyC,CAAClB;QAC9CU,WAAWS,GAAG,CAACnB,EAAEgB,SAAS;QAE1B,IAAIT,aAAaT,OAAO,EAAE;YACxB;QACF;QAEAW,aAAa;QACbA,aAAa,OAAOJ;IACtB;IAEA,MAAMe,cACJhB,sBAAAA,uBAAAA,YACAV,oBAAoB;QAClBC,UAAUW;QACVV,UAAUW,aAAaT,OAAO;QAC9BD,iBAAiBW;IACnB;IAEF,OAAO;QACLY;QACAlB,gBAAgBI,YAAYQ,kBAAkBxC;QAC9CuC,eAAeP,YAAYO,gBAAgBvC;QAC3CwC,iBAAiBR,YAAYQ,kBAAkBxC;QAC/C4C,aAAaZ,YAAYY,cAAc5C;IACzC;AACF;AAOA,OAAO,MAAM+C,0CACXjD,MAAMkD,aAAa,CAAqC;IACtDC,wBAAwBlC;IACxBmC,yBAAyBnC;AAC3B,GAAG;AAEL;;CAEC,GACD,SAASoC,aACPC,0BAAgD;IAEhD,MAAM,CAAC5C,WAAW6C,aAAa,GAAGvD,MAAMc,QAAQ,CAAC;IAEjD,MAAM0C,gCAAgCxD,MAAMmB,WAAW,CACrD,CAACsC;QACCF,aAAaE;QACbH,2BAA2BG;IAC7B,GACA;QAACH;KAA2B;IAG9B,OAAO;QAAC5C;QAAW4C;QAA4BE;KAA8B;AAC/E;AAEA,SAASE,WACPJ,0BAAgD;IAEhD,MAAMnB,eAAenC,MAAMgB,MAAM,CAAC;IAElC,MAAMwC,gCAAgCxD,MAAMmB,WAAW,CACrD,CAACsC;QACCtB,aAAaT,OAAO,GAAG+B;QACvBH,2BAA2BG;IAC7B,GACA;QAACH;KAA2B;IAG9B,OAAO;QAACnB;QAAcmB;QAA4BE;KAA8B;AAClF;AAEA;;CAEC,GACD,OAAO,SAAS1C,SAAS,EACvBN,OAAO,EACPC,QAAQ,EACRuB,SAAS,EACTE,SAAS,EACTD,iBAAiB,EACjB0B,iBAAiB,EACjBC,cAAc,EACdC,eAAe,EACJ;IAKX,MAAM,EAAEV,yBAAyBjD,IAAI,EAAEkD,0BAA0BlD,IAAI,EAAE,GACrEF,MAAM8D,UAAU,CAACb;IAEnB,MAAM,CAACc,gBAAgBC,iCAAiCC,8BAA8B,GACpFZ,aAAaM,oBAAoBzD,OAAOiD;IAC1C,MAAM,CAACe,oBAAoBC,kCAAkCC,+BAA+B,GAC1FV,WAAWN;IAEb,MAAqC7C,YAAAA,SAAS;QAC5CE;QACAD;QACAE,WAAWqD;QACXpD,oBAAoBqD;IACtB,IALM,EAAE3C,SAAS,EAAiB,GAAGd,WAAf8D,wCAAe9D;QAA7Bc;;IAOR,MAAwCU,aAAAA,UAAU;QAChDC;QACAE;QACAD;QACAE,cAAc+B;QACdvD,oBAAoBwD;IACtB,IANM,EAAEnB,WAAW,EAAkB,GAAGjB,YAAhBuC,yCAAgBvC;QAAhCiB;;IAQR,MAAMuB,iBAAiBtE,WAAWoB,aAAauC,gBAAgBZ,eAAea;IAC9E,MAAMW,WAAWrE,WAAWkE,YAAYC;IAExC,OAAO;QACLC;QACAN;QACAG;OACGI;AAEP;AAEA,mEAAmE;AACnE,SAASlD,oBAAoB,EAC3BC,QAAQ,EACRC,QAAQ,EACRC,eAAe,EAKhB;IACC,OAAOF,YAAY,CAACC,YAAYC;AAClC"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Clickable/useState.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useStateWithDelay } from './useStateWithDelay';\n\nexport interface StateProps {\n /**\n * Указывает, должен ли компонент реагировать на `hover`-состояние.\n */\n hasHover?: boolean;\n /**\n * Позволяет управлять `hovered`-состоянием извне.\n */\n hovered?: boolean;\n /**\n * Позволяет управлять `activated`-состоянием извне.\n */\n activated?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на `active`-состояние.\n */\n hasActive?: boolean;\n\n /**\n * Позволяет родительскому компоненту\n * иметь `hovered`-cостояние при наведении\n * на любой дочерний элемент.\n * По умолчанию состояние hovered у родителя сбрасывается.\n *\n * Присваивается родителькому компоненту.\n *\n * @example\n * <Tappable hasHoverWithChildren>\n * <IconButton />\n * <IconButton />\n * <IconButton />\n * </Tappable>\n */\n hasHoverWithChildren?: boolean;\n\n /**\n * Позволяет родительскому компоненту показывать hovered-состояние при наведении\n * на текущий дочерний компонент.\n *\n * Присваивается дочернему компоненту.\n *\n * @example\n * <Tappable>\n * <IconButton unlockParentHover />\n * <IconButton unlockParentHover />\n * <IconButton />\n * </Tappable>\n */\n unlockParentHover?: boolean;\n\n /**\n * Длительность показа `active`-состояния.\n */\n activeEffectDelay?: number;\n\n /**\n * Стиль подсветки `active`-состояния.\n */\n activeClassName?: string;\n\n /**\n * Стиль подсветки `hover`-состояния.\n */\n hoverClassName?: string;\n}\n\nexport const DEFAULT_ACTIVE_EFFECT_DELAY = 600;\n\nconst ACTIVE_DELAY = 70;\n\ninterface UseHoverProps extends Pick<StateProps, 'hovered' | 'hasHover'> {\n /**\n * Блокирование активации состояний.\n */\n lockState?: boolean;\n setParentStateLock?: (v: boolean) => void;\n}\n\n/**\n * Управляет наведением на компонент, игнорирует тач события.\n */\nexport function useHover({\n hovered,\n hasHover = true,\n lockState = false,\n setParentStateLock = noop,\n}: UseHoverProps = {}) {\n const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);\n\n const prevIsHoveredRef = React.useRef<boolean | undefined>(undefined);\n\n const handleHover = React.useCallback(\n (isHover: boolean) => {\n setHoveredStateLocal(isHover);\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: isHover,\n });\n\n // проверка сделана чтобы реже вызывать обновление состояния\n // контекста родителя\n if (isHovered !== prevIsHoveredRef.current) {\n prevIsHoveredRef.current = isHovered;\n setParentStateLock(isHovered);\n }\n },\n [setParentStateLock, hasHover, hovered, lockState],\n );\n\n const onPointerEnter: React.PointerEventHandler<any> = (e) => {\n if (e.pointerType === 'touch') {\n return;\n }\n\n handleHover(true);\n };\n\n const onPointerLeave = () => {\n handleHover(false);\n };\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: hoveredStateLocal,\n });\n\n return {\n isHovered,\n onPointerEnter: hasHover ? onPointerEnter : noop,\n onPointerLeave: hasHover ? onPointerLeave : noop,\n };\n}\n\ninterface UseActiveProps extends Pick<StateProps, 'activated' | 'activeEffectDelay' | 'hasActive'> {\n /**\n * Блокирование активации состояний.\n */\n lockStateRef: React.RefObject<boolean>;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет активацией компонента.\n */\nfunction useActive({\n activated,\n activeEffectDelay,\n hasActive = true,\n lockStateRef,\n setParentStateLock,\n}: UseActiveProps) {\n // передаём setParentStateLock, чтобы функция вызывалась вместе с установкой стейта,\n // если установка отложена c помощью delay, то и вызов будет отложен\n const [activatedState, setActivated] = useStateWithDelay<boolean>(false, 0, setParentStateLock);\n\n // Список нажатий которые не требуется отменять\n const pointersUp = React.useMemo(() => new Set<number>(), []);\n\n const onPointerDown = () => {\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true, ACTIVE_DELAY);\n // намеренно выставляем lock, так как setActivated вызов отложен\n // а у отложенного setActivated setParentStateLock тоже вызовится отложенно\n // родитель сейчас тоже обработает это же событие PointerDown\n // если мы не залочим activatedState у родителя сейчас, то родитель выставит active состояние\n setParentStateLock(true);\n };\n\n const onPointerCancel: React.PointerEventHandler = (e) => {\n if (pointersUp.has(e.pointerId)) {\n pointersUp.delete(e.pointerId);\n return;\n }\n\n setActivated(false);\n };\n\n const onPointerUp: React.PointerEventHandler = (e) => {\n pointersUp.add(e.pointerId);\n\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true);\n setActivated(false, activeEffectDelay);\n };\n\n const isActivated =\n activated ??\n calculateStateValue({\n hasState: hasActive,\n isLocked: lockStateRef.current,\n stateValueLocal: activatedState,\n });\n\n return {\n isActivated,\n onPointerLeave: hasActive ? onPointerCancel : noop,\n onPointerDown: hasActive ? onPointerDown : noop,\n onPointerCancel: hasActive ? onPointerCancel : noop,\n onPointerUp: hasActive ? onPointerUp : noop,\n };\n}\n\ninterface ClickableLockStateContextInterface {\n lockHoverStateBubbling?: (v: boolean) => void;\n lockActiveStateBubbling?: (v: boolean) => void;\n}\n\nexport const ClickableLockStateContext: React.Context<ClickableLockStateContextInterface> =\n React.createContext<ClickableLockStateContextInterface>({\n lockHoverStateBubbling: undefined,\n lockActiveStateBubbling: undefined,\n });\n\n/**\n * Блокирует стейт на всплытие.\n */\nfunction useLockState(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [boolean, (v: boolean) => void, (...args: any[]) => void] {\n const [lockState, setLockState] = React.useState(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n setLockState(isLock);\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockState, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\nfunction useLockRef(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [React.RefObject<boolean>, (v: boolean) => void, (...args: any[]) => void] {\n const lockStateRef = React.useRef(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n lockStateRef.current = isLock;\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockStateRef, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\n/**\n * Управляет состоянием компонента.\n */\nexport function useState({\n hovered,\n hasHover,\n activated,\n hasActive,\n activeEffectDelay,\n unlockParentHover,\n hoverClassName,\n activeClassName,\n}: StateProps): {\n stateClassName: string;\n setLockHoverBubblingImmediate: (...args: any[]) => void;\n setLockActiveBubblingImmediate: (...args: any[]) => void;\n} {\n const { lockHoverStateBubbling = noop, lockActiveStateBubbling = noop } =\n React.useContext(ClickableLockStateContext);\n\n const [lockHoverState, setParentStateLockHoverBubbling, setLockHoverBubblingImmediate] =\n useLockState(unlockParentHover ? noop : lockHoverStateBubbling);\n const [lockActiveStateRef, setParentStateLockActiveBubbling, setLockActiveBubblingImmediate] =\n useLockRef(lockActiveStateBubbling);\n\n const { isHovered, ...hoverEvent } = useHover({\n hasHover,\n hovered,\n lockState: lockHoverState,\n setParentStateLock: setParentStateLockHoverBubbling,\n });\n\n const { isActivated, ...activeEvent } = useActive({\n activated,\n hasActive,\n activeEffectDelay,\n lockStateRef: lockActiveStateRef,\n setParentStateLock: setParentStateLockActiveBubbling,\n });\n\n const stateClassName = classNames(isHovered && hoverClassName, isActivated && activeClassName);\n const handlers = mergeCalls(hoverEvent, activeEvent);\n\n return {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...handlers,\n };\n}\n\n// Общая функция для определения конечного состояния active/hovered\nfunction calculateStateValue({\n hasState,\n isLocked,\n stateValueLocal,\n}: {\n hasState: boolean;\n isLocked: boolean;\n stateValueLocal: boolean;\n}): boolean {\n return hasState && !isLocked && stateValueLocal;\n}\n"],"names":["React","classNames","noop","mergeCalls","useStateWithDelay","DEFAULT_ACTIVE_EFFECT_DELAY","ACTIVE_DELAY","useHover","hovered","hasHover","lockState","setParentStateLock","hoveredStateLocal","setHoveredStateLocal","useState","prevIsHoveredRef","useRef","undefined","handleHover","useCallback","isHover","isHovered","calculateStateValue","hasState","isLocked","stateValueLocal","current","onPointerEnter","e","pointerType","onPointerLeave","useActive","activated","activeEffectDelay","hasActive","lockStateRef","activatedState","setActivated","pointersUp","useMemo","Set","onPointerDown","onPointerCancel","has","pointerId","delete","onPointerUp","add","isActivated","ClickableLockStateContext","createContext","lockHoverStateBubbling","lockActiveStateBubbling","useLockState","setParentStateLockBubbling","setLockState","setStateLockBubblingImmediate","isLock","useLockRef","unlockParentHover","hoverClassName","activeClassName","useContext","lockHoverState","setParentStateLockHoverBubbling","setLockHoverBubblingImmediate","lockActiveStateRef","setParentStateLockActiveBubbling","setLockActiveBubblingImmediate","hoverEvent","activeEvent","stateClassName","handlers"],"mappings":"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"}
|
|
@@ -492,7 +492,7 @@ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = '
|
|
|
492
492
|
getRootRef: selectInputRef,
|
|
493
493
|
onChange: onInputChange,
|
|
494
494
|
onFocus: callMultiple(onFocus, onInputFocus),
|
|
495
|
-
onBlur: callMultiple(onBlur,
|
|
495
|
+
onBlur: callMultiple(onBlur, onInputBlur),
|
|
496
496
|
onKeyDown: !readOnly ? callMultiple(handleInputKeyDown, onNativeInputKeyDown) : onNativeInputKeyDown,
|
|
497
497
|
onClick: !readOnly ? callMultiple(toggleOpened, onNativeInputClick) : onNativeInputClick,
|
|
498
498
|
value: inputValue,
|