@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.
Files changed (215) hide show
  1. package/README.md +1 -0
  2. package/dist/components/Button/Button.js +6 -4
  3. package/dist/components/Button/Button.js.map +1 -1
  4. package/dist/components/CarouselBase/CarouselBase.d.ts +1 -1
  5. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
  6. package/dist/components/CarouselBase/CarouselBase.js +14 -6
  7. package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
  8. package/dist/components/CarouselBase/ScrollArrows.d.ts +1 -2
  9. package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -1
  10. package/dist/components/CarouselBase/ScrollArrows.js +2 -2
  11. package/dist/components/CarouselBase/ScrollArrows.js.map +1 -1
  12. package/dist/components/Clickable/useState.d.ts +15 -0
  13. package/dist/components/Clickable/useState.d.ts.map +1 -1
  14. package/dist/components/Clickable/useState.js +1 -1
  15. package/dist/components/Clickable/useState.js.map +1 -1
  16. package/dist/components/CustomSelect/CustomSelect.js +1 -1
  17. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  18. package/dist/components/Footer/Footer.d.ts.map +1 -1
  19. package/dist/components/Footer/Footer.js +2 -1
  20. package/dist/components/Footer/Footer.js.map +1 -1
  21. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  22. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  23. package/dist/components/HorizontalScroll/HorizontalScroll.js +20 -10
  24. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  25. package/dist/components/SubnavigationBar/SubnavigationBar.d.ts +6 -2
  26. package/dist/components/SubnavigationBar/SubnavigationBar.d.ts.map +1 -1
  27. package/dist/components/SubnavigationBar/SubnavigationBar.js +6 -3
  28. package/dist/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  29. package/dist/components/Typography/Typography.d.ts +5 -1
  30. package/dist/components/Typography/Typography.d.ts.map +1 -1
  31. package/dist/components/Typography/Typography.js +9 -3
  32. package/dist/components/Typography/Typography.js.map +1 -1
  33. package/dist/components.css +1 -1
  34. package/dist/components.css.map +1 -1
  35. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +4 -4
  36. package/dist/cssm/components/Alert/Alert.module.css +4 -4
  37. package/dist/cssm/components/Button/Button.js +3 -1
  38. package/dist/cssm/components/Button/Button.js.map +1 -1
  39. package/dist/cssm/components/CarouselBase/CarouselBase.js +10 -5
  40. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
  41. package/dist/cssm/components/CarouselBase/CarouselBase.module.css +1 -1
  42. package/dist/cssm/components/CarouselBase/ScrollArrows.js +2 -2
  43. package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -1
  44. package/dist/cssm/components/CellButton/CellButton.module.css +4 -2
  45. package/dist/cssm/components/Clickable/useState.js +1 -1
  46. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  47. package/dist/cssm/components/CustomSelect/CustomSelect.js +1 -1
  48. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  49. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +2 -2
  50. package/dist/cssm/components/DateInput/DateInput.module.css +3 -2
  51. package/dist/cssm/components/Epic/Epic.module.css +2 -1
  52. package/dist/cssm/components/FixedLayout/FixedLayout.module.css +6 -3
  53. package/dist/cssm/components/Flex/Flex.module.css +12 -4
  54. package/dist/cssm/components/Footer/Footer.js +1 -0
  55. package/dist/cssm/components/Footer/Footer.js.map +1 -1
  56. package/dist/cssm/components/Footer/Footer.module.css +0 -1
  57. package/dist/cssm/components/FormField/FormField.module.css +10 -6
  58. package/dist/cssm/components/FormItem/FormItem.module.css +24 -12
  59. package/dist/cssm/components/GridAvatar/GridAvatar.module.css +1 -1
  60. package/dist/cssm/components/Group/Group.module.css +5 -2
  61. package/dist/cssm/components/HorizontalCell/HorizontalCell.module.css +4 -2
  62. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +14 -8
  63. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  64. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +3 -3
  65. package/dist/cssm/components/IconButton/IconButton.module.css +6 -2
  66. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +4 -2
  67. package/dist/cssm/components/ModalCard/ModalCard.module.css +2 -1
  68. package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +14 -10
  69. package/dist/cssm/components/ModalPage/ModalPage.module.css +2 -1
  70. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +5 -3
  71. package/dist/cssm/components/Panel/Panel.module.css +4 -2
  72. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
  73. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +2 -2
  74. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +2 -2
  75. package/dist/cssm/components/Removable/Removable.module.css +9 -4
  76. package/dist/cssm/components/Root/Root.module.css +8 -8
  77. package/dist/cssm/components/Search/Search.module.css +2 -3
  78. package/dist/cssm/components/Snackbar/Snackbar.module.css +4 -2
  79. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +15 -15
  80. package/dist/cssm/components/SplitLayout/SplitLayout.module.css +8 -4
  81. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js +4 -3
  82. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  83. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.module.css +9 -0
  84. package/dist/cssm/components/Switch/Switch.module.css +32 -20
  85. package/dist/cssm/components/Typography/Typography.js +7 -2
  86. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  87. package/dist/cssm/components/Typography/Typography.module.css +12 -0
  88. package/dist/cssm/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js +1 -1
  89. package/dist/cssm/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js.map +1 -1
  90. package/dist/cssm/hooks/useKeyboardInputTracker.js +4 -4
  91. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  92. package/dist/cssm/index.js +1 -0
  93. package/dist/cssm/index.js.map +1 -1
  94. package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
  95. package/dist/cssm/lib/animation/useReducedMotion.js +7 -2
  96. package/dist/cssm/lib/animation/useReducedMotion.js.map +1 -1
  97. package/dist/cssm/lib/dom.js +2 -2
  98. package/dist/cssm/lib/dom.js.map +1 -1
  99. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  100. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +1 -1
  101. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  102. package/dist/cssm/styles/constants.css +2 -1
  103. package/dist/cssm/styles/customMedias.generated.css +21 -21
  104. package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.d.ts.map +1 -1
  105. package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js +1 -1
  106. package/dist/hooks/useDraggableWithDomApi/useDraggableWithDomApi.js.map +1 -1
  107. package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
  108. package/dist/hooks/useKeyboardInputTracker.js +4 -4
  109. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  110. package/dist/index.d.ts +1 -0
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +1 -0
  113. package/dist/index.js.map +1 -1
  114. package/dist/lib/adaptivity/functions.d.ts.map +1 -1
  115. package/dist/lib/adaptivity/functions.js.map +1 -1
  116. package/dist/lib/animation/useReducedMotion.d.ts +6 -0
  117. package/dist/lib/animation/useReducedMotion.d.ts.map +1 -1
  118. package/dist/lib/animation/useReducedMotion.js +7 -2
  119. package/dist/lib/animation/useReducedMotion.js.map +1 -1
  120. package/dist/lib/dom.d.ts.map +1 -1
  121. package/dist/lib/dom.js +2 -2
  122. package/dist/lib/dom.js.map +1 -1
  123. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +1 -1
  124. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  125. package/dist/lib/sheet/controllers/BottomSheetController.js +1 -1
  126. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  127. package/dist/vkui.css +1 -1
  128. package/dist/vkui.css.map +1 -1
  129. package/package.json +2 -1
  130. package/src/components/ActionSheet/ActionSheet.module.css +4 -4
  131. package/src/components/Alert/Alert.module.css +4 -4
  132. package/src/components/Button/Button.tsx +1 -1
  133. package/src/components/CarouselBase/CarouselBase.module.css +1 -1
  134. package/src/components/CarouselBase/CarouselBase.module.css.d.ts.map +1 -1
  135. package/src/components/CarouselBase/CarouselBase.tsx +10 -4
  136. package/src/components/CarouselBase/ScrollArrows.tsx +1 -3
  137. package/src/components/CellButton/CellButton.module.css +2 -1
  138. package/src/components/CellButton/CellButton.module.css.d.ts.map +1 -1
  139. package/src/components/Clickable/useState.tsx +8 -3
  140. package/src/components/CustomSelect/CustomSelect.tsx +1 -1
  141. package/src/components/CustomSelectOption/CustomSelectOption.module.css +1 -1
  142. package/src/components/DateInput/DateInput.module.css +3 -2
  143. package/src/components/DateInput/DateInput.module.css.d.ts.map +1 -1
  144. package/src/components/Epic/Epic.module.css +2 -1
  145. package/src/components/FixedLayout/FixedLayout.module.css +4 -2
  146. package/src/components/FixedLayout/FixedLayout.module.css.d.ts.map +1 -1
  147. package/src/components/Flex/Flex.module.css +6 -2
  148. package/src/components/Flex/Flex.module.css.d.ts.map +1 -1
  149. package/src/components/Footer/Footer.module.css +0 -1
  150. package/src/components/Footer/Footer.tsx +1 -0
  151. package/src/components/FormField/FormField.module.css +10 -6
  152. package/src/components/FormField/FormField.module.css.d.ts.map +1 -1
  153. package/src/components/FormItem/FormItem.module.css +12 -6
  154. package/src/components/FormItem/FormItem.module.css.d.ts.map +1 -1
  155. package/src/components/GridAvatar/GridAvatar.module.css +1 -1
  156. package/src/components/GridAvatar/GridAvatar.module.css.d.ts.map +1 -1
  157. package/src/components/Group/Group.module.css +5 -2
  158. package/src/components/Group/Group.module.css.d.ts.map +1 -1
  159. package/src/components/HorizontalCell/HorizontalCell.module.css +4 -2
  160. package/src/components/HorizontalCell/HorizontalCell.module.css.d.ts.map +1 -1
  161. package/src/components/HorizontalScroll/HorizontalScroll.module.css +3 -3
  162. package/src/components/HorizontalScroll/HorizontalScroll.module.css.d.ts.map +1 -1
  163. package/src/components/HorizontalScroll/HorizontalScroll.tsx +15 -7
  164. package/src/components/IconButton/IconButton.module.css +6 -2
  165. package/src/components/IconButton/IconButton.module.css.d.ts.map +1 -1
  166. package/src/components/MiniInfoCell/MiniInfoCell.module.css +4 -2
  167. package/src/components/MiniInfoCell/MiniInfoCell.module.css.d.ts.map +1 -1
  168. package/src/components/ModalCard/ModalCard.module.css +2 -1
  169. package/src/components/ModalCard/ModalCard.module.css.d.ts.map +1 -1
  170. package/src/components/ModalCardBase/ModalCardBase.module.css +7 -5
  171. package/src/components/ModalCardBase/ModalCardBase.module.css.d.ts.map +1 -1
  172. package/src/components/ModalPage/ModalPage.module.css +2 -1
  173. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  174. package/src/components/ModalPageHeader/ModalPageHeader.module.css +5 -2
  175. package/src/components/ModalPageHeader/ModalPageHeader.module.css.d.ts.map +1 -1
  176. package/src/components/Panel/Panel.module.css +2 -1
  177. package/src/components/Panel/Panel.module.css.d.ts.map +1 -1
  178. package/src/components/PanelHeader/PanelHeader.module.css +1 -1
  179. package/src/components/PanelHeader/PanelHeader.module.css.d.ts.map +1 -1
  180. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +2 -2
  181. package/src/components/PopoutWrapper/PopoutWrapper.module.css +2 -2
  182. package/src/components/Removable/Removable.module.css +9 -4
  183. package/src/components/Removable/Removable.module.css.d.ts.map +1 -1
  184. package/src/components/Root/Root.module.css +8 -8
  185. package/src/components/Search/Search.module.css +2 -2
  186. package/src/components/Snackbar/Snackbar.module.css +4 -2
  187. package/src/components/Snackbar/Snackbar.module.css.d.ts.map +1 -1
  188. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +15 -15
  189. package/src/components/SplitLayout/SplitLayout.module.css +4 -2
  190. package/src/components/SplitLayout/SplitLayout.module.css.d.ts.map +1 -1
  191. package/src/components/SubnavigationBar/SubnavigationBar.module.css +9 -0
  192. package/src/components/SubnavigationBar/SubnavigationBar.module.css.d.ts.map +1 -1
  193. package/src/components/SubnavigationBar/SubnavigationBar.tsx +14 -3
  194. package/src/components/Switch/Switch.module.css +32 -20
  195. package/src/components/Switch/Switch.module.css.d.ts.map +1 -1
  196. package/src/components/Typography/Typography.module.css +12 -0
  197. package/src/components/Typography/Typography.module.css.d.ts.map +1 -1
  198. package/src/components/Typography/Typography.tsx +12 -0
  199. package/src/hooks/useDraggableWithDomApi/useDraggableWithDomApi.ts +7 -1
  200. package/src/hooks/useKeyboardInputTracker.ts +20 -4
  201. package/src/index.ts +1 -0
  202. package/src/lib/adaptivity/functions.ts +36 -6
  203. package/src/lib/animation/useReducedMotion.ts +7 -1
  204. package/src/lib/dom.tsx +11 -2
  205. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +1 -1
  206. package/src/lib/sheet/controllers/BottomSheetController.ts +1 -1
  207. package/src/styles/constants.css +2 -1
  208. package/src/styles/customMedias.generated.css +21 -21
  209. package/dist/cssm/hooks/useAdaptivityHasPointer.js +0 -15
  210. package/dist/cssm/hooks/useAdaptivityHasPointer.js.map +0 -1
  211. package/dist/hooks/useAdaptivityHasPointer.d.ts +0 -9
  212. package/dist/hooks/useAdaptivityHasPointer.d.ts.map +0 -1
  213. package/dist/hooks/useAdaptivityHasPointer.js +0 -15
  214. package/dist/hooks/useAdaptivityHasPointer.js.map +0 -1
  215. package/src/hooks/useAdaptivityHasPointer.ts +0 -25
package/README.md CHANGED
@@ -56,6 +56,7 @@ import {
56
56
  Header,
57
57
  Group,
58
58
  SimpleCell,
59
+ usePlatform
59
60
  } from '@vkontakte/vkui';
60
61
  import '@vkontakte/vkui/dist/vkui.css';
61
62
 
@@ -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
- Component: restProps.href ? 'a' : 'button',
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 Component={restProps.href ? 'a' : '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","Component","href","focusVisibleMode","undefined","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;QACVC,WAAWP,UAAUQ,IAAI,GAAG,MAAM;QAClCC,kBAAiB;QACjBV,UAAUJ,WAAWI;OACjBC;QACJJ,SAASD,UAAUe,YAAYd;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,WAAWV;kCAEzDlB;;oBAGJ7B,aAAa4B,2BACZ,KAACwB;wBACCH,SAAS;wBACTK,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,aAAaV;kCAE3DnB;;oBAGJ5B,aAAa8B,wBACZ,KAACsB;wBACCH,SAAS;wBACTI,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,UAAUV;kCAExDjB;;;;;;AAMb,EAAE"}
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;AAkC/B,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,YAAY,GAAI,gbAiC1B,gBAAgB,KAAG,KAAK,CAAC,SAghB3B,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
- return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({}, restProps), {
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":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,uBAAuB,QAAQ,yCAAsC;AAC9E,SAASC,kBAAkB,QAAQ,oCAAiC;AACpE,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,mBAAmB,QAAQ,qCAAkC;AACtE,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,MAAM,QAAQ,mBAAgB;AACvC,SAASC,yBAAyB,QAAQ,yCAAsC;AAChF,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,OAAO,QAAQ,eAAY;AACpC,SAASC,gBAAgB,QAAQ,wBAAqB;AACtD,SAASC,YAAY,QAAQ,oBAAiB;AAC9C,SACEC,sBAAsB,EACtBC,0BAA0B,EAC1BC,eAAe,EACfC,oBAAoB,QACf,iBAAc;AACrB,SACEC,OAAO,EACPC,OAAO,EACPC,eAAe,EACfC,aAAa,EACbC,cAAc,EACdC,QAAQ,EACRC,eAAe,EACfC,cAAc,EACdC,cAAc,EACdC,cAAc,QACT,eAAY;AACnB,SAASC,iBAAiB,QAAQ,aAAU;AAS5C,MAAMC,OAAOpB,SAAS;AAEtB,OAAO,MAAMqB,eAAe;QAAC,EAC3BC,UAAU,KAAK,EACfC,UAAU,EACVC,QAAQ,EACRC,aAAa,MAAM,EACnBC,aAAa,CAAC,EACdC,eAAe,KAAK,EACpBC,eAAe,QAAQ,EACvBC,WAAW,EACXC,SAAS,EACTC,QAAQ,EACRC,WAAW,EACXC,WAAW,EACXC,QAAQ,MAAM,EACdC,UAAU,EACVC,MAAM,EACNC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,YAAY,EACZC,eAAe,EACfC,eAAe,EACfC,SAAS,KAAK,EACdC,oBAAoBtC,0BAA0B,EAC9CuC,kBAAkB,MAAM,EAExB,OAAO;IACP,wBAAwBC,sBAAsB,UAAU,EACxDC,iBAAiB,iBAAiB,EAClCC,iBAAiB,kBAAkB,EACnCC,UAAU,EACVC,oBAAoB,EAEH,WADdC;QA/BH7B;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAGA;QACAE;QACAC;QACAC;QACAC;;IAGA,MAAME,cAAc7D,MAAM8D,MAAM,CAAwC,CAAC;IACzE,MAAMC,gBAAgB/D,MAAM8D,MAAM,CAAqB7C;IACvD,MAAM+C,gBAAgB7D;IACtB,MAAM8D,QAAQD,kBAAkB;IAEhC,MAAME,UAAU9D,aAAa4B;IAC7B,MAAMmC,cAAc/D,aAAayC;IACjC,MAAMuB,WAAWpE,MAAM8D,MAAM,CAAiB;IAC9C,MAAMO,oBAAoBrE,MAAM8D,MAAM,CAAkD;IACxF,MAAMQ,mBAAmBtE,MAAM8D,MAAM,CAAS;IAC9C,MAAMS,iBAAiBvE,MAAM8D,MAAM,CAAS;IAC5C,MAAMU,cAAcxE,MAAM8D,MAAM,CAAU;IAC1C,MAAM,EACJW,gBAAgB,EAChBC,mBAAmB,EACnBC,kBAAkB,EAClBC,cAAc,EACdC,kBAAkB,EACnB,GAAGjD,kBAAkByB,mBAAmBC;IACzC,MAAMwB,aAAa9E,MAAM8D,MAAM,CAAC;IAEhC,MAAM,CAACiB,sBAAsBC,wBAAwB,GACnDhF,MAAMiF,QAAQ,CAAuBnE;IAEvC,MAAMoE,aAAahF;IAEnB,MAAMiF,oBAAoBnF,MAAMoF,KAAK;IAErC,MAAMC,gBAAgB1C,UAAU;IAEhC,MAAM2C,wBAAwB;QAC5B,IAAIlC,QAAQ;YACV,OAAO,CAACW,cAAcwB,OAAO,CAACC,cAAc;QAC9C;QACA,MAAMC,gBAAgBjE,gBAAgB8C,iBAAiBiB,OAAO,EAAE,GAAGtB;QACnE,OAAO,CAACF,cAAcwB,OAAO,CAACC,cAAc,IAAI,CAACC;IACnD;IAEA,MAAMC,yBAAyB;QAC7B,IAAItC,QAAQ;YACV,OAAO,CAACW,cAAcwB,OAAO,CAACC,cAAc;QAC9C;YAMOzB;QALP,OACE,CAACA,cAAcwB,OAAO,CAACC,cAAc,IACrC,+FAA+F;QAC9F,CAAA,AAAC7C,UAAU,UACVoB,cAAcwB,OAAO,CAACI,cAAc,GAAGjE,eAAe4C,iBAAiBiB,OAAO,EAAEtB,SAC7EF,CAAAA,CAAAA,oCAAAA,cAAcwB,OAAO,CAACK,UAAU,cAAhC7B,+CAAAA,oCAAoC,CAAA,KACvC,mFAAmF;QAClFpB,UAAU,UAAUR,aAAa4B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM,GAAG,CAAC;IAE/E;IAEA,MAAMC,qBAAqB,CAACC,QAAgBC,YAAY,KAAK;QAC3DD,SAASE,KAAKC,KAAK,CAACH;QACpB,IAAI5C,QAAQ;YACVW,cAAcwB,OAAO,CAACa,UAAU,CAACC,OAAO,CAAC,CAACC;gBACxC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGF;gBAC1B,MAAMG,QAAQ5C,YAAY0B,OAAO,CAACiB,MAAM;gBACxC,IAAIC,OAAO;oBACTA,MAAMC,KAAK,CAACC,SAAS,GAAG,CAAC,YAAY,EAAEJ,OAAOP,QAAQ,SAAS,CAAC;gBAClE;YACF;QACF,OAAO;YACLY,OAAOC,MAAM,CAAChD,YAAY0B,OAAO,EAAEc,OAAO,CAAC,CAACI;gBAC1C,IAAIA,OAAO;oBACTA,MAAMC,KAAK,CAACC,SAAS,GAAG;gBAC1B;YACF;QACF;QAEA,IAAIvC,SAASmB,OAAO,EAAE;YACpB,MAAMuB,SACJhC,WAAWS,OAAO,IAAI,CAACnC,SACnBzB,eACEoC,cAAcwB,OAAO,EACrBjB,iBAAiBiB,OAAO,GAAGhB,eAAegB,OAAO,EACjDtB,OACA,SAEF+B;YAEN5B,SAASmB,OAAO,CAACmB,KAAK,CAACC,SAAS,GAAG,CAAC,YAAY,EAAEG,OAAO,SAAS,CAAC;YACnE1C,SAASmB,OAAO,CAACmB,KAAK,CAACK,UAAU,GAAGd,YAChC,CAAC,UAAU,EAAE5C,kBAAkB,GAAG,EAAEwB,sBAAsB,GAC1D;QACN;IACF;IAEA,MAAMmC,iCAAiC,CAAChB,QAAgBiB,QACtD1F,SAASyE,QAAQiB,KAAK,CAAC,EAAE,EAAEhD;IAE7B,MAAMiD,+BAA+B,CAAClB,QAAgBH;QACpD;;;KAGC,GACD,MAAMsB,kBACJxE,UAAU,WACN,AAACoB,CAAAA,cAAcwB,OAAO,CAACI,cAAc,GAAG5B,cAAcwB,OAAO,CAACM,MAAM,CAAC,EAAE,CAACuB,KAAK,AAAD,IAAK,IACjF;QAEN,MAAMC,YACJxB,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,GAAGvB,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACwB,MAAM,GAAGH;QACvE,OAAOlD,QAAQ+B,UAAUqB,YAAYrB,UAAU,CAACqB;IAClD;IAEA,MAAME,mBAAmB,CAACvB,QAAgBC,YAAY,KAAK;QACzD,MAAM,EAAEgB,KAAK,EAAEO,WAAW,EAAE3B,MAAM,EAAE,GAAG9B,cAAcwB,OAAO;QAE5D,IAAIlB,kBAAkBkB,OAAO,KAAK,MAAM;YACtCkC,qBAAqBpD,kBAAkBkB,OAAO;QAChD;QACAlB,kBAAkBkB,OAAO,GAAGmC,sBAAsB;YAChD;;;OAGC,GACD,IAAItE,UAAU4D,+BAA+BhB,QAAQiB,QAAQ;gBAC3D,MAAMU,YAAYjG,eAAeuF,KAAK,CAAC,EAAE,EAAEhD;gBAC3CK,iBAAiBiB,OAAO,GAAG7D,eAAe,CAAC8F,cAAcG,WAAW1D;gBACpE+B,SAAS1B,iBAAiBiB,OAAO,GAAGhB,eAAegB,OAAO;YAC5D;YAEA;;;OAGC,GACD,IAAInC,UAAU8D,6BAA6BlB,QAAQH,SAAS;gBAC1DvB,iBAAiBiB,OAAO,GAAGW,KAAK0B,GAAG,CAACrD,eAAegB,OAAO,IAAI0B,KAAK,CAAC,EAAE;YACxE;YACAlB,mBAAmBC,QAAQC;YAC3B5B,kBAAkBkB,OAAO,GAAG;QAC9B;IACF;IAEA,MAAMsC,mBAAmB;YA+CFC;QA9CrB,IAAI,CAAC5D,QAAQqB,OAAO,IAAI,CAACpB,YAAYoB,OAAO,IAAI,CAACnB,SAASmB,OAAO,EAAE;YACjE;QACF;QACA,MAAMwC,mBAAmB3D,SAASmB,OAAO,CAACyC,WAAW;QAErD,MAAMC,eAAe,CAACC;YACpB,MAAMC,aAAaD,QAAQC,UAAU;YACrC,MAAMH,cAAcE,QAAQF,WAAW;YACvC,OAAOD,mBAAmBI,aAAaH;QACzC;QAEA,IAAIF,cACF9H,MAAMoI,QAAQ,CAACC,GAAG,CAACpG,UAAU,CAACqG,OAAOC;YACnC,MAAMC,OAAO3E,YAAY0B,OAAO,CAACgD,EAAE;YACnC,IAAI,CAACC,MAAM;gBACT,OAAO;oBAAElB,QAAQ;oBAAGF,OAAO;gBAAE;YAC/B;YACA,MAAME,SAASrD,QAAQgE,aAAaO,QAAQA,KAAKL,UAAU;YAC3D,OAAO;gBAAEb;gBAAQF,OAAOoB,KAAKR,WAAW;YAAC;QAC3C,MAAM,EAAE;QAEV,IAAIF,YAAYhC,MAAM,KAAK,GAAG;YAC5BtB,YAAYe,OAAO,GAAG;YACtB;QACF;QAEA,MAAMI,iBAAiBzB,QAAQqB,OAAO,CAACyC,WAAW;QAClD,MAAMS,sBAAsBtE,YAAYoB,OAAO,CAACyC,WAAW;QAC3D,MAAMpC,aAAakC,YAAYY,MAAM,CAAC,CAACC,KAAKlC,QAAUA,MAAMW,KAAK,GAAGuB,KAAK;QAEzE,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiB1F,QAAQ;YACpD,IAAI2F,iBAAiBpD;YACrB,IAAIxD,aAAa;YAEjB,MAAO4G,iBAAiB,KAAK5G,aAAa2F,YAAYhC,MAAM,CAAE;gBAC5DiD,kBAAkBjB,WAAW,CAAC3F,WAAW,CAACiF,KAAK;gBAC/CjF;YACF;YACA,IAAI4G,kBAAkB,KAAK5G,eAAe2F,YAAYhC,MAAM,EAAE;gBAC5DjE,KACE;YAEJ;QACF;YAGqBiG;QADrB,MAAMkB,sCACJ,AAACrD,CAAAA,iBAAkBmC,CAAAA,CAAAA,iCAAAA,0BAAAA,WAAW,CAAC3F,WAAW,cAAvB2F,8CAAAA,wBAAyBV,KAAK,cAA9BU,2CAAAA,gCAAkC,CAAA,CAAC,IAAK;QAC7D,MAAMtC,iBACJ7C,UAAU,WACNiD,aAAaoD,uCAAuCrD,iBACpDC,cAAcD;QAEpB,MAAMsD,eAAenB,YAAYhC,MAAM,KAAK;QAE5C/B,cAAcwB,OAAO,GAAG,wCACnBxB,cAAcwB,OAAO;YACxBK;YACAD;YACA8C;YACA5C,QAAQiC;YACRtC;YACA0D,KACE9F,UAAU6F,eACN,OACA/H,QAAQ;gBACN2E,QAAQiC;gBACRnC;gBACAN;gBACApB;YACF;YACNkF,KACE/F,UAAU6F,eACN,OACA9H,QAAQ;gBACNwE;gBACAC;gBACAC,QAAQiC;gBACRW;gBACAjD;gBACA7C;gBACAsB;YACF;;QAER,MAAMgD,QAAQa,YAAYO,GAAG,CAAC,CAACe,GAAG5C,QAChCpF,gBAAgB;gBACdiI,aAAa7C;gBACbzC,eAAeA,cAAcwB,OAAO;gBACpC+D,UAAUjE;gBACVjC;gBACAa;YACF;QAGF,IAAIuD,cAActB,KAAK0B,GAAG,CAACX,KAAK,CAACA,MAAMnB,MAAM,GAAG,EAAE,IAAIgC,WAAW,CAACA,YAAYhC,MAAM,GAAG,EAAE,CAACsB,KAAK;QAC/F,IAAIzE,UAAU,UAAU;YACtB6E,eAAe9F,eAAeuF,KAAK,CAAC,EAAE,EAAEhD;QAC1C;QAEAF,cAAcwB,OAAO,CAAC0B,KAAK,GAAGA;QAC9BlD,cAAcwB,OAAO,CAACiC,WAAW,GAAGA;QACpC,wFAAwF;QACxF,IAAIpE,UAAU,CAAC6F,gBAAgB,CAACzD,gBAAgB;YAC9CzB,cAAcwB,OAAO,CAACa,UAAU,GAAG/E,cACjC0C,cAAcwB,OAAO,EACrBI,gBACA1B;QAEJ;QAEA,MAAMsF,wBAAwB9E,sBAAsBJ,kBAAkBkB,OAAO,KAAK;QAElF,IAAIgE,uBAAuB;YACzB;QACF;QAEAjF,iBAAiBiB,OAAO,GAAG0B,KAAK,CAAC9E,WAAW;QAC5CqC,YAAYe,OAAO,GAAG;QAEtBP,wBAAwB;YACtBwE,cAAclE;YACdmE,eAAe/D;YACfgE,aAAa,CAAEtH,CAAAA,gBAAgB2B,cAAcwB,OAAO,CAACC,cAAc,AAAD;QACpE;QACA+B,iBAAiBjD,iBAAiBiB,OAAO;IAC3C;IAEA,MAAMoE,WAAW;QACf,IAAInF,YAAYe,OAAO,EAAE;YACvBsC;QACF;IACF;IACA,MAAM,EAAE+B,MAAM,EAAE,GAAGrJ;IACnBD,kBAAkB+B,iBAAiB,YAAY6B,UAAU0F,QAAQD;IAEjE,MAAME,2BAA2B;QAC/B,MAAM,EAAE5C,KAAK,EAAEpB,MAAM,EAAE,GAAG9B,cAAcwB,OAAO;QAC/C,MAAMuB,SAASG,KAAK,CAAC9E,WAAW;QAChC,IAAI2H,aAAaxF,iBAAiBiB,OAAO;QAEzC,MAAMwE,kBAAkBtI,eACtB6C,iBAAiBiB,OAAO,EACxB0B,KAAK,CAACA,MAAMnB,MAAM,GAAG,EAAE,EACvB7B;QAEF;;;;KAIC,GACD,IAAI6C,WAAWG,KAAK,CAAC,EAAE,IAAI8C,iBAAiB;YAC1C,MAAMC,UAAUtI,eACdwE,KAAK0B,GAAG,CAACX,KAAK,CAACA,MAAMnB,MAAM,GAAG,EAAE,IAAID,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,EACnEnD;YAEF,MAAMgG,WAAWD,UAAUF;YAC3BpF,oBACEC,mBAAmB,CAACuF;gBAClB,MAAMlE,SAAS8D,aAAaI,WAAWD,WAAW,CAAC;gBAEnDlE,mBAAmBC;gBAEnB,IAAIA,UAAUiB,KAAK,CAACA,MAAMnB,MAAM,GAAG,EAAE,GAAGD,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,EAAE;oBACvEM,sBAAsB;wBACpBpD,iBAAiBiB,OAAO,GAAGuB;wBAC3Bf,mBAAmBkB,KAAK,CAAC,EAAE;oBAC7B;gBACF;YACF;QAEF;;;;OAIC,GACH,OAAO,IAAIH,WAAWG,KAAK,CAACA,MAAMnB,MAAM,GAAG,EAAE,IAAIxB,iBAAiBiB,OAAO,KAAK0B,KAAK,CAAC,EAAE,EAAE;YACtF6C,aAAahD,SAASpF,eAAemE,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,EAAEnD;YAEtES,oBAAoB;gBAClBgD,sBAAsB;oBACpB,MAAM1B,SAASc,SAASpF,eAAemE,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,EAAEnD;oBACxE8B,mBAAmBC;oBAEnBrB,mBAAmB,CAACuF;wBAClB,MAAMC,OAAOzI,eAAewI,WAAWrE,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,EAAEnD;wBACxE8B,mBAAmB+D,aAAaK;oBAClC;gBACF;YACF;QACA;;OAEC,GACH,OAAO;YACLzF,oBAAoB;gBAClB,MAAMuF,WAAW/D,KAAK0B,GAAG,CAACd,SAASgD;gBACnC,IAAIM,YAAYN,cAAchD,SAAS,IAAI,CAAC;gBAE5CnC,mBAAmB,CAACuF;oBAClB,MAAMlE,SAAS8D,aAAaI,WAAWD,WAAWG;oBAClDrE,mBAAmBC;gBACrB;YACF;QACF;IACF;IAEA,MAAMqE,2BAA2B;QAC/B,MAAM,EAAEpD,KAAK,EAAE,GAAGlD,cAAcwB,OAAO;QACvCgC,iBAAiBN,KAAK,CAAC9E,WAAW,EAAE;IACtC;IAEA3B,0BACE,SAAS8J;QACP,IAAI,CAAC9F,YAAYe,OAAO,EAAE;YACxB;QACF;QACA,MAAM,EAAE0B,KAAK,EAAE,GAAGlD,cAAcwB,OAAO;QACvC,MAAMuB,SAASG,KAAK,CAAC9E,WAAW;QAEhC,IAAIiB,QAAQ;YACVyG;QACF,OAAO;YACLQ;QACF;QAEAzF;QAEAN,iBAAiBiB,OAAO,GAAGuB;QAE3B9B,wBAAwB,CAACuF,IAAO,wCAC3BA;gBACHf,cAAclE;gBACdmE,eAAe/D;;IAEnB,GACA;QAACvD;KAAW;IAGd3B,0BACE,SAASgK;QACPxF,wBAAwB,CAACuF,IAAO,wCAC3BA;gBACHb,aAAa,CAAEtH,CAAAA,gBAAgB2B,cAAcwB,OAAO,CAACC,cAAc,AAAD;;IAEtE,GACA;QAACpD;KAAa;IAGhB/B,oBAAoB+D,UAAUyD;IAE9BrH,0BAA0BqH,kBAAkB;QAAClF;QAAOT;QAAYkB;QAAQa;KAAM;IAE9E,MAAMwG,4BAA4B;QAChC,OAAO1G,cAAcwB,OAAO,CAACM,MAAM,CAAC1D,WAAW,CAACiF,KAAK,GAAGpG;IAC1D;IAEA,MAAM0J,YAAY,CAACC;QACjB,IAAIxI,aAAa,GAAG;YAClBmC,iBAAiBiB,OAAO,IAAI7D,eAAe+I,6BAA6BxG;QAC1E;QACAzB,qBAAAA,+BAAAA,SACE,AAACL,CAAAA,aAAa,IAAI4B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM,AAAD,IAAK/B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM;QAE9FrD,wBAAAA,kCAAAA,YAAckI;IAChB;IAEA,MAAMC,aAAa,CAACD;QAClB,IAAIxI,aAAa4B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM,GAAG,GAAG;YACxDxB,iBAAiBiB,OAAO,IAAI7D,eAAe+I,6BAA6BxG;QAC1E;QACAzB,qBAAAA,+BAAAA,SAAW,AAACL,CAAAA,aAAa,CAAA,IAAK4B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM;QACjEpD,wBAAAA,kCAAAA,YAAciI;IAChB;IAEA,MAAME,UAAU,CAACC;QACfA,EAAEC,aAAa,CAACC,eAAe;QAC/B,IAAIjG,qBAAqB2E,WAAW,EAAE;YACpCpH,wBAAAA,kCAAAA,YAAcwI;YACdxG,iBAAiBiB,OAAO,GAAGxB,cAAcwB,OAAO,CAAC0B,KAAK,CAAC9E,WAAW;YAClEoC,eAAegB,OAAO,GAAG;QAC3B;IACF;IAEA,MAAM0F,UAAU,CAACH;QACf,IAAI/F,qBAAqB2E,WAAW,EAAE;YACpCoB,EAAEC,aAAa,CAACG,cAAc;YAE9B,IAAIJ,EAAEK,QAAQ,EAAE;gBACdrG,WAAWS,OAAO,GAAG;gBACrB,IAAIhB,eAAegB,OAAO,KAAKuF,EAAE9E,MAAM,EAAE;oBACvCzB,eAAegB,OAAO,GAAGuF,EAAE9E,MAAM;oBACjCuB,iBAAiBjD,iBAAiBiB,OAAO,GAAGhB,eAAegB,OAAO;gBACpE;YACF;QACF;IACF;IAEA,MAAM6F,QAAQ,CAACN;QACb,IAAI/F,qBAAqB2E,WAAW,EAAE;YACpC5E,WAAWS,OAAO,GAAG;YACrB,IAAI8D,cAAclH;YAClB,IAAI2I,EAAEO,OAAO,EAAE;gBACbhC,cAAc/H,eAAe;oBAC3BuE,QAAQ9B,cAAcwB,OAAO,CAACM,MAAM;oBACpC1D;oBACAmJ,eAAehH,iBAAiBiB,OAAO;oBACvCgG,oBAAoBhH,eAAegB,OAAO;oBAC1C2D,KAAKnF,cAAcwB,OAAO,CAAC2D,GAAG;oBAC9B9F;oBACAa;gBACF;YACF;YACA1B,sBAAAA,gCAAAA,UAAYuI,GAAGzB;YAEf,IAAIA,gBAAgBlH,YAAY;gBAC9BmC,iBAAiBiB,OAAO,GAAGjB,iBAAiBiB,OAAO,GAAGhB,eAAegB,OAAO;gBAC5E/C,qBAAAA,+BAAAA,SAAW6G;YACb,OAAO;gBACL,MAAMmC,gBAAgBzH,cAAcwB,OAAO,CAAC0B,KAAK,CAACoC,YAAY;gBAC9D9B,iBAAiBiE,eAAe;YAClC;QACF;IACF;IAEA,MAAMC,cAAc,CAACC,UAAiCvJ;QACpD0B,YAAY0B,OAAO,CAACpD,WAAW,GAAGuJ;IACpC;IAEA,MAAM,EAAEhC,WAAW,EAAED,aAAa,EAAED,YAAY,EAAE,GAAGzE;IAErD,MAAM4G,sCAAsC,CAAChB;YAC3C/G;SAAAA,sBAAAA,UAAUgI,QAAQ,cAAlBhI,0CAAAA,yBAAAA,WAAqB+G;QACrB,IAAIzG,QAAQqB,OAAO,EAAE;YACnBoF,MAAMkB,aAAa,CAACC,UAAU,GAAG;QACnC;IACF;IAEA,qBACE,MAACpL,uDACKkD;QACJmI,MAAK;QACLH,UAAUD;QACVK,wBAAsBzI;QACtB0I,eAAehM,qCAEbiC,eAAe,6CACfwH;QAEF1H,YAAYkC;;0BAEZ,KAACrD;gBACCqE,YAAYA;gBACZsE,cAAcA;gBACdC,eAAeA;gBACfyC,cAActB;gBACduB,aAAazB;gBACb9H,YAAYA;gBACZE,WAAWA;gBACXC,iBAAiBA;gBACjBU,gBAAgBA;gBAChBD,gBAAgBA;gBAChBL,iBAAiBA;gBACjBD,iBAAiBA;gBACjBiC,mBAAmBA;;0BAErB,KAACvE;gBACCsB,YAAYA;gBACZc,aAAaA;gBACb6H,SAASA;gBACTI,SAASA;gBACTG,OAAOA;gBACPpJ,YAAYmC;gBACZC,UAAUA;gBACVqH,aAAaA;gBACbtG,mBAAmBA;gBACnBzB,YAAYA;gBACZC,sBAAsBA;gBACtBnB,UAAUA;0BAETP;;YAGFF,yBACC,KAACpB;gBACCoB,SAASA;gBACTI,YAAYA;gBACZiK,OAAOpM,MAAMoI,QAAQ,CAACgE,KAAK,CAACnK;gBAC5BgB,cAAcA;;;;AAKxB,EAAE"}
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: ({ hasPointer, canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows, arrowSize, arrowAreaHeight, arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId, slidesContainerId, }: ScrollArrowsProps) => import("react/jsx-runtime").JSX.Element | null;
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,UAAU,CAAC,EAAE,OAAO,CAAC;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,sMAc1B,iBAAiB,mDAgCnB,CAAC"}
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 = ({ hasPointer, canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows = false, arrowSize = 'm', arrowAreaHeight = 'stretch', arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId, slidesContainerId })=>{
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 && hasPointer ? /*#__PURE__*/ _jsxs(_Fragment, {
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 hasPointer?: boolean;\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 hasPointer,\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 && hasPointer ? (\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","hasPointer","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;AA2BF,OAAO,MAAMC,eAAe,CAAC,EAC3BC,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,aAAa,KAAK,EAClBC,YAAY,GAAG,EACfT,kBAAkB,SAAS,EAC3BU,cAAc,EACdC,cAAc,EACdC,eAAe,EACfC,eAAe,EACfC,iBAAiB,EACC;IAClB,MAA2ErB,mBAAAA,mBAArE,EAAEQ,cAAcc,qBAAqB,EAA6B,GAAGtB,kBAA3BuB,oDAA2BvB;QAAnEQ;;IACR,MAA2ER,oBAAAA,mBAArE,EAAEQ,cAAcgB,qBAAqB,EAA6B,GAAGxB,mBAA3ByB,oDAA2BzB;QAAnEQ;;IAER,OAAOO,cAAcL,2BACnB;;YACGC,8BACC,KAACV;gBACCyB,WAAWrB,kBAAkB,SAASE,iBAAiBe;gBACvDK,WAAU;gBACVC,SAASd;gBACTe,MAAMb;gBACNc,eAAaV;gBACbW,OAAOd;gBACPe,iBAAeX;eACXE;YAGPX,+BACC,KAACX;gBACCyB,WAAWrB,kBAAkB,OAAOE,iBAAiBiB;gBACrDG,WAAU;gBACVC,SAASf;gBACTgB,MAAMb;gBACNc,eAAaX;gBACbY,OAAOb;gBACPc,iBAAeX;eACXI;;SAIR;AACN,EAAE"}
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;AAgJ/C,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"}
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":"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"}
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, onInputFocus),
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,