@vkontakte/vkui 6.4.0 → 6.5.0

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 (740) hide show
  1. package/dist/cjs/components/ActionSheet/ActionSheet.js +2 -1
  2. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  3. package/dist/cjs/components/ActionSheet/ActionSheetContext.d.ts +1 -0
  4. package/dist/cjs/components/ActionSheet/ActionSheetContext.d.ts.map +1 -1
  5. package/dist/cjs/components/ActionSheet/ActionSheetContext.js.map +1 -1
  6. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.d.ts.map +1 -1
  7. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +38 -12
  8. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  9. package/dist/cjs/components/ActionSheetItem/helpers.d.ts +10 -0
  10. package/dist/cjs/components/ActionSheetItem/helpers.d.ts.map +1 -0
  11. package/dist/cjs/components/ActionSheetItem/helpers.js +22 -0
  12. package/dist/cjs/components/ActionSheetItem/helpers.js.map +1 -0
  13. package/dist/cjs/components/Alert/Alert.js +1 -1
  14. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  15. package/dist/cjs/components/Avatar/Avatar.d.ts +0 -1
  16. package/dist/cjs/components/Avatar/Avatar.d.ts.map +1 -1
  17. package/dist/cjs/components/Avatar/Avatar.js +3 -11
  18. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  19. package/dist/cjs/components/Avatar/AvatarBadge/icons.d.ts +8 -3
  20. package/dist/cjs/components/Avatar/AvatarBadge/icons.d.ts.map +1 -1
  21. package/dist/cjs/components/Avatar/AvatarBadge/icons.js +2 -2
  22. package/dist/cjs/components/Avatar/AvatarBadge/icons.js.map +1 -1
  23. package/dist/cjs/components/BaseGallery/BaseGallery.d.ts.map +1 -1
  24. package/dist/cjs/components/BaseGallery/BaseGallery.js +0 -2
  25. package/dist/cjs/components/BaseGallery/BaseGallery.js.map +1 -1
  26. package/dist/cjs/components/Calendar/Calendar.js +3 -3
  27. package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
  28. package/dist/cjs/components/CalendarDays/CalendarDays.js +3 -3
  29. package/dist/cjs/components/CalendarDays/CalendarDays.js.map +1 -1
  30. package/dist/cjs/components/CalendarHeader/CalendarHeader.js +5 -5
  31. package/dist/cjs/components/CalendarHeader/CalendarHeader.js.map +1 -1
  32. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  33. package/dist/cjs/components/CalendarRange/CalendarRange.js +17 -15
  34. package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
  35. package/dist/cjs/components/CalendarTime/CalendarTime.js +5 -5
  36. package/dist/cjs/components/CalendarTime/CalendarTime.js.map +1 -1
  37. package/dist/cjs/components/Cell/Cell.d.ts.map +1 -1
  38. package/dist/cjs/components/Cell/Cell.js +2 -2
  39. package/dist/cjs/components/Cell/Cell.js.map +1 -1
  40. package/dist/cjs/components/Checkbox/Checkbox.d.ts +7 -5
  41. package/dist/cjs/components/Checkbox/Checkbox.d.ts.map +1 -1
  42. package/dist/cjs/components/Checkbox/Checkbox.js +21 -143
  43. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  44. package/dist/cjs/components/Checkbox/CheckboxInput/CheckboxInput.d.ts +8 -0
  45. package/dist/cjs/components/Checkbox/CheckboxInput/CheckboxInput.d.ts.map +1 -0
  46. package/dist/cjs/components/Checkbox/CheckboxInput/CheckboxInput.js +134 -0
  47. package/dist/cjs/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -0
  48. package/dist/cjs/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +3 -0
  49. package/dist/cjs/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -0
  50. package/dist/cjs/components/Checkbox/CheckboxSimple/CheckboxSimple.js +52 -0
  51. package/dist/cjs/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -0
  52. package/dist/cjs/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  53. package/dist/cjs/components/ChipsInput/ChipsInput.js +1 -2
  54. package/dist/cjs/components/ChipsInput/ChipsInput.js.map +1 -1
  55. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js +1 -1
  56. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  57. package/dist/cjs/components/ChipsInputBase/helpers.d.ts.map +1 -1
  58. package/dist/cjs/components/ChipsInputBase/helpers.js +0 -3
  59. package/dist/cjs/components/ChipsInputBase/helpers.js.map +1 -1
  60. package/dist/cjs/components/ChipsInputBase/types.d.ts +1 -1
  61. package/dist/cjs/components/ChipsInputBase/types.d.ts.map +1 -1
  62. package/dist/cjs/components/ChipsInputBase/types.js.map +1 -1
  63. package/dist/cjs/components/ChipsSelect/ChipsSelect.d.ts.map +1 -1
  64. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -7
  65. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  66. package/dist/cjs/components/Clickable/useState.d.ts +0 -5
  67. package/dist/cjs/components/Clickable/useState.d.ts.map +1 -1
  68. package/dist/cjs/components/Clickable/useState.js +3 -7
  69. package/dist/cjs/components/Clickable/useState.js.map +1 -1
  70. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts +10 -1
  71. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  72. package/dist/cjs/components/CustomScrollView/CustomScrollView.js +41 -132
  73. package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
  74. package/dist/cjs/components/CustomScrollView/ScrollX.d.ts +3 -0
  75. package/dist/cjs/components/CustomScrollView/ScrollX.d.ts.map +1 -0
  76. package/dist/cjs/components/CustomScrollView/ScrollX.js +42 -0
  77. package/dist/cjs/components/CustomScrollView/ScrollX.js.map +1 -0
  78. package/dist/cjs/components/CustomScrollView/ScrollY.d.ts +3 -0
  79. package/dist/cjs/components/CustomScrollView/ScrollY.d.ts.map +1 -0
  80. package/dist/cjs/components/CustomScrollView/ScrollY.js +42 -0
  81. package/dist/cjs/components/CustomScrollView/ScrollY.js.map +1 -0
  82. package/dist/cjs/components/CustomScrollView/types.d.ts +21 -0
  83. package/dist/cjs/components/CustomScrollView/types.d.ts.map +1 -0
  84. package/dist/cjs/components/CustomScrollView/types.js +8 -0
  85. package/dist/cjs/components/CustomScrollView/types.js.map +1 -0
  86. package/dist/cjs/components/CustomScrollView/useCustomScrollViewResize.d.ts +8 -0
  87. package/dist/cjs/components/CustomScrollView/useCustomScrollViewResize.d.ts.map +1 -0
  88. package/dist/cjs/components/CustomScrollView/useCustomScrollViewResize.js +32 -0
  89. package/dist/cjs/components/CustomScrollView/useCustomScrollViewResize.js.map +1 -0
  90. package/dist/cjs/components/CustomScrollView/useDetectScrollDirection.d.ts +6 -0
  91. package/dist/cjs/components/CustomScrollView/useDetectScrollDirection.d.ts.map +1 -0
  92. package/dist/cjs/components/CustomScrollView/useDetectScrollDirection.js +29 -0
  93. package/dist/cjs/components/CustomScrollView/useDetectScrollDirection.js.map +1 -0
  94. package/dist/cjs/components/CustomScrollView/useDragAndDrop.d.ts +5 -0
  95. package/dist/cjs/components/CustomScrollView/useDragAndDrop.d.ts.map +1 -0
  96. package/dist/cjs/components/CustomScrollView/useDragAndDrop.js +57 -0
  97. package/dist/cjs/components/CustomScrollView/useDragAndDrop.js.map +1 -0
  98. package/dist/cjs/components/CustomScrollView/useHorizontalScrollController.d.ts +4 -0
  99. package/dist/cjs/components/CustomScrollView/useHorizontalScrollController.d.ts.map +1 -0
  100. package/dist/cjs/components/CustomScrollView/useHorizontalScrollController.js +102 -0
  101. package/dist/cjs/components/CustomScrollView/useHorizontalScrollController.js.map +1 -0
  102. package/dist/cjs/components/CustomScrollView/useTrackerVisibility.d.ts.map +1 -1
  103. package/dist/cjs/components/CustomScrollView/useTrackerVisibility.js +5 -0
  104. package/dist/cjs/components/CustomScrollView/useTrackerVisibility.js.map +1 -1
  105. package/dist/cjs/components/CustomScrollView/useVerticalScrollController.d.ts +4 -0
  106. package/dist/cjs/components/CustomScrollView/useVerticalScrollController.d.ts.map +1 -0
  107. package/dist/cjs/components/CustomScrollView/useVerticalScrollController.js +102 -0
  108. package/dist/cjs/components/CustomScrollView/useVerticalScrollController.js.map +1 -0
  109. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  110. package/dist/cjs/components/CustomSelect/CustomSelect.js +3 -4
  111. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  112. package/dist/cjs/components/DateInput/DateInput.js +2 -2
  113. package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
  114. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  115. package/dist/cjs/components/DateRangeInput/DateRangeInput.js +4 -3
  116. package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
  117. package/dist/cjs/components/FixedLayout/FixedLayout.d.ts +2 -2
  118. package/dist/cjs/components/FixedLayout/FixedLayout.d.ts.map +1 -1
  119. package/dist/cjs/components/FixedLayout/FixedLayout.js +1 -1
  120. package/dist/cjs/components/FixedLayout/FixedLayout.js.map +1 -1
  121. package/dist/cjs/components/Flex/FlexItem/FlexItem.d.ts +3 -3
  122. package/dist/cjs/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
  123. package/dist/cjs/components/Flex/FlexItem/FlexItem.js.map +1 -1
  124. package/dist/cjs/components/FocusTrap/FocusTrap.js +1 -1
  125. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  126. package/dist/cjs/components/GridAvatar/GridAvatar.d.ts +0 -1
  127. package/dist/cjs/components/GridAvatar/GridAvatar.d.ts.map +1 -1
  128. package/dist/cjs/components/GridAvatar/GridAvatar.js +0 -3
  129. package/dist/cjs/components/GridAvatar/GridAvatar.js.map +1 -1
  130. package/dist/cjs/components/Group/Group.d.ts +1 -1
  131. package/dist/cjs/components/Group/Group.d.ts.map +1 -1
  132. package/dist/cjs/components/Group/Group.js +17 -12
  133. package/dist/cjs/components/Group/Group.js.map +1 -1
  134. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  135. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +7 -10
  136. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  137. package/dist/cjs/components/Image/Image.d.ts +0 -1
  138. package/dist/cjs/components/Image/Image.d.ts.map +1 -1
  139. package/dist/cjs/components/Image/Image.js +3 -11
  140. package/dist/cjs/components/Image/Image.js.map +1 -1
  141. package/dist/cjs/components/ImageBase/validators.js +1 -1
  142. package/dist/cjs/components/ImageBase/validators.js.map +1 -1
  143. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  144. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +17 -15
  145. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  146. package/dist/cjs/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  147. package/dist/cjs/components/ModalRoot/ModalRoot.js +4 -28
  148. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  149. package/dist/cjs/components/OnboardingTooltip/OnboardingTooltipContainer.d.ts +2 -2
  150. package/dist/cjs/components/OnboardingTooltip/OnboardingTooltipContainer.d.ts.map +1 -1
  151. package/dist/cjs/components/OnboardingTooltip/OnboardingTooltipContainer.js +4 -3
  152. package/dist/cjs/components/OnboardingTooltip/OnboardingTooltipContainer.js.map +1 -1
  153. package/dist/cjs/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  154. package/dist/cjs/components/PullToRefresh/PullToRefresh.js +1 -3
  155. package/dist/cjs/components/PullToRefresh/PullToRefresh.js.map +1 -1
  156. package/dist/cjs/components/Radio/Radio.d.ts +5 -1
  157. package/dist/cjs/components/Radio/Radio.d.ts.map +1 -1
  158. package/dist/cjs/components/Radio/Radio.js +12 -75
  159. package/dist/cjs/components/Radio/Radio.js.map +1 -1
  160. package/dist/cjs/components/Radio/RadioInput/RadioInput.d.ts +6 -0
  161. package/dist/cjs/components/Radio/RadioInput/RadioInput.d.ts.map +1 -0
  162. package/dist/cjs/components/Radio/RadioInput/RadioInput.js +104 -0
  163. package/dist/cjs/components/Radio/RadioInput/RadioInput.js.map +1 -0
  164. package/dist/cjs/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  165. package/dist/cjs/components/SegmentedControl/SegmentedControl.js +1 -2
  166. package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -1
  167. package/dist/cjs/components/SelectionControl/SelectionControl.d.ts +14 -0
  168. package/dist/cjs/components/SelectionControl/SelectionControl.d.ts.map +1 -0
  169. package/dist/cjs/components/SelectionControl/SelectionControl.js +36 -0
  170. package/dist/cjs/components/SelectionControl/SelectionControl.js.map +1 -0
  171. package/dist/cjs/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts +7 -0
  172. package/dist/cjs/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -0
  173. package/dist/cjs/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +56 -0
  174. package/dist/cjs/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -0
  175. package/dist/cjs/components/Textarea/Textarea.d.ts +1 -1
  176. package/dist/cjs/components/Textarea/Textarea.d.ts.map +1 -1
  177. package/dist/cjs/components/Textarea/Textarea.js +13 -3
  178. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  179. package/dist/cjs/components/Textarea/useResizeTextarea.d.ts +1 -1
  180. package/dist/cjs/components/Textarea/useResizeTextarea.d.ts.map +1 -1
  181. package/dist/cjs/components/Textarea/useResizeTextarea.js +2 -2
  182. package/dist/cjs/components/Textarea/useResizeTextarea.js.map +1 -1
  183. package/dist/cjs/components/View/View.d.ts.map +1 -1
  184. package/dist/cjs/components/View/View.js +2 -4
  185. package/dist/cjs/components/View/View.js.map +1 -1
  186. package/dist/cjs/components/View/ViewInfinite.d.ts.map +1 -1
  187. package/dist/cjs/components/View/ViewInfinite.js +1 -3
  188. package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
  189. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.d.ts +1 -1
  190. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  191. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js +4 -3
  192. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  193. package/dist/cjs/hooks/useCalendar.d.ts.map +1 -1
  194. package/dist/cjs/hooks/useCalendar.js +6 -6
  195. package/dist/cjs/hooks/useCalendar.js.map +1 -1
  196. package/dist/cjs/hooks/useTodayDate.js +3 -3
  197. package/dist/cjs/hooks/useTodayDate.js.map +1 -1
  198. package/dist/cjs/index.d.ts +3 -0
  199. package/dist/cjs/index.d.ts.map +1 -1
  200. package/dist/cjs/index.js +8 -0
  201. package/dist/cjs/index.js.map +1 -1
  202. package/dist/cjs/lib/calendar.d.ts.map +1 -1
  203. package/dist/cjs/lib/calendar.js +27 -16
  204. package/dist/cjs/lib/calendar.js.map +1 -1
  205. package/dist/cjs/lib/date.d.ts +1 -28
  206. package/dist/cjs/lib/date.d.ts.map +1 -1
  207. package/dist/cjs/lib/date.js +8 -180
  208. package/dist/cjs/lib/date.js.map +1 -1
  209. package/dist/components/ActionSheet/ActionSheet.js +2 -1
  210. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  211. package/dist/components/ActionSheet/ActionSheetContext.d.ts +1 -0
  212. package/dist/components/ActionSheet/ActionSheetContext.d.ts.map +1 -1
  213. package/dist/components/ActionSheet/ActionSheetContext.js.map +1 -1
  214. package/dist/components/ActionSheetItem/ActionSheetItem.d.ts.map +1 -1
  215. package/dist/components/ActionSheetItem/ActionSheetItem.js +38 -12
  216. package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  217. package/dist/components/ActionSheetItem/helpers.d.ts +10 -0
  218. package/dist/components/ActionSheetItem/helpers.d.ts.map +1 -0
  219. package/dist/components/ActionSheetItem/helpers.js +12 -0
  220. package/dist/components/ActionSheetItem/helpers.js.map +1 -0
  221. package/dist/components/Alert/Alert.js +1 -1
  222. package/dist/components/Alert/Alert.js.map +1 -1
  223. package/dist/components/Avatar/Avatar.d.ts +0 -1
  224. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  225. package/dist/components/Avatar/Avatar.js +1 -1
  226. package/dist/components/Avatar/Avatar.js.map +1 -1
  227. package/dist/components/Avatar/AvatarBadge/icons.d.ts +8 -3
  228. package/dist/components/Avatar/AvatarBadge/icons.d.ts.map +1 -1
  229. package/dist/components/Avatar/AvatarBadge/icons.js +2 -2
  230. package/dist/components/Avatar/AvatarBadge/icons.js.map +1 -1
  231. package/dist/components/BaseGallery/BaseGallery.d.ts.map +1 -1
  232. package/dist/components/BaseGallery/BaseGallery.js +0 -2
  233. package/dist/components/BaseGallery/BaseGallery.js.map +1 -1
  234. package/dist/components/Calendar/Calendar.js +1 -1
  235. package/dist/components/Calendar/Calendar.js.map +1 -1
  236. package/dist/components/CalendarDays/CalendarDays.js +1 -1
  237. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  238. package/dist/components/CalendarHeader/CalendarHeader.js +1 -1
  239. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  240. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  241. package/dist/components/CalendarRange/CalendarRange.js +6 -4
  242. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  243. package/dist/components/CalendarTime/CalendarTime.js +1 -1
  244. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  245. package/dist/components/Cell/Cell.d.ts.map +1 -1
  246. package/dist/components/Cell/Cell.js +2 -2
  247. package/dist/components/Cell/Cell.js.map +1 -1
  248. package/dist/components/Checkbox/Checkbox.d.ts +7 -5
  249. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  250. package/dist/components/Checkbox/Checkbox.js +24 -146
  251. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  252. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts +8 -0
  253. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts.map +1 -0
  254. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js +123 -0
  255. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -0
  256. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +3 -0
  257. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -0
  258. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +42 -0
  259. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -0
  260. package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  261. package/dist/components/ChipsInput/ChipsInput.js +1 -2
  262. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  263. package/dist/components/ChipsInputBase/ChipsInputBase.js +1 -1
  264. package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  265. package/dist/components/ChipsInputBase/helpers.d.ts.map +1 -1
  266. package/dist/components/ChipsInputBase/helpers.js +0 -3
  267. package/dist/components/ChipsInputBase/helpers.js.map +1 -1
  268. package/dist/components/ChipsInputBase/types.d.ts +1 -1
  269. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  270. package/dist/components/ChipsInputBase/types.js.map +1 -1
  271. package/dist/components/ChipsSelect/ChipsSelect.d.ts.map +1 -1
  272. package/dist/components/ChipsSelect/ChipsSelect.js +1 -7
  273. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  274. package/dist/components/Clickable/useState.d.ts +0 -5
  275. package/dist/components/Clickable/useState.d.ts.map +1 -1
  276. package/dist/components/Clickable/useState.js +2 -2
  277. package/dist/components/Clickable/useState.js.map +1 -1
  278. package/dist/components/CustomScrollView/CustomScrollView.d.ts +10 -1
  279. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  280. package/dist/components/CustomScrollView/CustomScrollView.js +44 -133
  281. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  282. package/dist/components/CustomScrollView/ScrollX.d.ts +3 -0
  283. package/dist/components/CustomScrollView/ScrollX.d.ts.map +1 -0
  284. package/dist/components/CustomScrollView/ScrollX.js +31 -0
  285. package/dist/components/CustomScrollView/ScrollX.js.map +1 -0
  286. package/dist/components/CustomScrollView/ScrollY.d.ts +3 -0
  287. package/dist/components/CustomScrollView/ScrollY.d.ts.map +1 -0
  288. package/dist/components/CustomScrollView/ScrollY.js +31 -0
  289. package/dist/components/CustomScrollView/ScrollY.js.map +1 -0
  290. package/dist/components/CustomScrollView/types.d.ts +21 -0
  291. package/dist/components/CustomScrollView/types.d.ts.map +1 -0
  292. package/dist/components/CustomScrollView/types.js +3 -0
  293. package/dist/components/CustomScrollView/types.js.map +1 -0
  294. package/dist/components/CustomScrollView/useCustomScrollViewResize.d.ts +8 -0
  295. package/dist/components/CustomScrollView/useCustomScrollViewResize.d.ts.map +1 -0
  296. package/dist/components/CustomScrollView/useCustomScrollViewResize.js +22 -0
  297. package/dist/components/CustomScrollView/useCustomScrollViewResize.js.map +1 -0
  298. package/dist/components/CustomScrollView/useDetectScrollDirection.d.ts +6 -0
  299. package/dist/components/CustomScrollView/useDetectScrollDirection.d.ts.map +1 -0
  300. package/dist/components/CustomScrollView/useDetectScrollDirection.js +20 -0
  301. package/dist/components/CustomScrollView/useDetectScrollDirection.js.map +1 -0
  302. package/dist/components/CustomScrollView/useDragAndDrop.d.ts +5 -0
  303. package/dist/components/CustomScrollView/useDragAndDrop.d.ts.map +1 -0
  304. package/dist/components/CustomScrollView/useDragAndDrop.js +46 -0
  305. package/dist/components/CustomScrollView/useDragAndDrop.js.map +1 -0
  306. package/dist/components/CustomScrollView/useHorizontalScrollController.d.ts +4 -0
  307. package/dist/components/CustomScrollView/useHorizontalScrollController.d.ts.map +1 -0
  308. package/dist/components/CustomScrollView/useHorizontalScrollController.js +91 -0
  309. package/dist/components/CustomScrollView/useHorizontalScrollController.js.map +1 -0
  310. package/dist/components/CustomScrollView/useTrackerVisibility.d.ts.map +1 -1
  311. package/dist/components/CustomScrollView/useTrackerVisibility.js +5 -0
  312. package/dist/components/CustomScrollView/useTrackerVisibility.js.map +1 -1
  313. package/dist/components/CustomScrollView/useVerticalScrollController.d.ts +4 -0
  314. package/dist/components/CustomScrollView/useVerticalScrollController.d.ts.map +1 -0
  315. package/dist/components/CustomScrollView/useVerticalScrollController.js +91 -0
  316. package/dist/components/CustomScrollView/useVerticalScrollController.js.map +1 -0
  317. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  318. package/dist/components/CustomSelect/CustomSelect.js +3 -4
  319. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  320. package/dist/components/DateInput/DateInput.js +2 -2
  321. package/dist/components/DateInput/DateInput.js.map +1 -1
  322. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  323. package/dist/components/DateRangeInput/DateRangeInput.js +4 -3
  324. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  325. package/dist/components/FixedLayout/FixedLayout.d.ts +2 -2
  326. package/dist/components/FixedLayout/FixedLayout.d.ts.map +1 -1
  327. package/dist/components/FixedLayout/FixedLayout.js +1 -1
  328. package/dist/components/FixedLayout/FixedLayout.js.map +1 -1
  329. package/dist/components/Flex/FlexItem/FlexItem.d.ts +3 -3
  330. package/dist/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
  331. package/dist/components/Flex/FlexItem/FlexItem.js.map +1 -1
  332. package/dist/components/FocusTrap/FocusTrap.js +1 -1
  333. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  334. package/dist/components/GridAvatar/GridAvatar.d.ts +0 -1
  335. package/dist/components/GridAvatar/GridAvatar.d.ts.map +1 -1
  336. package/dist/components/GridAvatar/GridAvatar.js +1 -1
  337. package/dist/components/GridAvatar/GridAvatar.js.map +1 -1
  338. package/dist/components/Group/Group.d.ts +1 -1
  339. package/dist/components/Group/Group.d.ts.map +1 -1
  340. package/dist/components/Group/Group.js +17 -12
  341. package/dist/components/Group/Group.js.map +1 -1
  342. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  343. package/dist/components/HorizontalScroll/HorizontalScroll.js +7 -10
  344. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  345. package/dist/components/Image/Image.d.ts +0 -1
  346. package/dist/components/Image/Image.d.ts.map +1 -1
  347. package/dist/components/Image/Image.js +1 -1
  348. package/dist/components/Image/Image.js.map +1 -1
  349. package/dist/components/ImageBase/validators.js +1 -1
  350. package/dist/components/ImageBase/validators.js.map +1 -1
  351. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  352. package/dist/components/ModalPageHeader/ModalPageHeader.js +18 -16
  353. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  354. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  355. package/dist/components/ModalRoot/ModalRoot.js +4 -28
  356. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  357. package/dist/components/OnboardingTooltip/OnboardingTooltipContainer.d.ts +2 -2
  358. package/dist/components/OnboardingTooltip/OnboardingTooltipContainer.d.ts.map +1 -1
  359. package/dist/components/OnboardingTooltip/OnboardingTooltipContainer.js +4 -3
  360. package/dist/components/OnboardingTooltip/OnboardingTooltipContainer.js.map +1 -1
  361. package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  362. package/dist/components/PullToRefresh/PullToRefresh.js +1 -3
  363. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  364. package/dist/components/Radio/Radio.d.ts +5 -1
  365. package/dist/components/Radio/Radio.d.ts.map +1 -1
  366. package/dist/components/Radio/Radio.js +13 -76
  367. package/dist/components/Radio/Radio.js.map +1 -1
  368. package/dist/components/Radio/RadioInput/RadioInput.d.ts +6 -0
  369. package/dist/components/Radio/RadioInput/RadioInput.d.ts.map +1 -0
  370. package/dist/components/Radio/RadioInput/RadioInput.js +93 -0
  371. package/dist/components/Radio/RadioInput/RadioInput.js.map +1 -0
  372. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  373. package/dist/components/SegmentedControl/SegmentedControl.js +1 -2
  374. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  375. package/dist/components/SelectionControl/SelectionControl.d.ts +14 -0
  376. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -0
  377. package/dist/components/SelectionControl/SelectionControl.js +27 -0
  378. package/dist/components/SelectionControl/SelectionControl.js.map +1 -0
  379. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts +7 -0
  380. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -0
  381. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +46 -0
  382. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -0
  383. package/dist/components/Textarea/Textarea.d.ts +1 -1
  384. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  385. package/dist/components/Textarea/Textarea.js +13 -3
  386. package/dist/components/Textarea/Textarea.js.map +1 -1
  387. package/dist/components/Textarea/useResizeTextarea.d.ts +1 -1
  388. package/dist/components/Textarea/useResizeTextarea.d.ts.map +1 -1
  389. package/dist/components/Textarea/useResizeTextarea.js +2 -2
  390. package/dist/components/Textarea/useResizeTextarea.js.map +1 -1
  391. package/dist/components/View/View.d.ts.map +1 -1
  392. package/dist/components/View/View.js +2 -4
  393. package/dist/components/View/View.js.map +1 -1
  394. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  395. package/dist/components/View/ViewInfinite.js +1 -3
  396. package/dist/components/View/ViewInfinite.js.map +1 -1
  397. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +1 -1
  398. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  399. package/dist/components/VisuallyHidden/VisuallyHidden.js +4 -3
  400. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  401. package/dist/components.css +2 -2
  402. package/dist/components.css.map +1 -1
  403. package/dist/components.js.tmp +1584 -1013
  404. package/dist/cssm/components/ActionSheet/ActionSheet.js +2 -1
  405. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  406. package/dist/cssm/components/ActionSheet/ActionSheetContext.d.ts +1 -0
  407. package/dist/cssm/components/ActionSheet/ActionSheetContext.d.ts.map +1 -1
  408. package/dist/cssm/components/ActionSheet/ActionSheetContext.js.map +1 -1
  409. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.d.ts.map +1 -1
  410. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +38 -13
  411. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  412. package/dist/cssm/components/ActionSheetItem/helpers.d.ts +10 -0
  413. package/dist/cssm/components/ActionSheetItem/helpers.d.ts.map +1 -0
  414. package/dist/cssm/components/ActionSheetItem/helpers.js +12 -0
  415. package/dist/cssm/components/ActionSheetItem/helpers.js.map +1 -0
  416. package/dist/cssm/components/Alert/Alert.js +1 -1
  417. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  418. package/dist/cssm/components/Avatar/Avatar.d.ts +0 -1
  419. package/dist/cssm/components/Avatar/Avatar.d.ts.map +1 -1
  420. package/dist/cssm/components/Avatar/Avatar.js +1 -1
  421. package/dist/cssm/components/Avatar/Avatar.js.map +1 -1
  422. package/dist/cssm/components/Avatar/AvatarBadge/icons.d.ts +8 -3
  423. package/dist/cssm/components/Avatar/AvatarBadge/icons.d.ts.map +1 -1
  424. package/dist/cssm/components/Avatar/AvatarBadge/icons.js +2 -2
  425. package/dist/cssm/components/Avatar/AvatarBadge/icons.js.map +1 -1
  426. package/dist/cssm/components/BaseGallery/BaseGallery.d.ts.map +1 -1
  427. package/dist/cssm/components/BaseGallery/BaseGallery.js +0 -2
  428. package/dist/cssm/components/BaseGallery/BaseGallery.js.map +1 -1
  429. package/dist/cssm/components/Calendar/Calendar.js +1 -1
  430. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  431. package/dist/cssm/components/CalendarDays/CalendarDays.js +1 -1
  432. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  433. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +1 -1
  434. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  435. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  436. package/dist/cssm/components/CalendarRange/CalendarRange.js +6 -4
  437. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  438. package/dist/cssm/components/CalendarTime/CalendarTime.js +1 -1
  439. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  440. package/dist/cssm/components/Cell/Cell.d.ts.map +1 -1
  441. package/dist/cssm/components/Cell/Cell.js +2 -2
  442. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  443. package/dist/cssm/components/Cell/Cell.module.css +12 -0
  444. package/dist/cssm/components/CellButton/CellButton.module.css +2 -2
  445. package/dist/cssm/components/Checkbox/Checkbox.d.ts +7 -5
  446. package/dist/cssm/components/Checkbox/Checkbox.d.ts.map +1 -1
  447. package/dist/cssm/components/Checkbox/Checkbox.js +28 -141
  448. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  449. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.d.ts +8 -0
  450. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.d.ts.map +1 -0
  451. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js +113 -0
  452. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -0
  453. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.module.css +30 -0
  454. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +3 -0
  455. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -0
  456. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +30 -0
  457. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -0
  458. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +28 -0
  459. package/dist/cssm/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  460. package/dist/cssm/components/ChipsInput/ChipsInput.js +1 -2
  461. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  462. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +1 -1
  463. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  464. package/dist/cssm/components/ChipsInputBase/helpers.d.ts.map +1 -1
  465. package/dist/cssm/components/ChipsInputBase/helpers.js +0 -3
  466. package/dist/cssm/components/ChipsInputBase/helpers.js.map +1 -1
  467. package/dist/cssm/components/ChipsInputBase/types.d.ts +1 -1
  468. package/dist/cssm/components/ChipsInputBase/types.d.ts.map +1 -1
  469. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  470. package/dist/cssm/components/ChipsSelect/ChipsSelect.d.ts.map +1 -1
  471. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -7
  472. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  473. package/dist/cssm/components/Clickable/useState.d.ts +0 -5
  474. package/dist/cssm/components/Clickable/useState.d.ts.map +1 -1
  475. package/dist/cssm/components/Clickable/useState.js +2 -2
  476. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  477. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts +10 -1
  478. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  479. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +39 -131
  480. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  481. package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +52 -13
  482. package/dist/cssm/components/CustomScrollView/ScrollX.d.ts +3 -0
  483. package/dist/cssm/components/CustomScrollView/ScrollX.d.ts.map +1 -0
  484. package/dist/cssm/components/CustomScrollView/ScrollX.js +32 -0
  485. package/dist/cssm/components/CustomScrollView/ScrollX.js.map +1 -0
  486. package/dist/cssm/components/CustomScrollView/ScrollY.d.ts +3 -0
  487. package/dist/cssm/components/CustomScrollView/ScrollY.d.ts.map +1 -0
  488. package/dist/cssm/components/CustomScrollView/ScrollY.js +32 -0
  489. package/dist/cssm/components/CustomScrollView/ScrollY.js.map +1 -0
  490. package/dist/cssm/components/CustomScrollView/types.d.ts +21 -0
  491. package/dist/cssm/components/CustomScrollView/types.d.ts.map +1 -0
  492. package/dist/cssm/components/CustomScrollView/types.js +3 -0
  493. package/dist/cssm/components/CustomScrollView/types.js.map +1 -0
  494. package/dist/cssm/components/CustomScrollView/useCustomScrollViewResize.d.ts +8 -0
  495. package/dist/cssm/components/CustomScrollView/useCustomScrollViewResize.d.ts.map +1 -0
  496. package/dist/cssm/components/CustomScrollView/useCustomScrollViewResize.js +22 -0
  497. package/dist/cssm/components/CustomScrollView/useCustomScrollViewResize.js.map +1 -0
  498. package/dist/cssm/components/CustomScrollView/useDetectScrollDirection.d.ts +6 -0
  499. package/dist/cssm/components/CustomScrollView/useDetectScrollDirection.d.ts.map +1 -0
  500. package/dist/cssm/components/CustomScrollView/useDetectScrollDirection.js +20 -0
  501. package/dist/cssm/components/CustomScrollView/useDetectScrollDirection.js.map +1 -0
  502. package/dist/cssm/components/CustomScrollView/useDragAndDrop.d.ts +5 -0
  503. package/dist/cssm/components/CustomScrollView/useDragAndDrop.d.ts.map +1 -0
  504. package/dist/cssm/components/CustomScrollView/useDragAndDrop.js +46 -0
  505. package/dist/cssm/components/CustomScrollView/useDragAndDrop.js.map +1 -0
  506. package/dist/cssm/components/CustomScrollView/useHorizontalScrollController.d.ts +4 -0
  507. package/dist/cssm/components/CustomScrollView/useHorizontalScrollController.d.ts.map +1 -0
  508. package/dist/cssm/components/CustomScrollView/useHorizontalScrollController.js +91 -0
  509. package/dist/cssm/components/CustomScrollView/useHorizontalScrollController.js.map +1 -0
  510. package/dist/cssm/components/CustomScrollView/useTrackerVisibility.d.ts.map +1 -1
  511. package/dist/cssm/components/CustomScrollView/useTrackerVisibility.js +5 -0
  512. package/dist/cssm/components/CustomScrollView/useTrackerVisibility.js.map +1 -1
  513. package/dist/cssm/components/CustomScrollView/useVerticalScrollController.d.ts +4 -0
  514. package/dist/cssm/components/CustomScrollView/useVerticalScrollController.d.ts.map +1 -0
  515. package/dist/cssm/components/CustomScrollView/useVerticalScrollController.js +91 -0
  516. package/dist/cssm/components/CustomScrollView/useVerticalScrollController.js.map +1 -0
  517. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  518. package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -4
  519. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  520. package/dist/cssm/components/DateInput/DateInput.js +2 -2
  521. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  522. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  523. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -3
  524. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  525. package/dist/cssm/components/FixedLayout/FixedLayout.d.ts +2 -2
  526. package/dist/cssm/components/FixedLayout/FixedLayout.d.ts.map +1 -1
  527. package/dist/cssm/components/FixedLayout/FixedLayout.js +1 -1
  528. package/dist/cssm/components/FixedLayout/FixedLayout.js.map +1 -1
  529. package/dist/cssm/components/Flex/FlexItem/FlexItem.d.ts +3 -3
  530. package/dist/cssm/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
  531. package/dist/cssm/components/Flex/FlexItem/FlexItem.js.map +1 -1
  532. package/dist/cssm/components/FocusTrap/FocusTrap.js +1 -1
  533. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  534. package/dist/cssm/components/FormField/FormField.module.css +0 -3
  535. package/dist/cssm/components/GridAvatar/GridAvatar.d.ts +0 -1
  536. package/dist/cssm/components/GridAvatar/GridAvatar.d.ts.map +1 -1
  537. package/dist/cssm/components/GridAvatar/GridAvatar.js +1 -1
  538. package/dist/cssm/components/GridAvatar/GridAvatar.js.map +1 -1
  539. package/dist/cssm/components/Group/Group.d.ts +1 -1
  540. package/dist/cssm/components/Group/Group.d.ts.map +1 -1
  541. package/dist/cssm/components/Group/Group.js +17 -12
  542. package/dist/cssm/components/Group/Group.js.map +1 -1
  543. package/dist/cssm/components/Group/Group.module.css +166 -139
  544. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  545. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +7 -10
  546. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  547. package/dist/cssm/components/Image/Image.d.ts +0 -1
  548. package/dist/cssm/components/Image/Image.d.ts.map +1 -1
  549. package/dist/cssm/components/Image/Image.js +1 -1
  550. package/dist/cssm/components/Image/Image.js.map +1 -1
  551. package/dist/cssm/components/ImageBase/validators.js +1 -1
  552. package/dist/cssm/components/ImageBase/validators.js.map +1 -1
  553. package/dist/cssm/components/List/List.module.css +1 -0
  554. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  555. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +18 -16
  556. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  557. package/dist/cssm/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  558. package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -28
  559. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  560. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContainer.d.ts +2 -2
  561. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContainer.d.ts.map +1 -1
  562. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContainer.js +2 -2
  563. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContainer.js.map +1 -1
  564. package/dist/cssm/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  565. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +1 -3
  566. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  567. package/dist/cssm/components/Radio/Radio.d.ts +5 -1
  568. package/dist/cssm/components/Radio/Radio.d.ts.map +1 -1
  569. package/dist/cssm/components/Radio/Radio.js +13 -76
  570. package/dist/cssm/components/Radio/Radio.js.map +1 -1
  571. package/dist/cssm/components/Radio/Radio.module.css +0 -145
  572. package/dist/cssm/components/Radio/RadioInput/RadioInput.d.ts +6 -0
  573. package/dist/cssm/components/Radio/RadioInput/RadioInput.d.ts.map +1 -0
  574. package/dist/cssm/components/Radio/RadioInput/RadioInput.js +86 -0
  575. package/dist/cssm/components/Radio/RadioInput/RadioInput.js.map +1 -0
  576. package/dist/cssm/components/Radio/RadioInput/RadioInput.module.css +20 -0
  577. package/dist/cssm/components/Search/Search.module.css +3 -1
  578. package/dist/cssm/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  579. package/dist/cssm/components/SegmentedControl/SegmentedControl.js +1 -2
  580. package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
  581. package/dist/cssm/components/SelectionControl/SelectionControl.d.ts +14 -0
  582. package/dist/cssm/components/SelectionControl/SelectionControl.d.ts.map +1 -0
  583. package/dist/cssm/components/SelectionControl/SelectionControl.js +28 -0
  584. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -0
  585. package/dist/cssm/components/SelectionControl/SelectionControl.module.css +35 -0
  586. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts +7 -0
  587. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -0
  588. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +39 -0
  589. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -0
  590. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +48 -0
  591. package/dist/cssm/components/Textarea/Textarea.d.ts +1 -1
  592. package/dist/cssm/components/Textarea/Textarea.d.ts.map +1 -1
  593. package/dist/cssm/components/Textarea/Textarea.js +11 -2
  594. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  595. package/dist/cssm/components/Textarea/Textarea.module.css +3 -3
  596. package/dist/cssm/components/Textarea/useResizeTextarea.d.ts +1 -1
  597. package/dist/cssm/components/Textarea/useResizeTextarea.d.ts.map +1 -1
  598. package/dist/cssm/components/Textarea/useResizeTextarea.js +2 -2
  599. package/dist/cssm/components/Textarea/useResizeTextarea.js.map +1 -1
  600. package/dist/cssm/components/View/View.d.ts.map +1 -1
  601. package/dist/cssm/components/View/View.js +2 -4
  602. package/dist/cssm/components/View/View.js.map +1 -1
  603. package/dist/cssm/components/View/ViewInfinite.d.ts.map +1 -1
  604. package/dist/cssm/components/View/ViewInfinite.js +1 -3
  605. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  606. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.d.ts +1 -1
  607. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
  608. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js +2 -2
  609. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  610. package/dist/cssm/components/WriteBar/WriteBar.module.css +2 -0
  611. package/dist/cssm/hooks/useCalendar.d.ts.map +1 -1
  612. package/dist/cssm/hooks/useCalendar.js +1 -1
  613. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  614. package/dist/cssm/hooks/useTodayDate.js +2 -2
  615. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  616. package/dist/cssm/index.d.ts +3 -0
  617. package/dist/cssm/index.d.ts.map +1 -1
  618. package/dist/cssm/index.js +2 -0
  619. package/dist/cssm/index.js.map +1 -1
  620. package/dist/cssm/lib/calendar.d.ts.map +1 -1
  621. package/dist/cssm/lib/calendar.js +15 -4
  622. package/dist/cssm/lib/calendar.js.map +1 -1
  623. package/dist/cssm/lib/date.d.ts +1 -28
  624. package/dist/cssm/lib/date.d.ts.map +1 -1
  625. package/dist/cssm/lib/date.js +8 -105
  626. package/dist/cssm/lib/date.js.map +1 -1
  627. package/dist/cssm/styles/themes.css +63 -19
  628. package/dist/hooks/useCalendar.d.ts.map +1 -1
  629. package/dist/hooks/useCalendar.js +1 -1
  630. package/dist/hooks/useCalendar.js.map +1 -1
  631. package/dist/hooks/useTodayDate.js +2 -2
  632. package/dist/hooks/useTodayDate.js.map +1 -1
  633. package/dist/index.d.ts +3 -0
  634. package/dist/index.d.ts.map +1 -1
  635. package/dist/index.js +2 -0
  636. package/dist/index.js.map +1 -1
  637. package/dist/lib/calendar.d.ts.map +1 -1
  638. package/dist/lib/calendar.js +15 -4
  639. package/dist/lib/calendar.js.map +1 -1
  640. package/dist/lib/date.d.ts +1 -28
  641. package/dist/lib/date.d.ts.map +1 -1
  642. package/dist/lib/date.js +8 -105
  643. package/dist/lib/date.js.map +1 -1
  644. package/dist/vkui.css +3 -3
  645. package/dist/vkui.css.map +1 -1
  646. package/dist/vkui.js.tmp +1586 -1012
  647. package/package.json +3 -4
  648. package/src/components/ActionSheet/ActionSheet.tsx +1 -1
  649. package/src/components/ActionSheet/ActionSheetContext.ts +1 -0
  650. package/src/components/ActionSheetItem/ActionSheetItem.tsx +43 -18
  651. package/src/components/ActionSheetItem/helpers.ts +11 -0
  652. package/src/components/Alert/Alert.tsx +1 -1
  653. package/src/components/Avatar/Avatar.tsx +1 -1
  654. package/src/components/Avatar/AvatarBadge/icons.tsx +9 -8
  655. package/src/components/BaseGallery/BaseGallery.tsx +0 -4
  656. package/src/components/Calendar/Calendar.tsx +1 -1
  657. package/src/components/CalendarDays/CalendarDays.tsx +1 -1
  658. package/src/components/CalendarHeader/CalendarHeader.tsx +1 -1
  659. package/src/components/CalendarRange/CalendarRange.tsx +5 -6
  660. package/src/components/CalendarTime/CalendarTime.tsx +1 -1
  661. package/src/components/Cell/Cell.module.css +10 -0
  662. package/src/components/Cell/Cell.tsx +13 -2
  663. package/src/components/CellButton/CellButton.module.css +2 -2
  664. package/src/components/Checkbox/Checkbox.tsx +30 -166
  665. package/src/components/Checkbox/CheckboxInput/CheckboxInput.module.css +30 -0
  666. package/src/components/Checkbox/CheckboxInput/CheckboxInput.tsx +174 -0
  667. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +28 -0
  668. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +49 -0
  669. package/src/components/ChipsInput/ChipsInput.tsx +3 -8
  670. package/src/components/ChipsInputBase/ChipsInputBase.tsx +1 -1
  671. package/src/components/ChipsInputBase/helpers.ts +0 -3
  672. package/src/components/ChipsInputBase/types.ts +1 -1
  673. package/src/components/ChipsSelect/ChipsSelect.tsx +1 -9
  674. package/src/components/Clickable/useState.tsx +2 -2
  675. package/src/components/CustomScrollView/CustomScrollView.module.css +49 -11
  676. package/src/components/CustomScrollView/CustomScrollView.tsx +56 -164
  677. package/src/components/CustomScrollView/ScrollX.tsx +57 -0
  678. package/src/components/CustomScrollView/ScrollY.tsx +57 -0
  679. package/src/components/CustomScrollView/types.ts +23 -0
  680. package/src/components/CustomScrollView/useCustomScrollViewResize.ts +32 -0
  681. package/src/components/CustomScrollView/useDetectScrollDirection.ts +21 -0
  682. package/src/components/CustomScrollView/useDragAndDrop.tsx +55 -0
  683. package/src/components/CustomScrollView/useHorizontalScrollController.tsx +120 -0
  684. package/src/components/CustomScrollView/useTrackerVisibility.ts +4 -0
  685. package/src/components/CustomScrollView/useVerticalScrollController.tsx +122 -0
  686. package/src/components/CustomSelect/CustomSelect.tsx +3 -5
  687. package/src/components/DateInput/DateInput.tsx +2 -2
  688. package/src/components/DateRangeInput/DateRangeInput.tsx +5 -4
  689. package/src/components/FixedLayout/FixedLayout.tsx +4 -4
  690. package/src/components/Flex/FlexItem/FlexItem.tsx +3 -3
  691. package/src/components/FocusTrap/FocusTrap.tsx +1 -1
  692. package/src/components/FormField/FormField.module.css +0 -3
  693. package/src/components/GridAvatar/GridAvatar.tsx +1 -1
  694. package/src/components/Group/Group.module.css +155 -132
  695. package/src/components/Group/Group.tsx +25 -19
  696. package/src/components/HorizontalScroll/HorizontalScroll.tsx +7 -12
  697. package/src/components/Image/Image.tsx +1 -1
  698. package/src/components/ImageBase/validators.ts +1 -1
  699. package/src/components/List/List.module.css +1 -0
  700. package/src/components/ModalPageHeader/ModalPageHeader.tsx +24 -22
  701. package/src/components/ModalRoot/ModalRoot.tsx +4 -32
  702. package/src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx +4 -3
  703. package/src/components/PullToRefresh/PullToRefresh.tsx +0 -2
  704. package/src/components/Radio/Radio.module.css +0 -131
  705. package/src/components/Radio/Radio.tsx +14 -53
  706. package/src/components/Radio/RadioInput/RadioInput.module.css +20 -0
  707. package/src/components/Radio/RadioInput/RadioInput.tsx +58 -0
  708. package/src/components/Search/Search.module.css +1 -1
  709. package/src/components/SegmentedControl/SegmentedControl.tsx +0 -1
  710. package/src/components/SelectionControl/SelectionControl.module.css +33 -0
  711. package/src/components/SelectionControl/SelectionControl.tsx +44 -0
  712. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +44 -0
  713. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx +43 -0
  714. package/src/components/Textarea/Textarea.module.css +3 -3
  715. package/src/components/Textarea/Textarea.tsx +9 -1
  716. package/src/components/Textarea/useResizeTextarea.ts +2 -1
  717. package/src/components/View/View.tsx +0 -2
  718. package/src/components/View/ViewInfinite.tsx +0 -2
  719. package/src/components/VisuallyHidden/VisuallyHidden.tsx +2 -0
  720. package/src/components/WriteBar/WriteBar.module.css +1 -1
  721. package/src/hooks/useCalendar.ts +1 -9
  722. package/src/hooks/useTodayDate.ts +2 -2
  723. package/src/index.ts +3 -0
  724. package/src/lib/calendar.ts +8 -7
  725. package/src/lib/date.ts +9 -140
  726. package/dist/cjs/lib/styles.d.ts +0 -2
  727. package/dist/cjs/lib/styles.d.ts.map +0 -1
  728. package/dist/cjs/lib/styles.js +0 -20
  729. package/dist/cjs/lib/styles.js.map +0 -1
  730. package/dist/cssm/components/Checkbox/Checkbox.module.css +0 -183
  731. package/dist/cssm/lib/styles.d.ts +0 -2
  732. package/dist/cssm/lib/styles.d.ts.map +0 -1
  733. package/dist/cssm/lib/styles.js +0 -10
  734. package/dist/cssm/lib/styles.js.map +0 -1
  735. package/dist/lib/styles.d.ts +0 -2
  736. package/dist/lib/styles.d.ts.map +0 -1
  737. package/dist/lib/styles.js +0 -10
  738. package/dist/lib/styles.js.map +0 -1
  739. package/src/components/Checkbox/Checkbox.module.css +0 -170
  740. package/src/lib/styles.ts +0 -12
@@ -0,0 +1,91 @@
1
+ import * as React from 'react';
2
+ import { useTrackerVisibility } from './useTrackerVisibility';
3
+ export const useHorizontalScrollController = (boxRef, autoHideScrollbar, autoHideScrollbarDelay)=>{
4
+ const barX = React.useRef(null);
5
+ const horizontalRatio = React.useRef(NaN);
6
+ const lastTrackerLeft = React.useRef(0);
7
+ const clientWidth = React.useRef(0);
8
+ const trackerWidth = React.useRef(0);
9
+ const scrollWidth = React.useRef(0);
10
+ const startX = React.useRef(0);
11
+ const trackerLeft = React.useRef(0);
12
+ const trackerX = React.useRef(null);
13
+ const { trackerVisible, onTargetScroll, onTrackerDragStart, onTrackerDragStop, onTrackerMouseEnter, onTrackerMouseLeave } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);
14
+ const setHorizontalTrackerPosition = (scrollLeft)=>{
15
+ lastTrackerLeft.current = scrollLeft;
16
+ if (trackerX.current !== null) {
17
+ trackerX.current.style.transform = `translate(${scrollLeft}px, 0)`;
18
+ }
19
+ };
20
+ const setTrackerPositionFromScroll = (scrollLeft)=>{
21
+ const progress = scrollLeft / (scrollWidth.current - clientWidth.current);
22
+ setHorizontalTrackerPosition((clientWidth.current - trackerWidth.current) * progress);
23
+ };
24
+ const resize = ()=>{
25
+ if (!boxRef.current || !barX.current || !trackerX.current) {
26
+ return;
27
+ }
28
+ const localClientWidth = boxRef.current.clientWidth;
29
+ const localScrollWidth = boxRef.current.scrollWidth;
30
+ const localVerticalRatio = localClientWidth / localScrollWidth;
31
+ const localTrackerWidth = Math.max(localClientWidth * localVerticalRatio, 40);
32
+ horizontalRatio.current = localVerticalRatio;
33
+ clientWidth.current = localClientWidth;
34
+ scrollWidth.current = localScrollWidth;
35
+ trackerWidth.current = localTrackerWidth;
36
+ const currentScrollLeft = boxRef.current.scrollLeft;
37
+ if (localVerticalRatio >= 1) {
38
+ barX.current.style.display = 'none';
39
+ } else {
40
+ barX.current.style.display = '';
41
+ trackerX.current.style.width = `${localTrackerWidth}px`;
42
+ setTrackerPositionFromScroll(currentScrollLeft);
43
+ }
44
+ };
45
+ const setScrollPositionFromTracker = (trackerLeft)=>{
46
+ const progress = trackerLeft / (clientWidth.current - trackerWidth.current);
47
+ if (boxRef.current !== null) {
48
+ boxRef.current.scrollLeft = (scrollWidth.current - clientWidth.current) * progress;
49
+ }
50
+ };
51
+ const dragging = (e)=>{
52
+ const diff = e.clientX - startX.current;
53
+ const position = Math.min(Math.max(trackerLeft.current + diff, 0), clientWidth.current - trackerWidth.current);
54
+ setScrollPositionFromTracker(position);
55
+ };
56
+ const dragEnd = ()=>{
57
+ if (autoHideScrollbar) {
58
+ onTrackerDragStop();
59
+ }
60
+ };
61
+ const scroll = ()=>{
62
+ if (!boxRef.current) {
63
+ return;
64
+ }
65
+ if (autoHideScrollbar) {
66
+ onTargetScroll();
67
+ }
68
+ setTrackerPositionFromScroll(boxRef.current.scrollLeft);
69
+ };
70
+ const dragStart = (e)=>{
71
+ startX.current = e.clientX;
72
+ trackerLeft.current = lastTrackerLeft.current;
73
+ if (autoHideScrollbar) {
74
+ onTrackerDragStart();
75
+ }
76
+ };
77
+ return {
78
+ barRef: barX,
79
+ trackerVisible,
80
+ trackerRef: trackerX,
81
+ resize,
82
+ dragging,
83
+ dragEnd,
84
+ scroll,
85
+ dragStart,
86
+ trackerMouseEnter: onTrackerMouseEnter,
87
+ trackerMouseLeave: onTrackerMouseLeave
88
+ };
89
+ };
90
+
91
+ //# sourceMappingURL=useHorizontalScrollController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/CustomScrollView/useHorizontalScrollController.tsx"],"sourcesContent":["import * as React from 'react';\nimport { CustomScrollBarController } from './types';\nimport { useTrackerVisibility } from './useTrackerVisibility';\n\nexport const useHorizontalScrollController = (\n boxRef: React.RefObject<HTMLDivElement | null>,\n autoHideScrollbar: boolean,\n autoHideScrollbarDelay?: number,\n): CustomScrollBarController => {\n const barX = React.useRef<HTMLDivElement>(null);\n\n const horizontalRatio = React.useRef(NaN);\n const lastTrackerLeft = React.useRef(0);\n const clientWidth = React.useRef(0);\n const trackerWidth = React.useRef(0);\n const scrollWidth = React.useRef(0);\n const startX = React.useRef(0);\n const trackerLeft = React.useRef(0);\n\n const trackerX = React.useRef<HTMLDivElement>(null);\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const setHorizontalTrackerPosition = (scrollLeft: number) => {\n lastTrackerLeft.current = scrollLeft;\n if (trackerX.current !== null) {\n trackerX.current.style.transform = `translate(${scrollLeft}px, 0)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollLeft: number) => {\n const progress = scrollLeft / (scrollWidth.current - clientWidth.current);\n setHorizontalTrackerPosition((clientWidth.current - trackerWidth.current) * progress);\n };\n\n const resize = () => {\n if (!boxRef.current || !barX.current || !trackerX.current) {\n return;\n }\n const localClientWidth = boxRef.current.clientWidth;\n const localScrollWidth = boxRef.current.scrollWidth;\n const localVerticalRatio = localClientWidth / localScrollWidth;\n const localTrackerWidth = Math.max(localClientWidth * localVerticalRatio, 40);\n\n horizontalRatio.current = localVerticalRatio;\n clientWidth.current = localClientWidth;\n scrollWidth.current = localScrollWidth;\n trackerWidth.current = localTrackerWidth;\n const currentScrollLeft = boxRef.current.scrollLeft;\n\n if (localVerticalRatio >= 1) {\n barX.current.style.display = 'none';\n } else {\n barX.current.style.display = '';\n trackerX.current.style.width = `${localTrackerWidth}px`;\n setTrackerPositionFromScroll(currentScrollLeft);\n }\n };\n\n const setScrollPositionFromTracker = (trackerLeft: number) => {\n const progress = trackerLeft / (clientWidth.current - trackerWidth.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollLeft = (scrollWidth.current - clientWidth.current) * progress;\n }\n };\n\n const dragging = (e: React.MouseEvent) => {\n const diff = e.clientX - startX.current;\n const position = Math.min(\n Math.max(trackerLeft.current + diff, 0),\n clientWidth.current - trackerWidth.current,\n );\n setScrollPositionFromTracker(position);\n };\n\n const dragEnd = () => {\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n };\n\n const scroll = () => {\n if (!boxRef.current) {\n return;\n }\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n setTrackerPositionFromScroll(boxRef.current.scrollLeft);\n };\n\n const dragStart = (e: React.MouseEvent) => {\n startX.current = e.clientX;\n trackerLeft.current = lastTrackerLeft.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n };\n\n return {\n barRef: barX,\n trackerVisible,\n trackerRef: trackerX,\n resize,\n dragging,\n dragEnd,\n scroll,\n dragStart,\n trackerMouseEnter: onTrackerMouseEnter,\n trackerMouseLeave: onTrackerMouseLeave,\n };\n};\n"],"names":["React","useTrackerVisibility","useHorizontalScrollController","boxRef","autoHideScrollbar","autoHideScrollbarDelay","barX","useRef","horizontalRatio","NaN","lastTrackerLeft","clientWidth","trackerWidth","scrollWidth","startX","trackerLeft","trackerX","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","setHorizontalTrackerPosition","scrollLeft","current","style","transform","setTrackerPositionFromScroll","progress","resize","localClientWidth","localScrollWidth","localVerticalRatio","localTrackerWidth","Math","max","currentScrollLeft","display","width","setScrollPositionFromTracker","dragging","e","diff","clientX","position","min","dragEnd","scroll","dragStart","barRef","trackerRef","trackerMouseEnter","trackerMouseLeave"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTrackerVisibility.d.ts","sourceRoot":"","sources":["../../../src/components/CustomScrollView/useTrackerVisibility.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,oEAG9B,sBAiEF,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,kBAAkB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC1C;;OAEG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAC3C"}
1
+ {"version":3,"file":"useTrackerVisibility.d.ts","sourceRoot":"","sources":["../../../src/components/CustomScrollView/useTrackerVisibility.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,oEAG9B,sBAqEF,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,kBAAkB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC1C;;OAEG;IACH,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAC3C"}
@@ -8,6 +8,11 @@ import * as React from 'react';
8
8
  const [visibility, setVisibility] = React.useState(autoHideScrollbar ? 'hidden' : 'visible');
9
9
  const isMouseOver = React.useRef(false);
10
10
  const isTrackerDragging = React.useRef(false);
11
+ React.useEffect(()=>{
12
+ setVisibility(autoHideScrollbar ? 'hidden' : 'visible');
13
+ }, [
14
+ autoHideScrollbar
15
+ ]);
11
16
  const onTrackerDragStart = React.useCallback(()=>{
12
17
  isTrackerDragging.current = true;
13
18
  setVisibility('visible');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CustomScrollView/useTrackerVisibility.ts"],"sourcesContent":["import * as React from 'react';\nimport type { TimeoutId } from '../../types';\n\n/**\n * 'temporary-visible' – \"планирует\" скрытие ползунка через N миллисекунд. Если тайм-аут не успеет\n * сработать, то каждый последующий вызов функции будет откладывать скрытие ползунка.\n */\ntype VisibilityState = 'visible' | 'hidden' | 'temporary-visible';\n\n/**\n * Хук, который позволяет управлять видимостью ползунка скроллбара.\n * @param autoHideScrollbar - скрывать ли ползунок скроллбара\n * @param autoHideScrollbarDelay - через какое кол-во миллисекунд ползунок скроллбара скрывается\n * @returns Объект, содержащий параметры, которые позволяют управлять видимостью ползунка\n */\nexport const useTrackerVisibility = (\n autoHideScrollbar = false,\n autoHideScrollbarDelay = 500,\n): TrackerVisibilityProps => {\n const [visibility, setVisibility] = React.useState<VisibilityState>(\n autoHideScrollbar ? 'hidden' : 'visible',\n );\n const isMouseOver = React.useRef(false);\n const isTrackerDragging = React.useRef(false);\n\n const onTrackerDragStart = React.useCallback(() => {\n isTrackerDragging.current = true;\n setVisibility('visible');\n }, []);\n\n const onTrackerDragStop = React.useCallback(() => {\n isTrackerDragging.current = false;\n if (!isMouseOver.current) {\n setVisibility('temporary-visible');\n }\n }, []);\n\n const onTrackerMouseEnter = React.useCallback(() => {\n isMouseOver.current = true;\n setVisibility('visible');\n }, []);\n\n const onTrackerMouseLeave = React.useCallback(() => {\n isMouseOver.current = false;\n if (!isTrackerDragging.current) {\n setVisibility('temporary-visible');\n }\n }, []);\n\n const onTargetScroll = React.useCallback(() => {\n if (isMouseOver.current || isTrackerDragging.current) {\n return;\n }\n setVisibility('temporary-visible');\n }, []);\n\n React.useEffect(\n function hideAfterDelay() {\n let timeoutId: TimeoutId = null;\n\n if (visibility === 'temporary-visible') {\n timeoutId = setTimeout(() => {\n setVisibility('hidden');\n }, autoHideScrollbarDelay);\n }\n\n return function clearHideAfterDelay() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n },\n [visibility, autoHideScrollbarDelay],\n );\n\n return {\n trackerVisible: visibility !== 'hidden',\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n onTargetScroll,\n };\n};\n\nexport interface TrackerOptionsProps {\n /**\n * Скрывать ли ползунок скроллбара\n */\n autoHideScrollbar?: boolean;\n /**\n * Через какое кол-во миллисекунд ползунок скроллбара скрывается\n */\n autoHideScrollbarDelay?: number;\n}\n\nexport interface TrackerVisibilityProps {\n /**\n * Отвечает за видимость ползунка\n */\n trackerVisible: boolean;\n /**\n * Функция для обработки события у блока со скроллом\n */\n onTargetScroll: (this: void) => void;\n /**\n * Функция для обработки начала drag event ползунка\n */\n onTrackerDragStart: (this: void) => void;\n /**\n * Функция для обработки окончания drag event ползунка\n */\n onTrackerDragStop: (this: void) => void;\n /**\n * Функция для обработки mouseLeave event ползунка\n */\n onTrackerMouseEnter: (this: void) => void;\n /**\n * Функция для обработки mouseEnter event ползунка\n */\n onTrackerMouseLeave: (this: void) => void;\n}\n"],"names":["React","useTrackerVisibility","autoHideScrollbar","autoHideScrollbarDelay","visibility","setVisibility","useState","isMouseOver","useRef","isTrackerDragging","onTrackerDragStart","useCallback","current","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onTargetScroll","useEffect","hideAfterDelay","timeoutId","setTimeout","clearHideAfterDelay","clearTimeout","trackerVisible"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAS/B;;;;;CAKC,GACD,OAAO,MAAMC,uBAAuB,CAClCC,oBAAoB,KAAK,EACzBC,yBAAyB,GAAG;IAE5B,MAAM,CAACC,YAAYC,cAAc,GAAGL,MAAMM,QAAQ,CAChDJ,oBAAoB,WAAW;IAEjC,MAAMK,cAAcP,MAAMQ,MAAM,CAAC;IACjC,MAAMC,oBAAoBT,MAAMQ,MAAM,CAAC;IAEvC,MAAME,qBAAqBV,MAAMW,WAAW,CAAC;QAC3CF,kBAAkBG,OAAO,GAAG;QAC5BP,cAAc;IAChB,GAAG,EAAE;IAEL,MAAMQ,oBAAoBb,MAAMW,WAAW,CAAC;QAC1CF,kBAAkBG,OAAO,GAAG;QAC5B,IAAI,CAACL,YAAYK,OAAO,EAAE;YACxBP,cAAc;QAChB;IACF,GAAG,EAAE;IAEL,MAAMS,sBAAsBd,MAAMW,WAAW,CAAC;QAC5CJ,YAAYK,OAAO,GAAG;QACtBP,cAAc;IAChB,GAAG,EAAE;IAEL,MAAMU,sBAAsBf,MAAMW,WAAW,CAAC;QAC5CJ,YAAYK,OAAO,GAAG;QACtB,IAAI,CAACH,kBAAkBG,OAAO,EAAE;YAC9BP,cAAc;QAChB;IACF,GAAG,EAAE;IAEL,MAAMW,iBAAiBhB,MAAMW,WAAW,CAAC;QACvC,IAAIJ,YAAYK,OAAO,IAAIH,kBAAkBG,OAAO,EAAE;YACpD;QACF;QACAP,cAAc;IAChB,GAAG,EAAE;IAELL,MAAMiB,SAAS,CACb,SAASC;QACP,IAAIC,YAAuB;QAE3B,IAAIf,eAAe,qBAAqB;YACtCe,YAAYC,WAAW;gBACrBf,cAAc;YAChB,GAAGF;QACL;QAEA,OAAO,SAASkB;YACd,IAAIF,WAAW;gBACbG,aAAaH;YACf;QACF;IACF,GACA;QAACf;QAAYD;KAAuB;IAGtC,OAAO;QACLoB,gBAAgBnB,eAAe;QAC/BM;QACAG;QACAC;QACAC;QACAC;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/CustomScrollView/useTrackerVisibility.ts"],"sourcesContent":["import * as React from 'react';\nimport type { TimeoutId } from '../../types';\n\n/**\n * 'temporary-visible' – \"планирует\" скрытие ползунка через N миллисекунд. Если тайм-аут не успеет\n * сработать, то каждый последующий вызов функции будет откладывать скрытие ползунка.\n */\ntype VisibilityState = 'visible' | 'hidden' | 'temporary-visible';\n\n/**\n * Хук, который позволяет управлять видимостью ползунка скроллбара.\n * @param autoHideScrollbar - скрывать ли ползунок скроллбара\n * @param autoHideScrollbarDelay - через какое кол-во миллисекунд ползунок скроллбара скрывается\n * @returns Объект, содержащий параметры, которые позволяют управлять видимостью ползунка\n */\nexport const useTrackerVisibility = (\n autoHideScrollbar = false,\n autoHideScrollbarDelay = 500,\n): TrackerVisibilityProps => {\n const [visibility, setVisibility] = React.useState<VisibilityState>(\n autoHideScrollbar ? 'hidden' : 'visible',\n );\n const isMouseOver = React.useRef(false);\n const isTrackerDragging = React.useRef(false);\n\n React.useEffect(() => {\n setVisibility(autoHideScrollbar ? 'hidden' : 'visible');\n }, [autoHideScrollbar]);\n\n const onTrackerDragStart = React.useCallback(() => {\n isTrackerDragging.current = true;\n setVisibility('visible');\n }, []);\n\n const onTrackerDragStop = React.useCallback(() => {\n isTrackerDragging.current = false;\n if (!isMouseOver.current) {\n setVisibility('temporary-visible');\n }\n }, []);\n\n const onTrackerMouseEnter = React.useCallback(() => {\n isMouseOver.current = true;\n setVisibility('visible');\n }, []);\n\n const onTrackerMouseLeave = React.useCallback(() => {\n isMouseOver.current = false;\n if (!isTrackerDragging.current) {\n setVisibility('temporary-visible');\n }\n }, []);\n\n const onTargetScroll = React.useCallback(() => {\n if (isMouseOver.current || isTrackerDragging.current) {\n return;\n }\n setVisibility('temporary-visible');\n }, []);\n\n React.useEffect(\n function hideAfterDelay() {\n let timeoutId: TimeoutId = null;\n\n if (visibility === 'temporary-visible') {\n timeoutId = setTimeout(() => {\n setVisibility('hidden');\n }, autoHideScrollbarDelay);\n }\n\n return function clearHideAfterDelay() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n },\n [visibility, autoHideScrollbarDelay],\n );\n\n return {\n trackerVisible: visibility !== 'hidden',\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n onTargetScroll,\n };\n};\n\nexport interface TrackerOptionsProps {\n /**\n * Скрывать ли ползунок скроллбара\n */\n autoHideScrollbar?: boolean;\n /**\n * Через какое кол-во миллисекунд ползунок скроллбара скрывается\n */\n autoHideScrollbarDelay?: number;\n}\n\nexport interface TrackerVisibilityProps {\n /**\n * Отвечает за видимость ползунка\n */\n trackerVisible: boolean;\n /**\n * Функция для обработки события у блока со скроллом\n */\n onTargetScroll: (this: void) => void;\n /**\n * Функция для обработки начала drag event ползунка\n */\n onTrackerDragStart: (this: void) => void;\n /**\n * Функция для обработки окончания drag event ползунка\n */\n onTrackerDragStop: (this: void) => void;\n /**\n * Функция для обработки mouseLeave event ползунка\n */\n onTrackerMouseEnter: (this: void) => void;\n /**\n * Функция для обработки mouseEnter event ползунка\n */\n onTrackerMouseLeave: (this: void) => void;\n}\n"],"names":["React","useTrackerVisibility","autoHideScrollbar","autoHideScrollbarDelay","visibility","setVisibility","useState","isMouseOver","useRef","isTrackerDragging","useEffect","onTrackerDragStart","useCallback","current","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onTargetScroll","hideAfterDelay","timeoutId","setTimeout","clearHideAfterDelay","clearTimeout","trackerVisible"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAS/B;;;;;CAKC,GACD,OAAO,MAAMC,uBAAuB,CAClCC,oBAAoB,KAAK,EACzBC,yBAAyB,GAAG;IAE5B,MAAM,CAACC,YAAYC,cAAc,GAAGL,MAAMM,QAAQ,CAChDJ,oBAAoB,WAAW;IAEjC,MAAMK,cAAcP,MAAMQ,MAAM,CAAC;IACjC,MAAMC,oBAAoBT,MAAMQ,MAAM,CAAC;IAEvCR,MAAMU,SAAS,CAAC;QACdL,cAAcH,oBAAoB,WAAW;IAC/C,GAAG;QAACA;KAAkB;IAEtB,MAAMS,qBAAqBX,MAAMY,WAAW,CAAC;QAC3CH,kBAAkBI,OAAO,GAAG;QAC5BR,cAAc;IAChB,GAAG,EAAE;IAEL,MAAMS,oBAAoBd,MAAMY,WAAW,CAAC;QAC1CH,kBAAkBI,OAAO,GAAG;QAC5B,IAAI,CAACN,YAAYM,OAAO,EAAE;YACxBR,cAAc;QAChB;IACF,GAAG,EAAE;IAEL,MAAMU,sBAAsBf,MAAMY,WAAW,CAAC;QAC5CL,YAAYM,OAAO,GAAG;QACtBR,cAAc;IAChB,GAAG,EAAE;IAEL,MAAMW,sBAAsBhB,MAAMY,WAAW,CAAC;QAC5CL,YAAYM,OAAO,GAAG;QACtB,IAAI,CAACJ,kBAAkBI,OAAO,EAAE;YAC9BR,cAAc;QAChB;IACF,GAAG,EAAE;IAEL,MAAMY,iBAAiBjB,MAAMY,WAAW,CAAC;QACvC,IAAIL,YAAYM,OAAO,IAAIJ,kBAAkBI,OAAO,EAAE;YACpD;QACF;QACAR,cAAc;IAChB,GAAG,EAAE;IAELL,MAAMU,SAAS,CACb,SAASQ;QACP,IAAIC,YAAuB;QAE3B,IAAIf,eAAe,qBAAqB;YACtCe,YAAYC,WAAW;gBACrBf,cAAc;YAChB,GAAGF;QACL;QAEA,OAAO,SAASkB;YACd,IAAIF,WAAW;gBACbG,aAAaH;YACf;QACF;IACF,GACA;QAACf;QAAYD;KAAuB;IAGtC,OAAO;QACLoB,gBAAgBnB,eAAe;QAC/BO;QACAG;QACAC;QACAC;QACAC;IACF;AACF,EAAE"}
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { CustomScrollBarController } from './types';
3
+ export declare const useVerticalScrollController: (boxRef: React.RefObject<HTMLDivElement | null>, autoHideScrollbar: boolean, autoHideScrollbarDelay?: number) => CustomScrollBarController;
4
+ //# sourceMappingURL=useVerticalScrollController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVerticalScrollController.d.ts","sourceRoot":"","sources":["../../../src/components/CustomScrollView/useVerticalScrollController.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGpD,eAAO,MAAM,2BAA2B,WAC9B,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,qBAC3B,OAAO,2BACD,MAAM,KAC9B,yBAiHF,CAAC"}
@@ -0,0 +1,91 @@
1
+ import * as React from 'react';
2
+ import { useTrackerVisibility } from './useTrackerVisibility';
3
+ export const useVerticalScrollController = (boxRef, autoHideScrollbar, autoHideScrollbarDelay)=>{
4
+ const barY = React.useRef(null);
5
+ const verticalRatio = React.useRef(NaN);
6
+ const lastTrackerTop = React.useRef(0);
7
+ const clientHeight = React.useRef(0);
8
+ const trackerHeight = React.useRef(0);
9
+ const scrollHeight = React.useRef(0);
10
+ const startY = React.useRef(0);
11
+ const trackerTop = React.useRef(0);
12
+ const trackerY = React.useRef(null);
13
+ const { trackerVisible, onTargetScroll, onTrackerDragStart, onTrackerDragStop, onTrackerMouseEnter, onTrackerMouseLeave } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);
14
+ const setVerticalTrackerPosition = (scrollTop)=>{
15
+ lastTrackerTop.current = scrollTop;
16
+ if (trackerY.current !== null) {
17
+ trackerY.current.style.transform = `translate(0, ${scrollTop}px)`;
18
+ }
19
+ };
20
+ const setTrackerPositionFromScroll = (scrollTop)=>{
21
+ const progress = scrollTop / (scrollHeight.current - clientHeight.current);
22
+ setVerticalTrackerPosition((clientHeight.current - trackerHeight.current) * progress);
23
+ };
24
+ const resize = ()=>{
25
+ if (!boxRef.current || !barY.current || !trackerY.current) {
26
+ return;
27
+ }
28
+ const localClientHeight = boxRef.current.clientHeight;
29
+ const localScrollHeight = boxRef.current.scrollHeight;
30
+ const localVerticalRatio = localClientHeight / localScrollHeight;
31
+ const localTrackerHeight = Math.max(localClientHeight * localVerticalRatio, 40);
32
+ verticalRatio.current = localVerticalRatio;
33
+ clientHeight.current = localClientHeight;
34
+ scrollHeight.current = localScrollHeight;
35
+ trackerHeight.current = localTrackerHeight;
36
+ const currentScrollTop = boxRef.current.scrollTop;
37
+ if (localVerticalRatio >= 1) {
38
+ barY.current.style.display = 'none';
39
+ } else {
40
+ barY.current.style.display = '';
41
+ trackerY.current.style.height = `${localTrackerHeight}px`;
42
+ setTrackerPositionFromScroll(currentScrollTop);
43
+ }
44
+ };
45
+ const setScrollPositionFromTracker = (trackerTop)=>{
46
+ const progress = trackerTop / (clientHeight.current - trackerHeight.current);
47
+ if (boxRef.current !== null) {
48
+ boxRef.current.scrollTop = (scrollHeight.current - clientHeight.current) * progress;
49
+ }
50
+ };
51
+ const dragging = (e)=>{
52
+ const diff = e.clientY - startY.current;
53
+ const position = Math.min(Math.max(trackerTop.current + diff, 0), clientHeight.current - trackerHeight.current);
54
+ setScrollPositionFromTracker(position);
55
+ };
56
+ const dragEnd = ()=>{
57
+ if (autoHideScrollbar) {
58
+ onTrackerDragStop();
59
+ }
60
+ };
61
+ const scroll = ()=>{
62
+ if (!boxRef.current) {
63
+ return;
64
+ }
65
+ if (autoHideScrollbar) {
66
+ onTargetScroll();
67
+ }
68
+ setTrackerPositionFromScroll(boxRef.current.scrollTop);
69
+ };
70
+ const dragStart = (e)=>{
71
+ startY.current = e.clientY;
72
+ trackerTop.current = lastTrackerTop.current;
73
+ if (autoHideScrollbar) {
74
+ onTrackerDragStart();
75
+ }
76
+ };
77
+ return {
78
+ barRef: barY,
79
+ trackerVisible,
80
+ trackerRef: trackerY,
81
+ resize,
82
+ dragging,
83
+ dragEnd,
84
+ scroll,
85
+ dragStart,
86
+ trackerMouseEnter: onTrackerMouseEnter,
87
+ trackerMouseLeave: onTrackerMouseLeave
88
+ };
89
+ };
90
+
91
+ //# sourceMappingURL=useVerticalScrollController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/CustomScrollView/useVerticalScrollController.tsx"],"sourcesContent":["import * as React from 'react';\nimport { CustomScrollBarController } from './types';\nimport { useTrackerVisibility } from './useTrackerVisibility';\n\nexport const useVerticalScrollController = (\n boxRef: React.RefObject<HTMLDivElement | null>,\n autoHideScrollbar: boolean,\n autoHideScrollbarDelay?: number,\n): CustomScrollBarController => {\n const barY = React.useRef<HTMLDivElement>(null);\n\n const verticalRatio = React.useRef(NaN);\n const lastTrackerTop = React.useRef(0);\n const clientHeight = React.useRef(0);\n const trackerHeight = React.useRef(0);\n const scrollHeight = React.useRef(0);\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const setVerticalTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n trackerY.current.style.transform = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setVerticalTrackerPosition((clientHeight.current - trackerHeight.current) * progress);\n };\n\n const resize = () => {\n if (!boxRef.current || !barY.current || !trackerY.current) {\n return;\n }\n const localClientHeight = boxRef.current.clientHeight;\n const localScrollHeight = boxRef.current.scrollHeight;\n const localVerticalRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localVerticalRatio, 40);\n\n verticalRatio.current = localVerticalRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n const currentScrollTop = boxRef.current.scrollTop;\n\n if (localVerticalRatio >= 1) {\n barY.current.style.display = 'none';\n } else {\n barY.current.style.display = '';\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(currentScrollTop);\n }\n };\n\n const setScrollPositionFromTracker = (trackerTop: number) => {\n const progress = trackerTop / (clientHeight.current - trackerHeight.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollTop = (scrollHeight.current - clientHeight.current) * progress;\n }\n };\n\n const dragging = (e: React.MouseEvent) => {\n const diff = e.clientY - startY.current;\n const position = Math.min(\n Math.max(trackerTop.current + diff, 0),\n clientHeight.current - trackerHeight.current,\n );\n\n setScrollPositionFromTracker(position);\n };\n\n const dragEnd = () => {\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n };\n\n const scroll = () => {\n if (!boxRef.current) {\n return;\n }\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n };\n\n const dragStart = (e: React.MouseEvent) => {\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n };\n\n return {\n barRef: barY,\n trackerVisible,\n trackerRef: trackerY,\n resize,\n dragging,\n dragEnd,\n scroll,\n dragStart,\n trackerMouseEnter: onTrackerMouseEnter,\n trackerMouseLeave: onTrackerMouseLeave,\n };\n};\n"],"names":["React","useTrackerVisibility","useVerticalScrollController","boxRef","autoHideScrollbar","autoHideScrollbarDelay","barY","useRef","verticalRatio","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","startY","trackerTop","trackerY","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","setVerticalTrackerPosition","scrollTop","current","style","transform","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localVerticalRatio","localTrackerHeight","Math","max","currentScrollTop","display","height","setScrollPositionFromTracker","dragging","e","diff","clientY","position","min","dragEnd","scroll","dragStart","barRef","trackerRef","trackerMouseEnter","trackerMouseLeave"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
@@ -70,12 +70,11 @@ function findSelectedIndex(options = [], value, withClear) {
70
70
  const filter = (options, inputValue, filterFn)=>{
71
71
  return typeof filterFn === 'function' ? options.filter((option)=>filterFn(inputValue, option)) : options;
72
72
  };
73
- const defaultOptions = [];
74
73
  /**
75
74
  * @see https://vkcom.github.io/VKUI/#/CustomSelect
76
75
  */ export function CustomSelect(props) {
77
76
  const [opened, setOpened] = React.useState(false);
78
- const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, onInputChange: onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', autoHideScrollbar, autoHideScrollbarDelay, searchable = false, renderOption: renderOptionProp = defaultRenderOptionFn, options: optionsProp = defaultOptions, emptyText = 'Ничего не найдено', filterFn = defaultFilterFn, icon: iconProp, ClearButton = CustomSelectClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, ['aria-labelledby']: ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior } = props, restProps = _object_without_properties(props, [
77
+ const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, onInputChange: onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', autoHideScrollbar, autoHideScrollbarDelay, searchable = false, renderOption: renderOptionProp = defaultRenderOptionFn, options: optionsProp, emptyText = 'Ничего не найдено', filterFn = defaultFilterFn, icon: iconProp, ClearButton = CustomSelectClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, ['aria-labelledby']: ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior } = props, restProps = _object_without_properties(props, [
79
78
  "before",
80
79
  "name",
81
80
  "className",
@@ -493,7 +492,7 @@ const defaultOptions = [];
493
492
  onMouseMove: (e)=>focusOptionOnMouseMove(e, index),
494
493
  id: `${popupAriaId}-${option.value}`
495
494
  })
496
- }, `${option.value}`);
495
+ }, `${typeof option.value}-${option.value}`);
497
496
  }, [
498
497
  focusedOptionIndex,
499
498
  handleOptionClick,
@@ -503,7 +502,7 @@ const defaultOptions = [];
503
502
  popupAriaId
504
503
  ]);
505
504
  const resolvedContent = React.useMemo(()=>{
506
- const defaultDropdownContent = (options === null || options === void 0 ? void 0 : options.length) > 0 ? /*#__PURE__*/ _jsx("div", {
505
+ const defaultDropdownContent = options.length > 0 ? /*#__PURE__*/ _jsx("div", {
507
506
  ref: optionsWrapperRef,
508
507
  children: options.map(renderOption)
509
508
  }) : /*#__PURE__*/ _jsx(Footnote, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions as OptionInterfaceT[],\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
@@ -123,7 +123,7 @@ const getInternalValue = (value)=>{
123
123
  }
124
124
  }
125
125
  let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;
126
- let mask = 'DD.MM.YYYY';
126
+ let mask = 'dd.MM.yyyy';
127
127
  if (enableTime) {
128
128
  formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;
129
129
  mask += ' HH:mm';
@@ -197,7 +197,7 @@ const getInternalValue = (value)=>{
197
197
  /*#__PURE__*/ _jsx("input", {
198
198
  type: "hidden",
199
199
  name: name,
200
- value: value ? format(value, enableTime ? 'DD.MM.YYYYTHH:mm' : 'DD.MM.YYYY') : ''
200
+ value: value ? format(value, enableTime ? "dd.MM.yyyy'T'HH:mm" : 'dd.MM.yyyy') : ''
201
201
  }),
202
202
  /*#__PURE__*/ _jsxs(Text, {
203
203
  className: "vkuiDateInput__input",