@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
@@ -31,14 +31,14 @@
31
31
  }
32
32
 
33
33
  .opening {
34
- /* prettier-ignore */
35
- animation: animation-actionsheet-slide-up var(--vkui--animation_duration_m) var(--vkui--animation_easing_platform);
34
+ animation: animation-actionsheet-slide-up var(--vkui--animation_duration_m)
35
+ var(--vkui--animation_easing_platform);
36
36
  }
37
37
 
38
38
  .closing {
39
39
  opacity: 0;
40
- /* prettier-ignore */
41
- animation: animation-actionsheet-slide-down var(--vkui--animation_duration_m) var(--vkui--animation_easing_platform);
40
+ animation: animation-actionsheet-slide-down var(--vkui--animation_duration_m)
41
+ var(--vkui--animation_easing_platform);
42
42
  }
43
43
 
44
44
  .title + .description {
@@ -19,14 +19,14 @@
19
19
  }
20
20
 
21
21
  .opening {
22
- /* prettier-ignore */
23
- animation: animation-alert-scale-up var(--vkui--animation_duration_m) var(--vkui--animation_easing_platform);
22
+ animation: animation-alert-scale-up var(--vkui--animation_duration_m)
23
+ var(--vkui--animation_easing_platform);
24
24
  }
25
25
 
26
26
  .closing {
27
27
  opacity: 0;
28
- /* prettier-ignore */
29
- animation: animation-alert-scale-down var(--vkui--animation_duration_m) var(--vkui--animation_easing_platform);
28
+ animation: animation-alert-scale-down var(--vkui--animation_duration_m)
29
+ var(--vkui--animation_easing_platform);
30
30
  }
31
31
 
32
32
  .host::before {
@@ -46,7 +46,9 @@ const sizeYClassNames = {
46
46
  return /*#__PURE__*/ _jsxs(Tappable, {
47
47
  hoverMode: styles.hover,
48
48
  activeMode: styles.active,
49
- Component: restProps.href ? 'a' : 'button',
49
+ ...restProps.href === undefined && {
50
+ Component: 'button'
51
+ },
50
52
  focusVisibleMode: "outside",
51
53
  disabled: loading || disabled,
52
54
  ...restProps,
@@ -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","styles","stylesSize","s","sizeS","m","sizeM","l","sizeL","stylesMode","primary","modePrimary","secondary","modeSecondary","tertiary","modeTertiary","outline","modeOutline","link","modeLink","stylesAppearance","appearanceAccent","appearancePositive","appearanceNegative","appearanceNeutral","appearanceOverlay","appearanceAccentInvariable","stylesAlign","left","alignLeft","right","alignRight","sizeYClassNames","none","sizeYNone","regular","sizeYRegular","Button","size","mode","appearance","stretched","align","children","before","after","getRootRef","loading","onClick","disableSpinnerAnimation","rounded","disabled","restProps","hasIconOnly","Boolean","sizeY","platform","hoverMode","hover","activeMode","active","Component","href","focusVisibleMode","undefined","baseClassName","host","ios","singleIcon","className","spinner","disableAnimation","noColor","span","in","role","data-testid","process","env","NODE_ENV","content"],"mappings":"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"}
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","styles","stylesSize","s","sizeS","m","sizeM","l","sizeL","stylesMode","primary","modePrimary","secondary","modeSecondary","tertiary","modeTertiary","outline","modeOutline","link","modeLink","stylesAppearance","appearanceAccent","appearancePositive","appearanceNegative","appearanceNeutral","appearanceOverlay","appearanceAccentInvariable","stylesAlign","left","alignLeft","right","alignRight","sizeYClassNames","none","sizeYNone","regular","sizeYRegular","Button","size","mode","appearance","stretched","align","children","before","after","getRootRef","loading","onClick","disableSpinnerAnimation","rounded","disabled","restProps","hasIconOnly","Boolean","sizeY","platform","hoverMode","hover","activeMode","active","href","undefined","Component","focusVisibleMode","baseClassName","host","ios","singleIcon","className","spinner","disableAnimation","noColor","span","in","role","data-testid","process","env","NODE_ENV","content"],"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;AACxE,OAAO,kCAAkC;AACzC,OAAO,gCAAgC;AACvC,OAAOC,YAAY,sBAAsB;AAEzC,MAAMC,aAAa;IACjBC,GAAGF,OAAOG,KAAK;IACfC,GAAGJ,OAAOK,KAAK;IACfC,GAAGN,OAAOO,KAAK;AACjB;AAEA,MAAMC,aAAa;IACjBC,SAAST,OAAOU,WAAW;IAC3BC,WAAWX,OAAOY,aAAa;IAC/BC,UAAUb,OAAOc,YAAY;IAC7BC,SAASf,OAAOgB,WAAW;IAC3BC,MAAMjB,OAAOkB,QAAQ;AACvB;AAEA,MAAMC,mBAAmB;IACvB,UAAUnB,OAAOoB,gBAAgB;IACjC,YAAYpB,OAAOqB,kBAAkB;IACrC,YAAYrB,OAAOsB,kBAAkB;IACrC,WAAWtB,OAAOuB,iBAAiB;IACnC,WAAWvB,OAAOwB,iBAAiB;IACnC,qBAAqBxB,OAAOyB,0BAA0B;AACxD;AAEA,MAAMC,cAAc;IAClBC,MAAM3B,OAAO4B,SAAS;IACtBC,OAAO7B,OAAO8B,UAAU;AAC1B;AAEA,MAAMC,kBAAkB;IACtBC,MAAMhC,OAAOiC,SAAS;IACtBC,SAASlC,OAAOmC,YAAY;AAC9B;AA2CA;;CAEC,GACD,OAAO,MAAMC,SAAS,CAAC,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,EACR,GAAGC,WACS;IACZ,MAAMC,cAAc,CAACV,YAAYW,QAAQT,WAAWS,QAAQV;IAC5D,MAAM,EAAEW,QAAQ,MAAM,EAAE,GAAG1D;IAC3B,MAAM2D,WAAW1D;IAEjB,qBACE,MAACE;QACCyD,WAAWxD,OAAOyD,KAAK;QACvBC,YAAY1D,OAAO2D,MAAM;QACxB,GAAIR,UAAUS,IAAI,KAAKC,aAAa;YAAEC,WAAW;QAAS,CAAC;QAC5DC,kBAAiB;QACjBb,UAAUJ,WAAWI;QACpB,GAAGC,SAAS;QACbJ,SAASD,UAAUe,YAAYd;QAC/BiB,eAAetE,WACbM,OAAOiE,IAAI,EACXhE,UAAU,CAACoC,KAAK,EAChB7B,UAAU,CAAC8B,KAAK,EAChBnB,gBAAgB,CAACoB,WAAW,EAC5BE,UAAU,YAAYf,WAAW,CAACe,MAAM,EACxCa,UAAU,aAAavB,eAAe,CAACuB,MAAM,EAC7CC,aAAa,SAASvD,OAAOkE,GAAG,EAChC1B,aAAaxC,OAAOwC,SAAS,EAC7BY,eAAe,CAACZ,aAAaxC,OAAOmE,UAAU,EAC9CrB,WAAW9C,OAAO8C,OAAO,EACzBG,WAAWjD,OAAOiD,OAAO,EACzBC,YAAYlD,OAAOkD,QAAQ;QAE7BL,YAAYA;;YAEXC,yBACC,KAAChD;gBACCuC,MAAK;gBACL+B,WAAWpE,OAAOqE,OAAO;gBACzBC,kBAAkBtB;gBAClBuB,OAAO;;0BAGX,MAACC;gBAAKJ,WAAWpE,OAAOyE,EAAE;;oBACvB9E,aAAagD,yBACZ,KAAC6B;wBACCJ,WAAWpE,OAAO2C,MAAM;wBACxB+B,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,WAAWjB;kCAEzDlB;;oBAGJhD,aAAa+C,2BACZ,KAAC8B;wBACCJ,WAAWpE,OAAO+E,OAAO;wBACzBJ,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,aAAajB;kCAE3DnB;;oBAGJ/C,aAAaiD,wBACZ,KAAC4B;wBACCJ,WAAWpE,OAAO4C,KAAK;wBACvB8B,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,UAAUjB;kCAExDjB;;;;;;AAMb,EAAE"}
@@ -2,14 +2,15 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { classNames } from "@vkontakte/vkjs";
5
- import { useAdaptivityHasPointer } from "../../hooks/useAdaptivityHasPointer.js";
6
5
  import { useConfigDirection } from "../../hooks/useConfigDirection.js";
7
6
  import { useExternRef } from "../../hooks/useExternRef.js";
8
7
  import { useMutationObserver } from "../../hooks/useMutationObserver.js";
9
8
  import { useResizeObserver } from "../../hooks/useResizeObserver.js";
10
9
  import { useDOM } from "../../lib/dom.js";
10
+ import { mergeCalls } from "../../lib/mergeCalls.js";
11
11
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
12
12
  import { warnOnce } from "../../lib/warnOnce.js";
13
+ import { useHover } from "../Clickable/useState.js";
13
14
  import { RootComponent } from "../RootComponent/RootComponent.js";
14
15
  import { Bullets } from "./Bullets.js";
15
16
  import { CarouselViewPort } from "./CarouselViewPort.js";
@@ -19,7 +20,7 @@ import { calcMax, calcMin, calculateIndent, getLoopPoints, getTargetIndex, isBig
19
20
  import { useSlideAnimation } from "./hooks.js";
20
21
  import styles from "./CarouselBase.module.css";
21
22
  const warn = warnOnce('Gallery');
22
- export const CarouselBase = ({ 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
23
+ export const CarouselBase = ({ 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
23
24
  'aria-roledescription': ariaRoleDescription = 'Карусель', arrowNextLabel = 'Следующий слайд', arrowPrevLabel = 'Предыдущий слайд', slideLabel, slideRoleDescription, ...restProps })=>{
24
25
  const slidesStore = React.useRef({});
25
26
  const slidesManager = React.useRef(SLIDES_MANAGER_STATE);
@@ -35,7 +36,6 @@ export const CarouselBase = ({ bullets = false, getRootRef, children, slideWidth
35
36
  const { animationInQueue, addToAnimationQueue, getAnimateFunction, startAnimation, getAnimationEasing } = useSlideAnimation(animationDuration, animationEasing);
36
37
  const isDragging = React.useRef(false);
37
38
  const [controlElementsState, setControlElementsState] = React.useState(CONTROL_ELEMENTS_STATE);
38
- const hasPointer = useAdaptivityHasPointer();
39
39
  const slidesContainerId = React.useId();
40
40
  const isCenterAlign = align === 'center';
41
41
  const calculateCanSlideLeft = ()=>{
@@ -377,16 +377,21 @@ export const CarouselBase = ({ bullets = false, getRootRef, children, slideWidth
377
377
  event.currentTarget.scrollLeft = 0;
378
378
  }
379
379
  };
380
+ const { isHovered, ...hoverHandlers } = useHover();
381
+ const handlers = mergeCalls(hoverHandlers, {
382
+ onPointerEnter,
383
+ onPointerLeave
384
+ });
380
385
  return /*#__PURE__*/ _jsxs(RootComponent, {
381
386
  ...restProps,
387
+ ...handlers,
382
388
  role: "region",
383
389
  onScroll: handleScrollForFixVoiceOverBehavior,
384
390
  "aria-roledescription": ariaRoleDescription,
385
- baseClassName: classNames(styles.host, slideWidth === 'custom' && styles.customWidth, isDraggable && styles.draggable),
391
+ baseClassName: classNames(styles.host, slideWidth === 'custom' && styles.customWidth, isHovered && styles.hover, isDraggable && styles.draggable),
386
392
  getRootRef: rootRef,
387
393
  children: [
388
394
  /*#__PURE__*/ _jsx(ScrollArrows, {
389
- hasPointer: hasPointer,
390
395
  canSlideLeft: canSlideLeft,
391
396
  canSlideRight: canSlideRight,
392
397
  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","styles","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","layerOffsetWidth","offsetWidth","calcRtlCoord","element","offsetLeft","localSlides","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","host","customWidth","draggable","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;AAO5C,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,OAAOrB,SAAS;AAEtB,OAAO,MAAMsB,eAAe,CAAC,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,oBAAoBvC,0BAA0B,EAC9CwC,kBAAkB,MAAM,EAExB,OAAO;AACP,wBAAwBC,sBAAsB,UAAU,EACxDC,iBAAiB,iBAAiB,EAClCC,iBAAiB,kBAAkB,EACnCC,UAAU,EACVC,oBAAoB,EACpB,GAAGC,WACc;IACjB,MAAMC,cAAc9D,MAAM+D,MAAM,CAAwC,CAAC;IACzE,MAAMC,gBAAgBhE,MAAM+D,MAAM,CAAqB9C;IACvD,MAAMgD,gBAAgB9D;IACtB,MAAM+D,QAAQD,kBAAkB;IAEhC,MAAME,UAAU/D,aAAa6B;IAC7B,MAAMmC,cAAchE,aAAa0C;IACjC,MAAMuB,WAAWrE,MAAM+D,MAAM,CAAiB;IAC9C,MAAMO,oBAAoBtE,MAAM+D,MAAM,CAAkD;IACxF,MAAMQ,mBAAmBvE,MAAM+D,MAAM,CAAS;IAC9C,MAAMS,iBAAiBxE,MAAM+D,MAAM,CAAS;IAC5C,MAAMU,cAAczE,MAAM+D,MAAM,CAAU;IAC1C,MAAM,EACJW,gBAAgB,EAChBC,mBAAmB,EACnBC,kBAAkB,EAClBC,cAAc,EACdC,kBAAkB,EACnB,GAAGlD,kBAAkB0B,mBAAmBC;IACzC,MAAMwB,aAAa/E,MAAM+D,MAAM,CAAC;IAEhC,MAAM,CAACiB,sBAAsBC,wBAAwB,GACnDjF,MAAMkF,QAAQ,CAAuBpE;IAEvC,MAAMqE,aAAajF;IAEnB,MAAMkF,oBAAoBpF,MAAMqF,KAAK;IAErC,MAAMC,gBAAgB1C,UAAU;IAEhC,MAAM2C,wBAAwB;QAC5B,IAAIlC,QAAQ;YACV,OAAO,CAACW,cAAcwB,OAAO,CAACC,cAAc;QAC9C;QACA,MAAMC,gBAAgBlE,gBAAgB+C,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;QACA,OACE,CAACzB,cAAcwB,OAAO,CAACC,cAAc,IACrC,+FAA+F;QAC9F,CAAA,AAAC7C,UAAU,UACVoB,cAAcwB,OAAO,CAACI,cAAc,GAAGlE,eAAe6C,iBAAiBiB,OAAO,EAAEtB,SAC7EF,CAAAA,cAAcwB,OAAO,CAACK,UAAU,IAAI,CAAA,KACvC,mFAAmF;QAClFjD,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,SACnB1B,eACEqC,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,QACtD3F,SAAS0E,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,YAAYlG,eAAewF,KAAK,CAAC,EAAE,EAAEhD;gBAC3CK,iBAAiBiB,OAAO,GAAG9D,eAAe,CAAC+F,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;QACvB,IAAI,CAAC3D,QAAQqB,OAAO,IAAI,CAACpB,YAAYoB,OAAO,IAAI,CAACnB,SAASmB,OAAO,EAAE;YACjE;QACF;QACA,MAAMuC,mBAAmB1D,SAASmB,OAAO,CAACwC,WAAW;QAErD,MAAMC,eAAe,CAACC;YACpB,MAAMC,aAAaD,QAAQC,UAAU;YACrC,MAAMH,cAAcE,QAAQF,WAAW;YACvC,OAAOD,mBAAmBI,aAAaH;QACzC;QAEA,IAAII,cACFpI,MAAMqI,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,QAAQ+D,aAAaQ,QAAQA,KAAKN,UAAU;YAC3D,OAAO;gBAAEZ;gBAAQF,OAAOoB,KAAKT,WAAW;YAAC;QAC3C,MAAM,EAAE;QAEV,IAAII,YAAYrC,MAAM,KAAK,GAAG;YAC5BtB,YAAYe,OAAO,GAAG;YACtB;QACF;QAEA,MAAMI,iBAAiBzB,QAAQqB,OAAO,CAACwC,WAAW;QAClD,MAAMU,sBAAsBtE,YAAYoB,OAAO,CAACwC,WAAW;QAC3D,MAAMnC,aAAauC,YAAYO,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,aAAagG,YAAYrC,MAAM,CAAE;gBAC5DiD,kBAAkBZ,WAAW,CAAChG,WAAW,CAACiF,KAAK;gBAC/CjF;YACF;YACA,IAAI4G,kBAAkB,KAAK5G,eAAegG,YAAYrC,MAAM,EAAE;gBAC5DjE,KACE;YAEJ;QACF;QAEA,MAAMmH,sCACJ,AAACrD,CAAAA,iBAAkBwC,CAAAA,WAAW,CAAChG,WAAW,EAAEiF,SAAS,CAAA,CAAC,IAAK;QAC7D,MAAM5B,iBACJ7C,UAAU,WACNiD,aAAaoD,uCAAuCrD,iBACpDC,cAAcD;QAEpB,MAAMsD,eAAed,YAAYrC,MAAM,KAAK;QAE5C/B,cAAcwB,OAAO,GAAG;YACtB,GAAGxB,cAAcwB,OAAO;YACxBK;YACAD;YACA8C;YACA5C,QAAQsC;YACR3C;YACA0D,KACE9F,UAAU6F,eACN,OACAhI,QAAQ;gBACN4E,QAAQsC;gBACRxC;gBACAN;gBACApB;YACF;YACNkF,KACE/F,UAAU6F,eACN,OACA/H,QAAQ;gBACNyE;gBACAC;gBACAC,QAAQsC;gBACRM;gBACAjD;gBACA7C;gBACAsB;YACF;QACR;QACA,MAAMgD,QAAQkB,YAAYE,GAAG,CAAC,CAACe,GAAG5C,QAChCrF,gBAAgB;gBACdkI,aAAa7C;gBACbzC,eAAeA,cAAcwB,OAAO;gBACpC+D,UAAUjE;gBACVjC;gBACAa;YACF;QAGF,IAAIuD,cAActB,KAAK0B,GAAG,CAACX,KAAK,CAACA,MAAMnB,MAAM,GAAG,EAAE,IAAIqC,WAAW,CAACA,YAAYrC,MAAM,GAAG,EAAE,CAACsB,KAAK;QAC/F,IAAIzE,UAAU,UAAU;YACtB6E,eAAe/F,eAAewF,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,GAAGhF,cACjC2C,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,GAAGtJ;IACnBD,kBAAkBgC,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,kBAAkBvI,eACtB8C,iBAAiBiB,OAAO,EACxB0B,KAAK,CAACA,MAAMnB,MAAM,GAAG,EAAE,EACvB7B;QAEF;;;;KAIC,GACD,IAAI6C,WAAWG,KAAK,CAAC,EAAE,IAAI8C,iBAAiB;YAC1C,MAAMC,UAAUvI,eACdyE,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,SAASrF,eAAeoE,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,EAAEnD;YAEtES,oBAAoB;gBAClBgD,sBAAsB;oBACpB,MAAM1B,SAASc,SAASrF,eAAeoE,MAAM,CAACA,OAAOC,MAAM,GAAG,EAAE,CAACsB,KAAK,EAAEnD;oBACxE8B,mBAAmBC;oBAEnBrB,mBAAmB,CAACuF;wBAClB,MAAMC,OAAO1I,eAAeyI,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;IAEA5B,0BACE,SAAS+J;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,CAAA;gBAC9B,GAAGA,CAAC;gBACJf,cAAclE;gBACdmE,eAAe/D;YACjB,CAAA;IACF,GACA;QAACvD;KAAW;IAGd5B,0BACE,SAASiK;QACPxF,wBAAwB,CAACuF,IAAO,CAAA;gBAC9B,GAAGA,CAAC;gBACJb,aAAa,CAAEtH,CAAAA,gBAAgB2B,cAAcwB,OAAO,CAACC,cAAc,AAAD;YACpE,CAAA;IACF,GACA;QAACpD;KAAa;IAGhBhC,oBAAoBgE,UAAUyD;IAE9BtH,0BAA0BsH,kBAAkB;QAAClF;QAAOT;QAAYkB;QAAQa;KAAM;IAE9E,MAAMwG,4BAA4B;QAChC,OAAO1G,cAAcwB,OAAO,CAACM,MAAM,CAAC1D,WAAW,CAACiF,KAAK,GAAGrG;IAC1D;IAEA,MAAM2J,YAAY,CAACC;QACjB,IAAIxI,aAAa,GAAG;YAClBmC,iBAAiBiB,OAAO,IAAI9D,eAAegJ,6BAA6BxG;QAC1E;QACAzB,WACE,AAACL,CAAAA,aAAa,IAAI4B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM,AAAD,IAAK/B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM;QAE9FrD,cAAckI;IAChB;IAEA,MAAMC,aAAa,CAACD;QAClB,IAAIxI,aAAa4B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM,GAAG,GAAG;YACxDxB,iBAAiBiB,OAAO,IAAI9D,eAAegJ,6BAA6BxG;QAC1E;QACAzB,WAAW,AAACL,CAAAA,aAAa,CAAA,IAAK4B,cAAcwB,OAAO,CAACM,MAAM,CAACC,MAAM;QACjEpD,cAAciI;IAChB;IAEA,MAAME,UAAU,CAACC;QACfA,EAAEC,aAAa,CAACC,eAAe;QAC/B,IAAIjG,qBAAqB2E,WAAW,EAAE;YACpCpH,cAAcwI;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,cAAchI,eAAe;oBAC3BwE,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,YAAYuI,GAAGzB;YAEf,IAAIA,gBAAgBlH,YAAY;gBAC9BmC,iBAAiBiB,OAAO,GAAGjB,iBAAiBiB,OAAO,GAAGhB,eAAegB,OAAO;gBAC5E/C,WAAW6G;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;QAC3C/G,UAAUgI,QAAQ,GAAGjB;QACrB,IAAIzG,QAAQqB,OAAO,EAAE;YACnBoF,MAAMkB,aAAa,CAACC,UAAU,GAAG;QACnC;IACF;IAEA,qBACE,MAACrL;QACE,GAAGmD,SAAS;QACbmI,MAAK;QACLH,UAAUD;QACVK,wBAAsBzI;QACtB0I,eAAejM,WACb4B,OAAOsK,IAAI,EACXhK,eAAe,YAAYN,OAAOuK,WAAW,EAC7CzC,eAAe9H,OAAOwK,SAAS;QAEjCpK,YAAYkC;;0BAEZ,KAACtD;gBACCsE,YAAYA;gBACZsE,cAAcA;gBACdC,eAAeA;gBACf4C,cAAczB;gBACd0B,aAAa5B;gBACb9H,YAAYA;gBACZE,WAAWA;gBACXC,iBAAiBA;gBACjBU,gBAAgBA;gBAChBD,gBAAgBA;gBAChBL,iBAAiBA;gBACjBD,iBAAiBA;gBACjBiC,mBAAmBA;;0BAErB,KAACxE;gBACCuB,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,KAACrB;gBACCqB,SAASA;gBACTI,YAAYA;gBACZoK,OAAOxM,MAAMqI,QAAQ,CAACmE,KAAK,CAACtK;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","styles","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","layerOffsetWidth","offsetWidth","calcRtlCoord","element","offsetLeft","localSlides","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","host","customWidth","hover","draggable","onSlideRight","onSlideLeft","count"],"mappings":"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"}
@@ -108,7 +108,7 @@
108
108
  padding-inline-start: var(--vkui--size_base_padding_horizontal--regular);
109
109
  }
110
110
 
111
- .host:hover .arrow {
111
+ .hover .arrow {
112
112
  opacity: var(--vkui--opacity_disable_accessibility);
113
113
  }
114
114
 
@@ -12,10 +12,10 @@ const stylesArrowAreaHeight = {
12
12
  export const getArrowClassName = (side, arrowAreaHeight, focusVisible)=>{
13
13
  return classNames(styles.arrow, side === 'start' ? styles.arrowStart : styles.arrowEnd, stylesArrowAreaHeight[arrowAreaHeight], focusVisible && styles.arrowFocusVisible);
14
14
  };
15
- export const ScrollArrows = ({ hasPointer, canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows = false, arrowSize = 'm', arrowAreaHeight = 'stretch', arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId, slidesContainerId })=>{
15
+ export const ScrollArrows = ({ canSlideLeft, canSlideRight, onSlideRight, onSlideLeft, showArrows = false, arrowSize = 'm', arrowAreaHeight = 'stretch', arrowPrevLabel, arrowNextLabel, nextArrowTestId, prevArrowTestId, slidesContainerId })=>{
16
16
  const { focusVisible: prevArrowFocusVisible, ...prevArrowFocusHandlers } = useFocusVisible();
17
17
  const { focusVisible: nextArrowFocusVisible, ...nextArrowFocusHandlers } = useFocusVisible();
18
- return showArrows && hasPointer ? /*#__PURE__*/ _jsxs(_Fragment, {
18
+ return showArrows ? /*#__PURE__*/ _jsxs(_Fragment, {
19
19
  children: [
20
20
  canSlideLeft && /*#__PURE__*/ _jsx(ScrollArrow, {
21
21
  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","styles","stylesArrowAreaHeight","stretch","arrowAreaStretch","fit","arrowAreaFit","getArrowClassName","side","arrowAreaHeight","focusVisible","arrow","arrowStart","arrowEnd","arrowFocusVisible","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;AAEzD,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,wBAAwB;IAC5BC,SAASF,OAAOG,gBAAgB;IAChCC,KAAKJ,OAAOK,YAAY;AAC1B;AAEA,OAAO,MAAMC,oBAAoB,CAC/BC,MACAC,iBACAC;IAEA,OAAOZ,WACLG,OAAOU,KAAK,EACZH,SAAS,UAAUP,OAAOW,UAAU,GAAGX,OAAOY,QAAQ,EACtDX,qBAAqB,CAACO,gBAAgB,EACtCC,gBAAgBT,OAAOa,iBAAiB;AAE5C,EAAE;AA2BF,OAAO,MAAMC,eAAe,CAAC,EAC3BC,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,aAAa,KAAK,EAClBC,YAAY,GAAG,EACfb,kBAAkB,SAAS,EAC3Bc,cAAc,EACdC,cAAc,EACdC,eAAe,EACfC,eAAe,EACfC,iBAAiB,EACC;IAClB,MAAM,EAAEjB,cAAckB,qBAAqB,EAAE,GAAGC,wBAAwB,GAAG9B;IAC3E,MAAM,EAAEW,cAAcoB,qBAAqB,EAAE,GAAGC,wBAAwB,GAAGhC;IAE3E,OAAOsB,cAAcL,2BACnB;;YACGC,8BACC,KAACjB;gBACCgC,WAAWzB,kBAAkB,SAASE,iBAAiBmB;gBACvDK,WAAU;gBACVC,SAASd;gBACTe,MAAMb;gBACNc,eAAaV;gBACbW,OAAOd;gBACPe,iBAAeX;gBACd,GAAGE,sBAAsB;;YAG7BX,+BACC,KAAClB;gBACCgC,WAAWzB,kBAAkB,OAAOE,iBAAiBqB;gBACrDG,WAAU;gBACVC,SAASf;gBACTgB,MAAMb;gBACNc,eAAaX;gBACbY,OAAOb;gBACPc,iBAAeX;gBACd,GAAGI,sBAAsB;;;SAI9B;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","styles","stylesArrowAreaHeight","stretch","arrowAreaStretch","fit","arrowAreaFit","getArrowClassName","side","arrowAreaHeight","focusVisible","arrow","arrowStart","arrowEnd","arrowFocusVisible","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;AAEzD,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,wBAAwB;IAC5BC,SAASF,OAAOG,gBAAgB;IAChCC,KAAKJ,OAAOK,YAAY;AAC1B;AAEA,OAAO,MAAMC,oBAAoB,CAC/BC,MACAC,iBACAC;IAEA,OAAOZ,WACLG,OAAOU,KAAK,EACZH,SAAS,UAAUP,OAAOW,UAAU,GAAGX,OAAOY,QAAQ,EACtDX,qBAAqB,CAACO,gBAAgB,EACtCC,gBAAgBT,OAAOa,iBAAiB;AAE5C,EAAE;AA0BF,OAAO,MAAMC,eAAe,CAAC,EAC3BC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,WAAW,EACXC,aAAa,KAAK,EAClBC,YAAY,GAAG,EACfZ,kBAAkB,SAAS,EAC3Ba,cAAc,EACdC,cAAc,EACdC,eAAe,EACfC,eAAe,EACfC,iBAAiB,EACC;IAClB,MAAM,EAAEhB,cAAciB,qBAAqB,EAAE,GAAGC,wBAAwB,GAAG7B;IAC3E,MAAM,EAAEW,cAAcmB,qBAAqB,EAAE,GAAGC,wBAAwB,GAAG/B;IAE3E,OAAOqB,2BACL;;YACGJ,8BACC,KAAChB;gBACC+B,WAAWxB,kBAAkB,SAASE,iBAAiBkB;gBACvDK,WAAU;gBACVC,SAASd;gBACTe,MAAMb;gBACNc,eAAaV;gBACbW,OAAOd;gBACPe,iBAAeX;gBACd,GAAGE,sBAAsB;;YAG7BX,+BACC,KAACjB;gBACC+B,WAAWxB,kBAAkB,OAAOE,iBAAiBoB;gBACrDG,WAAU;gBACVC,SAASf;gBACTgB,MAAMb;gBACNc,eAAaX;gBACbY,OAAOb;gBACPc,iBAAeX;gBACd,GAAGI,sBAAsB;;;SAI9B;AACN,EAAE"}
@@ -46,10 +46,12 @@
46
46
  padding-inline-end: var(--vkui--spacing_size_m);
47
47
  /* компенсируем отступ заданные в SimpleCell__before */
48
48
  -webkit-margin-end: calc(
49
- -1 * var(--vkui_internal--SimpleCell-before-inline-padding-end, var(--vkui--spacing_size_xl))
49
+ -1 *
50
+ var(--vkui_internal--SimpleCell-before-inline-padding-end, var(--vkui--spacing_size_xl))
50
51
  );
51
52
  margin-inline-end: calc(
52
- -1 * var(--vkui_internal--SimpleCell-before-inline-padding-end, var(--vkui--spacing_size_xl))
53
+ -1 *
54
+ var(--vkui_internal--SimpleCell-before-inline-padding-end, var(--vkui--spacing_size_xl))
53
55
  );
54
56
  }
55
57
 
@@ -6,7 +6,7 @@ export const DEFAULT_ACTIVE_EFFECT_DELAY = 600;
6
6
  const ACTIVE_DELAY = 70;
7
7
  /**
8
8
  * Управляет наведением на компонент, игнорирует тач события.
9
- */ function useHover({ hovered, hasHover = true, lockState, setParentStateLock }) {
9
+ */ export function useHover({ hovered, hasHover = true, lockState = false, setParentStateLock = noop } = {}) {
10
10
  const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);
11
11
  const prevIsHoveredRef = React.useRef(undefined);
12
12
  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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"}
@@ -422,7 +422,7 @@ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = '
422
422
  getRootRef: selectInputRef,
423
423
  onChange: onInputChange,
424
424
  onFocus: callMultiple(onFocus, onInputFocus),
425
- onBlur: callMultiple(onBlur, onInputFocus),
425
+ onBlur: callMultiple(onBlur, onInputBlur),
426
426
  onKeyDown: !readOnly ? callMultiple(handleInputKeyDown, onNativeInputKeyDown) : onNativeInputKeyDown,
427
427
  onClick: !readOnly ? callMultiple(toggleOpened, onNativeInputClick) : onNativeInputClick,
428
428
  value: inputValue,