@vkontakte/vkui 7.5.4 → 7.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/dist/components/Calendar/Calendar.js +6 -6
  2. package/dist/components/Calendar/Calendar.js.map +1 -1
  3. package/dist/components/CalendarDays/CalendarDays.js +3 -3
  4. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  5. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  6. package/dist/components/CalendarRange/CalendarRange.js +16 -14
  7. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  8. package/dist/components/CalendarRange/utils.d.ts.map +1 -1
  9. package/dist/components/CalendarRange/utils.js +6 -5
  10. package/dist/components/CalendarRange/utils.js.map +1 -1
  11. package/dist/components/Cell/Cell.d.ts.map +1 -1
  12. package/dist/components/Cell/Cell.js +6 -3
  13. package/dist/components/Cell/Cell.js.map +1 -1
  14. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts +5 -3
  15. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts.map +1 -1
  16. package/dist/components/Checkbox/Checkbox.d.ts +4 -0
  17. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  18. package/dist/components/Checkbox/Checkbox.js +4 -2
  19. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  20. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
  21. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
  22. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +6 -3
  23. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  24. package/dist/components/ChipsInputBase/Chip/Chip.d.ts +41 -2
  25. package/dist/components/ChipsInputBase/Chip/Chip.d.ts.map +1 -1
  26. package/dist/components/ChipsInputBase/Chip/Chip.js +7 -2
  27. package/dist/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  28. package/dist/components/ChipsInputBase/types.d.ts +2 -35
  29. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  30. package/dist/components/ChipsInputBase/types.js.map +1 -1
  31. package/dist/components/ContentBadge/ContentBadge.d.ts +1 -1
  32. package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
  33. package/dist/components/ContentBadge/ContentBadge.js +15 -9
  34. package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
  35. package/dist/components/ContentCard/ContentCard.d.ts +1 -1
  36. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  37. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  38. package/dist/components/CustomSelect/CustomSelect.d.ts +16 -27
  39. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  40. package/dist/components/CustomSelect/CustomSelect.js +161 -428
  41. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  42. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +3 -1
  43. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
  44. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +25 -5
  45. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  46. package/dist/components/CustomSelect/helpers.d.ts +12 -0
  47. package/dist/components/CustomSelect/helpers.d.ts.map +1 -0
  48. package/dist/components/CustomSelect/helpers.js +63 -0
  49. package/dist/components/CustomSelect/helpers.js.map +1 -0
  50. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts +11 -0
  51. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts.map +1 -0
  52. package/dist/components/CustomSelect/hooks/useAfterItems.js +57 -0
  53. package/dist/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  54. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts +13 -0
  55. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts.map +1 -0
  56. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  57. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  58. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts +20 -0
  59. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts.map +1 -0
  60. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  61. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  62. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts +13 -0
  63. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts.map +1 -0
  64. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  65. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  66. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts +15 -0
  67. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts.map +1 -0
  68. package/dist/components/CustomSelect/hooks/useInputValueController.js +43 -0
  69. package/dist/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  70. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts +9 -0
  71. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts.map +1 -0
  72. package/dist/components/CustomSelect/hooks/useScrollListController.js +37 -0
  73. package/dist/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  74. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts +18 -0
  75. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts.map +1 -0
  76. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  77. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  78. package/dist/components/CustomSelect/types.d.ts +33 -0
  79. package/dist/components/CustomSelect/types.d.ts.map +1 -0
  80. package/dist/components/CustomSelect/types.js +3 -0
  81. package/dist/components/CustomSelect/types.js.map +1 -0
  82. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  83. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  84. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  85. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  86. package/dist/components/DateInput/DateInput.js +3 -2
  87. package/dist/components/DateInput/DateInput.js.map +1 -1
  88. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  89. package/dist/components/DateRangeInput/DateRangeInput.js +4 -4
  90. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  91. package/dist/components/ImageBase/ImageBaseBadge/ImageBaseBadge.d.ts +1 -1
  92. package/dist/components/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
  93. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts +3 -2
  94. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  95. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  96. package/dist/components/ModalCard/ModalCard.d.ts +1 -1
  97. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  98. package/dist/components/ModalCard/ModalCard.js +4 -2
  99. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  100. package/dist/components/ModalCard/ModalCardInternal.d.ts +1 -1
  101. package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -1
  102. package/dist/components/ModalCard/ModalCardInternal.js +5 -3
  103. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  104. package/dist/components/ModalCard/types.d.ts +8 -0
  105. package/dist/components/ModalCard/types.d.ts.map +1 -1
  106. package/dist/components/ModalCard/types.js.map +1 -1
  107. package/dist/components/ModalOutlet/ModalOutlet.d.ts +2 -1
  108. package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -1
  109. package/dist/components/ModalOutlet/ModalOutlet.js +4 -3
  110. package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -1
  111. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  112. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  113. package/dist/components/ModalPage/ModalPage.js +3 -1
  114. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  115. package/dist/components/ModalPage/ModalPageInternal.d.ts +1 -1
  116. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  117. package/dist/components/ModalPage/ModalPageInternal.js +5 -3
  118. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  119. package/dist/components/ModalPage/types.d.ts +8 -0
  120. package/dist/components/ModalPage/types.d.ts.map +1 -1
  121. package/dist/components/ModalPage/types.js.map +1 -1
  122. package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
  123. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  124. package/dist/components/ModalRoot/ModalRoot.js +4 -2
  125. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  126. package/dist/components/ModalRoot/types.d.ts +6 -0
  127. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  128. package/dist/components/ModalRoot/types.js.map +1 -1
  129. package/dist/components/ModalRoot/useModalManager.d.ts +3 -1
  130. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  131. package/dist/components/ModalRoot/useModalManager.js +2 -1
  132. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  133. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts +2 -2
  134. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
  135. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -2
  136. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  137. package/dist/components/Popover/Popover.d.ts +1 -1
  138. package/dist/components/Popover/Popover.d.ts.map +1 -1
  139. package/dist/components/Popover/Popover.js.map +1 -1
  140. package/dist/components/Popover/usePopover.d.ts +1 -1
  141. package/dist/components/Popover/usePopover.d.ts.map +1 -1
  142. package/dist/components/Popover/usePopover.js +3 -1
  143. package/dist/components/Popover/usePopover.js.map +1 -1
  144. package/dist/components/Popper/Popper.d.ts +2 -2
  145. package/dist/components/Popper/Popper.d.ts.map +1 -1
  146. package/dist/components/Popper/Popper.js +3 -1
  147. package/dist/components/Popper/Popper.js.map +1 -1
  148. package/dist/components/Select/Select.d.ts +2 -1
  149. package/dist/components/Select/Select.d.ts.map +1 -1
  150. package/dist/components/Select/Select.js +5 -2
  151. package/dist/components/Select/Select.js.map +1 -1
  152. package/dist/components/SelectionControl/SelectionControl.d.ts +5 -1
  153. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  154. package/dist/components/SelectionControl/SelectionControl.js +22 -6
  155. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  156. package/dist/components/SelectionControl/SelectionControlContext.d.ts +7 -0
  157. package/dist/components/SelectionControl/SelectionControlContext.d.ts.map +1 -0
  158. package/dist/components/SelectionControl/SelectionControlContext.js +7 -0
  159. package/dist/components/SelectionControl/SelectionControlContext.js.map +1 -0
  160. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -1
  161. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  162. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  163. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  164. package/dist/components/SimpleCell/SimpleCell.js +29 -8
  165. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  166. package/dist/components/Skeleton/Skeleton.js +1 -1
  167. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  168. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  169. package/dist/components/Tabs/Tabs.js +19 -9
  170. package/dist/components/Tabs/Tabs.js.map +1 -1
  171. package/dist/components/Tabs/TabsController.d.ts +2 -2
  172. package/dist/components/Tabs/TabsController.d.ts.map +1 -1
  173. package/dist/components/Tabs/TabsController.js.map +1 -1
  174. package/dist/components/Tabs/TabsControllerContext.d.ts +5 -0
  175. package/dist/components/Tabs/TabsControllerContext.d.ts.map +1 -0
  176. package/dist/components/Tabs/TabsControllerContext.js +4 -0
  177. package/dist/components/Tabs/TabsControllerContext.js.map +1 -0
  178. package/dist/components/Tabs/TabsModeContext.d.ts +0 -2
  179. package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -1
  180. package/dist/components/Tabs/TabsModeContext.js +1 -2
  181. package/dist/components/Tabs/TabsModeContext.js.map +1 -1
  182. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  183. package/dist/components/TabsItem/TabsItem.js +3 -1
  184. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  185. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  186. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  187. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  188. package/dist/components/Tooltip/useTooltip.d.ts +1 -1
  189. package/dist/components/Tooltip/useTooltip.d.ts.map +1 -1
  190. package/dist/components/Tooltip/useTooltip.js +3 -1
  191. package/dist/components/Tooltip/useTooltip.js.map +1 -1
  192. package/dist/components/Typography/Caption/Caption.d.ts +2 -0
  193. package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
  194. package/dist/components/Typography/Caption/Caption.js +4 -1
  195. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  196. package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
  197. package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  198. package/dist/components/Typography/Footnote/Footnote.js +4 -1
  199. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  200. package/dist/components/Typography/Typography.d.ts +1 -0
  201. package/dist/components/Typography/Typography.d.ts.map +1 -1
  202. package/dist/components/Typography/Typography.js +7 -1
  203. package/dist/components/Typography/Typography.js.map +1 -1
  204. package/dist/components/View/View.d.ts.map +1 -1
  205. package/dist/components/View/View.js +2 -1
  206. package/dist/components/View/View.js.map +1 -1
  207. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  208. package/dist/components/View/ViewInfinite.js +2 -1
  209. package/dist/components/View/ViewInfinite.js.map +1 -1
  210. package/dist/components.css +1 -1
  211. package/dist/components.css.map +1 -1
  212. package/dist/cssm/components/Banner/Banner.module.css +1 -6
  213. package/dist/cssm/components/Calendar/Calendar.js +6 -6
  214. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  215. package/dist/cssm/components/CalendarDays/CalendarDays.js +3 -3
  216. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  217. package/dist/cssm/components/CalendarRange/CalendarRange.js +16 -14
  218. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  219. package/dist/cssm/components/CalendarRange/utils.js +6 -5
  220. package/dist/cssm/components/CalendarRange/utils.js.map +1 -1
  221. package/dist/cssm/components/Cell/Cell.js +3 -1
  222. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  223. package/dist/cssm/components/Checkbox/Checkbox.js +2 -1
  224. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  225. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +4 -2
  226. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  227. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +11 -2
  228. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js +6 -2
  229. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  230. package/dist/cssm/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  231. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  232. package/dist/cssm/components/ContentBadge/ContentBadge.js +14 -8
  233. package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
  234. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  235. package/dist/cssm/components/CustomSelect/CustomSelect.js +154 -421
  236. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  237. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +22 -4
  238. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  239. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  240. package/dist/cssm/components/CustomSelect/helpers.js +62 -0
  241. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -0
  242. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js +58 -0
  243. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  244. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  245. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  246. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  247. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  248. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  249. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  250. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js +43 -0
  251. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  252. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js +37 -0
  253. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  254. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  255. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  256. package/dist/cssm/components/CustomSelect/types.js +3 -0
  257. package/dist/cssm/components/CustomSelect/types.js.map +1 -0
  258. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  259. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  260. package/dist/cssm/components/DateInput/DateInput.js +3 -2
  261. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  262. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -4
  263. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  264. package/dist/cssm/components/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
  265. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  266. package/dist/cssm/components/ModalCard/ModalCard.js +2 -1
  267. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  268. package/dist/cssm/components/ModalCard/ModalCardInternal.js +3 -2
  269. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  270. package/dist/cssm/components/ModalCard/types.js.map +1 -1
  271. package/dist/cssm/components/ModalOutlet/ModalOutlet.js +2 -2
  272. package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -1
  273. package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +4 -0
  274. package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +1 -1
  275. package/dist/cssm/components/ModalPage/ModalPage.js +2 -1
  276. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  277. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -0
  278. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  279. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  280. package/dist/cssm/components/ModalPage/types.js.map +1 -1
  281. package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -2
  282. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  283. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  284. package/dist/cssm/components/ModalRoot/useModalManager.js +2 -1
  285. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  286. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +3 -2
  287. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  288. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  289. package/dist/cssm/components/Popover/usePopover.js +2 -1
  290. package/dist/cssm/components/Popover/usePopover.js.map +1 -1
  291. package/dist/cssm/components/Popper/Popper.js +2 -1
  292. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  293. package/dist/cssm/components/RichCell/RichCell.module.css +4 -2
  294. package/dist/cssm/components/Select/Select.js +1 -1
  295. package/dist/cssm/components/Select/Select.js.map +1 -1
  296. package/dist/cssm/components/SelectionControl/SelectionControl.js +16 -6
  297. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  298. package/dist/cssm/components/SelectionControl/SelectionControl.module.css +6 -3
  299. package/dist/cssm/components/SelectionControl/SelectionControlContext.js +7 -0
  300. package/dist/cssm/components/SelectionControl/SelectionControlContext.js.map +1 -0
  301. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  302. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  303. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  304. package/dist/cssm/components/SimpleCell/SimpleCell.js +29 -8
  305. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  306. package/dist/cssm/components/Skeleton/Skeleton.js +1 -1
  307. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  308. package/dist/cssm/components/Slider/SliderThumb/SliderThumb.module.css +2 -1
  309. package/dist/cssm/components/Tabs/Tabs.js +19 -9
  310. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  311. package/dist/cssm/components/Tabs/TabsController.js.map +1 -1
  312. package/dist/cssm/components/Tabs/TabsControllerContext.js +4 -0
  313. package/dist/cssm/components/Tabs/TabsControllerContext.js.map +1 -0
  314. package/dist/cssm/components/Tabs/TabsModeContext.js +1 -2
  315. package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -1
  316. package/dist/cssm/components/TabsItem/TabsItem.js +3 -1
  317. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  318. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  319. package/dist/cssm/components/Tooltip/useTooltip.js +2 -1
  320. package/dist/cssm/components/Tooltip/useTooltip.js.map +1 -1
  321. package/dist/cssm/components/Typography/Caption/Caption.js +4 -1
  322. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  323. package/dist/cssm/components/Typography/Footnote/Footnote.js +4 -1
  324. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  325. package/dist/cssm/components/Typography/Typography.js +7 -1
  326. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  327. package/dist/cssm/components/View/View.js +2 -1
  328. package/dist/cssm/components/View/View.js.map +1 -1
  329. package/dist/cssm/components/View/View.module.css +1 -1
  330. package/dist/cssm/components/View/ViewInfinite.js +2 -1
  331. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  332. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  333. package/dist/cssm/hooks/useCalendar.js +6 -4
  334. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  335. package/dist/cssm/hooks/useFloatingElement.js +3 -2
  336. package/dist/cssm/hooks/useFloatingElement.js.map +1 -1
  337. package/dist/cssm/hooks/useTodayDate.js +3 -2
  338. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  339. package/dist/cssm/index.js.map +1 -1
  340. package/dist/cssm/lib/accessibility.js +8 -0
  341. package/dist/cssm/lib/accessibility.js.map +1 -1
  342. package/dist/cssm/lib/calendar.js +9 -7
  343. package/dist/cssm/lib/calendar.js.map +1 -1
  344. package/dist/cssm/lib/date.js +66 -3
  345. package/dist/cssm/lib/date.js.map +1 -1
  346. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  347. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  348. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  349. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
  350. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  351. package/dist/cssm/lib/utils.js +1 -0
  352. package/dist/cssm/lib/utils.js.map +1 -1
  353. package/dist/cssm/styles/dynamicTokens.css +14 -2
  354. package/dist/cssm/styles/themes.css +1 -1
  355. package/dist/hooks/useCalendar.d.ts.map +1 -1
  356. package/dist/hooks/useCalendar.js +6 -4
  357. package/dist/hooks/useCalendar.js.map +1 -1
  358. package/dist/hooks/useFloatingElement.d.ts +1 -1
  359. package/dist/hooks/useFloatingElement.d.ts.map +1 -1
  360. package/dist/hooks/useFloatingElement.js +3 -2
  361. package/dist/hooks/useFloatingElement.js.map +1 -1
  362. package/dist/hooks/useTodayDate.d.ts.map +1 -1
  363. package/dist/hooks/useTodayDate.js +3 -2
  364. package/dist/hooks/useTodayDate.js.map +1 -1
  365. package/dist/index.d.ts +4 -2
  366. package/dist/index.d.ts.map +1 -1
  367. package/dist/index.js.map +1 -1
  368. package/dist/lib/accessibility.d.ts +1 -1
  369. package/dist/lib/accessibility.d.ts.map +1 -1
  370. package/dist/lib/accessibility.js +8 -0
  371. package/dist/lib/accessibility.js.map +1 -1
  372. package/dist/lib/calendar.d.ts.map +1 -1
  373. package/dist/lib/calendar.js +9 -7
  374. package/dist/lib/calendar.js.map +1 -1
  375. package/dist/lib/date.d.ts +31 -1
  376. package/dist/lib/date.d.ts.map +1 -1
  377. package/dist/lib/date.js +67 -3
  378. package/dist/lib/date.js.map +1 -1
  379. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +6 -1
  380. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  381. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  382. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  383. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -0
  384. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  385. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  386. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  387. package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
  388. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  389. package/dist/lib/utils.d.ts +1 -0
  390. package/dist/lib/utils.d.ts.map +1 -1
  391. package/dist/lib/utils.js +1 -0
  392. package/dist/lib/utils.js.map +1 -1
  393. package/dist/vkui.css +1 -1
  394. package/dist/vkui.css.map +1 -1
  395. package/package.json +6 -7
  396. package/src/components/Banner/Banner.module.css +1 -6
  397. package/src/components/Banner/Banner.module.css.d.ts.map +1 -1
  398. package/src/components/Calendar/Calendar.tsx +6 -6
  399. package/src/components/CalendarDays/CalendarDays.tsx +3 -3
  400. package/src/components/CalendarRange/CalendarRange.tsx +15 -20
  401. package/src/components/CalendarRange/utils.ts +7 -6
  402. package/src/components/Cell/Cell.tsx +3 -0
  403. package/src/components/Checkbox/Checkbox.tsx +6 -0
  404. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +7 -2
  405. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css.d.ts.map +1 -1
  406. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +12 -3
  407. package/src/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  408. package/src/components/ChipsInputBase/Chip/Chip.module.css.d.ts.map +1 -1
  409. package/src/components/ChipsInputBase/Chip/Chip.tsx +55 -1
  410. package/src/components/ChipsInputBase/types.ts +2 -45
  411. package/src/components/ContentBadge/ContentBadge.tsx +18 -12
  412. package/src/components/ContentCard/ContentCard.tsx +1 -1
  413. package/src/components/CustomSelect/CustomSelect.tsx +216 -562
  414. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  415. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css.d.ts.map +1 -1
  416. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +25 -2
  417. package/src/components/CustomSelect/helpers.ts +103 -0
  418. package/src/components/CustomSelect/hooks/useAfterItems.tsx +89 -0
  419. package/src/components/CustomSelect/hooks/useDropdownOpenedController.ts +61 -0
  420. package/src/components/CustomSelect/hooks/useFocusedOptionController.ts +86 -0
  421. package/src/components/CustomSelect/hooks/useInputKeyboardController.ts +96 -0
  422. package/src/components/CustomSelect/hooks/useInputValueController.ts +58 -0
  423. package/src/components/CustomSelect/hooks/useScrollListController.ts +46 -0
  424. package/src/components/CustomSelect/hooks/useSelectedOptionController.ts +132 -0
  425. package/src/components/CustomSelect/types.ts +38 -0
  426. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -0
  427. package/src/components/DateInput/DateInput.tsx +9 -3
  428. package/src/components/DateRangeInput/DateRangeInput.tsx +9 -6
  429. package/src/components/ImageBase/ImageBaseBadge/ImageBaseBadge.tsx +1 -1
  430. package/src/components/MiniInfoCell/MiniInfoCell.tsx +8 -3
  431. package/src/components/ModalCard/ModalCard.tsx +2 -0
  432. package/src/components/ModalCard/ModalCardInternal.tsx +8 -2
  433. package/src/components/ModalCard/types.ts +8 -0
  434. package/src/components/ModalOutlet/ModalOutlet.module.css +4 -0
  435. package/src/components/ModalOutlet/ModalOutlet.module.css.d.ts.map +1 -1
  436. package/src/components/ModalOutlet/ModalOutlet.tsx +8 -1
  437. package/src/components/ModalOverlay/ModalOverlay.module.css +1 -1
  438. package/src/components/ModalPage/ModalPage.module.css +1 -0
  439. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  440. package/src/components/ModalPage/ModalPage.tsx +2 -0
  441. package/src/components/ModalPage/ModalPageInternal.tsx +8 -2
  442. package/src/components/ModalPage/types.ts +8 -0
  443. package/src/components/ModalRoot/ModalRoot.tsx +19 -6
  444. package/src/components/ModalRoot/types.ts +7 -0
  445. package/src/components/ModalRoot/useModalManager.tsx +4 -0
  446. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -0
  447. package/src/components/Popover/Popover.tsx +1 -0
  448. package/src/components/Popover/usePopover.tsx +2 -0
  449. package/src/components/Popper/Popper.tsx +3 -0
  450. package/src/components/RichCell/RichCell.module.css +4 -2
  451. package/src/components/RichCell/RichCell.module.css.d.ts.map +1 -1
  452. package/src/components/Select/Select.tsx +5 -5
  453. package/src/components/SelectionControl/SelectionControl.module.css +6 -3
  454. package/src/components/SelectionControl/SelectionControl.module.css.d.ts.map +1 -1
  455. package/src/components/SelectionControl/SelectionControl.tsx +30 -8
  456. package/src/components/SelectionControl/SelectionControlContext.ts +7 -0
  457. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  458. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css.d.ts.map +1 -1
  459. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx +7 -1
  460. package/src/components/SimpleCell/SimpleCell.tsx +5 -0
  461. package/src/components/Skeleton/Skeleton.tsx +1 -1
  462. package/src/components/Slider/SliderThumb/SliderThumb.module.css +1 -1
  463. package/src/components/Tabs/Tabs.tsx +16 -12
  464. package/src/components/Tabs/TabsController.ts +2 -2
  465. package/src/components/Tabs/TabsControllerContext.ts +7 -0
  466. package/src/components/Tabs/TabsModeContext.ts +0 -3
  467. package/src/components/TabsItem/TabsItem.tsx +5 -9
  468. package/src/components/Tooltip/Tooltip.tsx +1 -0
  469. package/src/components/Tooltip/useTooltip.tsx +2 -0
  470. package/src/components/Typography/Caption/Caption.tsx +14 -6
  471. package/src/components/Typography/Footnote/Footnote.tsx +10 -6
  472. package/src/components/Typography/Typography.tsx +9 -2
  473. package/src/components/View/View.module.css +1 -1
  474. package/src/components/View/View.tsx +2 -1
  475. package/src/components/View/ViewInfinite.tsx +2 -1
  476. package/src/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  477. package/src/components/VisuallyHidden/VisuallyHidden.module.css.d.ts.map +1 -1
  478. package/src/hooks/useCalendar.ts +6 -4
  479. package/src/hooks/useFloatingElement.tsx +2 -0
  480. package/src/hooks/useTodayDate.ts +3 -2
  481. package/src/index.ts +5 -3
  482. package/src/lib/accessibility.ts +4 -0
  483. package/src/lib/calendar.ts +8 -12
  484. package/src/lib/date.ts +82 -3
  485. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +23 -10
  486. package/src/lib/floating/useFloatingWithInteractions/types.ts +2 -0
  487. package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
  488. package/src/lib/utils.ts +3 -0
  489. package/src/styles/dynamicTokens.css +13 -2
@@ -0,0 +1,60 @@
1
+ import * as React from "react";
2
+ import { noop } from "@vkontakte/vkjs";
3
+ import { useStableCallback } from "../../../hooks/useStableCallback.js";
4
+ /* eslint-enable jsdoc/require-jsdoc */ export function useDropdownOpenedController({ onClose, onOpen, onOpened, onClosed }) {
5
+ const [opened, setOpened] = React.useState(false);
6
+ const onCloseCb = useStableCallback(onClose || noop);
7
+ const onOpenCb = useStableCallback(onOpen || noop);
8
+ const onOpenedCb = useStableCallback(onOpened || noop);
9
+ const onClosedCb = useStableCallback(onClosed || noop);
10
+ const close = React.useCallback(()=>{
11
+ if (!opened) {
12
+ return;
13
+ }
14
+ setOpened(false);
15
+ onCloseCb === null || onCloseCb === void 0 ? void 0 : onCloseCb();
16
+ }, [
17
+ onCloseCb,
18
+ opened
19
+ ]);
20
+ const open = React.useCallback(()=>{
21
+ if (opened) {
22
+ return;
23
+ }
24
+ setOpened(true);
25
+ onOpenCb === null || onOpenCb === void 0 ? void 0 : onOpenCb();
26
+ }, [
27
+ onOpenCb,
28
+ opened
29
+ ]);
30
+ const toggleOpened = React.useCallback(()=>{
31
+ if (opened) {
32
+ close();
33
+ } else {
34
+ open();
35
+ }
36
+ }, [
37
+ close,
38
+ open,
39
+ opened
40
+ ]);
41
+ React.useEffect(()=>{
42
+ if (opened) {
43
+ onOpenedCb();
44
+ } else {
45
+ onClosedCb();
46
+ }
47
+ }, [
48
+ onClosedCb,
49
+ onOpenedCb,
50
+ opened
51
+ ]);
52
+ return {
53
+ opened,
54
+ open,
55
+ close,
56
+ toggleOpened
57
+ };
58
+ }
59
+
60
+ //# sourceMappingURL=useDropdownOpenedController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/hooks/useDropdownOpenedController.ts"],"sourcesContent":["import * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { type SelectProps } from '../CustomSelect';\n/* eslint-disable jsdoc/require-jsdoc */\ntype UseDropdownOpenedControllerProps = Pick<SelectProps, 'onOpen' | 'onClose'> & {\n onOpened?: () => void;\n onClosed?: () => void;\n};\n/* eslint-enable jsdoc/require-jsdoc */\nexport function useDropdownOpenedController({\n onClose,\n onOpen,\n onOpened,\n onClosed,\n}: UseDropdownOpenedControllerProps) {\n const [opened, setOpened] = React.useState(false);\n const onCloseCb = useStableCallback(onClose || noop);\n const onOpenCb = useStableCallback(onOpen || noop);\n const onOpenedCb = useStableCallback(onOpened || noop);\n const onClosedCb = useStableCallback(onClosed || noop);\n\n const close = React.useCallback(() => {\n if (!opened) {\n return;\n }\n setOpened(false);\n onCloseCb?.();\n }, [onCloseCb, opened]);\n\n const open = React.useCallback(() => {\n if (opened) {\n return;\n }\n setOpened(true);\n onOpenCb?.();\n }, [onOpenCb, opened]);\n\n const toggleOpened = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n React.useEffect(() => {\n if (opened) {\n onOpenedCb();\n } else {\n onClosedCb();\n }\n }, [onClosedCb, onOpenedCb, opened]);\n\n return {\n opened,\n open,\n close,\n toggleOpened,\n };\n}\n"],"names":["React","noop","useStableCallback","useDropdownOpenedController","onClose","onOpen","onOpened","onClosed","opened","setOpened","useState","onCloseCb","onOpenCb","onOpenedCb","onClosedCb","close","useCallback","open","toggleOpened","useEffect"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,iBAAiB,QAAQ,sCAAmC;AAOrE,qCAAqC,GACrC,OAAO,SAASC,4BAA4B,EAC1CC,OAAO,EACPC,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACyB;IACjC,MAAM,CAACC,QAAQC,UAAU,GAAGT,MAAMU,QAAQ,CAAC;IAC3C,MAAMC,YAAYT,kBAAkBE,WAAWH;IAC/C,MAAMW,WAAWV,kBAAkBG,UAAUJ;IAC7C,MAAMY,aAAaX,kBAAkBI,YAAYL;IACjD,MAAMa,aAAaZ,kBAAkBK,YAAYN;IAEjD,MAAMc,QAAQf,MAAMgB,WAAW,CAAC;QAC9B,IAAI,CAACR,QAAQ;YACX;QACF;QACAC,UAAU;QACVE,sBAAAA,gCAAAA;IACF,GAAG;QAACA;QAAWH;KAAO;IAEtB,MAAMS,OAAOjB,MAAMgB,WAAW,CAAC;QAC7B,IAAIR,QAAQ;YACV;QACF;QACAC,UAAU;QACVG,qBAAAA,+BAAAA;IACF,GAAG;QAACA;QAAUJ;KAAO;IAErB,MAAMU,eAAelB,MAAMgB,WAAW,CAAC;QACrC,IAAIR,QAAQ;YACVO;QACF,OAAO;YACLE;QACF;IACF,GAAG;QAACF;QAAOE;QAAMT;KAAO;IAExBR,MAAMmB,SAAS,CAAC;QACd,IAAIX,QAAQ;YACVK;QACF,OAAO;YACLC;QACF;IACF,GAAG;QAACA;QAAYD;QAAYL;KAAO;IAEnC,OAAO;QACLA;QACAS;QACAF;QACAG;IACF;AACF"}
@@ -0,0 +1,20 @@
1
+ import { type Dispatch, type SetStateAction } from 'react';
2
+ import { type SelectValue } from '../../NativeSelect/NativeSelect';
3
+ import { type SelectProps } from '../CustomSelect';
4
+ import { type CustomSelectOptionInterface } from '../types';
5
+ interface UseFocusedOptionControllerProps<OptionInterfaceT extends CustomSelectOptionInterface> {
6
+ filteredOptions: SelectProps<OptionInterfaceT>['options'];
7
+ scrollToElement: (index: number, center?: boolean) => void;
8
+ selectedOptionValue: SelectValue;
9
+ }
10
+ export interface UseFocusedOptionControllerReturn {
11
+ focusedOptionValue: SelectValue;
12
+ setFocusedOptionValue: Dispatch<SetStateAction<SelectValue>>;
13
+ focusOptionByIndex: (index: number | undefined, scrollTo: boolean) => void;
14
+ resetFocusedOption: () => void;
15
+ focusOption: (type: 'next' | 'prev') => void;
16
+ selectFocusedValue: () => void;
17
+ }
18
+ export declare function useFocusedOptionController<OptionInterfaceT extends CustomSelectOptionInterface>({ selectedOptionValue, filteredOptions, scrollToElement, }: UseFocusedOptionControllerProps<OptionInterfaceT>): UseFocusedOptionControllerReturn;
19
+ export {};
20
+ //# sourceMappingURL=useFocusedOptionController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusedOptionController.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/hooks/useFocusedOptionController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAG5D,UAAU,+BAA+B,CAAC,gBAAgB,SAAS,2BAA2B;IAC5F,eAAe,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1D,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,mBAAmB,EAAE,WAAW,CAAC;CAClC;AAED,MAAM,WAAW,gCAAgC;IAC/C,kBAAkB,EAAE,WAAW,CAAC;IAChC,qBAAqB,EAAE,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7D,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3E,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,EAAE,MAAM,IAAI,CAAC;CAChC;AAGD,wBAAgB,0BAA0B,CAAC,gBAAgB,SAAS,2BAA2B,EAAE,EAC/F,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,EAAE,+BAA+B,CAAC,gBAAgB,CAAC,GAAG,gCAAgC,CAyDtF"}
@@ -0,0 +1,52 @@
1
+ import * as React from "react";
2
+ import { findIndexAfter, findIndexBefore, findSelectedIndex } from "../helpers.js";
3
+ /* eslint-enable jsdoc/require-jsdoc */ export function useFocusedOptionController({ selectedOptionValue, filteredOptions, scrollToElement }) {
4
+ const [focusedOptionValue, setFocusedOptionValue] = React.useState(null);
5
+ const focusOptionByIndex = React.useCallback((index, scrollTo = true)=>{
6
+ if (index === undefined || index < 0 || index > filteredOptions.length - 1) {
7
+ return;
8
+ }
9
+ const option = filteredOptions[index];
10
+ if (!option || option.disabled) {
11
+ return;
12
+ }
13
+ if (scrollTo) {
14
+ scrollToElement(index);
15
+ }
16
+ setFocusedOptionValue(option.value);
17
+ }, [
18
+ filteredOptions,
19
+ scrollToElement
20
+ ]);
21
+ const resetFocusedOption = React.useCallback(()=>{
22
+ setFocusedOptionValue(null);
23
+ }, []);
24
+ const focusOption = React.useCallback((type)=>{
25
+ let index = findSelectedIndex(filteredOptions, focusedOptionValue);
26
+ if (type === 'next') {
27
+ const nextIndex = findIndexAfter(filteredOptions, index);
28
+ index = nextIndex === -1 ? findIndexAfter(filteredOptions) : nextIndex; // Следующий за index или первый валидный до index
29
+ } else if (type === 'prev') {
30
+ const beforeIndex = findIndexBefore(filteredOptions, index);
31
+ index = beforeIndex === -1 ? findIndexBefore(filteredOptions) : beforeIndex; // Предшествующий index или последний валидный после index
32
+ }
33
+ focusOptionByIndex(index);
34
+ }, [
35
+ filteredOptions,
36
+ focusedOptionValue,
37
+ focusOptionByIndex
38
+ ]);
39
+ const selectFocusedValue = React.useCallback(()=>setFocusedOptionValue(selectedOptionValue), [
40
+ selectedOptionValue
41
+ ]);
42
+ return {
43
+ focusedOptionValue,
44
+ setFocusedOptionValue,
45
+ focusOptionByIndex,
46
+ resetFocusedOption,
47
+ focusOption,
48
+ selectFocusedValue
49
+ };
50
+ }
51
+
52
+ //# sourceMappingURL=useFocusedOptionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/hooks/useFocusedOptionController.ts"],"sourcesContent":["import { type Dispatch, type SetStateAction } from 'react';\nimport * as React from 'react';\nimport { type SelectValue } from '../../NativeSelect/NativeSelect';\nimport { type SelectProps } from '../CustomSelect';\nimport { findIndexAfter, findIndexBefore, findSelectedIndex } from '../helpers';\nimport { type CustomSelectOptionInterface } from '../types';\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface UseFocusedOptionControllerProps<OptionInterfaceT extends CustomSelectOptionInterface> {\n filteredOptions: SelectProps<OptionInterfaceT>['options'];\n scrollToElement: (index: number, center?: boolean) => void;\n selectedOptionValue: SelectValue;\n}\n\nexport interface UseFocusedOptionControllerReturn {\n focusedOptionValue: SelectValue;\n setFocusedOptionValue: Dispatch<SetStateAction<SelectValue>>;\n focusOptionByIndex: (index: number | undefined, scrollTo: boolean) => void;\n resetFocusedOption: () => void;\n focusOption: (type: 'next' | 'prev') => void;\n selectFocusedValue: () => void;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport function useFocusedOptionController<OptionInterfaceT extends CustomSelectOptionInterface>({\n selectedOptionValue,\n filteredOptions,\n scrollToElement,\n}: UseFocusedOptionControllerProps<OptionInterfaceT>): UseFocusedOptionControllerReturn {\n const [focusedOptionValue, setFocusedOptionValue] = React.useState<SelectValue>(null);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > filteredOptions.length - 1) {\n return;\n }\n const option = filteredOptions[index];\n\n if (!option || option.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n setFocusedOptionValue(option.value);\n },\n [filteredOptions, scrollToElement],\n );\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionValue(null);\n }, []);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = findSelectedIndex(filteredOptions, focusedOptionValue);\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(filteredOptions, index);\n index = nextIndex === -1 ? findIndexAfter(filteredOptions) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(filteredOptions, index);\n index = beforeIndex === -1 ? findIndexBefore(filteredOptions) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [filteredOptions, focusedOptionValue, focusOptionByIndex],\n );\n\n const selectFocusedValue = React.useCallback(\n () => setFocusedOptionValue(selectedOptionValue),\n [selectedOptionValue],\n );\n\n return {\n focusedOptionValue,\n setFocusedOptionValue,\n focusOptionByIndex,\n resetFocusedOption,\n focusOption,\n selectFocusedValue,\n };\n}\n"],"names":["React","findIndexAfter","findIndexBefore","findSelectedIndex","useFocusedOptionController","selectedOptionValue","filteredOptions","scrollToElement","focusedOptionValue","setFocusedOptionValue","useState","focusOptionByIndex","useCallback","index","scrollTo","undefined","length","option","disabled","value","resetFocusedOption","focusOption","type","nextIndex","beforeIndex","selectFocusedValue"],"mappings":"AACA,YAAYA,WAAW,QAAQ;AAG/B,SAASC,cAAc,EAAEC,eAAe,EAAEC,iBAAiB,QAAQ,gBAAa;AAkBhF,qCAAqC,GAErC,OAAO,SAASC,2BAAiF,EAC/FC,mBAAmB,EACnBC,eAAe,EACfC,eAAe,EACmC;IAClD,MAAM,CAACC,oBAAoBC,sBAAsB,GAAGT,MAAMU,QAAQ,CAAc;IAEhF,MAAMC,qBAAqBX,MAAMY,WAAW,CAC1C,CAACC,OAA2BC,WAAW,IAAI;QACzC,IAAID,UAAUE,aAAaF,QAAQ,KAAKA,QAAQP,gBAAgBU,MAAM,GAAG,GAAG;YAC1E;QACF;QACA,MAAMC,SAASX,eAAe,CAACO,MAAM;QAErC,IAAI,CAACI,UAAUA,OAAOC,QAAQ,EAAE;YAC9B;QACF;QAEA,IAAIJ,UAAU;YACZP,gBAAgBM;QAClB;QAEAJ,sBAAsBQ,OAAOE,KAAK;IACpC,GACA;QAACb;QAAiBC;KAAgB;IAGpC,MAAMa,qBAAqBpB,MAAMY,WAAW,CAAC;QAC3CH,sBAAsB;IACxB,GAAG,EAAE;IAEL,MAAMY,cAAcrB,MAAMY,WAAW,CACnC,CAACU;QACC,IAAIT,QAAQV,kBAAkBG,iBAAiBE;QAE/C,IAAIc,SAAS,QAAQ;YACnB,MAAMC,YAAYtB,eAAeK,iBAAiBO;YAClDA,QAAQU,cAAc,CAAC,IAAItB,eAAeK,mBAAmBiB,WAAW,kDAAkD;QAC5H,OAAO,IAAID,SAAS,QAAQ;YAC1B,MAAME,cAActB,gBAAgBI,iBAAiBO;YACrDA,QAAQW,gBAAgB,CAAC,IAAItB,gBAAgBI,mBAAmBkB,aAAa,0DAA0D;QACzI;QAEAb,mBAAmBE;IACrB,GACA;QAACP;QAAiBE;QAAoBG;KAAmB;IAG3D,MAAMc,qBAAqBzB,MAAMY,WAAW,CAC1C,IAAMH,sBAAsBJ,sBAC5B;QAACA;KAAoB;IAGvB,OAAO;QACLG;QACAC;QACAE;QACAS;QACAC;QACAI;IACF;AACF"}
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { type SelectProps } from '../CustomSelect';
3
+ import { type UseFocusedOptionControllerReturn } from './useFocusedOptionController';
4
+ interface UseInputKeyboardController extends Pick<UseFocusedOptionControllerReturn, 'resetFocusedOption' | 'focusOption'>, Pick<SelectProps, 'onInputKeyDown'> {
5
+ opened: boolean;
6
+ scrollBoxRef: React.RefObject<HTMLDivElement | null>;
7
+ selectFocused: () => void;
8
+ open: () => void;
9
+ close: () => void;
10
+ }
11
+ export declare function useInputKeyboardController({ opened, resetFocusedOption, focusOption, scrollBoxRef, selectFocused, onInputKeyDown, open, close, }: UseInputKeyboardController): (e: React.KeyboardEvent<HTMLInputElement>) => void;
12
+ export {};
13
+ //# sourceMappingURL=useInputKeyboardController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputKeyboardController.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/hooks/useInputKeyboardController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAKrF,UAAU,0BACR,SAAQ,IAAI,CAAC,gCAAgC,EAAE,oBAAoB,GAAG,aAAa,CAAC,EAClF,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAGD,wBAAgB,0BAA0B,CAAC,EACzC,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,IAAI,EACJ,KAAK,GACN,EAAE,0BAA0B,OA4DA,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAM1E"}
@@ -0,0 +1,78 @@
1
+ import * as React from "react";
2
+ import { Keys, pressedKey } from "../../../lib/accessibility.js";
3
+ import { callMultiple } from "../../../lib/callMultiple.js";
4
+ const KEYS_TO_PREVENT_DEFAULT = [
5
+ Keys.ARROW_UP,
6
+ Keys.ARROW_DOWN,
7
+ Keys.ESCAPE,
8
+ Keys.ENTER
9
+ ];
10
+ /* eslint-enable jsdoc/require-jsdoc */ export function useInputKeyboardController({ opened, resetFocusedOption, focusOption, scrollBoxRef, selectFocused, onInputKeyDown, open, close }) {
11
+ const handleKeyDownSelect = React.useCallback((event)=>{
12
+ const key = pressedKey(event);
13
+ if (event.key.length === 1 && key !== Keys.SPACE) {
14
+ open();
15
+ resetFocusedOption();
16
+ return;
17
+ }
18
+ if (!key) {
19
+ return;
20
+ }
21
+ const areOptionsShown = ()=>scrollBoxRef.current !== null;
22
+ if (KEYS_TO_PREVENT_DEFAULT.includes(key)) {
23
+ event.preventDefault();
24
+ }
25
+ switch(key){
26
+ case Keys.ARROW_UP:
27
+ if (opened) {
28
+ areOptionsShown() && focusOption('prev');
29
+ } else {
30
+ open();
31
+ }
32
+ break;
33
+ case Keys.ARROW_DOWN:
34
+ if (opened) {
35
+ areOptionsShown() && focusOption('next');
36
+ } else {
37
+ open();
38
+ }
39
+ break;
40
+ case Keys.ESCAPE:
41
+ close();
42
+ break;
43
+ case Keys.BACKSPACE:
44
+ case Keys.DELETE:
45
+ {
46
+ open();
47
+ resetFocusedOption();
48
+ break;
49
+ }
50
+ case Keys.ENTER:
51
+ case Keys.SPACE:
52
+ if (opened) {
53
+ areOptionsShown() && selectFocused();
54
+ } else {
55
+ open();
56
+ }
57
+ break;
58
+ }
59
+ }, [
60
+ scrollBoxRef,
61
+ opened,
62
+ close,
63
+ focusOption,
64
+ open,
65
+ resetFocusedOption,
66
+ selectFocused
67
+ ]);
68
+ const handleInputKeydown = React.useCallback((event)=>{
69
+ onInputKeyDown === null || onInputKeyDown === void 0 ? void 0 : onInputKeyDown(event, opened);
70
+ }, [
71
+ opened,
72
+ onInputKeyDown
73
+ ]);
74
+ const _onInputKeyDown = callMultiple(handleKeyDownSelect, handleInputKeydown);
75
+ return _onInputKeyDown;
76
+ }
77
+
78
+ //# sourceMappingURL=useInputKeyboardController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/hooks/useInputKeyboardController.ts"],"sourcesContent":["import * as React from 'react';\nimport { Keys, pressedKey } from '../../../lib/accessibility';\nimport { callMultiple } from '../../../lib/callMultiple';\nimport { type SelectProps } from '../CustomSelect';\nimport { type UseFocusedOptionControllerReturn } from './useFocusedOptionController';\n\nconst KEYS_TO_PREVENT_DEFAULT: string[] = [Keys.ARROW_UP, Keys.ARROW_DOWN, Keys.ESCAPE, Keys.ENTER];\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface UseInputKeyboardController\n extends Pick<UseFocusedOptionControllerReturn, 'resetFocusedOption' | 'focusOption'>,\n Pick<SelectProps, 'onInputKeyDown'> {\n opened: boolean;\n scrollBoxRef: React.RefObject<HTMLDivElement | null>;\n selectFocused: () => void;\n open: () => void;\n close: () => void;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport function useInputKeyboardController({\n opened,\n resetFocusedOption,\n focusOption,\n scrollBoxRef,\n selectFocused,\n onInputKeyDown,\n open,\n close,\n}: UseInputKeyboardController) {\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n const key = pressedKey(event);\n if (event.key.length === 1 && key !== Keys.SPACE) {\n open();\n resetFocusedOption();\n return;\n }\n if (!key) {\n return;\n }\n const areOptionsShown = () => scrollBoxRef.current !== null;\n\n if (KEYS_TO_PREVENT_DEFAULT.includes(key)) {\n event.preventDefault();\n }\n switch (key) {\n case Keys.ARROW_UP:\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case Keys.ARROW_DOWN:\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case Keys.ESCAPE:\n close();\n break;\n case Keys.BACKSPACE:\n case Keys.DELETE: {\n open();\n resetFocusedOption();\n break;\n }\n case Keys.ENTER:\n case Keys.SPACE:\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [scrollBoxRef, opened, close, focusOption, open, resetFocusedOption, selectFocused],\n );\n\n const handleInputKeydown = React.useCallback(\n (event: React.KeyboardEvent) => {\n onInputKeyDown?.(event, opened);\n },\n [opened, onInputKeyDown],\n );\n const _onInputKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void = callMultiple(\n handleKeyDownSelect,\n handleInputKeydown,\n );\n\n return _onInputKeyDown;\n}\n"],"names":["React","Keys","pressedKey","callMultiple","KEYS_TO_PREVENT_DEFAULT","ARROW_UP","ARROW_DOWN","ESCAPE","ENTER","useInputKeyboardController","opened","resetFocusedOption","focusOption","scrollBoxRef","selectFocused","onInputKeyDown","open","close","handleKeyDownSelect","useCallback","event","key","length","SPACE","areOptionsShown","current","includes","preventDefault","BACKSPACE","DELETE","handleInputKeydown","_onInputKeyDown"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,IAAI,EAAEC,UAAU,QAAQ,gCAA6B;AAC9D,SAASC,YAAY,QAAQ,+BAA4B;AAIzD,MAAMC,0BAAoC;IAACH,KAAKI,QAAQ;IAAEJ,KAAKK,UAAU;IAAEL,KAAKM,MAAM;IAAEN,KAAKO,KAAK;CAAC;AAYnG,qCAAqC,GAErC,OAAO,SAASC,2BAA2B,EACzCC,MAAM,EACNC,kBAAkB,EAClBC,WAAW,EACXC,YAAY,EACZC,aAAa,EACbC,cAAc,EACdC,IAAI,EACJC,KAAK,EACsB;IAC3B,MAAMC,sBAAsBlB,MAAMmB,WAAW,CAC3C,CAACC;QACC,MAAMC,MAAMnB,WAAWkB;QACvB,IAAIA,MAAMC,GAAG,CAACC,MAAM,KAAK,KAAKD,QAAQpB,KAAKsB,KAAK,EAAE;YAChDP;YACAL;YACA;QACF;QACA,IAAI,CAACU,KAAK;YACR;QACF;QACA,MAAMG,kBAAkB,IAAMX,aAAaY,OAAO,KAAK;QAEvD,IAAIrB,wBAAwBsB,QAAQ,CAACL,MAAM;YACzCD,MAAMO,cAAc;QACtB;QACA,OAAQN;YACN,KAAKpB,KAAKI,QAAQ;gBAChB,IAAIK,QAAQ;oBACVc,qBAAqBZ,YAAY;gBACnC,OAAO;oBACLI;gBACF;gBACA;YACF,KAAKf,KAAKK,UAAU;gBAClB,IAAII,QAAQ;oBACVc,qBAAqBZ,YAAY;gBACnC,OAAO;oBACLI;gBACF;gBACA;YACF,KAAKf,KAAKM,MAAM;gBACdU;gBACA;YACF,KAAKhB,KAAK2B,SAAS;YACnB,KAAK3B,KAAK4B,MAAM;gBAAE;oBAChBb;oBACAL;oBACA;gBACF;YACA,KAAKV,KAAKO,KAAK;YACf,KAAKP,KAAKsB,KAAK;gBACb,IAAIb,QAAQ;oBACVc,qBAAqBV;gBACvB,OAAO;oBACLE;gBACF;gBACA;QACJ;IACF,GACA;QAACH;QAAcH;QAAQO;QAAOL;QAAaI;QAAML;QAAoBG;KAAc;IAGrF,MAAMgB,qBAAqB9B,MAAMmB,WAAW,CAC1C,CAACC;QACCL,2BAAAA,qCAAAA,eAAiBK,OAAOV;IAC1B,GACA;QAACA;QAAQK;KAAe;IAE1B,MAAMgB,kBAAsE5B,aAC1Ee,qBACAY;IAGF,OAAOC;AACT"}
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { type SelectValue } from '../../NativeSelect/NativeSelect';
3
+ import { type SelectProps } from '../CustomSelect';
4
+ import { type CustomSelectOptionInterface } from '../types';
5
+ type UseInputValueControllerProps<OptionInterfaceT extends CustomSelectOptionInterface> = Pick<SelectProps<OptionInterfaceT>, 'options' | 'onInputChange' | 'accessible'> & {
6
+ selectedValue: SelectValue;
7
+ };
8
+ export declare function useInputValueController<OptionInterfaceT extends CustomSelectOptionInterface>({ options, accessible, selectedValue, onInputChange: onInputChangeProp, }: UseInputValueControllerProps<OptionInterfaceT>): {
9
+ inputValue: string;
10
+ resetInputValue: () => void;
11
+ resetInputValueBySelectedOption: () => void;
12
+ onInputChange: React.ChangeEventHandler<HTMLInputElement>;
13
+ };
14
+ export {};
15
+ //# sourceMappingURL=useInputValueController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputValueController.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/hooks/useInputValueController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAG5D,KAAK,4BAA4B,CAAC,gBAAgB,SAAS,2BAA2B,IAAI,IAAI,CAC5F,WAAW,CAAC,gBAAgB,CAAC,EAC7B,SAAS,GAAG,eAAe,GAAG,YAAY,CAC3C,GAAG;IACF,aAAa,EAAE,WAAW,CAAC;CAC5B,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,gBAAgB,SAAS,2BAA2B,EAAE,EAC5F,OAAO,EACP,UAAU,EACV,aAAa,EACb,aAAa,EAAE,iBAAiB,GACjC,EAAE,4BAA4B,CAAC,gBAAgB,CAAC;;;;;EAoChD"}
@@ -0,0 +1,43 @@
1
+ import * as React from "react";
2
+ import { useIsomorphicLayoutEffect } from "../../../lib/useIsomorphicLayoutEffect.js";
3
+ import { calculateInputValueFromOptions } from "../helpers.js";
4
+ /* eslint-enable jsdoc/require-jsdoc */ export function useInputValueController({ options, accessible, selectedValue, onInputChange: onInputChangeProp }) {
5
+ const [inputValue, setInputValue] = React.useState('');
6
+ const optionsRef = React.useRef(options);
7
+ useIsomorphicLayoutEffect(()=>{
8
+ optionsRef.current = options;
9
+ }, [
10
+ options
11
+ ]);
12
+ const resetInputValueBySelectedOption = React.useCallback(()=>{
13
+ setInputValue(calculateInputValueFromOptions(optionsRef.current, selectedValue));
14
+ }, [
15
+ selectedValue
16
+ ]);
17
+ useIsomorphicLayoutEffect(()=>{
18
+ if (accessible) {
19
+ resetInputValueBySelectedOption();
20
+ }
21
+ }, [
22
+ accessible,
23
+ resetInputValueBySelectedOption
24
+ ]);
25
+ const resetInputValue = React.useCallback(()=>{
26
+ setInputValue('');
27
+ }, []);
28
+ const onInputChange = React.useCallback((e)=>{
29
+ onInputChangeProp && onInputChangeProp(e);
30
+ setInputValue(e.target.value);
31
+ }, [
32
+ onInputChangeProp,
33
+ setInputValue
34
+ ]);
35
+ return {
36
+ inputValue,
37
+ resetInputValue,
38
+ resetInputValueBySelectedOption,
39
+ onInputChange
40
+ };
41
+ }
42
+
43
+ //# sourceMappingURL=useInputValueController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/hooks/useInputValueController.ts"],"sourcesContent":["import * as React from 'react';\nimport { useIsomorphicLayoutEffect } from '../../../lib/useIsomorphicLayoutEffect';\nimport { type SelectValue } from '../../NativeSelect/NativeSelect';\nimport { type SelectProps } from '../CustomSelect';\nimport { calculateInputValueFromOptions } from '../helpers';\nimport { type CustomSelectOptionInterface } from '../types';\n\n/* eslint-disable jsdoc/require-jsdoc */\ntype UseInputValueControllerProps<OptionInterfaceT extends CustomSelectOptionInterface> = Pick<\n SelectProps<OptionInterfaceT>,\n 'options' | 'onInputChange' | 'accessible'\n> & {\n selectedValue: SelectValue;\n};\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport function useInputValueController<OptionInterfaceT extends CustomSelectOptionInterface>({\n options,\n accessible,\n selectedValue,\n onInputChange: onInputChangeProp,\n}: UseInputValueControllerProps<OptionInterfaceT>) {\n const [inputValue, setInputValue] = React.useState('');\n const optionsRef = React.useRef(options);\n\n useIsomorphicLayoutEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const resetInputValueBySelectedOption = React.useCallback(() => {\n setInputValue(calculateInputValueFromOptions(optionsRef.current, selectedValue));\n }, [selectedValue]);\n\n useIsomorphicLayoutEffect(() => {\n if (accessible) {\n resetInputValueBySelectedOption();\n }\n }, [accessible, resetInputValueBySelectedOption]);\n\n const resetInputValue = React.useCallback(() => {\n setInputValue('');\n }, []);\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n setInputValue(e.target.value);\n },\n [onInputChangeProp, setInputValue],\n );\n\n return {\n inputValue,\n resetInputValue,\n resetInputValueBySelectedOption,\n onInputChange,\n };\n}\n"],"names":["React","useIsomorphicLayoutEffect","calculateInputValueFromOptions","useInputValueController","options","accessible","selectedValue","onInputChange","onInputChangeProp","inputValue","setInputValue","useState","optionsRef","useRef","current","resetInputValueBySelectedOption","useCallback","resetInputValue","e","target","value"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,yBAAyB,QAAQ,4CAAyC;AAGnF,SAASC,8BAA8B,QAAQ,gBAAa;AAU5D,qCAAqC,GAErC,OAAO,SAASC,wBAA8E,EAC5FC,OAAO,EACPC,UAAU,EACVC,aAAa,EACbC,eAAeC,iBAAiB,EACe;IAC/C,MAAM,CAACC,YAAYC,cAAc,GAAGV,MAAMW,QAAQ,CAAC;IACnD,MAAMC,aAAaZ,MAAMa,MAAM,CAACT;IAEhCH,0BAA0B;QACxBW,WAAWE,OAAO,GAAGV;IACvB,GAAG;QAACA;KAAQ;IAEZ,MAAMW,kCAAkCf,MAAMgB,WAAW,CAAC;QACxDN,cAAcR,+BAA+BU,WAAWE,OAAO,EAAER;IACnE,GAAG;QAACA;KAAc;IAElBL,0BAA0B;QACxB,IAAII,YAAY;YACdU;QACF;IACF,GAAG;QAACV;QAAYU;KAAgC;IAEhD,MAAME,kBAAkBjB,MAAMgB,WAAW,CAAC;QACxCN,cAAc;IAChB,GAAG,EAAE;IAEL,MAAMH,gBAA4DP,MAAMgB,WAAW,CACjF,CAACE;QACCV,qBAAqBA,kBAAkBU;QACvCR,cAAcQ,EAAEC,MAAM,CAACC,KAAK;IAC9B,GACA;QAACZ;QAAmBE;KAAc;IAGpC,OAAO;QACLD;QACAQ;QACAF;QACAR;IACF;AACF"}
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ interface UseScrollListControllerReturn {
3
+ scrollBoxRef: React.RefObject<HTMLDivElement | null>;
4
+ optionsWrapperRef: React.RefObject<HTMLDivElement | null>;
5
+ scrollToElement: (index: number, center?: boolean) => void;
6
+ }
7
+ export declare function useScrollListController(): UseScrollListControllerReturn;
8
+ export {};
9
+ //# sourceMappingURL=useScrollListController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollListController.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/hooks/useScrollListController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,UAAU,6BAA6B;IACrC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC1D,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5D;AAGD,wBAAgB,uBAAuB,IAAI,6BAA6B,CAmCvE"}
@@ -0,0 +1,37 @@
1
+ import * as React from "react";
2
+ /* eslint-enable jsdoc/require-jsdoc */ export function useScrollListController() {
3
+ const scrollBoxRef = React.useRef(null);
4
+ const optionsWrapperRef = React.useRef(null);
5
+ const scrollToElement = React.useCallback((index, center = false)=>{
6
+ const dropdown = scrollBoxRef.current;
7
+ const optionsWrapper = optionsWrapperRef.current;
8
+ if (!dropdown || !optionsWrapper || index < 0 || index > optionsWrapper.children.length) {
9
+ return;
10
+ }
11
+ const item = optionsWrapper.children[index];
12
+ /* istanbul ignore if: проверка для TS (ситуация, когда среди children нет элемента с index, маловероятна) */ if (!item) {
13
+ return;
14
+ }
15
+ const dropdownHeight = dropdown.offsetHeight;
16
+ const scrollTop = dropdown.scrollTop;
17
+ const itemTop = item.offsetTop;
18
+ const itemHeight = item.offsetHeight;
19
+ if (center) {
20
+ dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;
21
+ } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {
22
+ dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;
23
+ } else if (itemTop < scrollTop) {
24
+ dropdown.scrollTop = itemTop;
25
+ }
26
+ }, [
27
+ optionsWrapperRef,
28
+ scrollBoxRef
29
+ ]);
30
+ return {
31
+ scrollToElement,
32
+ scrollBoxRef,
33
+ optionsWrapperRef
34
+ };
35
+ }
36
+
37
+ //# sourceMappingURL=useScrollListController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/hooks/useScrollListController.ts"],"sourcesContent":["import * as React from 'react';\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface UseScrollListControllerReturn {\n scrollBoxRef: React.RefObject<HTMLDivElement | null>;\n optionsWrapperRef: React.RefObject<HTMLDivElement | null>;\n scrollToElement: (index: number, center?: boolean) => void;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport function useScrollListController(): UseScrollListControllerReturn {\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const scrollToElement = React.useCallback(\n (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n\n if (!dropdown || !optionsWrapper || index < 0 || index > optionsWrapper.children.length) {\n return;\n }\n const item = optionsWrapper.children[index] as HTMLElement | null;\n /* istanbul ignore if: проверка для TS (ситуация, когда среди children нет элемента с index, маловероятна) */\n if (!item) {\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 [optionsWrapperRef, scrollBoxRef],\n );\n\n return { scrollToElement, scrollBoxRef, optionsWrapperRef };\n}\n"],"names":["React","useScrollListController","scrollBoxRef","useRef","optionsWrapperRef","scrollToElement","useCallback","index","center","dropdown","current","optionsWrapper","children","length","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAQ/B,qCAAqC,GAErC,OAAO,SAASC;IACd,MAAMC,eAAeF,MAAMG,MAAM,CAAwB;IACzD,MAAMC,oBAAoBJ,MAAMG,MAAM,CAAiB;IAEvD,MAAME,kBAAkBL,MAAMM,WAAW,CACvC,CAACC,OAAeC,SAAS,KAAK;QAC5B,MAAMC,WAAWP,aAAaQ,OAAO;QACrC,MAAMC,iBAAiBP,kBAAkBM,OAAO;QAEhD,IAAI,CAACD,YAAY,CAACE,kBAAkBJ,QAAQ,KAAKA,QAAQI,eAAeC,QAAQ,CAACC,MAAM,EAAE;YACvF;QACF;QACA,MAAMC,OAAOH,eAAeC,QAAQ,CAACL,MAAM;QAC3C,2GAA2G,GAC3G,IAAI,CAACO,MAAM;YACT;QACF;QAEA,MAAMC,iBAAiBN,SAASO,YAAY;QAC5C,MAAMC,YAAYR,SAASQ,SAAS;QACpC,MAAMC,UAAUJ,KAAKK,SAAS;QAC9B,MAAMC,aAAaN,KAAKE,YAAY;QAEpC,IAAIR,QAAQ;YACVC,SAASQ,SAAS,GAAGC,UAAUH,iBAAiB,IAAIK,aAAa;QACnE,OAAO,IAAIF,UAAUE,aAAaL,iBAAiBE,WAAW;YAC5DR,SAASQ,SAAS,GAAGC,UAAUH,iBAAiBK;QAClD,OAAO,IAAIF,UAAUD,WAAW;YAC9BR,SAASQ,SAAS,GAAGC;QACvB;IACF,GACA;QAACd;QAAmBF;KAAa;IAGnC,OAAO;QAAEG;QAAiBH;QAAcE;IAAkB;AAC5D"}
@@ -0,0 +1,18 @@
1
+ import { type ChangeEvent } from 'react';
2
+ import * as React from 'react';
3
+ import { type NativeSelectValue, type SelectValue } from '../../NativeSelect/NativeSelect';
4
+ import { type SelectProps } from '../CustomSelect';
5
+ type UseSelectedOptionControllerProps = Pick<SelectProps, 'value' | 'defaultValue'> & {
6
+ isControlledOutside: boolean;
7
+ allowClearButton: boolean;
8
+ onChange?: (e: ChangeEvent<HTMLSelectElement>, newValue: SelectValue) => void;
9
+ };
10
+ export declare function useSelectedOptionController({ value, defaultValue, isControlledOutside, allowClearButton, onChange, }: UseSelectedOptionControllerProps): {
11
+ selectedOptionValue: SelectValue;
12
+ setSelectedOptionValue: React.Dispatch<React.SetStateAction<SelectValue>>;
13
+ nativeSelectValue: NativeSelectValue;
14
+ setNativeSelectValue: (newValue: NativeSelectValue) => void;
15
+ onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement>;
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=useSelectedOptionController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelectedOptionController.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/hooks/useSelectedOptionController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EACL,KAAK,iBAAiB,EAItB,KAAK,WAAW,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,KAAK,gCAAgC,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,cAAc,CAAC,GAAG;IACpF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;CAC/E,CAAC;AAGF,wBAAgB,2BAA2B,CAAC,EAC1C,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,GACT,EAAE,gCAAgC;;;;qCAkBpB,iBAAiB;;EAuF/B"}
@@ -0,0 +1,81 @@
1
+ import * as React from "react";
2
+ import { useStateWithPrev } from "../../../hooks/useStateWithPrev.js";
3
+ import { NOT_SELECTED, remapFromNativeValueToSelectValue, remapFromSelectValueToNativeValue } from "../../NativeSelect/NativeSelect.js";
4
+ /* eslint-enable jsdoc/require-jsdoc */ export function useSelectedOptionController({ value, defaultValue, isControlledOutside, allowClearButton, onChange }) {
5
+ const [[nativeSelectValue, prevNativeSelectValue], setNativeSelectValue] = useStateWithPrev(()=>{
6
+ if (value !== undefined) {
7
+ return remapFromSelectValueToNativeValue(value);
8
+ }
9
+ if (defaultValue !== undefined) {
10
+ return remapFromSelectValueToNativeValue(defaultValue);
11
+ }
12
+ return NOT_SELECTED.NATIVE;
13
+ });
14
+ const nativeSelectValueRef = React.useRef(nativeSelectValue);
15
+ const [selectedOptionValue, setSelectedOptionValue] = React.useState(()=>remapFromNativeValueToSelectValue(nativeSelectValue));
16
+ const _setNativeSelectValue = React.useCallback((newValue)=>{
17
+ setNativeSelectValue(newValue);
18
+ nativeSelectValueRef.current = newValue;
19
+ }, [
20
+ setNativeSelectValue
21
+ ]);
22
+ React.useEffect(function syncNativeSelectValueWithPropValue() {
23
+ if (value !== undefined) {
24
+ _setNativeSelectValue(remapFromSelectValueToNativeValue(value));
25
+ }
26
+ }, [
27
+ value,
28
+ _setNativeSelectValue
29
+ ]);
30
+ React.useEffect(function syncNativeSelectValueWithSelectedOptionValue() {
31
+ const remappedSelectedValue = remapFromSelectValueToNativeValue(selectedOptionValue);
32
+ if (nativeSelectValueRef.current !== remappedSelectedValue) {
33
+ setNativeSelectValue(remappedSelectedValue);
34
+ }
35
+ }, [
36
+ selectedOptionValue,
37
+ setNativeSelectValue
38
+ ]);
39
+ const onNativeSelectChange = (e)=>{
40
+ // для ситуаций, когда в опциях value это string а value/defaultValue это number
41
+ // и наоборот, приводим значение nativeSelectValue из стейта к строке.
42
+ // ведь nativeSelect всегда возвращает string в onChange, а пользователь
43
+ // может использовать number для опций
44
+ //
45
+ // native select всегда возвращает string в качестве value в onChange
46
+ // Когда селект контролируемый, то пользователь, в onChange может сохранить в свой стейт строку (например '3'), хотя
47
+ // в качестве value опции может использовать число (3),
48
+ // тогда строчное значение value ('3') из стейта пользователя
49
+ // будет передано в CustomSelect, и после синхронизации nativeSelectValue (3) и props.value ('3') и после клика на уже выбранную опцию (3),
50
+ // когда nativeSelectValue обновится на значение опции (число 3),
51
+ // сравнение nativeSelectValue (3) и prevNativeSelectValue ('3') может не сработать лишь из-за того, что они в разных типах.
52
+ const convertedNativeSelectValue = typeof nativeSelectValue === 'number' && (typeof value === 'string' || typeof prevNativeSelectValue === 'string') ? String(nativeSelectValue) : nativeSelectValue;
53
+ const isCalledWithSameControlledOptionValue = isControlledOutside && value === remapFromNativeValueToSelectValue(convertedNativeSelectValue);
54
+ const isNativeValueChanged = convertedNativeSelectValue !== prevNativeSelectValue && prevNativeSelectValue !== undefined;
55
+ const isTriggeredByClearButton = allowClearButton && // Проверяем, что новое значение NOT_SELECTED.NATIVE
56
+ nativeSelectValue === NOT_SELECTED.NATIVE && // Проверяем, что предыдущее значение не undefined(кейс с первой отрисовкой, когда предыдущего значения не было)
57
+ prevNativeSelectValue !== undefined && // Проверяем, что предыдущее значение не NOT_SELECTED.NATIVE(если до этого было уже сброшенное значение)
58
+ prevNativeSelectValue !== NOT_SELECTED.NATIVE;
59
+ const shouldCallOnChange = !isCalledWithSameControlledOptionValue && (isNativeValueChanged || isTriggeredByClearButton);
60
+ if (!shouldCallOnChange) {
61
+ return;
62
+ }
63
+ const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);
64
+ if (e.target.value === NOT_SELECTED.NATIVE) {
65
+ e.target.value = '';
66
+ }
67
+ if (e.currentTarget.value === NOT_SELECTED.NATIVE) {
68
+ e.currentTarget.value = '';
69
+ }
70
+ onChange === null || onChange === void 0 ? void 0 : onChange(e, remappedNativeValue);
71
+ };
72
+ return {
73
+ selectedOptionValue,
74
+ setSelectedOptionValue,
75
+ nativeSelectValue,
76
+ setNativeSelectValue: _setNativeSelectValue,
77
+ onNativeSelectChange
78
+ };
79
+ }
80
+
81
+ //# sourceMappingURL=useSelectedOptionController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/hooks/useSelectedOptionController.ts"],"sourcesContent":["import { type ChangeEvent } from 'react';\nimport * as React from 'react';\nimport { useStateWithPrev } from '../../../hooks/useStateWithPrev';\nimport {\n type NativeSelectValue,\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n remapFromSelectValueToNativeValue,\n type SelectValue,\n} from '../../NativeSelect/NativeSelect';\nimport { type SelectProps } from '../CustomSelect';\n\n/* eslint-disable jsdoc/require-jsdoc */\ntype UseSelectedOptionControllerProps = Pick<SelectProps, 'value' | 'defaultValue'> & {\n isControlledOutside: boolean;\n allowClearButton: boolean;\n onChange?: (e: ChangeEvent<HTMLSelectElement>, newValue: SelectValue) => void;\n};\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport function useSelectedOptionController({\n value,\n defaultValue,\n isControlledOutside,\n allowClearButton,\n onChange,\n}: UseSelectedOptionControllerProps) {\n const [[nativeSelectValue, prevNativeSelectValue], setNativeSelectValue] =\n useStateWithPrev<NativeSelectValue>(() => {\n if (value !== undefined) {\n return remapFromSelectValueToNativeValue(value);\n }\n if (defaultValue !== undefined) {\n return remapFromSelectValueToNativeValue(defaultValue);\n }\n return NOT_SELECTED.NATIVE;\n });\n const nativeSelectValueRef = React.useRef<NativeSelectValue>(nativeSelectValue);\n\n const [selectedOptionValue, setSelectedOptionValue] = React.useState<SelectValue>(() =>\n remapFromNativeValueToSelectValue(nativeSelectValue),\n );\n\n const _setNativeSelectValue = React.useCallback(\n (newValue: NativeSelectValue) => {\n setNativeSelectValue(newValue);\n nativeSelectValueRef.current = newValue;\n },\n [setNativeSelectValue],\n );\n\n React.useEffect(\n function syncNativeSelectValueWithPropValue() {\n if (value !== undefined) {\n _setNativeSelectValue(remapFromSelectValueToNativeValue(value));\n }\n },\n [value, _setNativeSelectValue],\n );\n\n React.useEffect(\n function syncNativeSelectValueWithSelectedOptionValue() {\n const remappedSelectedValue = remapFromSelectValueToNativeValue(selectedOptionValue);\n if (nativeSelectValueRef.current !== remappedSelectedValue) {\n setNativeSelectValue(remappedSelectedValue);\n }\n },\n [selectedOptionValue, setNativeSelectValue],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n // для ситуаций, когда в опциях value это string а value/defaultValue это number\n // и наоборот, приводим значение nativeSelectValue из стейта к строке.\n // ведь nativeSelect всегда возвращает string в onChange, а пользователь\n // может использовать number для опций\n //\n // native select всегда возвращает string в качестве value в onChange\n // Когда селект контролируемый, то пользователь, в onChange может сохранить в свой стейт строку (например '3'), хотя\n // в качестве value опции может использовать число (3),\n // тогда строчное значение value ('3') из стейта пользователя\n // будет передано в CustomSelect, и после синхронизации nativeSelectValue (3) и props.value ('3') и после клика на уже выбранную опцию (3),\n // когда nativeSelectValue обновится на значение опции (число 3),\n // сравнение nativeSelectValue (3) и prevNativeSelectValue ('3') может не сработать лишь из-за того, что они в разных типах.\n const convertedNativeSelectValue =\n typeof nativeSelectValue === 'number' &&\n (typeof value === 'string' || typeof prevNativeSelectValue === 'string')\n ? String(nativeSelectValue)\n : nativeSelectValue;\n\n const isCalledWithSameControlledOptionValue =\n isControlledOutside &&\n value === remapFromNativeValueToSelectValue(convertedNativeSelectValue);\n\n const isNativeValueChanged =\n convertedNativeSelectValue !== prevNativeSelectValue && prevNativeSelectValue !== undefined;\n\n const isTriggeredByClearButton =\n allowClearButton &&\n // Проверяем, что новое значение NOT_SELECTED.NATIVE\n nativeSelectValue === NOT_SELECTED.NATIVE &&\n // Проверяем, что предыдущее значение не undefined(кейс с первой отрисовкой, когда предыдущего значения не было)\n prevNativeSelectValue !== undefined &&\n // Проверяем, что предыдущее значение не NOT_SELECTED.NATIVE(если до этого было уже сброшенное значение)\n prevNativeSelectValue !== NOT_SELECTED.NATIVE;\n\n const shouldCallOnChange =\n !isCalledWithSameControlledOptionValue && (isNativeValueChanged || isTriggeredByClearButton);\n\n if (!shouldCallOnChange) {\n return;\n }\n\n const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);\n\n if (e.target.value === NOT_SELECTED.NATIVE) {\n e.target.value = '';\n }\n if (e.currentTarget.value === NOT_SELECTED.NATIVE) {\n e.currentTarget.value = '';\n }\n\n onChange?.(e, remappedNativeValue);\n };\n\n return {\n selectedOptionValue,\n setSelectedOptionValue,\n nativeSelectValue,\n setNativeSelectValue: _setNativeSelectValue,\n onNativeSelectChange,\n };\n}\n"],"names":["React","useStateWithPrev","NOT_SELECTED","remapFromNativeValueToSelectValue","remapFromSelectValueToNativeValue","useSelectedOptionController","value","defaultValue","isControlledOutside","allowClearButton","onChange","nativeSelectValue","prevNativeSelectValue","setNativeSelectValue","undefined","NATIVE","nativeSelectValueRef","useRef","selectedOptionValue","setSelectedOptionValue","useState","_setNativeSelectValue","useCallback","newValue","current","useEffect","syncNativeSelectValueWithPropValue","syncNativeSelectValueWithSelectedOptionValue","remappedSelectedValue","onNativeSelectChange","e","convertedNativeSelectValue","String","isCalledWithSameControlledOptionValue","isNativeValueChanged","isTriggeredByClearButton","shouldCallOnChange","remappedNativeValue","currentTarget","target"],"mappings":"AACA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,QAAQ,qCAAkC;AACnE,SAEEC,YAAY,EACZC,iCAAiC,EACjCC,iCAAiC,QAE5B,qCAAkC;AASzC,qCAAqC,GAErC,OAAO,SAASC,4BAA4B,EAC1CC,KAAK,EACLC,YAAY,EACZC,mBAAmB,EACnBC,gBAAgB,EAChBC,QAAQ,EACyB;IACjC,MAAM,CAAC,CAACC,mBAAmBC,sBAAsB,EAAEC,qBAAqB,GACtEZ,iBAAoC;QAClC,IAAIK,UAAUQ,WAAW;YACvB,OAAOV,kCAAkCE;QAC3C;QACA,IAAIC,iBAAiBO,WAAW;YAC9B,OAAOV,kCAAkCG;QAC3C;QACA,OAAOL,aAAaa,MAAM;IAC5B;IACF,MAAMC,uBAAuBhB,MAAMiB,MAAM,CAAoBN;IAE7D,MAAM,CAACO,qBAAqBC,uBAAuB,GAAGnB,MAAMoB,QAAQ,CAAc,IAChFjB,kCAAkCQ;IAGpC,MAAMU,wBAAwBrB,MAAMsB,WAAW,CAC7C,CAACC;QACCV,qBAAqBU;QACrBP,qBAAqBQ,OAAO,GAAGD;IACjC,GACA;QAACV;KAAqB;IAGxBb,MAAMyB,SAAS,CACb,SAASC;QACP,IAAIpB,UAAUQ,WAAW;YACvBO,sBAAsBjB,kCAAkCE;QAC1D;IACF,GACA;QAACA;QAAOe;KAAsB;IAGhCrB,MAAMyB,SAAS,CACb,SAASE;QACP,MAAMC,wBAAwBxB,kCAAkCc;QAChE,IAAIF,qBAAqBQ,OAAO,KAAKI,uBAAuB;YAC1Df,qBAAqBe;QACvB;IACF,GACA;QAACV;QAAqBL;KAAqB;IAG7C,MAAMgB,uBAAoE,CAACC;QACzE,gFAAgF;QAChF,sEAAsE;QACtE,wEAAwE;QACxE,sCAAsC;QACtC,EAAE;QACF,qEAAqE;QACrE,oHAAoH;QACpH,uDAAuD;QACvD,6DAA6D;QAC7D,2IAA2I;QAC3I,iEAAiE;QACjE,4HAA4H;QAC5H,MAAMC,6BACJ,OAAOpB,sBAAsB,YAC5B,CAAA,OAAOL,UAAU,YAAY,OAAOM,0BAA0B,QAAO,IAClEoB,OAAOrB,qBACPA;QAEN,MAAMsB,wCACJzB,uBACAF,UAAUH,kCAAkC4B;QAE9C,MAAMG,uBACJH,+BAA+BnB,yBAAyBA,0BAA0BE;QAEpF,MAAMqB,2BACJ1B,oBACA,oDAAoD;QACpDE,sBAAsBT,aAAaa,MAAM,IACzC,gHAAgH;QAChHH,0BAA0BE,aAC1B,wGAAwG;QACxGF,0BAA0BV,aAAaa,MAAM;QAE/C,MAAMqB,qBACJ,CAACH,yCAA0CC,CAAAA,wBAAwBC,wBAAuB;QAE5F,IAAI,CAACC,oBAAoB;YACvB;QACF;QAEA,MAAMC,sBAAsBlC,kCAAkC2B,EAAEQ,aAAa,CAAChC,KAAK;QAEnF,IAAIwB,EAAES,MAAM,CAACjC,KAAK,KAAKJ,aAAaa,MAAM,EAAE;YAC1Ce,EAAES,MAAM,CAACjC,KAAK,GAAG;QACnB;QACA,IAAIwB,EAAEQ,aAAa,CAAChC,KAAK,KAAKJ,aAAaa,MAAM,EAAE;YACjDe,EAAEQ,aAAa,CAAChC,KAAK,GAAG;QAC1B;QAEAI,qBAAAA,+BAAAA,SAAWoB,GAAGO;IAChB;IAEA,OAAO;QACLnB;QACAC;QACAR;QACAE,sBAAsBQ;QACtBQ;IACF;AACF"}
@@ -0,0 +1,33 @@
1
+ import type * as React from 'react';
2
+ import { type Alignment, type Side } from '../../lib/floating';
3
+ import { type CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';
4
+ import { type SelectValue } from '../NativeSelect/NativeSelect';
5
+ export type MousePosition = {
6
+ x: React.MouseEvent['clientX'];
7
+ y: React.MouseEvent['clientY'];
8
+ };
9
+ export interface CustomSelectOptionInterface {
10
+ /**
11
+ * Значение.
12
+ */
13
+ value: Exclude<SelectValue, null>;
14
+ /**
15
+ * Отображаемый текст.
16
+ */
17
+ label: React.ReactElement | string;
18
+ /**
19
+ * Блокировка взаимодействия с компонентом.
20
+ */
21
+ disabled?: boolean;
22
+ [index: string]: any;
23
+ }
24
+ export interface CustomSelectRenderOption<T extends CustomSelectOptionInterface> extends CustomSelectOptionProps {
25
+ /**
26
+ * Данные об опции.
27
+ */
28
+ option: T;
29
+ }
30
+ type PopupDirectionSide = Extract<Side, 'top' | 'bottom'>;
31
+ export type PopupDirection = PopupDirectionSide | `${PopupDirectionSide}-${Alignment}`;
32
+ export {};
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;CAChC,CAAC;AAGF,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,2BAA2B,CAC7E,SAAQ,uBAAuB;IAC/B;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC;CACX;AAED,KAAK,kBAAkB,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,GAAG,kBAAkB,IAAI,SAAS,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/CustomSelect/types.ts"],"sourcesContent":["import type * as React from 'react';\nimport { type Alignment, type Side } from '../../lib/floating';\nimport { type CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { type SelectValue } from '../NativeSelect/NativeSelect';\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport type MousePosition = {\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n};\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport interface CustomSelectOptionInterface {\n /**\n * Значение.\n */\n value: Exclude<SelectValue, null>;\n /**\n * Отображаемый текст.\n */\n label: React.ReactElement | string;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n /**\n * Данные об опции.\n */\n option: T;\n}\n\ntype PopupDirectionSide = Extract<Side, 'top' | 'bottom'>;\nexport type PopupDirection = PopupDirectionSide | `${PopupDirectionSide}-${Alignment}`;\n"],"names":[],"mappings":"AAqCA,WAAuF"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelectDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelectDropdown/CustomSelectDropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAKpG,MAAM,WAAW,yBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,IAAI,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,EACjD,gBAAgB;IAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,oBAAoB,GAAI,8JAclC,yBAAyB,KAAG,KAAK,CAAC,SAmCpC,CAAC"}
1
+ {"version":3,"file":"CustomSelectDropdown.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelectDropdown/CustomSelectDropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAKpG,MAAM,WAAW,yBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,IAAI,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,EACjD,gBAAgB;IAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,oBAAoB,GAAI,8JAclC,yBAAyB,KAAG,KAAK,CAAC,SAoCpC,CAAC"}
@@ -37,6 +37,7 @@ export const CustomSelectDropdown = (_param)=>{
37
37
  className: noMaxHeight ? undefined : "vkuiCustomSelectDropdown__inWithMaxHeight",
38
38
  overscrollBehavior: overscrollBehavior,
39
39
  tabIndex: -1,
40
+ "aria-busy": fetching,
40
41
  children: fetching ? /*#__PURE__*/ _jsx("div", {
41
42
  className: "vkuiCustomSelectDropdown__fetching",
42
43
  children: /*#__PURE__*/ _jsx(Spinner, {