@vkontakte/vkui 5.9.1 → 5.9.3

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 (303) hide show
  1. package/dist/cjs/components/ActionSheet/ActionSheet.js +1 -1
  2. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  3. package/dist/cjs/components/Alert/Alert.d.ts +3 -3
  4. package/dist/cjs/components/Alert/Alert.d.ts.map +1 -1
  5. package/dist/cjs/components/Alert/Alert.js +5 -3
  6. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  7. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +1 -1
  8. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  9. package/dist/cjs/components/CalendarRange/CalendarRange.js +1 -2
  10. package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
  11. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -1
  12. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  13. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  14. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  15. package/dist/cjs/components/CustomScrollView/CustomScrollView.js +17 -5
  16. package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
  17. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -1
  18. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  19. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  20. package/dist/cjs/components/FormLayout/FormLayout.d.ts +3 -3
  21. package/dist/cjs/components/FormLayout/FormLayout.d.ts.map +1 -1
  22. package/dist/cjs/components/FormLayout/FormLayout.js +5 -2
  23. package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
  24. package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
  25. package/dist/cjs/components/Gallery/Gallery.js +3 -10
  26. package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
  27. package/dist/cjs/components/Gallery/hooks.d.ts +2 -0
  28. package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -0
  29. package/dist/cjs/components/Gallery/hooks.js +52 -0
  30. package/dist/cjs/components/Gallery/hooks.js.map +1 -0
  31. package/dist/cjs/components/Header/Header.d.ts +3 -3
  32. package/dist/cjs/components/Header/Header.d.ts.map +1 -1
  33. package/dist/cjs/components/Header/Header.js +4 -5
  34. package/dist/cjs/components/Header/Header.js.map +1 -1
  35. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  36. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +4 -0
  37. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  38. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  39. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  40. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +5 -2
  41. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  42. package/dist/cjs/components/ModalRoot/ModalRoot.js +6 -8
  43. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  44. package/dist/cjs/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  45. package/dist/cjs/components/PullToRefresh/PullToRefresh.js +22 -7
  46. package/dist/cjs/components/PullToRefresh/PullToRefresh.js.map +1 -1
  47. package/dist/cjs/components/Typography/Caption/Caption.d.ts +2 -0
  48. package/dist/cjs/components/Typography/Caption/Caption.d.ts.map +1 -1
  49. package/dist/cjs/components/Typography/Caption/Caption.js.map +1 -1
  50. package/dist/cjs/components/Typography/Footnote/Footnote.d.ts +2 -0
  51. package/dist/cjs/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  52. package/dist/cjs/components/Typography/Footnote/Footnote.js.map +1 -1
  53. package/dist/cjs/components/Typography/Headline/Headline.d.ts +2 -0
  54. package/dist/cjs/components/Typography/Headline/Headline.d.ts.map +1 -1
  55. package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
  56. package/dist/cjs/components/Typography/Paragraph/Paragraph.d.ts +2 -0
  57. package/dist/cjs/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
  58. package/dist/cjs/components/Typography/Paragraph/Paragraph.js.map +1 -1
  59. package/dist/cjs/components/Typography/Subhead/Subhead.d.ts +2 -0
  60. package/dist/cjs/components/Typography/Subhead/Subhead.d.ts.map +1 -1
  61. package/dist/cjs/components/Typography/Subhead/Subhead.js.map +1 -1
  62. package/dist/cjs/components/Typography/Text/Text.d.ts +2 -0
  63. package/dist/cjs/components/Typography/Text/Text.d.ts.map +1 -1
  64. package/dist/cjs/components/Typography/Text/Text.js.map +1 -1
  65. package/dist/cjs/components/Typography/Title/Title.d.ts +2 -0
  66. package/dist/cjs/components/Typography/Title/Title.d.ts.map +1 -1
  67. package/dist/cjs/components/Typography/Title/Title.js.map +1 -1
  68. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  69. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  70. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
  71. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  72. package/dist/cjs/lib/floating/adapters.d.ts +1 -1
  73. package/dist/cjs/lib/floating/adapters.d.ts.map +1 -1
  74. package/dist/cjs/lib/floating/adapters.js +1 -1
  75. package/dist/cjs/lib/floating/adapters.js.map +1 -1
  76. package/dist/cjs/lib/floating/index.d.ts +1 -1
  77. package/dist/cjs/lib/floating/index.d.ts.map +1 -1
  78. package/dist/cjs/lib/floating/index.js +1 -1
  79. package/dist/cjs/lib/floating/index.js.map +1 -1
  80. package/dist/cjs/lib/floating/types.d.ts +2 -2
  81. package/dist/cjs/lib/floating/types.d.ts.map +1 -1
  82. package/dist/components/ActionSheet/ActionSheet.js +1 -1
  83. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  84. package/dist/components/Alert/Alert.d.ts +3 -3
  85. package/dist/components/Alert/Alert.d.ts.map +1 -1
  86. package/dist/components/Alert/Alert.js +5 -3
  87. package/dist/components/Alert/Alert.js.map +1 -1
  88. package/dist/components/CalendarRange/CalendarRange.d.ts +1 -1
  89. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  90. package/dist/components/CalendarRange/CalendarRange.js +1 -2
  91. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  92. package/dist/components/ChipsSelect/ChipsSelect.js +1 -1
  93. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  94. package/dist/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  95. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  96. package/dist/components/CustomScrollView/CustomScrollView.js +17 -5
  97. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  98. package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
  99. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  100. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  101. package/dist/components/FormLayout/FormLayout.d.ts +3 -3
  102. package/dist/components/FormLayout/FormLayout.d.ts.map +1 -1
  103. package/dist/components/FormLayout/FormLayout.js +5 -2
  104. package/dist/components/FormLayout/FormLayout.js.map +1 -1
  105. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  106. package/dist/components/Gallery/Gallery.js +3 -10
  107. package/dist/components/Gallery/Gallery.js.map +1 -1
  108. package/dist/components/Gallery/hooks.d.ts +2 -0
  109. package/dist/components/Gallery/hooks.d.ts.map +1 -0
  110. package/dist/components/Gallery/hooks.js +41 -0
  111. package/dist/components/Gallery/hooks.js.map +1 -0
  112. package/dist/components/Header/Header.d.ts +3 -3
  113. package/dist/components/Header/Header.d.ts.map +1 -1
  114. package/dist/components/Header/Header.js +4 -5
  115. package/dist/components/Header/Header.js.map +1 -1
  116. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  117. package/dist/components/HorizontalScroll/HorizontalScroll.js +4 -0
  118. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  119. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  120. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  121. package/dist/components/ModalPageHeader/ModalPageHeader.js +5 -2
  122. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  123. package/dist/components/ModalRoot/ModalRoot.js +6 -8
  124. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  125. package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  126. package/dist/components/PullToRefresh/PullToRefresh.js +22 -7
  127. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  128. package/dist/components/Typography/Caption/Caption.d.ts +2 -0
  129. package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
  130. package/dist/components/Typography/Caption/Caption.js +2 -0
  131. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  132. package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
  133. package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  134. package/dist/components/Typography/Footnote/Footnote.js +2 -0
  135. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  136. package/dist/components/Typography/Headline/Headline.d.ts +2 -0
  137. package/dist/components/Typography/Headline/Headline.d.ts.map +1 -1
  138. package/dist/components/Typography/Headline/Headline.js +2 -0
  139. package/dist/components/Typography/Headline/Headline.js.map +1 -1
  140. package/dist/components/Typography/Paragraph/Paragraph.d.ts +2 -0
  141. package/dist/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
  142. package/dist/components/Typography/Paragraph/Paragraph.js +2 -0
  143. package/dist/components/Typography/Paragraph/Paragraph.js.map +1 -1
  144. package/dist/components/Typography/Subhead/Subhead.d.ts +2 -0
  145. package/dist/components/Typography/Subhead/Subhead.d.ts.map +1 -1
  146. package/dist/components/Typography/Subhead/Subhead.js +2 -0
  147. package/dist/components/Typography/Subhead/Subhead.js.map +1 -1
  148. package/dist/components/Typography/Text/Text.d.ts +2 -0
  149. package/dist/components/Typography/Text/Text.d.ts.map +1 -1
  150. package/dist/components/Typography/Text/Text.js +2 -0
  151. package/dist/components/Typography/Text/Text.js.map +1 -1
  152. package/dist/components/Typography/Title/Title.d.ts +2 -0
  153. package/dist/components/Typography/Title/Title.d.ts.map +1 -1
  154. package/dist/components/Typography/Title/Title.js +2 -0
  155. package/dist/components/Typography/Title/Title.js.map +1 -1
  156. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  157. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  158. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
  159. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  160. package/dist/components.css +6 -6
  161. package/dist/components.css.map +1 -1
  162. package/dist/components.js.tmp +3783 -2492
  163. package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -1
  164. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  165. package/dist/cssm/components/Alert/Alert.d.ts +3 -3
  166. package/dist/cssm/components/Alert/Alert.d.ts.map +1 -1
  167. package/dist/cssm/components/Alert/Alert.js +3 -2
  168. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  169. package/dist/cssm/components/Alert/Alert.module.css +5 -0
  170. package/dist/cssm/components/Button/Button.module.css +3 -1
  171. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +1 -1
  172. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  173. package/dist/cssm/components/CalendarRange/CalendarRange.js +1 -1
  174. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  175. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -1
  176. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  177. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  178. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  179. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +4 -2
  180. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  181. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -1
  182. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  183. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  184. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
  185. package/dist/cssm/components/FormLayout/FormLayout.d.ts +3 -3
  186. package/dist/cssm/components/FormLayout/FormLayout.d.ts.map +1 -1
  187. package/dist/cssm/components/FormLayout/FormLayout.js +4 -2
  188. package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
  189. package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
  190. package/dist/cssm/components/Gallery/Gallery.js +2 -7
  191. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  192. package/dist/cssm/components/Gallery/hooks.d.ts +2 -0
  193. package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -0
  194. package/dist/cssm/components/Gallery/hooks.js +39 -0
  195. package/dist/cssm/components/Gallery/hooks.js.map +1 -0
  196. package/dist/cssm/components/Header/Header.d.ts +3 -3
  197. package/dist/cssm/components/Header/Header.d.ts.map +1 -1
  198. package/dist/cssm/components/Header/Header.js +2 -3
  199. package/dist/cssm/components/Header/Header.js.map +1 -1
  200. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  201. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +4 -0
  202. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  203. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -4
  204. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  205. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  206. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -2
  207. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  208. package/dist/cssm/components/ModalRoot/ModalRoot.js +6 -8
  209. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  210. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +7 -1
  211. package/dist/cssm/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  212. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +22 -7
  213. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  214. package/dist/cssm/components/Snackbar/Snackbar.module.css +1 -1
  215. package/dist/cssm/components/Typography/Caption/Caption.d.ts +2 -0
  216. package/dist/cssm/components/Typography/Caption/Caption.d.ts.map +1 -1
  217. package/dist/cssm/components/Typography/Caption/Caption.js +2 -0
  218. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  219. package/dist/cssm/components/Typography/Footnote/Footnote.d.ts +2 -0
  220. package/dist/cssm/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  221. package/dist/cssm/components/Typography/Footnote/Footnote.js +2 -0
  222. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  223. package/dist/cssm/components/Typography/Headline/Headline.d.ts +2 -0
  224. package/dist/cssm/components/Typography/Headline/Headline.d.ts.map +1 -1
  225. package/dist/cssm/components/Typography/Headline/Headline.js +2 -0
  226. package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
  227. package/dist/cssm/components/Typography/Paragraph/Paragraph.d.ts +2 -0
  228. package/dist/cssm/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
  229. package/dist/cssm/components/Typography/Paragraph/Paragraph.js +2 -0
  230. package/dist/cssm/components/Typography/Paragraph/Paragraph.js.map +1 -1
  231. package/dist/cssm/components/Typography/Subhead/Subhead.d.ts +2 -0
  232. package/dist/cssm/components/Typography/Subhead/Subhead.d.ts.map +1 -1
  233. package/dist/cssm/components/Typography/Subhead/Subhead.js +2 -0
  234. package/dist/cssm/components/Typography/Subhead/Subhead.js.map +1 -1
  235. package/dist/cssm/components/Typography/Text/Text.d.ts +2 -0
  236. package/dist/cssm/components/Typography/Text/Text.d.ts.map +1 -1
  237. package/dist/cssm/components/Typography/Text/Text.js +2 -0
  238. package/dist/cssm/components/Typography/Text/Text.js.map +1 -1
  239. package/dist/cssm/components/Typography/Title/Title.d.ts +2 -0
  240. package/dist/cssm/components/Typography/Title/Title.d.ts.map +1 -1
  241. package/dist/cssm/components/Typography/Title/Title.js +2 -0
  242. package/dist/cssm/components/Typography/Title/Title.js.map +1 -1
  243. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  244. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  245. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js +4 -2
  246. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  247. package/dist/cssm/lib/floating/adapters.d.ts +1 -1
  248. package/dist/cssm/lib/floating/adapters.d.ts.map +1 -1
  249. package/dist/cssm/lib/floating/adapters.js +1 -1
  250. package/dist/cssm/lib/floating/adapters.js.map +1 -1
  251. package/dist/cssm/lib/floating/index.d.ts +1 -1
  252. package/dist/cssm/lib/floating/index.d.ts.map +1 -1
  253. package/dist/cssm/lib/floating/index.js +1 -1
  254. package/dist/cssm/lib/floating/index.js.map +1 -1
  255. package/dist/cssm/lib/floating/types.d.ts +2 -2
  256. package/dist/cssm/lib/floating/types.d.ts.map +1 -1
  257. package/dist/cssm/lib/floating/types.js.map +1 -1
  258. package/dist/lib/floating/adapters.d.ts +1 -1
  259. package/dist/lib/floating/adapters.d.ts.map +1 -1
  260. package/dist/lib/floating/adapters.js +1 -1
  261. package/dist/lib/floating/adapters.js.map +1 -1
  262. package/dist/lib/floating/index.d.ts +1 -1
  263. package/dist/lib/floating/index.d.ts.map +1 -1
  264. package/dist/lib/floating/index.js +1 -1
  265. package/dist/lib/floating/index.js.map +1 -1
  266. package/dist/lib/floating/types.d.ts +2 -2
  267. package/dist/lib/floating/types.d.ts.map +1 -1
  268. package/dist/lib/floating/types.js.map +1 -1
  269. package/dist/vkui.css +6 -6
  270. package/dist/vkui.css.map +1 -1
  271. package/dist/vkui.js.tmp +3783 -2492
  272. package/package.json +2 -2
  273. package/src/components/ActionSheet/ActionSheet.tsx +2 -2
  274. package/src/components/Alert/Alert.module.css +5 -0
  275. package/src/components/Alert/Alert.tsx +10 -3
  276. package/src/components/Button/Button.module.css +3 -1
  277. package/src/components/CalendarRange/CalendarRange.tsx +0 -1
  278. package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
  279. package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
  280. package/src/components/CustomSelect/CustomSelect.tsx +5 -1
  281. package/src/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
  282. package/src/components/FormLayout/FormLayout.tsx +8 -3
  283. package/src/components/Gallery/Gallery.tsx +2 -6
  284. package/src/components/Gallery/hooks.ts +39 -0
  285. package/src/components/Header/Header.tsx +3 -3
  286. package/src/components/HorizontalScroll/HorizontalScroll.tsx +4 -0
  287. package/src/components/ModalPage/ModalPage.module.css +1 -4
  288. package/src/components/ModalPageHeader/ModalPageHeader.tsx +8 -4
  289. package/src/components/ModalRoot/ModalRoot.tsx +6 -5
  290. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +6 -1
  291. package/src/components/PullToRefresh/PullToRefresh.tsx +28 -9
  292. package/src/components/Snackbar/Snackbar.module.css +1 -1
  293. package/src/components/Typography/Caption/Caption.tsx +2 -0
  294. package/src/components/Typography/Footnote/Footnote.tsx +2 -0
  295. package/src/components/Typography/Headline/Headline.tsx +2 -0
  296. package/src/components/Typography/Paragraph/Paragraph.tsx +2 -0
  297. package/src/components/Typography/Subhead/Subhead.tsx +2 -0
  298. package/src/components/Typography/Text/Text.tsx +2 -0
  299. package/src/components/Typography/Title/Title.tsx +2 -0
  300. package/src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx +6 -2
  301. package/src/lib/floating/adapters.ts +1 -1
  302. package/src/lib/floating/index.ts +1 -1
  303. package/src/lib/floating/types.ts +2 -2
@@ -18,7 +18,7 @@ var getIsDaySelected = function(day, value) {
18
18
  /**
19
19
  * @see https://vkcom.github.io/VKUI/#/CalendarRange
20
20
  */ export var CalendarRange = function(_param) {
21
- var value = _param.value, onChange = _param.onChange, disablePast = _param.disablePast, disableFuture = _param.disableFuture, shouldDisableDate = _param.shouldDisableDate, onClose = _param.onClose, _param_weekStartsOn = _param.weekStartsOn, weekStartsOn = _param_weekStartsOn === void 0 ? 1 : _param_weekStartsOn, getRootRef = _param.getRootRef, disablePickers = _param.disablePickers, prevMonthAriaLabel = _param.prevMonthAriaLabel, nextMonthAriaLabel = _param.nextMonthAriaLabel, changeMonthAriaLabel = _param.changeMonthAriaLabel, changeYearAriaLabel = _param.changeYearAriaLabel, _param_changeDayAriaLabel = _param.changeDayAriaLabel, changeDayAriaLabel = _param_changeDayAriaLabel === void 0 ? "Изменить день" : _param_changeDayAriaLabel, prevMonthIcon = _param.prevMonthIcon, nextMonthIcon = _param.nextMonthIcon, listenDayChangesForUpdate = _param.listenDayChangesForUpdate, props = _object_without_properties(_param, [
21
+ var value = _param.value, onChange = _param.onChange, disablePast = _param.disablePast, disableFuture = _param.disableFuture, shouldDisableDate = _param.shouldDisableDate, onClose = _param.onClose, _param_weekStartsOn = _param.weekStartsOn, weekStartsOn = _param_weekStartsOn === void 0 ? 1 : _param_weekStartsOn, disablePickers = _param.disablePickers, prevMonthAriaLabel = _param.prevMonthAriaLabel, nextMonthAriaLabel = _param.nextMonthAriaLabel, changeMonthAriaLabel = _param.changeMonthAriaLabel, changeYearAriaLabel = _param.changeYearAriaLabel, _param_changeDayAriaLabel = _param.changeDayAriaLabel, changeDayAriaLabel = _param_changeDayAriaLabel === void 0 ? "Изменить день" : _param_changeDayAriaLabel, prevMonthIcon = _param.prevMonthIcon, nextMonthIcon = _param.nextMonthIcon, listenDayChangesForUpdate = _param.listenDayChangesForUpdate, props = _object_without_properties(_param, [
22
22
  "value",
23
23
  "onChange",
24
24
  "disablePast",
@@ -26,7 +26,6 @@ var getIsDaySelected = function(day, value) {
26
26
  "shouldDisableDate",
27
27
  "onClose",
28
28
  "weekStartsOn",
29
- "getRootRef",
30
29
  "disablePickers",
31
30
  "prevMonthAriaLabel",
32
31
  "nextMonthAriaLabel",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { isFirstDay, isLastDay, navigateDate, setTimeEqual } from '../../lib/calendar';\nimport {\n addMonths,\n endOfDay,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWithinInterval,\n startOfDay,\n} from '../../lib/date';\nimport { HTMLAttributesWithRootRef } from '../../types';\nimport { CalendarDays, CalendarDaysProps } from '../CalendarDays/CalendarDays';\nimport { CalendarHeader, CalendarHeaderProps } from '../CalendarHeader/CalendarHeader';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './CalendarRange.module.css';\n\nexport interface CalendarRangeProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthAriaLabel'\n | 'nextMonthAriaLabel'\n | 'changeMonthAriaLabel'\n | 'changeYearAriaLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n >,\n Pick<CalendarDaysProps, 'listenDayChangesForUpdate'> {\n value?: Array<Date | null>;\n disablePast?: boolean;\n disableFuture?: boolean;\n disablePickers?: boolean;\n changeDayAriaLabel?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n onChange?(value?: Array<Date | null>): void;\n shouldDisableDate?(value: Date): boolean;\n onClose?(): void;\n}\n\nconst getIsDaySelected = (day: Date, value?: Array<Date | null>) => {\n if (!value?.[0] || !value[1]) {\n return false;\n }\n\n return Boolean(isWithinInterval(day, startOfDay(value[0]), endOfDay(value[1])));\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CalendarRange\n */\nexport const CalendarRange = ({\n value,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onClose,\n weekStartsOn = 1,\n getRootRef,\n disablePickers,\n prevMonthAriaLabel,\n nextMonthAriaLabel,\n changeMonthAriaLabel,\n changeYearAriaLabel,\n changeDayAriaLabel = 'Изменить день',\n prevMonthIcon,\n nextMonthIcon,\n listenDayChangesForUpdate,\n ...props\n}: CalendarRangeProps) => {\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n resetSelectedDay,\n } = useCalendar({ value, disableFuture, disablePast, shouldDisableDate });\n const [hintedDate, setHintedDate] = React.useState<Array<Date | null>>();\n const secondViewDate = addMonths(viewDate, 1);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n event.preventDefault();\n }\n\n const newFocusedDay = navigateDate(focusedDay ?? value?.[1], event.key);\n\n if (\n newFocusedDay &&\n !isSameMonth(newFocusedDay, viewDate) &&\n !isSameMonth(newFocusedDay, addMonths(viewDate, 1))\n ) {\n setViewDate(newFocusedDay);\n }\n setFocusedDay(newFocusedDay);\n },\n [focusedDay, setFocusedDay, setViewDate, value, viewDate],\n );\n\n const getNewValue = React.useCallback(\n (date: Date) => {\n if (!value) {\n return [date, null];\n }\n\n const start = value[0];\n const end = value[1];\n if ((start && isSameDay(date, start)) || (end && isSameDay(date, end))) {\n return [setTimeEqual(date, start), setTimeEqual(date, end)];\n } else if (start && isBefore(date, start)) {\n return [setTimeEqual(date, start), end];\n } else if (start && isAfter(date, start)) {\n return [start, setTimeEqual(date, end)];\n }\n\n return value;\n },\n [value],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n onChange?.(getNewValue(date));\n setHintedDate(undefined);\n },\n [onChange, getNewValue],\n );\n\n const isDaySelected = React.useCallback((day: Date) => getIsDaySelected(day, value), [value]);\n\n const isDayActive = React.useCallback(\n (day: Date) =>\n Boolean((value?.[0] && isSameDay(day, value[0])) || (value?.[1] && isSameDay(day, value[1]))),\n [value],\n );\n\n const isDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (value?.[1] && isSameDay(day, value[1]))),\n [value],\n );\n\n const isHintedDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (hintedDate?.[1] && isSameDay(day, hintedDate[1]))),\n [hintedDate],\n );\n\n const isDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (value?.[0] && isSameDay(day, value[0]))),\n [value],\n );\n\n const isHintedDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (hintedDate?.[0] && isSameDay(day, hintedDate[0]))),\n [hintedDate],\n );\n\n const onDayEnter = React.useCallback(\n (date: Date) => setHintedDate(getNewValue(date)),\n [setHintedDate, getNewValue],\n );\n\n const onDayLeave = React.useCallback(() => setHintedDate(undefined), [setHintedDate]);\n\n const isDayHinted = React.useCallback(\n (day: Date) => getIsDaySelected(day, hintedDate),\n [hintedDate],\n );\n\n return (\n <RootComponent {...props} baseClassName={styles['CalendarRange']}>\n <div className={styles['CalendarRange__inner']}>\n <CalendarHeader\n viewDate={viewDate}\n onChange={setViewDate}\n nextMonth={false}\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers}\n className={styles['CalendarRange__header']}\n prevMonthAriaLabel={prevMonthAriaLabel}\n nextMonthAriaLabel={nextMonthAriaLabel}\n changeMonthAriaLabel={changeMonthAriaLabel}\n changeYearAriaLabel={changeYearAriaLabel}\n prevMonthIcon={prevMonthIcon}\n />\n <CalendarDays\n viewDate={viewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleKeyDown}\n isDayFocused={isDayFocused}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n aria-label={changeDayAriaLabel}\n />\n </div>\n <div className={styles['CalendarRange__inner']}>\n <CalendarHeader\n viewDate={secondViewDate}\n onChange={setViewDate}\n prevMonth={false}\n onNextMonth={setNextMonth}\n disablePickers={disablePickers}\n className={styles['CalendarRange__header']}\n prevMonthAriaLabel={prevMonthAriaLabel}\n nextMonthAriaLabel={nextMonthAriaLabel}\n changeMonthAriaLabel={changeMonthAriaLabel}\n changeYearAriaLabel={changeYearAriaLabel}\n nextMonthIcon={nextMonthIcon}\n />\n <CalendarDays\n viewDate={secondViewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n aria-label={changeDayAriaLabel}\n onKeyDown={handleKeyDown}\n isDayFocused={isDayFocused}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n tabIndex={0}\n onBlur={resetSelectedDay}\n />\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","useCalendar","isFirstDay","isLastDay","navigateDate","setTimeEqual","addMonths","endOfDay","isAfter","isBefore","isSameDay","isSameMonth","isWithinInterval","startOfDay","CalendarDays","CalendarHeader","RootComponent","getIsDaySelected","day","value","Boolean","CalendarRange","onChange","disablePast","disableFuture","shouldDisableDate","onClose","weekStartsOn","getRootRef","disablePickers","prevMonthAriaLabel","nextMonthAriaLabel","changeMonthAriaLabel","changeYearAriaLabel","changeDayAriaLabel","prevMonthIcon","nextMonthIcon","listenDayChangesForUpdate","props","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","resetSelectedDay","useState","hintedDate","setHintedDate","secondViewDate","handleKeyDown","useCallback","event","includes","key","preventDefault","newFocusedDay","getNewValue","date","start","end","onDayChange","undefined","isDaySelected","isDayActive","isDaySelectionEnd","dayOfWeek","isHintedDaySelectionEnd","isDaySelectionStart","isHintedDaySelectionStart","onDayEnter","onDayLeave","isDayHinted","baseClassName","div","className","nextMonth","onPrevMonth","onKeyDown","aria-label","prevMonth","onNextMonth","tabIndex","onBlur"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,UAAU,EAAEC,SAAS,EAAEC,YAAY,EAAEC,YAAY,QAAQ,qBAAqB;AACvF,SACEC,SAAS,EACTC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,WAAW,EACXC,gBAAgB,EAChBC,UAAU,QACL,iBAAiB;AAExB,SAASC,YAAY,QAA2B,+BAA+B;AAC/E,SAASC,cAAc,QAA6B,mCAAmC;AACvF,SAASC,aAAa,QAAQ,iCAAiC;AA0B/D,IAAMC,mBAAmB,SAACC,KAAWC;IACnC,IAAI,EAACA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAI,CAACA,KAAK,CAAC,EAAE,EAAE;QAC5B,OAAO;IACT;IAEA,OAAOC,QAAQR,iBAAiBM,KAAKL,WAAWM,KAAK,CAAC,EAAE,GAAGZ,SAASY,KAAK,CAAC,EAAE;AAC9E;AAEA;;CAEC,GACD,OAAO,IAAME,gBAAgB;QAC3BF,eAAAA,OACAG,kBAAAA,UACAC,qBAAAA,aACAC,uBAAAA,eACAC,2BAAAA,mBACAC,iBAAAA,sCACAC,cAAAA,gDAAe,yBACfC,oBAAAA,YACAC,wBAAAA,gBACAC,4BAAAA,oBACAC,4BAAAA,oBACAC,8BAAAA,sBACAC,6BAAAA,wDACAC,oBAAAA,4DAAqB,6CACrBC,uBAAAA,eACAC,uBAAAA,eACAC,mCAAAA,2BACGC;QAjBHnB;QACAG;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAUIpC,eAAAA,YAAY;QAAEkB,OAAAA;QAAOK,eAAAA;QAAeD,aAAAA;QAAaE,mBAAAA;IAAkB,IATrEc,WASEtC,aATFsC,UACAC,cAQEvC,aARFuC,aACAC,eAOExC,aAPFwC,cACAC,eAMEzC,aANFyC,cACAC,aAKE1C,aALF0C,YACAC,gBAIE3C,aAJF2C,eACAC,eAGE5C,aAHF4C,cACAC,gBAEE7C,aAFF6C,eACAC,mBACE9C,aADF8C;IAEF,IAAoC/C,mCAAAA,MAAMgD,QAAQ,QAA3CC,aAA6BjD,oBAAjBkD,gBAAiBlD;IACpC,IAAMmD,iBAAiB7C,UAAUiC,UAAU;IAE3C,IAAMa,gBAAgBpD,MAAMqD,WAAW,CACrC,SAACC;QACC,IAAI;YAAC;YAAW;YAAa;YAAa;SAAa,CAACC,QAAQ,CAACD,MAAME,GAAG,GAAG;YAC3EF,MAAMG,cAAc;QACtB;QAEA,IAAMC,gBAAgBtD,aAAauC,uBAAAA,wBAAAA,aAAcxB,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,EAAEmC,MAAME,GAAG;QAEtE,IACEE,iBACA,CAAC/C,YAAY+C,eAAenB,aAC5B,CAAC5B,YAAY+C,eAAepD,UAAUiC,UAAU,KAChD;YACAC,YAAYkB;QACd;QACAd,cAAcc;IAChB,GACA;QAACf;QAAYC;QAAeJ;QAAarB;QAAOoB;KAAS;IAG3D,IAAMoB,cAAc3D,MAAMqD,WAAW,CACnC,SAACO;QACC,IAAI,CAACzC,OAAO;YACV,OAAO;gBAACyC;gBAAM;aAAK;QACrB;QAEA,IAAMC,QAAQ1C,KAAK,CAAC,EAAE;QACtB,IAAM2C,MAAM3C,KAAK,CAAC,EAAE;QACpB,IAAI,AAAC0C,SAASnD,UAAUkD,MAAMC,UAAYC,OAAOpD,UAAUkD,MAAME,MAAO;YACtE,OAAO;gBAACzD,aAAauD,MAAMC;gBAAQxD,aAAauD,MAAME;aAAK;QAC7D,OAAO,IAAID,SAASpD,SAASmD,MAAMC,QAAQ;YACzC,OAAO;gBAACxD,aAAauD,MAAMC;gBAAQC;aAAI;QACzC,OAAO,IAAID,SAASrD,QAAQoD,MAAMC,QAAQ;YACxC,OAAO;gBAACA;gBAAOxD,aAAauD,MAAME;aAAK;QACzC;QAEA,OAAO3C;IACT,GACA;QAACA;KAAM;IAGT,IAAM4C,cAAc/D,MAAMqD,WAAW,CACnC,SAACO;QACCtC,qBAAAA,+BAAAA,SAAWqC,YAAYC;QACvBV,cAAcc;IAChB,GACA;QAAC1C;QAAUqC;KAAY;IAGzB,IAAMM,gBAAgBjE,MAAMqD,WAAW,CAAC,SAACnC;eAAcD,iBAAiBC,KAAKC;OAAQ;QAACA;KAAM;IAE5F,IAAM+C,cAAclE,MAAMqD,WAAW,CACnC,SAACnC;eACCE,QAAQ,CAACD,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIT,UAAUQ,KAAKC,KAAK,CAAC,EAAE,KAAOA,CAAAA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIT,UAAUQ,KAAKC,KAAK,CAAC,EAAE;OAC5F;QAACA;KAAM;IAGT,IAAMgD,oBAAoBnE,MAAMqD,WAAW,CACzC,SAACnC,KAAWkD;eACVhD,QAAQjB,UAAUe,KAAKkD,cAAejD,CAAAA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIT,UAAUQ,KAAKC,KAAK,CAAC,EAAE;OAC7E;QAACA;KAAM;IAGT,IAAMkD,0BAA0BrE,MAAMqD,WAAW,CAC/C,SAACnC,KAAWkD;eACVhD,QAAQjB,UAAUe,KAAKkD,cAAenB,CAAAA,uBAAAA,iCAAAA,UAAY,CAAC,EAAE,KAAIvC,UAAUQ,KAAK+B,UAAU,CAAC,EAAE;OACvF;QAACA;KAAW;IAGd,IAAMqB,sBAAsBtE,MAAMqD,WAAW,CAC3C,SAACnC,KAAWkD;eACVhD,QAAQlB,WAAWgB,KAAKkD,cAAejD,CAAAA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIT,UAAUQ,KAAKC,KAAK,CAAC,EAAE;OAC9E;QAACA;KAAM;IAGT,IAAMoD,4BAA4BvE,MAAMqD,WAAW,CACjD,SAACnC,KAAWkD;eACVhD,QAAQlB,WAAWgB,KAAKkD,cAAenB,CAAAA,uBAAAA,iCAAAA,UAAY,CAAC,EAAE,KAAIvC,UAAUQ,KAAK+B,UAAU,CAAC,EAAE;OACxF;QAACA;KAAW;IAGd,IAAMuB,aAAaxE,MAAMqD,WAAW,CAClC,SAACO;eAAeV,cAAcS,YAAYC;OAC1C;QAACV;QAAeS;KAAY;IAG9B,IAAMc,aAAazE,MAAMqD,WAAW,CAAC;eAAMH,cAAcc;OAAY;QAACd;KAAc;IAEpF,IAAMwB,cAAc1E,MAAMqD,WAAW,CACnC,SAACnC;eAAcD,iBAAiBC,KAAK+B;OACrC;QAACA;KAAW;IAGd,qBACE,oBAACjC,uDAAkBsB;QAAOqC,aAAa;sBACrC,oBAACC;QAAIC,SAAS;qBACZ,oBAAC9D;QACCwB,UAAUA;QACVjB,UAAUkB;QACVsC,WAAW;QACXC,aAAatC;QACbZ,gBAAgBA;QAChBgD,SAAS;QACT/C,oBAAoBA;QACpBC,oBAAoBA;QACpBC,sBAAsBA;QACtBC,qBAAqBA;QACrBE,eAAeA;sBAEjB,oBAACrB;QACCyB,UAAUA;QACVpB,OAAOA;QACPQ,cAAcA;QACdqD,WAAW5B;QACXP,cAAcA;QACdkB,aAAaA;QACbE,eAAeA;QACfC,aAAaA;QACbC,mBAAmBA;QACnBG,qBAAqBA;QACrBI,aAAaA;QACbF,YAAYA;QACZC,YAAYA;QACZJ,yBAAyBA;QACzBE,2BAA2BA;QAC3BzB,eAAeA;QACfT,2BAA2BA;QAC3B4C,cAAY/C;uBAGhB,oBAAC0C;QAAIC,SAAS;qBACZ,oBAAC9D;QACCwB,UAAUY;QACV7B,UAAUkB;QACV0C,WAAW;QACXC,aAAazC;QACbb,gBAAgBA;QAChBgD,SAAS;QACT/C,oBAAoBA;QACpBC,oBAAoBA;QACpBC,sBAAsBA;QACtBC,qBAAqBA;QACrBG,eAAeA;sBAEjB,oBAACtB;QACCyB,UAAUY;QACVhC,OAAOA;QACPQ,cAAcA;QACdsD,cAAY/C;QACZ8C,WAAW5B;QACXP,cAAcA;QACdkB,aAAaA;QACbE,eAAeA;QACfC,aAAaA;QACbC,mBAAmBA;QACnBG,qBAAqBA;QACrBI,aAAaA;QACbF,YAAYA;QACZC,YAAYA;QACZJ,yBAAyBA;QACzBE,2BAA2BA;QAC3BzB,eAAeA;QACfT,2BAA2BA;QAC3B+C,UAAU;QACVC,QAAQtC;;AAKlB,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { isFirstDay, isLastDay, navigateDate, setTimeEqual } from '../../lib/calendar';\nimport {\n addMonths,\n endOfDay,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWithinInterval,\n startOfDay,\n} from '../../lib/date';\nimport { HTMLAttributesWithRootRef } from '../../types';\nimport { CalendarDays, CalendarDaysProps } from '../CalendarDays/CalendarDays';\nimport { CalendarHeader, CalendarHeaderProps } from '../CalendarHeader/CalendarHeader';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './CalendarRange.module.css';\n\nexport interface CalendarRangeProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthAriaLabel'\n | 'nextMonthAriaLabel'\n | 'changeMonthAriaLabel'\n | 'changeYearAriaLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n >,\n Pick<CalendarDaysProps, 'listenDayChangesForUpdate'> {\n value?: Array<Date | null>;\n disablePast?: boolean;\n disableFuture?: boolean;\n disablePickers?: boolean;\n changeDayAriaLabel?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n onChange?(value?: Array<Date | null>): void;\n shouldDisableDate?(value: Date): boolean;\n onClose?(): void;\n}\n\nconst getIsDaySelected = (day: Date, value?: Array<Date | null>) => {\n if (!value?.[0] || !value[1]) {\n return false;\n }\n\n return Boolean(isWithinInterval(day, startOfDay(value[0]), endOfDay(value[1])));\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CalendarRange\n */\nexport const CalendarRange = ({\n value,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onClose,\n weekStartsOn = 1,\n disablePickers,\n prevMonthAriaLabel,\n nextMonthAriaLabel,\n changeMonthAriaLabel,\n changeYearAriaLabel,\n changeDayAriaLabel = 'Изменить день',\n prevMonthIcon,\n nextMonthIcon,\n listenDayChangesForUpdate,\n ...props\n}: CalendarRangeProps) => {\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n resetSelectedDay,\n } = useCalendar({ value, disableFuture, disablePast, shouldDisableDate });\n const [hintedDate, setHintedDate] = React.useState<Array<Date | null>>();\n const secondViewDate = addMonths(viewDate, 1);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n event.preventDefault();\n }\n\n const newFocusedDay = navigateDate(focusedDay ?? value?.[1], event.key);\n\n if (\n newFocusedDay &&\n !isSameMonth(newFocusedDay, viewDate) &&\n !isSameMonth(newFocusedDay, addMonths(viewDate, 1))\n ) {\n setViewDate(newFocusedDay);\n }\n setFocusedDay(newFocusedDay);\n },\n [focusedDay, setFocusedDay, setViewDate, value, viewDate],\n );\n\n const getNewValue = React.useCallback(\n (date: Date) => {\n if (!value) {\n return [date, null];\n }\n\n const start = value[0];\n const end = value[1];\n if ((start && isSameDay(date, start)) || (end && isSameDay(date, end))) {\n return [setTimeEqual(date, start), setTimeEqual(date, end)];\n } else if (start && isBefore(date, start)) {\n return [setTimeEqual(date, start), end];\n } else if (start && isAfter(date, start)) {\n return [start, setTimeEqual(date, end)];\n }\n\n return value;\n },\n [value],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n onChange?.(getNewValue(date));\n setHintedDate(undefined);\n },\n [onChange, getNewValue],\n );\n\n const isDaySelected = React.useCallback((day: Date) => getIsDaySelected(day, value), [value]);\n\n const isDayActive = React.useCallback(\n (day: Date) =>\n Boolean((value?.[0] && isSameDay(day, value[0])) || (value?.[1] && isSameDay(day, value[1]))),\n [value],\n );\n\n const isDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (value?.[1] && isSameDay(day, value[1]))),\n [value],\n );\n\n const isHintedDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (hintedDate?.[1] && isSameDay(day, hintedDate[1]))),\n [hintedDate],\n );\n\n const isDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (value?.[0] && isSameDay(day, value[0]))),\n [value],\n );\n\n const isHintedDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (hintedDate?.[0] && isSameDay(day, hintedDate[0]))),\n [hintedDate],\n );\n\n const onDayEnter = React.useCallback(\n (date: Date) => setHintedDate(getNewValue(date)),\n [setHintedDate, getNewValue],\n );\n\n const onDayLeave = React.useCallback(() => setHintedDate(undefined), [setHintedDate]);\n\n const isDayHinted = React.useCallback(\n (day: Date) => getIsDaySelected(day, hintedDate),\n [hintedDate],\n );\n\n return (\n <RootComponent {...props} baseClassName={styles['CalendarRange']}>\n <div className={styles['CalendarRange__inner']}>\n <CalendarHeader\n viewDate={viewDate}\n onChange={setViewDate}\n nextMonth={false}\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers}\n className={styles['CalendarRange__header']}\n prevMonthAriaLabel={prevMonthAriaLabel}\n nextMonthAriaLabel={nextMonthAriaLabel}\n changeMonthAriaLabel={changeMonthAriaLabel}\n changeYearAriaLabel={changeYearAriaLabel}\n prevMonthIcon={prevMonthIcon}\n />\n <CalendarDays\n viewDate={viewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleKeyDown}\n isDayFocused={isDayFocused}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n aria-label={changeDayAriaLabel}\n />\n </div>\n <div className={styles['CalendarRange__inner']}>\n <CalendarHeader\n viewDate={secondViewDate}\n onChange={setViewDate}\n prevMonth={false}\n onNextMonth={setNextMonth}\n disablePickers={disablePickers}\n className={styles['CalendarRange__header']}\n prevMonthAriaLabel={prevMonthAriaLabel}\n nextMonthAriaLabel={nextMonthAriaLabel}\n changeMonthAriaLabel={changeMonthAriaLabel}\n changeYearAriaLabel={changeYearAriaLabel}\n nextMonthIcon={nextMonthIcon}\n />\n <CalendarDays\n viewDate={secondViewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n aria-label={changeDayAriaLabel}\n onKeyDown={handleKeyDown}\n isDayFocused={isDayFocused}\n onDayChange={onDayChange}\n isDaySelected={isDaySelected}\n isDayActive={isDayActive}\n isDaySelectionEnd={isDaySelectionEnd}\n isDaySelectionStart={isDaySelectionStart}\n isDayHinted={isDayHinted}\n onDayEnter={onDayEnter}\n onDayLeave={onDayLeave}\n isHintedDaySelectionEnd={isHintedDaySelectionEnd}\n isHintedDaySelectionStart={isHintedDaySelectionStart}\n isDayDisabled={isDayDisabled}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n tabIndex={0}\n onBlur={resetSelectedDay}\n />\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","useCalendar","isFirstDay","isLastDay","navigateDate","setTimeEqual","addMonths","endOfDay","isAfter","isBefore","isSameDay","isSameMonth","isWithinInterval","startOfDay","CalendarDays","CalendarHeader","RootComponent","getIsDaySelected","day","value","Boolean","CalendarRange","onChange","disablePast","disableFuture","shouldDisableDate","onClose","weekStartsOn","disablePickers","prevMonthAriaLabel","nextMonthAriaLabel","changeMonthAriaLabel","changeYearAriaLabel","changeDayAriaLabel","prevMonthIcon","nextMonthIcon","listenDayChangesForUpdate","props","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","resetSelectedDay","useState","hintedDate","setHintedDate","secondViewDate","handleKeyDown","useCallback","event","includes","key","preventDefault","newFocusedDay","getNewValue","date","start","end","onDayChange","undefined","isDaySelected","isDayActive","isDaySelectionEnd","dayOfWeek","isHintedDaySelectionEnd","isDaySelectionStart","isHintedDaySelectionStart","onDayEnter","onDayLeave","isDayHinted","baseClassName","div","className","nextMonth","onPrevMonth","onKeyDown","aria-label","prevMonth","onNextMonth","tabIndex","onBlur"],"mappings":"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"}
@@ -72,7 +72,7 @@ var chipsSelectDefaultProps = _object_spread_props(_object_spread({}, chipsInput
72
72
  var document = useDOM().document;
73
73
  var _React_useState = _sliced_to_array(React.useState(undefined), 2), popperPlacement = _React_useState[0], setPopperPlacement = _React_useState[1];
74
74
  var scrollBoxRef = React.useRef(null);
75
- var rootRef = useExternRef(getRef);
75
+ var rootRef = useExternRef(getRootRef);
76
76
  var _useChipsSelect = useChipsSelect(propsWithDefault), fieldValue = _useChipsSelect.fieldValue, _useChipsSelect_selectedOptions = _useChipsSelect.selectedOptions, selectedOptions = _useChipsSelect_selectedOptions === void 0 ? [] : _useChipsSelect_selectedOptions, opened = _useChipsSelect.opened, setOpened = _useChipsSelect.setOpened, addOptionFromInput = _useChipsSelect.addOptionFromInput, filteredOptions = _useChipsSelect.filteredOptions, addOption = _useChipsSelect.addOption, handleInputChange = _useChipsSelect.handleInputChange, clearInput = _useChipsSelect.clearInput, focusedOption = _useChipsSelect.focusedOption, setFocusedOption = _useChipsSelect.setFocusedOption, focusedOptionIndex = _useChipsSelect.focusedOptionIndex, setFocusedOptionIndex = _useChipsSelect.setFocusedOptionIndex;
77
77
  var showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);
78
78
  var handleFocus = function(e) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useChipsSelect } from '../../hooks/useChipsSelect';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipOption, ChipValue, RenderChip } from '../Chip/Chip';\nimport { ChipsInputProps } from '../ChipsInput/ChipsInput';\nimport { ChipsInputBase, chipsInputDefaultProps } from '../ChipsInputBase/ChipsInputBase';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './ChipsSelect.module.css';\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, 'after'> {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<ChipsInputProps<Option>, 'getOptionLabel'>['getOptionLabel'],\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Добавляет значение в список на событие `onBlur` (использовать вместе с `creatable`)\n */\n addOnBlur?: boolean;\n}\n\ntype FocusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: FocusActionType = 'next';\nconst FOCUS_ACTION_PREV: FocusActionType = 'prev';\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(props: ChipsSelectProps<Option>) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onBlur,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n icon,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement | undefined>(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue,\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(null);\n onFocus!(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur!(e);\n\n // Не добавляем значение, если его нужно выбрать строго из списка\n if (!e.defaultPrevented && !creatable) {\n e.preventDefault();\n }\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const isClickOutsideFormField = !rootRef.current?.contains(e.target as Node);\n const isClickOutsideDropdown = !scrollBoxRef.current?.contains(e.target as Node);\n\n if (isClickOutsideFormField && isClickOutsideDropdown) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\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 = (index: number, oldIndex: number | null) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = nextIndex === null ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n if (focusedOptionIndex != null) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option> | undefined) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (e: React.MouseEvent | undefined, value: ChipValue | undefined) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes('top');\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement],\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <>\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNames(\n styles['ChipsSelect'],\n opened &&\n (isPopperDirectionTop\n ? styles['ChipsSelect--pop-up']\n : styles['ChipsSelect--pop-down']),\n className,\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles['ChipsSelect__dropdown']}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO [>=6]: add label customization\n aria-label={opened ? 'Скрыть' : 'Развернуть'}\n onClick={toggleOpened}\n >\n {icon ?? <DropdownIcon className={styles['ChipsSelect__icon']} opened={opened} />}\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n </FormField>\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles['ChipsSelect__empty']}>{emptyText}</Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption && getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue!(selectedOption) === getOptionValue!(option);\n });\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["React","classNames","noop","useChipsSelect","useExternRef","useGlobalEventListener","useDOM","defaultFilterFn","ChipsInputBase","chipsInputDefaultProps","CustomSelectDropdown","CustomSelectOption","DropdownIcon","FormField","IconButton","Footnote","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","emptyText","creatableText","onChangeStart","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onBlur","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","icon","fixDropdownWidth","forceDropdownPortal","restProps","document","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleBlur","defaultPrevented","preventDefault","handleClickOutside","isClickOutsideFormField","current","contains","target","isClickOutsideDropdown","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","option","includes","useEffect","renderChipWrapper","renderChipProps","onRemoveWrapper","value","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","toggleOpened","prevOpened","role","aria-disabled","aria-readonly","readOnly","after","activeMode","hoverMode","aria-label","onClick","onInputChange","targetRef","onMouseLeave","sameWidth","forcePortal","hovered","onMouseDown","onMouseEnter","map","label","selected","find","selectedOption","Fragment","children"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useChipsSelect } from '../../hooks/useChipsSelect';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipOption, ChipValue, RenderChip } from '../Chip/Chip';\nimport { ChipsInputProps } from '../ChipsInput/ChipsInput';\nimport { ChipsInputBase, chipsInputDefaultProps } from '../ChipsInputBase/ChipsInputBase';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport styles from './ChipsSelect.module.css';\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, 'after'> {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<ChipsInputProps<Option>, 'getOptionLabel'>['getOptionLabel'],\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Добавляет значение в список на событие `onBlur` (использовать вместе с `creatable`)\n */\n addOnBlur?: boolean;\n}\n\ntype FocusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: FocusActionType = 'next';\nconst FOCUS_ACTION_PREV: FocusActionType = 'prev';\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(props: ChipsSelectProps<Option>) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onBlur,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n icon,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement | undefined>(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRootRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue,\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(null);\n onFocus!(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n onBlur!(e);\n\n // Не добавляем значение, если его нужно выбрать строго из списка\n if (!e.defaultPrevented && !creatable) {\n e.preventDefault();\n }\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const isClickOutsideFormField = !rootRef.current?.contains(e.target as Node);\n const isClickOutsideDropdown = !scrollBoxRef.current?.contains(e.target as Node);\n\n if (isClickOutsideFormField && isClickOutsideDropdown) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\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 = (index: number, oldIndex: number | null) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = nextIndex === null ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n if (focusedOptionIndex != null) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option> | undefined) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (e: React.MouseEvent | undefined, value: ChipValue | undefined) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes('top');\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement],\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <>\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNames(\n styles['ChipsSelect'],\n opened &&\n (isPopperDirectionTop\n ? styles['ChipsSelect--pop-up']\n : styles['ChipsSelect--pop-down']),\n className,\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles['ChipsSelect__dropdown']}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO [>=6]: add label customization\n aria-label={opened ? 'Скрыть' : 'Развернуть'}\n onClick={toggleOpened}\n >\n {icon ?? <DropdownIcon className={styles['ChipsSelect__icon']} opened={opened} />}\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n </FormField>\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles['ChipsSelect__empty']}>{emptyText}</Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption && getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue!(selectedOption) === getOptionValue!(option);\n });\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["React","classNames","noop","useChipsSelect","useExternRef","useGlobalEventListener","useDOM","defaultFilterFn","ChipsInputBase","chipsInputDefaultProps","CustomSelectDropdown","CustomSelectOption","DropdownIcon","FormField","IconButton","Footnote","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","emptyText","creatableText","onChangeStart","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onBlur","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","icon","fixDropdownWidth","forceDropdownPortal","restProps","document","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleBlur","defaultPrevented","preventDefault","handleClickOutside","isClickOutsideFormField","current","contains","target","isClickOutsideDropdown","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","option","includes","useEffect","renderChipWrapper","renderChipProps","onRemoveWrapper","value","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","toggleOpened","prevOpened","role","aria-disabled","aria-readonly","readOnly","after","activeMode","hoverMode","aria-label","onClick","onInputChange","targetRef","onMouseLeave","sameWidth","forcePortal","hovered","onMouseDown","onMouseEnter","map","label","selected","find","selectedOption","Fragment","children"],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { DOMProps } from '../../lib/dom';
3
+ import type { HasRootRef } from '../../types';
3
4
  import { TrackerOptionsProps } from './useTrackerVisibility';
4
- export interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {
5
+ export interface CustomScrollViewProps extends React.AllHTMLAttributes<HTMLDivElement>, DOMProps, // TODO [>=6]: remove
6
+ HasRootRef<HTMLDivElement>, TrackerOptionsProps {
5
7
  windowResize?: boolean;
6
8
  boxRef?: React.Ref<HTMLDivElement>;
7
9
  className?: HTMLDivElement['className'];
8
10
  onScroll?(event: React.UIEvent<HTMLDivElement>): void;
9
11
  children: React.ReactNode;
10
12
  }
11
- export declare const CustomScrollView: ({ className, children, boxRef: externalBoxRef, windowResize, autoHideScrollbar, autoHideScrollbarDelay, onScroll, }: CustomScrollViewProps) => React.JSX.Element;
13
+ export declare const CustomScrollView: ({ className, children, boxRef: externalBoxRef, windowResize, autoHideScrollbar, autoHideScrollbarDelay, onScroll, getRootRef, ...restProps }: CustomScrollViewProps) => React.JSX.Element;
12
14
  //# sourceMappingURL=CustomScrollView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomScrollView.d.ts","sourceRoot":"","sources":["../../../src/components/CustomScrollView/CustomScrollView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,mBAAmB,EAAwB,MAAM,wBAAwB,CAAC;AAGnF,MAAM,WAAW,qBAAsB,SAAQ,QAAQ,EAAE,mBAAmB;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACtD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,wHAQ1B,qBAAqB,sBAyKvB,CAAC"}
1
+ {"version":3,"file":"CustomScrollView.d.ts","sourceRoot":"","sources":["../../../src/components/CustomScrollView/CustomScrollView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,QAAQ,EAAU,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAwB,MAAM,wBAAwB,CAAC;AAGnF,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAC7C,QAAQ,EAAE,qBAAqB;AAC/B,UAAU,CAAC,cAAc,CAAC,EAC1B,mBAAmB;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACtD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,iJAU1B,qBAAqB,sBA6KvB,CAAC"}
@@ -1,3 +1,5 @@
1
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
+ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
1
3
  import * as React from "react";
2
4
  import { classNames } from "@vkontakte/vkjs";
3
5
  import { useEventListener } from "../../hooks/useEventListener";
@@ -6,8 +8,7 @@ import { useDOM } from "../../lib/dom";
6
8
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
7
9
  import { stopPropagation } from "../../lib/utils";
8
10
  import { useTrackerVisibility } from "./useTrackerVisibility";
9
- export var CustomScrollView = function(param) {
10
- var className = param.className, children = param.children, externalBoxRef = param.boxRef, windowResize = param.windowResize, _param_autoHideScrollbar = param.autoHideScrollbar, autoHideScrollbar = _param_autoHideScrollbar === void 0 ? false : _param_autoHideScrollbar, autoHideScrollbarDelay = param.autoHideScrollbarDelay, onScroll = param.onScroll;
11
+ export var CustomScrollView = function(_param) {
11
12
  var subscribe = function subscribe(el) {
12
13
  if (el) {
13
14
  listeners.forEach(function(l) {
@@ -20,6 +21,16 @@ export var CustomScrollView = function(param) {
20
21
  return l.remove();
21
22
  });
22
23
  };
24
+ var className = _param.className, children = _param.children, externalBoxRef = _param.boxRef, windowResize = _param.windowResize, _param_autoHideScrollbar = _param.autoHideScrollbar, autoHideScrollbar = _param_autoHideScrollbar === void 0 ? false : _param_autoHideScrollbar, autoHideScrollbarDelay = _param.autoHideScrollbarDelay, onScroll = _param.onScroll, getRootRef = _param.getRootRef, restProps = _object_without_properties(_param, [
25
+ "className",
26
+ "children",
27
+ "boxRef",
28
+ "windowResize",
29
+ "autoHideScrollbar",
30
+ "autoHideScrollbarDelay",
31
+ "onScroll",
32
+ "getRootRef"
33
+ ]);
23
34
  var _useDOM = useDOM(), document = _useDOM.document, window = _useDOM.window;
24
35
  var ratio = React.useRef(NaN);
25
36
  var lastTrackerTop = React.useRef(0);
@@ -128,9 +139,10 @@ export var CustomScrollView = function(param) {
128
139
  }
129
140
  subscribe(document);
130
141
  };
131
- return /*#__PURE__*/ React.createElement("div", {
132
- className: classNames("vkuiCustomScrollView", className)
133
- }, /*#__PURE__*/ React.createElement("div", {
142
+ return /*#__PURE__*/ React.createElement("div", _object_spread({
143
+ className: classNames("vkuiCustomScrollView", className),
144
+ ref: getRootRef
145
+ }, restProps), /*#__PURE__*/ React.createElement("div", {
134
146
  className: "vkuiCustomScrollView__box",
135
147
  tabIndex: -1,
136
148
  ref: boxRef,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { DOMProps, useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { stopPropagation } from '../../lib/utils';\nimport { TrackerOptionsProps, useTrackerVisibility } from './useTrackerVisibility';\nimport styles from './CustomScrollView.module.css';\n\nexport interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement['className'];\n onScroll?(event: React.UIEvent<HTMLDivElement>): void;\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n onScroll,\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = 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 transformProp = React.useRef('');\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[transformProp.current] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition((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 localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = 'none';\n } else {\n barY.current.style.display = '';\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener('resize', resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = '';\n if (style !== undefined) {\n if ('transform' in style) {\n prop = 'transform';\n } else if ('webkitTransform' in style) {\n prop = 'webkitTransform';\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\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 onMove = (e: MouseEvent) => {\n e.preventDefault();\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 {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = (event: React.UIEvent<HTMLDivElement>) => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n onScroll?.(event);\n };\n\n const listeners = [useEventListener('mousemove', onMove), useEventListener('mouseup', onUp)];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div className={classNames(styles['CustomScrollView'], className)}>\n <div className={styles['CustomScrollView__box']} tabIndex={-1} ref={boxRef} onScroll={scroll}>\n {children}\n </div>\n\n <div className={styles['CustomScrollView__barY']} ref={barY} onClick={stopPropagation}>\n <div\n className={classNames(\n styles['CustomScrollView__trackerY'],\n !trackerVisible && styles['CustomScrollView__trackerY--hidden'],\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n </div>\n );\n};\n"],"names":["React","classNames","useEventListener","useExternRef","useDOM","useIsomorphicLayoutEffect","stopPropagation","useTrackerVisibility","CustomScrollView","className","children","boxRef","externalBoxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","onScroll","subscribe","el","listeners","forEach","l","add","unsubscribe","remove","document","window","ratio","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","scroll","event","onDragStart","div","tabIndex","ref","onClick","onMouseEnter","onMouseLeave","onMouseDown"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { DOMProps, useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { stopPropagation } from '../../lib/utils';\nimport type { HasRootRef } from '../../types';\nimport { TrackerOptionsProps, useTrackerVisibility } from './useTrackerVisibility';\nimport styles from './CustomScrollView.module.css';\n\nexport interface CustomScrollViewProps\n extends React.AllHTMLAttributes<HTMLDivElement>,\n DOMProps, // TODO [>=6]: remove\n HasRootRef<HTMLDivElement>,\n TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement['className'];\n onScroll?(event: React.UIEvent<HTMLDivElement>): void;\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n onScroll,\n getRootRef,\n ...restProps\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = 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 transformProp = React.useRef('');\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[transformProp.current] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition((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 localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = 'none';\n } else {\n barY.current.style.display = '';\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener('resize', resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = '';\n if (style !== undefined) {\n if ('transform' in style) {\n prop = 'transform';\n } else if ('webkitTransform' in style) {\n prop = 'webkitTransform';\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\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 onMove = (e: MouseEvent) => {\n e.preventDefault();\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 {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = (event: React.UIEvent<HTMLDivElement>) => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n onScroll?.(event);\n };\n\n const listeners = [useEventListener('mousemove', onMove), useEventListener('mouseup', onUp)];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div\n className={classNames(styles['CustomScrollView'], className)}\n ref={getRootRef}\n {...restProps}\n >\n <div className={styles['CustomScrollView__box']} tabIndex={-1} ref={boxRef} onScroll={scroll}>\n {children}\n </div>\n\n <div className={styles['CustomScrollView__barY']} ref={barY} onClick={stopPropagation}>\n <div\n className={classNames(\n styles['CustomScrollView__trackerY'],\n !trackerVisible && styles['CustomScrollView__trackerY--hidden'],\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n </div>\n );\n};\n"],"names":["React","classNames","useEventListener","useExternRef","useDOM","useIsomorphicLayoutEffect","stopPropagation","useTrackerVisibility","CustomScrollView","subscribe","el","listeners","forEach","l","add","unsubscribe","remove","className","children","boxRef","externalBoxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","onScroll","getRootRef","restProps","document","window","ratio","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","scroll","event","onDragStart","div","ref","tabIndex","onClick","onMouseEnter","onMouseLeave","onMouseDown"],"mappings":"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"}
@@ -12,6 +12,9 @@ export interface CustomSelectOptionInterface {
12
12
  disabled?: boolean;
13
13
  [index: string]: any;
14
14
  }
15
+ interface CustomSelectRenderOption extends CustomSelectOptionProps {
16
+ option: CustomSelectOptionInterface;
17
+ }
15
18
  export interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {
16
19
  /**
17
20
  * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск
@@ -41,7 +44,7 @@ export interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerO
41
44
  * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе селект не будет знать об актуальном состоянии
42
45
  * опции.
43
46
  */
44
- renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;
47
+ renderOption?: (props: CustomSelectRenderOption) => React.ReactNode;
45
48
  /**
46
49
  * Рендер-проп для кастомного рендера содержимого дропдауна.
47
50
  * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,EAEL,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAA2B,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAiFlG,KAAK,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB,EAAE,cAAc,EAAE,mBAAmB;IACzF;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,CACd,CAAC,EAAE,KAAK,CAAC,WAAW,EACpB,OAAO,EAAE,2BAA2B,EAAE,KACnC,IAAI,GAAG,2BAA2B,EAAE,CAAC;IAC1C,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACvC;;OAEG;IACH,QAAQ,CAAC,EACL,KAAK,GACL,CAAC,CACC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,2BAA2B,EACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,2BAA2B,CAAC,KAAK,MAAM,KACtE,OAAO,CAAC,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,KAAK,CAAC,SAAS,CAAC;IACnE;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,EAChB,sBAAsB,GACvB,EAAE;QACD,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC;KACzC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;IAChE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,qBAsmB9C"}
1
+ {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,EAEL,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAA2B,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAiFlG,KAAK,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,UAAU,wBAAyB,SAAQ,uBAAuB;IAChE,MAAM,EAAE,2BAA2B,CAAC;CACrC;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB,EAAE,cAAc,EAAE,mBAAmB;IACzF;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,CACd,CAAC,EAAE,KAAK,CAAC,WAAW,EACpB,OAAO,EAAE,2BAA2B,EAAE,KACnC,IAAI,GAAG,2BAA2B,EAAE,CAAC;IAC1C,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACvC;;OAEG;IACH,QAAQ,CAAC,EACL,KAAK,GACL,CAAC,CACC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,2BAA2B,EACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,2BAA2B,CAAC,KAAK,MAAM,KACtE,OAAO,CAAC,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,KAAK,CAAC,SAAS,CAAC;IACpE;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,EAChB,sBAAsB,GACvB,EAAE;QACD,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC;KACzC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;IAChE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,qBAsmB9C"}