@vkontakte/vkui 7.5.3 → 7.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/dist/components/Calendar/Calendar.js +6 -6
  2. package/dist/components/Calendar/Calendar.js.map +1 -1
  3. package/dist/components/CalendarDays/CalendarDays.js +3 -3
  4. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  5. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  6. package/dist/components/CalendarRange/CalendarRange.js +16 -14
  7. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  8. package/dist/components/CalendarRange/utils.d.ts.map +1 -1
  9. package/dist/components/CalendarRange/utils.js +6 -5
  10. package/dist/components/CalendarRange/utils.js.map +1 -1
  11. package/dist/components/Cell/Cell.d.ts.map +1 -1
  12. package/dist/components/Cell/Cell.js +6 -3
  13. package/dist/components/Cell/Cell.js.map +1 -1
  14. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts +5 -3
  15. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts.map +1 -1
  16. package/dist/components/Checkbox/Checkbox.d.ts +4 -0
  17. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  18. package/dist/components/Checkbox/Checkbox.js +4 -2
  19. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  20. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
  21. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
  22. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +6 -3
  23. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  24. package/dist/components/ChipsInputBase/Chip/Chip.d.ts +41 -2
  25. package/dist/components/ChipsInputBase/Chip/Chip.d.ts.map +1 -1
  26. package/dist/components/ChipsInputBase/Chip/Chip.js +7 -2
  27. package/dist/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  28. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  29. package/dist/components/ChipsInputBase/ChipsInputBase.js +21 -1
  30. package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  31. package/dist/components/ChipsInputBase/types.d.ts +2 -35
  32. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  33. package/dist/components/ChipsInputBase/types.js.map +1 -1
  34. package/dist/components/ChipsSelect/ChipsSelect.d.ts.map +1 -1
  35. package/dist/components/ChipsSelect/ChipsSelect.js +2 -4
  36. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  37. package/dist/components/ContentBadge/ContentBadge.d.ts +1 -1
  38. package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
  39. package/dist/components/ContentBadge/ContentBadge.js +15 -9
  40. package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
  41. package/dist/components/ContentCard/ContentCard.d.ts +1 -1
  42. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  43. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  44. package/dist/components/CustomSelect/CustomSelect.d.ts +16 -27
  45. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  46. package/dist/components/CustomSelect/CustomSelect.js +161 -428
  47. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  48. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +3 -1
  49. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
  50. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +25 -5
  51. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  52. package/dist/components/CustomSelect/helpers.d.ts +12 -0
  53. package/dist/components/CustomSelect/helpers.d.ts.map +1 -0
  54. package/dist/components/CustomSelect/helpers.js +63 -0
  55. package/dist/components/CustomSelect/helpers.js.map +1 -0
  56. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts +11 -0
  57. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts.map +1 -0
  58. package/dist/components/CustomSelect/hooks/useAfterItems.js +57 -0
  59. package/dist/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  60. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts +13 -0
  61. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts.map +1 -0
  62. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  63. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  64. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts +20 -0
  65. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts.map +1 -0
  66. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  67. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  68. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts +13 -0
  69. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts.map +1 -0
  70. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  71. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  72. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts +15 -0
  73. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts.map +1 -0
  74. package/dist/components/CustomSelect/hooks/useInputValueController.js +43 -0
  75. package/dist/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  76. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts +9 -0
  77. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts.map +1 -0
  78. package/dist/components/CustomSelect/hooks/useScrollListController.js +37 -0
  79. package/dist/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  80. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts +18 -0
  81. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts.map +1 -0
  82. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  83. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  84. package/dist/components/CustomSelect/types.d.ts +33 -0
  85. package/dist/components/CustomSelect/types.d.ts.map +1 -0
  86. package/dist/components/CustomSelect/types.js +3 -0
  87. package/dist/components/CustomSelect/types.js.map +1 -0
  88. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  89. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  90. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  91. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  92. package/dist/components/DateInput/DateInput.js +3 -2
  93. package/dist/components/DateInput/DateInput.js.map +1 -1
  94. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  95. package/dist/components/DateRangeInput/DateRangeInput.js +4 -4
  96. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  97. package/dist/components/ModalCard/ModalCard.d.ts +1 -1
  98. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  99. package/dist/components/ModalCard/ModalCard.js +4 -2
  100. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  101. package/dist/components/ModalCard/ModalCardInternal.d.ts +1 -1
  102. package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -1
  103. package/dist/components/ModalCard/ModalCardInternal.js +5 -3
  104. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  105. package/dist/components/ModalCard/types.d.ts +6 -0
  106. package/dist/components/ModalCard/types.d.ts.map +1 -1
  107. package/dist/components/ModalCard/types.js.map +1 -1
  108. package/dist/components/ModalOutlet/ModalOutlet.d.ts +2 -1
  109. package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -1
  110. package/dist/components/ModalOutlet/ModalOutlet.js +4 -3
  111. package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -1
  112. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  113. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  114. package/dist/components/ModalPage/ModalPage.js +3 -1
  115. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  116. package/dist/components/ModalPage/ModalPageInternal.d.ts +1 -1
  117. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  118. package/dist/components/ModalPage/ModalPageInternal.js +5 -3
  119. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  120. package/dist/components/ModalPage/types.d.ts +6 -0
  121. package/dist/components/ModalPage/types.d.ts.map +1 -1
  122. package/dist/components/ModalPage/types.js.map +1 -1
  123. package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
  124. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  125. package/dist/components/ModalRoot/ModalRoot.js +4 -2
  126. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  127. package/dist/components/ModalRoot/types.d.ts +4 -0
  128. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  129. package/dist/components/ModalRoot/types.js.map +1 -1
  130. package/dist/components/ModalRoot/useModalManager.d.ts +3 -1
  131. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  132. package/dist/components/ModalRoot/useModalManager.js +2 -1
  133. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  134. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts +2 -2
  135. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
  136. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -2
  137. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  138. package/dist/components/Popover/Popover.d.ts +1 -1
  139. package/dist/components/Popover/Popover.d.ts.map +1 -1
  140. package/dist/components/Popover/Popover.js.map +1 -1
  141. package/dist/components/Popover/usePopover.d.ts +1 -1
  142. package/dist/components/Popover/usePopover.d.ts.map +1 -1
  143. package/dist/components/Popover/usePopover.js +3 -1
  144. package/dist/components/Popover/usePopover.js.map +1 -1
  145. package/dist/components/Popper/Popper.d.ts +2 -2
  146. package/dist/components/Popper/Popper.d.ts.map +1 -1
  147. package/dist/components/Popper/Popper.js +3 -1
  148. package/dist/components/Popper/Popper.js.map +1 -1
  149. package/dist/components/Select/Select.d.ts +2 -1
  150. package/dist/components/Select/Select.d.ts.map +1 -1
  151. package/dist/components/Select/Select.js +5 -2
  152. package/dist/components/Select/Select.js.map +1 -1
  153. package/dist/components/SelectionControl/SelectionControl.d.ts +5 -1
  154. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  155. package/dist/components/SelectionControl/SelectionControl.js +22 -6
  156. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  157. package/dist/components/SelectionControl/SelectionControlContext.d.ts +7 -0
  158. package/dist/components/SelectionControl/SelectionControlContext.d.ts.map +1 -0
  159. package/dist/components/SelectionControl/SelectionControlContext.js +7 -0
  160. package/dist/components/SelectionControl/SelectionControlContext.js.map +1 -0
  161. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -1
  162. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  163. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  164. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  165. package/dist/components/SimpleCell/SimpleCell.js +29 -8
  166. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  167. package/dist/components/Skeleton/Skeleton.js +1 -1
  168. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  169. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  170. package/dist/components/Tabs/Tabs.js +19 -9
  171. package/dist/components/Tabs/Tabs.js.map +1 -1
  172. package/dist/components/Tabs/TabsController.d.ts +2 -2
  173. package/dist/components/Tabs/TabsController.d.ts.map +1 -1
  174. package/dist/components/Tabs/TabsController.js.map +1 -1
  175. package/dist/components/Tabs/TabsControllerContext.d.ts +5 -0
  176. package/dist/components/Tabs/TabsControllerContext.d.ts.map +1 -0
  177. package/dist/components/Tabs/TabsControllerContext.js +4 -0
  178. package/dist/components/Tabs/TabsControllerContext.js.map +1 -0
  179. package/dist/components/Tabs/TabsModeContext.d.ts +0 -2
  180. package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -1
  181. package/dist/components/Tabs/TabsModeContext.js +1 -2
  182. package/dist/components/Tabs/TabsModeContext.js.map +1 -1
  183. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  184. package/dist/components/TabsItem/TabsItem.js +3 -1
  185. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  186. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  187. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  188. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  189. package/dist/components/Tooltip/useTooltip.d.ts +1 -1
  190. package/dist/components/Tooltip/useTooltip.d.ts.map +1 -1
  191. package/dist/components/Tooltip/useTooltip.js +3 -1
  192. package/dist/components/Tooltip/useTooltip.js.map +1 -1
  193. package/dist/components/Typography/Caption/Caption.d.ts +2 -0
  194. package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
  195. package/dist/components/Typography/Caption/Caption.js +4 -1
  196. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  197. package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
  198. package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  199. package/dist/components/Typography/Footnote/Footnote.js +4 -1
  200. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  201. package/dist/components/Typography/Typography.d.ts +1 -0
  202. package/dist/components/Typography/Typography.d.ts.map +1 -1
  203. package/dist/components/Typography/Typography.js +7 -1
  204. package/dist/components/Typography/Typography.js.map +1 -1
  205. package/dist/components/View/View.d.ts.map +1 -1
  206. package/dist/components/View/View.js +2 -1
  207. package/dist/components/View/View.js.map +1 -1
  208. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  209. package/dist/components/View/ViewInfinite.js +2 -1
  210. package/dist/components/View/ViewInfinite.js.map +1 -1
  211. package/dist/components.css +1 -1
  212. package/dist/components.css.map +1 -1
  213. package/dist/cssm/components/Banner/Banner.module.css +1 -6
  214. package/dist/cssm/components/Calendar/Calendar.js +6 -6
  215. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  216. package/dist/cssm/components/CalendarDays/CalendarDays.js +3 -3
  217. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  218. package/dist/cssm/components/CalendarRange/CalendarRange.js +16 -14
  219. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  220. package/dist/cssm/components/CalendarRange/utils.js +6 -5
  221. package/dist/cssm/components/CalendarRange/utils.js.map +1 -1
  222. package/dist/cssm/components/Cell/Cell.js +3 -1
  223. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  224. package/dist/cssm/components/Checkbox/Checkbox.js +2 -1
  225. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  226. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +4 -2
  227. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  228. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +11 -2
  229. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js +6 -2
  230. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  231. package/dist/cssm/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  232. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +21 -1
  233. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  234. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  235. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -4
  236. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  237. package/dist/cssm/components/ContentBadge/ContentBadge.js +14 -8
  238. package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
  239. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  240. package/dist/cssm/components/CustomSelect/CustomSelect.js +154 -421
  241. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  242. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +22 -4
  243. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  244. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  245. package/dist/cssm/components/CustomSelect/helpers.js +62 -0
  246. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -0
  247. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js +58 -0
  248. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  249. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  250. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  251. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  252. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  253. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  254. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  255. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js +43 -0
  256. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  257. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js +37 -0
  258. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  259. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  260. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  261. package/dist/cssm/components/CustomSelect/types.js +3 -0
  262. package/dist/cssm/components/CustomSelect/types.js.map +1 -0
  263. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  264. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  265. package/dist/cssm/components/DateInput/DateInput.js +3 -2
  266. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  267. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -4
  268. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  269. package/dist/cssm/components/ModalCard/ModalCard.js +2 -1
  270. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  271. package/dist/cssm/components/ModalCard/ModalCardInternal.js +3 -2
  272. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  273. package/dist/cssm/components/ModalCard/types.js.map +1 -1
  274. package/dist/cssm/components/ModalOutlet/ModalOutlet.js +2 -2
  275. package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -1
  276. package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +4 -0
  277. package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +1 -1
  278. package/dist/cssm/components/ModalPage/ModalPage.js +2 -1
  279. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  280. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -0
  281. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  282. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  283. package/dist/cssm/components/ModalPage/types.js.map +1 -1
  284. package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -2
  285. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  286. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  287. package/dist/cssm/components/ModalRoot/useModalManager.js +2 -1
  288. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  289. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +3 -2
  290. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  291. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  292. package/dist/cssm/components/Popover/usePopover.js +2 -1
  293. package/dist/cssm/components/Popover/usePopover.js.map +1 -1
  294. package/dist/cssm/components/Popper/Popper.js +2 -1
  295. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  296. package/dist/cssm/components/Select/Select.js +1 -1
  297. package/dist/cssm/components/Select/Select.js.map +1 -1
  298. package/dist/cssm/components/SelectionControl/SelectionControl.js +16 -6
  299. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  300. package/dist/cssm/components/SelectionControl/SelectionControl.module.css +6 -3
  301. package/dist/cssm/components/SelectionControl/SelectionControlContext.js +7 -0
  302. package/dist/cssm/components/SelectionControl/SelectionControlContext.js.map +1 -0
  303. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  304. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  305. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  306. package/dist/cssm/components/SimpleCell/SimpleCell.js +29 -8
  307. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  308. package/dist/cssm/components/Skeleton/Skeleton.js +1 -1
  309. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  310. package/dist/cssm/components/Slider/SliderThumb/SliderThumb.module.css +2 -1
  311. package/dist/cssm/components/Tabs/Tabs.js +19 -9
  312. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  313. package/dist/cssm/components/Tabs/TabsController.js.map +1 -1
  314. package/dist/cssm/components/Tabs/TabsControllerContext.js +4 -0
  315. package/dist/cssm/components/Tabs/TabsControllerContext.js.map +1 -0
  316. package/dist/cssm/components/Tabs/TabsModeContext.js +1 -2
  317. package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -1
  318. package/dist/cssm/components/TabsItem/TabsItem.js +3 -1
  319. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  320. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  321. package/dist/cssm/components/Tooltip/useTooltip.js +2 -1
  322. package/dist/cssm/components/Tooltip/useTooltip.js.map +1 -1
  323. package/dist/cssm/components/Typography/Caption/Caption.js +4 -1
  324. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  325. package/dist/cssm/components/Typography/Footnote/Footnote.js +4 -1
  326. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  327. package/dist/cssm/components/Typography/Typography.js +7 -1
  328. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  329. package/dist/cssm/components/View/View.js +2 -1
  330. package/dist/cssm/components/View/View.js.map +1 -1
  331. package/dist/cssm/components/View/View.module.css +1 -1
  332. package/dist/cssm/components/View/ViewInfinite.js +2 -1
  333. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  334. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  335. package/dist/cssm/hooks/useCalendar.js +6 -4
  336. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  337. package/dist/cssm/hooks/useFloatingElement.js +3 -2
  338. package/dist/cssm/hooks/useFloatingElement.js.map +1 -1
  339. package/dist/cssm/hooks/useTodayDate.js +3 -2
  340. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  341. package/dist/cssm/index.js.map +1 -1
  342. package/dist/cssm/lib/accessibility.js +8 -0
  343. package/dist/cssm/lib/accessibility.js.map +1 -1
  344. package/dist/cssm/lib/calendar.js +9 -7
  345. package/dist/cssm/lib/calendar.js.map +1 -1
  346. package/dist/cssm/lib/date.js +66 -3
  347. package/dist/cssm/lib/date.js.map +1 -1
  348. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  349. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  350. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  351. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
  352. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  353. package/dist/cssm/lib/utils.js +1 -0
  354. package/dist/cssm/lib/utils.js.map +1 -1
  355. package/dist/cssm/styles/themes.css +1 -1
  356. package/dist/hooks/useCalendar.d.ts.map +1 -1
  357. package/dist/hooks/useCalendar.js +6 -4
  358. package/dist/hooks/useCalendar.js.map +1 -1
  359. package/dist/hooks/useFloatingElement.d.ts +1 -1
  360. package/dist/hooks/useFloatingElement.d.ts.map +1 -1
  361. package/dist/hooks/useFloatingElement.js +3 -2
  362. package/dist/hooks/useFloatingElement.js.map +1 -1
  363. package/dist/hooks/useTodayDate.d.ts.map +1 -1
  364. package/dist/hooks/useTodayDate.js +3 -2
  365. package/dist/hooks/useTodayDate.js.map +1 -1
  366. package/dist/index.d.ts +4 -2
  367. package/dist/index.d.ts.map +1 -1
  368. package/dist/index.js.map +1 -1
  369. package/dist/lib/accessibility.d.ts +1 -1
  370. package/dist/lib/accessibility.d.ts.map +1 -1
  371. package/dist/lib/accessibility.js +8 -0
  372. package/dist/lib/accessibility.js.map +1 -1
  373. package/dist/lib/calendar.d.ts.map +1 -1
  374. package/dist/lib/calendar.js +9 -7
  375. package/dist/lib/calendar.js.map +1 -1
  376. package/dist/lib/date.d.ts +31 -1
  377. package/dist/lib/date.d.ts.map +1 -1
  378. package/dist/lib/date.js +67 -3
  379. package/dist/lib/date.js.map +1 -1
  380. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +6 -1
  381. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  382. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  383. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  384. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -0
  385. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  386. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  387. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  388. package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
  389. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  390. package/dist/lib/utils.d.ts +1 -0
  391. package/dist/lib/utils.d.ts.map +1 -1
  392. package/dist/lib/utils.js +1 -0
  393. package/dist/lib/utils.js.map +1 -1
  394. package/dist/vkui.css +1 -1
  395. package/dist/vkui.css.map +1 -1
  396. package/package.json +6 -7
  397. package/src/components/Banner/Banner.module.css +1 -6
  398. package/src/components/Banner/Banner.module.css.d.ts.map +1 -1
  399. package/src/components/Calendar/Calendar.tsx +6 -6
  400. package/src/components/CalendarDays/CalendarDays.tsx +3 -3
  401. package/src/components/CalendarRange/CalendarRange.tsx +15 -20
  402. package/src/components/CalendarRange/utils.ts +7 -6
  403. package/src/components/Cell/Cell.tsx +3 -0
  404. package/src/components/Checkbox/Checkbox.tsx +6 -0
  405. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +7 -2
  406. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css.d.ts.map +1 -1
  407. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +12 -3
  408. package/src/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  409. package/src/components/ChipsInputBase/Chip/Chip.module.css.d.ts.map +1 -1
  410. package/src/components/ChipsInputBase/Chip/Chip.tsx +55 -1
  411. package/src/components/ChipsInputBase/ChipsInputBase.tsx +26 -4
  412. package/src/components/ChipsInputBase/types.ts +2 -45
  413. package/src/components/ChipsSelect/ChipsSelect.tsx +2 -4
  414. package/src/components/ContentBadge/ContentBadge.tsx +18 -12
  415. package/src/components/ContentCard/ContentCard.tsx +1 -1
  416. package/src/components/CustomSelect/CustomSelect.tsx +216 -562
  417. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  418. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css.d.ts.map +1 -1
  419. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +25 -2
  420. package/src/components/CustomSelect/helpers.ts +103 -0
  421. package/src/components/CustomSelect/hooks/useAfterItems.tsx +89 -0
  422. package/src/components/CustomSelect/hooks/useDropdownOpenedController.ts +61 -0
  423. package/src/components/CustomSelect/hooks/useFocusedOptionController.ts +86 -0
  424. package/src/components/CustomSelect/hooks/useInputKeyboardController.ts +96 -0
  425. package/src/components/CustomSelect/hooks/useInputValueController.ts +58 -0
  426. package/src/components/CustomSelect/hooks/useScrollListController.ts +46 -0
  427. package/src/components/CustomSelect/hooks/useSelectedOptionController.ts +132 -0
  428. package/src/components/CustomSelect/types.ts +38 -0
  429. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -0
  430. package/src/components/DateInput/DateInput.tsx +9 -3
  431. package/src/components/DateRangeInput/DateRangeInput.tsx +9 -6
  432. package/src/components/ModalCard/ModalCard.tsx +2 -0
  433. package/src/components/ModalCard/ModalCardInternal.tsx +8 -2
  434. package/src/components/ModalCard/types.ts +6 -0
  435. package/src/components/ModalOutlet/ModalOutlet.module.css +4 -0
  436. package/src/components/ModalOutlet/ModalOutlet.module.css.d.ts.map +1 -1
  437. package/src/components/ModalOutlet/ModalOutlet.tsx +8 -1
  438. package/src/components/ModalOverlay/ModalOverlay.module.css +1 -1
  439. package/src/components/ModalPage/ModalPage.module.css +1 -0
  440. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  441. package/src/components/ModalPage/ModalPage.tsx +2 -0
  442. package/src/components/ModalPage/ModalPageInternal.tsx +8 -2
  443. package/src/components/ModalPage/types.ts +6 -0
  444. package/src/components/ModalRoot/ModalRoot.tsx +19 -6
  445. package/src/components/ModalRoot/types.ts +5 -0
  446. package/src/components/ModalRoot/useModalManager.tsx +4 -0
  447. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -0
  448. package/src/components/Popover/Popover.tsx +1 -0
  449. package/src/components/Popover/usePopover.tsx +2 -0
  450. package/src/components/Popper/Popper.tsx +3 -0
  451. package/src/components/Select/Select.tsx +5 -5
  452. package/src/components/SelectionControl/SelectionControl.module.css +6 -3
  453. package/src/components/SelectionControl/SelectionControl.module.css.d.ts.map +1 -1
  454. package/src/components/SelectionControl/SelectionControl.tsx +30 -8
  455. package/src/components/SelectionControl/SelectionControlContext.ts +7 -0
  456. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  457. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css.d.ts.map +1 -1
  458. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx +7 -1
  459. package/src/components/SimpleCell/SimpleCell.tsx +5 -0
  460. package/src/components/Skeleton/Skeleton.tsx +1 -1
  461. package/src/components/Slider/SliderThumb/SliderThumb.module.css +1 -1
  462. package/src/components/Tabs/Tabs.tsx +16 -12
  463. package/src/components/Tabs/TabsController.ts +2 -2
  464. package/src/components/Tabs/TabsControllerContext.ts +7 -0
  465. package/src/components/Tabs/TabsModeContext.ts +0 -3
  466. package/src/components/TabsItem/TabsItem.tsx +5 -9
  467. package/src/components/Tooltip/Tooltip.tsx +1 -0
  468. package/src/components/Tooltip/useTooltip.tsx +2 -0
  469. package/src/components/Typography/Caption/Caption.tsx +14 -6
  470. package/src/components/Typography/Footnote/Footnote.tsx +10 -6
  471. package/src/components/Typography/Typography.tsx +9 -2
  472. package/src/components/View/View.module.css +1 -1
  473. package/src/components/View/View.tsx +2 -1
  474. package/src/components/View/ViewInfinite.tsx +2 -1
  475. package/src/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  476. package/src/components/VisuallyHidden/VisuallyHidden.module.css.d.ts.map +1 -1
  477. package/src/hooks/useCalendar.ts +6 -4
  478. package/src/hooks/useFloatingElement.tsx +2 -0
  479. package/src/hooks/useTodayDate.ts +3 -2
  480. package/src/index.ts +5 -3
  481. package/src/lib/accessibility.ts +4 -0
  482. package/src/lib/calendar.ts +8 -12
  483. package/src/lib/date.ts +82 -3
  484. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +23 -10
  485. package/src/lib/floating/useFloatingWithInteractions/types.ts +2 -0
  486. package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
  487. package/src/lib/utils.ts +3 -0
@@ -5,12 +5,12 @@ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_
5
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
7
  import { classNames, isSameDate } from "@vkontakte/vkjs";
8
- import { isSameDay, isSameMonth, startOfMonth } from "date-fns";
8
+ import { startOfMonth } from "date-fns";
9
9
  import { useCalendar } from "../../hooks/useCalendar.js";
10
10
  import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
11
11
  import { Keys, pressedKey } from "../../lib/accessibility.js";
12
12
  import { clamp, isFirstDay, isLastDay, navigateDate, NAVIGATION_KEYS, setTimeEqual } from "../../lib/calendar.js";
13
- import { convertDateFromTimeZone, convertDateToTimeZone } from "../../lib/date.js";
13
+ import { convertDateFromTimeZone, convertDateToTimeZone, isSameMonth } from "../../lib/date.js";
14
14
  import { isHTMLElement } from "../../lib/dom.js";
15
15
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
16
16
  import { warnOnce } from "../../lib/warnOnce.js";
@@ -157,7 +157,7 @@ const warn = warnOnce('Calendar');
157
157
  minDateTime
158
158
  ]);
159
159
  const onDayFocus = React.useCallback((date)=>{
160
- if (focusedDay && isSameDay(focusedDay, date)) {
160
+ if (focusedDay && isSameDate(focusedDay, date)) {
161
161
  return;
162
162
  }
163
163
  setFocusedDay(date);
@@ -170,7 +170,7 @@ const warn = warnOnce('Calendar');
170
170
  setFocusedDay
171
171
  ]);
172
172
  // activeDay это день в календаре соответствующий значению в инпуте
173
- const isDayActive = React.useCallback((day)=>Boolean(timeZonedValue && isSameDay(day, timeZonedValue)), [
173
+ const isDayActive = React.useCallback((day)=>Boolean(timeZonedValue && isSameDate(day, timeZonedValue)), [
174
174
  timeZonedValue
175
175
  ]);
176
176
  const isFocusableDayInViewDateMonth = focusableDay && isSameMonth(focusableDay, viewDate);
@@ -183,7 +183,7 @@ const warn = warnOnce('Calendar');
183
183
  */ const isDayFocusable = React.useCallback((day)=>{
184
184
  // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex="0",
185
185
  if (isFocusableDayInViewDateMonth) {
186
- return isSameDay(focusableDay, day);
186
+ return isSameDate(focusableDay, day);
187
187
  }
188
188
  // при открытии календаря focusableDay не определён,
189
189
  // поэтому tabIndex="0" будет у дня, соответствующего дню в инпуте
@@ -192,7 +192,7 @@ const warn = warnOnce('Calendar');
192
192
  }
193
193
  // при переключении месяца любая навигация с помощью Tab начинается
194
194
  // с первого дня месяца.
195
- return isSameDay(startOfMonth(viewDate), day);
195
+ return isSameDate(startOfMonth(viewDate), day);
196
196
  }, [
197
197
  focusableDay,
198
198
  viewDate,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isSameDate } from '@vkontakte/vkjs';\nimport { isSameDay, isSameMonth, startOfMonth } from 'date-fns';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport {\n clamp,\n isFirstDay,\n isLastDay,\n navigateDate,\n NAVIGATION_KEYS,\n setTimeEqual,\n} from '../../lib/calendar';\nimport { convertDateFromTimeZone, convertDateToTimeZone } from '../../lib/date';\nimport { isHTMLElement } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDays,\n type CalendarDaysProps,\n type CalendarDaysTestsProps,\n} from '../CalendarDays/CalendarDays';\nimport {\n CalendarHeader,\n type CalendarHeaderProps,\n type CalendarHeaderTestsProps,\n} from '../CalendarHeader/CalendarHeader';\nimport {\n type CalendarDoneButtonProps,\n CalendarTime,\n type CalendarTimeProps,\n type CalendarTimeTestsProps,\n} from '../CalendarTime/CalendarTime';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Calendar.module.css';\n\nexport type CalendarTestsProps = CalendarDaysTestsProps &\n CalendarHeaderTestsProps &\n CalendarTimeTestsProps;\n\nexport interface CalendarProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'prevMonthProps'\n | 'nextMonthProps'\n >,\n Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarDoneButtonProps,\n CalendarTestsProps {\n /**\n * Текущая выбранная дата.\n */\n value?: Date | null;\n /**\n * Начальная дата при монтировании.\n */\n defaultValue?: Date | null;\n /**\n * Запрещает выбор даты в прошлом.\n * Применяется, если не заданы `shouldDisableDate` и `disableFuture`.\n */\n disablePast?: boolean;\n /**\n * Запрещает выбор даты в будущем.\n * Применяется, если не задано `shouldDisableDate`.\n */\n disableFuture?: boolean;\n /**\n * Включает выбор времени.\n */\n enableTime?: boolean;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Будет удалeно в **VKUI v8**.\n * Использовалось для задания aria-label для контейнера дней в календаре.\n * Теперь этот контейнер является таблицей (с помощью role=\"grid\") и\n * в aria-label рендерится текущий открытый в календаре месяц и год.\n */\n changeDayLabel?: string;\n /**\n * День недели, с которого начинается неделя.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Показывать дни соседних месяцев.\n */\n showNeighboringMonth?: boolean;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm';\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: (value?: Date) => void; // TODO [>=8]: поменять тип на `(value?: Date | null) => void`\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: (value: Date) => boolean;\n /**\n * Дата отображаемого месяца.\n * При использовании обновление даты должно происходить вне компонента.\n */\n viewDate?: Date;\n /**\n * Обработчик изменения даты в шапке календаря.\n */\n onHeaderChange?: (value: Date) => void;\n /**\n * Минимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n minDateTime?: Date;\n /**\n * Максимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n maxDateTime?: Date;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string;\n}\n\nconst warn = warnOnce('Calendar');\n\n/**\n * @see https://vkui.io/components/calendar\n */\nexport const Calendar = ({\n getRootRef,\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onDoneButtonClick,\n enableTime = false,\n doneButtonText,\n doneButtonDisabled,\n doneButtonShow,\n DoneButton,\n weekStartsOn = 1,\n disablePickers,\n 'aria-label': ariaLabel = 'Календарь',\n changeHoursLabel = 'Изменить час',\n changeMinutesLabel = 'Изменить минуту',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n showNeighboringMonth,\n size = 'm',\n 'viewDate': externalViewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n prevMonthProps,\n nextMonthProps,\n dayProps,\n listenDayChangesForUpdate,\n renderDayContent,\n minDateTime,\n maxDateTime,\n timezone,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n monthDropdownTestId,\n yearDropdownTestId,\n dayTestId,\n ...props\n}: CalendarProps): React.ReactNode => {\n const _onChange = React.useCallback(\n (date: Date | null | undefined) => {\n onChange?.(convertDateFromTimeZone(date, timezone) || undefined);\n },\n [onChange, timezone],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<Date | null | undefined>({\n value: valueProp,\n defaultValue,\n onChange: _onChange,\n });\n\n const timeZonedValue: Date | null | undefined = React.useMemo(\n () => convertDateToTimeZone(value, timezone),\n [timezone, value],\n );\n\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n } = useCalendar({\n value: timeZonedValue,\n disableFuture,\n disablePast,\n shouldDisableDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n minDateTime,\n maxDateTime,\n });\n // соотвествует дню, на котором можно сфокусироваться с помощью Tab\n const [focusableDay, setFocusableDay] = React.useState<Date>();\n\n useIsomorphicLayoutEffect(() => {\n if (timeZonedValue) {\n setViewDate(timeZonedValue);\n }\n }, [timeZonedValue]);\n\n if (process.env.NODE_ENV === 'development' && !disablePickers && size === 's') {\n warn(\"Нельзя включить селекты выбора месяца/года, если размер календаря 's'\", 'error');\n }\n\n if (process.env.NODE_ENV === 'development' && enableTime && size === 's') {\n warn(\"Нельзя включить выбор времени, если размер календаря 's'\", 'error');\n }\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n const key = pressedKey(event);\n if (key && NAVIGATION_KEYS.includes(key)) {\n event.preventDefault();\n\n const newFocusedDay = navigateDate(focusedDay ?? timeZonedValue, key);\n\n if (newFocusedDay && !isSameMonth(newFocusedDay, viewDate)) {\n setViewDate(newFocusedDay);\n }\n setFocusedDay(newFocusedDay);\n setFocusableDay(newFocusedDay);\n\n return;\n }\n\n if (key === Keys.TAB) {\n setFocusedDay(undefined);\n setFocusableDay(focusedDay);\n\n return;\n }\n\n if ((key === Keys.ENTER || key === Keys.SPACE) && isHTMLElement(event.target)) {\n event.preventDefault();\n event.target.click?.();\n }\n },\n [focusedDay, setFocusedDay, setFocusableDay, setViewDate, timeZonedValue, viewDate],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n let actualDate = setTimeEqual(date, timeZonedValue);\n if (minDateTime || maxDateTime) {\n actualDate = clamp(actualDate, { min: minDateTime, max: maxDateTime });\n }\n updateValue(actualDate);\n },\n [timeZonedValue, updateValue, maxDateTime, minDateTime],\n );\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDay(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n if (!focusableDay || !isSameDate(date, focusableDay)) {\n setFocusableDay(date);\n }\n },\n [focusableDay, focusedDay, setFocusedDay],\n );\n\n // activeDay это день в календаре соответствующий значению в инпуте\n const isDayActive = React.useCallback(\n (day: Date) => Boolean(timeZonedValue && isSameDay(day, timeZonedValue)),\n [timeZonedValue],\n );\n\n const isFocusableDayInViewDateMonth = focusableDay && isSameMonth(focusableDay, viewDate);\n const isInputValueDateInViewDateMonth = timeZonedValue && isSameMonth(timeZonedValue, viewDate);\n /**\n * Функция позволяет проверить является ли день в календаре днём на который\n * можно попасть с помощью Tab.\n * Единственный день в таблице календаря у которого есть tabIndex=\"0\"\n * Чтобы на него можно было попасть из заголовка календаря.\n */\n const isDayFocusable = React.useCallback(\n (day: Date) => {\n // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex=\"0\",\n if (isFocusableDayInViewDateMonth) {\n return isSameDay(focusableDay, day);\n }\n\n // при открытии календаря focusableDay не определён,\n // поэтому tabIndex=\"0\" будет у дня, соответствующего дню в инпуте\n if (isInputValueDateInViewDateMonth) {\n return isDayActive(day);\n }\n\n // при переключении месяца любая навигация с помощью Tab начинается\n // с первого дня месяца.\n return isSameDay(startOfMonth(viewDate), day);\n },\n [\n focusableDay,\n viewDate,\n isDayActive,\n isFocusableDayInViewDateMonth,\n isInputValueDateInViewDateMonth,\n ],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={classNames(styles.host, size === 's' && styles.sizeS)}\n getRootRef={getRootRef}\n >\n <CalendarHeader\n viewDate={externalViewDate || viewDate}\n onChange={setViewDate}\n onNextMonth={setNextMonth}\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers || size === 's'}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n prevMonthProps={prevMonthProps}\n nextMonthProps={nextMonthProps}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n nextMonthButtonTestId={nextMonthButtonTestId}\n prevMonthButtonTestId={prevMonthButtonTestId}\n monthDropdownTestId={monthDropdownTestId}\n yearDropdownTestId={yearDropdownTestId}\n />\n <CalendarDays\n viewDate={externalViewDate || viewDate}\n value={timeZonedValue}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleKeyDown}\n onDayChange={onDayChange}\n isDayActive={isDayActive}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusable}\n isDaySelectionStart={isFirstDay}\n isDaySelectionEnd={isLastDay}\n isDayDisabled={isDayDisabled}\n showNeighboringMonth={showNeighboringMonth}\n size={size}\n dayProps={dayProps}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n {enableTime && timeZonedValue && size !== 's' && (\n <div className={styles.time}>\n <CalendarTime\n value={timeZonedValue}\n onChange={updateValue}\n onDoneButtonClick={onDoneButtonClick}\n doneButtonText={doneButtonText}\n doneButtonDisabled={doneButtonDisabled}\n doneButtonShow={doneButtonShow}\n DoneButton={DoneButton}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n isDayDisabled={minDateTime || maxDateTime ? isDayDisabled : undefined}\n minutesTestId={minutesTestId}\n hoursTestId={hoursTestId}\n doneButtonTestId={doneButtonTestId}\n />\n </div>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","isSameDate","isSameDay","isSameMonth","startOfMonth","useCalendar","useCustomEnsuredControl","Keys","pressedKey","clamp","isFirstDay","isLastDay","navigateDate","NAVIGATION_KEYS","setTimeEqual","convertDateFromTimeZone","convertDateToTimeZone","isHTMLElement","useIsomorphicLayoutEffect","warnOnce","CalendarDays","CalendarHeader","CalendarTime","RootComponent","warn","Calendar","getRootRef","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","onDoneButtonClick","enableTime","doneButtonText","doneButtonDisabled","doneButtonShow","DoneButton","weekStartsOn","disablePickers","ariaLabel","changeHoursLabel","changeMinutesLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","showNeighboringMonth","size","externalViewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","prevMonthProps","nextMonthProps","dayProps","listenDayChangesForUpdate","renderDayContent","minDateTime","maxDateTime","timezone","minutesTestId","hoursTestId","doneButtonTestId","prevMonthButtonTestId","nextMonthButtonTestId","monthDropdownTestId","yearDropdownTestId","dayTestId","props","_onChange","useCallback","date","undefined","value","updateValue","timeZonedValue","useMemo","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","focusableDay","setFocusableDay","useState","process","env","NODE_ENV","handleKeyDown","event","key","includes","preventDefault","newFocusedDay","TAB","ENTER","SPACE","target","click","onDayChange","actualDate","min","max","onDayFocus","isDayActive","day","Boolean","isFocusableDayInViewDateMonth","isInputValueDateInViewDateMonth","isDayFocusable","aria-label","baseClassName","className","onKeyDown","isDaySelectionStart","isDaySelectionEnd","div"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isSameDate } from '@vkontakte/vkjs';\nimport { startOfMonth } from 'date-fns';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport {\n clamp,\n isFirstDay,\n isLastDay,\n navigateDate,\n NAVIGATION_KEYS,\n setTimeEqual,\n} from '../../lib/calendar';\nimport { convertDateFromTimeZone, convertDateToTimeZone, isSameMonth } from '../../lib/date';\nimport { isHTMLElement } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDays,\n type CalendarDaysProps,\n type CalendarDaysTestsProps,\n} from '../CalendarDays/CalendarDays';\nimport {\n CalendarHeader,\n type CalendarHeaderProps,\n type CalendarHeaderTestsProps,\n} from '../CalendarHeader/CalendarHeader';\nimport {\n type CalendarDoneButtonProps,\n CalendarTime,\n type CalendarTimeProps,\n type CalendarTimeTestsProps,\n} from '../CalendarTime/CalendarTime';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Calendar.module.css';\n\nexport type CalendarTestsProps = CalendarDaysTestsProps &\n CalendarHeaderTestsProps &\n CalendarTimeTestsProps;\n\nexport interface CalendarProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'prevMonthProps'\n | 'nextMonthProps'\n >,\n Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarDoneButtonProps,\n CalendarTestsProps {\n /**\n * Текущая выбранная дата.\n */\n value?: Date | null;\n /**\n * Начальная дата при монтировании.\n */\n defaultValue?: Date | null;\n /**\n * Запрещает выбор даты в прошлом.\n * Применяется, если не заданы `shouldDisableDate` и `disableFuture`.\n */\n disablePast?: boolean;\n /**\n * Запрещает выбор даты в будущем.\n * Применяется, если не задано `shouldDisableDate`.\n */\n disableFuture?: boolean;\n /**\n * Включает выбор времени.\n */\n enableTime?: boolean;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Будет удалeно в **VKUI v8**.\n * Использовалось для задания aria-label для контейнера дней в календаре.\n * Теперь этот контейнер является таблицей (с помощью role=\"grid\") и\n * в aria-label рендерится текущий открытый в календаре месяц и год.\n */\n changeDayLabel?: string;\n /**\n * День недели, с которого начинается неделя.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Показывать дни соседних месяцев.\n */\n showNeighboringMonth?: boolean;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm';\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: (value?: Date) => void; // TODO [>=8]: поменять тип на `(value?: Date | null) => void`\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: (value: Date) => boolean;\n /**\n * Дата отображаемого месяца.\n * При использовании обновление даты должно происходить вне компонента.\n */\n viewDate?: Date;\n /**\n * Обработчик изменения даты в шапке календаря.\n */\n onHeaderChange?: (value: Date) => void;\n /**\n * Минимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n minDateTime?: Date;\n /**\n * Максимальные дата и время, которые можно выбрать.\n * Применяется, если не заданы `shouldDisableDate` и `disablePast`/`disableFuture`.\n */\n maxDateTime?: Date;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string;\n}\n\nconst warn = warnOnce('Calendar');\n\n/**\n * @see https://vkui.io/components/calendar\n */\nexport const Calendar = ({\n getRootRef,\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n onDoneButtonClick,\n enableTime = false,\n doneButtonText,\n doneButtonDisabled,\n doneButtonShow,\n DoneButton,\n weekStartsOn = 1,\n disablePickers,\n 'aria-label': ariaLabel = 'Календарь',\n changeHoursLabel = 'Изменить час',\n changeMinutesLabel = 'Изменить минуту',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n showNeighboringMonth,\n size = 'm',\n 'viewDate': externalViewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n prevMonthProps,\n nextMonthProps,\n dayProps,\n listenDayChangesForUpdate,\n renderDayContent,\n minDateTime,\n maxDateTime,\n timezone,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n prevMonthButtonTestId,\n nextMonthButtonTestId,\n monthDropdownTestId,\n yearDropdownTestId,\n dayTestId,\n ...props\n}: CalendarProps): React.ReactNode => {\n const _onChange = React.useCallback(\n (date: Date | null | undefined) => {\n onChange?.(convertDateFromTimeZone(date, timezone) || undefined);\n },\n [onChange, timezone],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<Date | null | undefined>({\n value: valueProp,\n defaultValue,\n onChange: _onChange,\n });\n\n const timeZonedValue: Date | null | undefined = React.useMemo(\n () => convertDateToTimeZone(value, timezone),\n [timezone, value],\n );\n\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n } = useCalendar({\n value: timeZonedValue,\n disableFuture,\n disablePast,\n shouldDisableDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n minDateTime,\n maxDateTime,\n });\n // соотвествует дню, на котором можно сфокусироваться с помощью Tab\n const [focusableDay, setFocusableDay] = React.useState<Date>();\n\n useIsomorphicLayoutEffect(() => {\n if (timeZonedValue) {\n setViewDate(timeZonedValue);\n }\n }, [timeZonedValue]);\n\n if (process.env.NODE_ENV === 'development' && !disablePickers && size === 's') {\n warn(\"Нельзя включить селекты выбора месяца/года, если размер календаря 's'\", 'error');\n }\n\n if (process.env.NODE_ENV === 'development' && enableTime && size === 's') {\n warn(\"Нельзя включить выбор времени, если размер календаря 's'\", 'error');\n }\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n const key = pressedKey(event);\n if (key && NAVIGATION_KEYS.includes(key)) {\n event.preventDefault();\n\n const newFocusedDay = navigateDate(focusedDay ?? timeZonedValue, key);\n\n if (newFocusedDay && !isSameMonth(newFocusedDay, viewDate)) {\n setViewDate(newFocusedDay);\n }\n setFocusedDay(newFocusedDay);\n setFocusableDay(newFocusedDay);\n\n return;\n }\n\n if (key === Keys.TAB) {\n setFocusedDay(undefined);\n setFocusableDay(focusedDay);\n\n return;\n }\n\n if ((key === Keys.ENTER || key === Keys.SPACE) && isHTMLElement(event.target)) {\n event.preventDefault();\n event.target.click?.();\n }\n },\n [focusedDay, setFocusedDay, setFocusableDay, setViewDate, timeZonedValue, viewDate],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n let actualDate = setTimeEqual(date, timeZonedValue);\n if (minDateTime || maxDateTime) {\n actualDate = clamp(actualDate, { min: minDateTime, max: maxDateTime });\n }\n updateValue(actualDate);\n },\n [timeZonedValue, updateValue, maxDateTime, minDateTime],\n );\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDate(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n if (!focusableDay || !isSameDate(date, focusableDay)) {\n setFocusableDay(date);\n }\n },\n [focusableDay, focusedDay, setFocusedDay],\n );\n\n // activeDay это день в календаре соответствующий значению в инпуте\n const isDayActive = React.useCallback(\n (day: Date) => Boolean(timeZonedValue && isSameDate(day, timeZonedValue)),\n [timeZonedValue],\n );\n\n const isFocusableDayInViewDateMonth = focusableDay && isSameMonth(focusableDay, viewDate);\n const isInputValueDateInViewDateMonth = timeZonedValue && isSameMonth(timeZonedValue, viewDate);\n /**\n * Функция позволяет проверить является ли день в календаре днём на который\n * можно попасть с помощью Tab.\n * Единственный день в таблице календаря у которого есть tabIndex=\"0\"\n * Чтобы на него можно было попасть из заголовка календаря.\n */\n const isDayFocusable = React.useCallback(\n (day: Date) => {\n // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex=\"0\",\n if (isFocusableDayInViewDateMonth) {\n return isSameDate(focusableDay, day);\n }\n\n // при открытии календаря focusableDay не определён,\n // поэтому tabIndex=\"0\" будет у дня, соответствующего дню в инпуте\n if (isInputValueDateInViewDateMonth) {\n return isDayActive(day);\n }\n\n // при переключении месяца любая навигация с помощью Tab начинается\n // с первого дня месяца.\n return isSameDate(startOfMonth(viewDate), day);\n },\n [\n focusableDay,\n viewDate,\n isDayActive,\n isFocusableDayInViewDateMonth,\n isInputValueDateInViewDateMonth,\n ],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={classNames(styles.host, size === 's' && styles.sizeS)}\n getRootRef={getRootRef}\n >\n <CalendarHeader\n viewDate={externalViewDate || viewDate}\n onChange={setViewDate}\n onNextMonth={setNextMonth}\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers || size === 's'}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n prevMonthProps={prevMonthProps}\n nextMonthProps={nextMonthProps}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n nextMonthButtonTestId={nextMonthButtonTestId}\n prevMonthButtonTestId={prevMonthButtonTestId}\n monthDropdownTestId={monthDropdownTestId}\n yearDropdownTestId={yearDropdownTestId}\n />\n <CalendarDays\n viewDate={externalViewDate || viewDate}\n value={timeZonedValue}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleKeyDown}\n onDayChange={onDayChange}\n isDayActive={isDayActive}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusable}\n isDaySelectionStart={isFirstDay}\n isDaySelectionEnd={isLastDay}\n isDayDisabled={isDayDisabled}\n showNeighboringMonth={showNeighboringMonth}\n size={size}\n dayProps={dayProps}\n listenDayChangesForUpdate={listenDayChangesForUpdate}\n renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n {enableTime && timeZonedValue && size !== 's' && (\n <div className={styles.time}>\n <CalendarTime\n value={timeZonedValue}\n onChange={updateValue}\n onDoneButtonClick={onDoneButtonClick}\n doneButtonText={doneButtonText}\n doneButtonDisabled={doneButtonDisabled}\n doneButtonShow={doneButtonShow}\n DoneButton={DoneButton}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n isDayDisabled={minDateTime || maxDateTime ? isDayDisabled : undefined}\n minutesTestId={minutesTestId}\n hoursTestId={hoursTestId}\n doneButtonTestId={doneButtonTestId}\n />\n </div>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","isSameDate","startOfMonth","useCalendar","useCustomEnsuredControl","Keys","pressedKey","clamp","isFirstDay","isLastDay","navigateDate","NAVIGATION_KEYS","setTimeEqual","convertDateFromTimeZone","convertDateToTimeZone","isSameMonth","isHTMLElement","useIsomorphicLayoutEffect","warnOnce","CalendarDays","CalendarHeader","CalendarTime","RootComponent","warn","Calendar","getRootRef","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","onDoneButtonClick","enableTime","doneButtonText","doneButtonDisabled","doneButtonShow","DoneButton","weekStartsOn","disablePickers","ariaLabel","changeHoursLabel","changeMinutesLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","showNeighboringMonth","size","externalViewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","prevMonthProps","nextMonthProps","dayProps","listenDayChangesForUpdate","renderDayContent","minDateTime","maxDateTime","timezone","minutesTestId","hoursTestId","doneButtonTestId","prevMonthButtonTestId","nextMonthButtonTestId","monthDropdownTestId","yearDropdownTestId","dayTestId","props","_onChange","useCallback","date","undefined","value","updateValue","timeZonedValue","useMemo","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","focusableDay","setFocusableDay","useState","process","env","NODE_ENV","handleKeyDown","event","key","includes","preventDefault","newFocusedDay","TAB","ENTER","SPACE","target","click","onDayChange","actualDate","min","max","onDayFocus","isDayActive","day","Boolean","isFocusableDayInViewDateMonth","isInputValueDateInViewDateMonth","isDayFocusable","aria-label","baseClassName","className","onKeyDown","isDaySelectionStart","isDaySelectionEnd","div"],"mappings":"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"}
@@ -4,10 +4,10 @@ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
- import { classNames } from "@vkontakte/vkjs";
8
- import { isSameDay, isSameMonth } from "date-fns";
7
+ import { classNames, isSameDate } from "@vkontakte/vkjs";
9
8
  import { useTodayDate } from "../../hooks/useTodayDate.js";
10
9
  import { getDaysNames, getWeeks } from "../../lib/calendar.js";
10
+ import { isSameMonth } from "../../lib/date.js";
11
11
  import { CalendarDay } from "../CalendarDay/CalendarDay.js";
12
12
  import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
13
13
  import { RootComponent } from "../RootComponent/RootComponent.js";
@@ -92,7 +92,7 @@ export const CalendarDays = (_param)=>{
92
92
  children: week.map((day, i)=>{
93
93
  const sameMonth = isSameMonth(day, viewDate);
94
94
  const isHidden = !showNeighboringMonth && !sameMonth;
95
- const isToday = isSameDay(day, now);
95
+ const isToday = isSameDate(day, now);
96
96
  const isActive = isDayActive(day);
97
97
  const isFocused = isDayFocused(day);
98
98
  return /*#__PURE__*/ _jsx(CalendarDay, _object_spread_props(_object_spread({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CalendarDays/CalendarDays.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isSameDay, isSameMonth } from 'date-fns';\nimport { useTodayDate } from '../../hooks/useTodayDate';\nimport { getDaysNames, getWeeks } from '../../lib/calendar';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDay,\n type CalendarDayElementProps,\n type CalendarDayProps,\n type CalendarDayTestsProps,\n} from '../CalendarDay/CalendarDay';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarDays.module.css';\n\nexport type CalendarDaysTestsProps = {\n /**\n * Передает атрибут `data-testid` для дня в календаре.\n */\n dayTestId?: CalendarDayTestsProps['testId'];\n};\n\nexport interface CalendarDaysProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n Pick<CalendarDayProps, 'renderDayContent'>,\n CalendarDaysTestsProps {\n /**\n * Выбранная дата или диапазон дат.\n */\n value?: Date | Array<Date | null> | null;\n /**\n * Дата, определяющая отображаемый месяц.\n */\n viewDate: Date;\n /**\n * День недели, с которого начинается неделя (0 - воскресенье, 6 - суббота).\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Показывать дни соседних месяцев.\n */\n showNeighboringMonth?: boolean;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm';\n /**\n * Дополнительные свойства для элементов дней.\n */\n dayProps?: CalendarDayElementProps;\n /**\n * Следить за изменениями дней для обновления UI.\n */\n listenDayChangesForUpdate?: boolean;\n /**\n * Обработчик изменения выбранного дня.\n */\n onDayChange: (value: Date) => void;\n /**\n * Проверяет, заблокирован ли день для выбора.\n */\n isDayDisabled: (value: Date) => boolean;\n /**\n * Определяет, является ли день началом выделенного диапазона.\n */\n isDaySelectionStart: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет, является ли день концом выделенного диапазона.\n */\n isDaySelectionEnd: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет начало диапазона при наведении (подсветка).\n */\n isHintedDaySelectionStart?: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет конец диапазона при наведении (подсветка).\n */\n isHintedDaySelectionEnd?: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Проверяет, является ли день активным (текущая дата).\n */\n isDayActive: (value: Date) => boolean;\n /**\n * Проверяет, подсвечен ли день (при наведении).\n */\n isDayHinted?: (value: Date) => boolean;\n /**\n * Проверяет, возможно ли сфокусироваться на дне с клавиатуры.\n */\n isDayFocusable?: (value: Date) => boolean;\n /**\n * Проверяет, выбран ли день.\n */\n isDaySelected?: (value: Date) => boolean;\n /**\n * Проверяет, находится ли день в фокусе.\n */\n isDayFocused: (value: Date) => boolean;\n /**\n * Обработчик события 'pointerenter' на элементе дня.\n */\n onDayEnter?: (value: Date) => void;\n /**\n * Обработчик события 'pointerleave' на элементе дня.\n */\n onDayLeave?: (value: Date) => void;\n /**\n * Обработчик события `focus` на элементе дня.\n */\n onDayFocus?: (value: Date) => void;\n}\n\nexport const CalendarDays = ({\n viewDate,\n value,\n weekStartsOn,\n onDayChange,\n isDaySelected,\n isDayActive,\n isDaySelectionEnd,\n isDaySelectionStart,\n onDayEnter,\n onDayLeave,\n onDayFocus,\n isDayHinted,\n isHintedDaySelectionStart,\n isHintedDaySelectionEnd,\n isDayFocused,\n isDayFocusable,\n isDayDisabled,\n size,\n showNeighboringMonth = false,\n dayProps,\n listenDayChangesForUpdate = false,\n getRootRef,\n renderDayContent,\n dayTestId,\n ...props\n}: CalendarDaysProps): React.ReactNode => {\n const { locale } = useConfigProvider();\n const now = useTodayDate(listenDayChangesForUpdate);\n\n const weeks = React.useMemo(() => getWeeks(viewDate, weekStartsOn), [weekStartsOn, viewDate]);\n\n const daysNames = React.useMemo(\n () => getDaysNames(now, weekStartsOn, locale),\n [locale, now, weekStartsOn],\n );\n\n const handleDayChange = React.useCallback(\n (date: Date) => {\n onDayChange(date);\n },\n [onDayChange],\n );\n\n const viewDateLabelId = React.useId();\n const currentMonthLabel = value\n ? new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n }).format(viewDate)\n : null;\n\n return (\n <React.Fragment>\n {/*\n * Нельзя помещать текст currentMonthLabel внутрь role=\"grid\" или с помощью aria-label,\n * иначе пользователи NVDA не смогут ходить по таблице\n * с помощью горячих клавиш <Ctrl+Alt+стрелочки>.\n * Имеется ввиду связка (применение которой визуально не видно):\n * - из заголовка календаря прыжок в таблицу с помощью клавиши <T>\n * - переход по ячейкам с помощью <Ctrl+Alrt+стрелочки>\n * NVDA будет говорить, что пользователь вне ячейки таблицы.\n * Также важно оставить aria-live=\"polite\". Так NVDA зачитывает текущий\n * месяц и год при переключении месяца и года в заголовке календаря.\n */}\n <VisuallyHidden aria-live=\"polite\" id={viewDateLabelId}>\n {currentMonthLabel}\n </VisuallyHidden>\n <RootComponent\n role=\"grid\"\n {...props}\n baseClassName={styles.host}\n aria-labelledby={viewDateLabelId}\n >\n <div\n role=\"row\"\n aria-rowindex={1}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n >\n {daysNames.map(({ short: shortDayName, long: longDayName }) => (\n <Footnote\n role=\"columnheader\"\n aria-label={longDayName}\n key={shortDayName}\n className={styles.weekday}\n >\n {shortDayName}\n </Footnote>\n ))}\n </div>\n\n {weeks.map((week, i) => (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n key={i}\n >\n {week.map((day, i) => {\n const sameMonth = isSameMonth(day, viewDate);\n const isHidden = !showNeighboringMonth && !sameMonth;\n const isToday = isSameDay(day, now);\n const isActive = isDayActive(day);\n const isFocused = isDayFocused(day);\n return (\n <CalendarDay\n role=\"gridcell\"\n aria-current={isToday ? 'date' : undefined}\n aria-selected={isActive ? 'true' : 'false'}\n aria-colindex={i + 1}\n tabIndex={isDayFocusable?.(day) ? 0 : -1}\n key={day.toISOString()}\n day={day}\n today={isToday}\n active={isActive}\n onChange={handleDayChange}\n hidden={isHidden}\n disabled={isDayDisabled(day)}\n selectionStart={isDaySelectionStart(day, i)}\n selectionEnd={isDaySelectionEnd(day, i)}\n hintedSelectionStart={isHintedDaySelectionStart?.(day, i)}\n hintedSelectionEnd={isHintedDaySelectionEnd?.(day, i)}\n selected={isDaySelected?.(day)}\n focused={isFocused}\n onEnter={onDayEnter}\n onLeave={onDayLeave}\n onFocus={onDayFocus}\n hinted={isDayHinted?.(day)}\n sameMonth={sameMonth}\n size={size}\n renderDayContent={renderDayContent}\n testId={dayTestId}\n {...dayProps}\n className={classNames(dayProps?.className, styles.rowDay)}\n />\n );\n })}\n </div>\n ))}\n </RootComponent>\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","isSameDay","isSameMonth","useTodayDate","getDaysNames","getWeeks","CalendarDay","useConfigProvider","RootComponent","Footnote","VisuallyHidden","CalendarDays","viewDate","value","weekStartsOn","onDayChange","isDaySelected","isDayActive","isDaySelectionEnd","isDaySelectionStart","onDayEnter","onDayLeave","onDayFocus","isDayHinted","isHintedDaySelectionStart","isHintedDaySelectionEnd","isDayFocused","isDayFocusable","isDayDisabled","size","showNeighboringMonth","dayProps","listenDayChangesForUpdate","getRootRef","renderDayContent","dayTestId","props","locale","now","weeks","useMemo","daysNames","handleDayChange","useCallback","date","viewDateLabelId","useId","currentMonthLabel","Intl","DateTimeFormat","year","month","format","Fragment","aria-live","id","role","baseClassName","aria-labelledby","div","aria-rowindex","className","map","short","shortDayName","long","longDayName","aria-label","week","i","day","sameMonth","isHidden","isToday","isActive","isFocused","aria-current","undefined","aria-selected","aria-colindex","tabIndex","today","active","onChange","hidden","disabled","selectionStart","selectionEnd","hintedSelectionStart","hintedSelectionEnd","selected","focused","onEnter","onLeave","onFocus","hinted","testId","toISOString"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CalendarDays/CalendarDays.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isSameDate } from '@vkontakte/vkjs';\nimport { useTodayDate } from '../../hooks/useTodayDate';\nimport { getDaysNames, getWeeks } from '../../lib/calendar';\nimport { isSameMonth } from '../../lib/date';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDay,\n type CalendarDayElementProps,\n type CalendarDayProps,\n type CalendarDayTestsProps,\n} from '../CalendarDay/CalendarDay';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CalendarDays.module.css';\n\nexport type CalendarDaysTestsProps = {\n /**\n * Передает атрибут `data-testid` для дня в календаре.\n */\n dayTestId?: CalendarDayTestsProps['testId'];\n};\n\nexport interface CalendarDaysProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>,\n Pick<CalendarDayProps, 'renderDayContent'>,\n CalendarDaysTestsProps {\n /**\n * Выбранная дата или диапазон дат.\n */\n value?: Date | Array<Date | null> | null;\n /**\n * Дата, определяющая отображаемый месяц.\n */\n viewDate: Date;\n /**\n * День недели, с которого начинается неделя (0 - воскресенье, 6 - суббота).\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Показывать дни соседних месяцев.\n */\n showNeighboringMonth?: boolean;\n /**\n * Размер календаря.\n */\n size?: 's' | 'm';\n /**\n * Дополнительные свойства для элементов дней.\n */\n dayProps?: CalendarDayElementProps;\n /**\n * Следить за изменениями дней для обновления UI.\n */\n listenDayChangesForUpdate?: boolean;\n /**\n * Обработчик изменения выбранного дня.\n */\n onDayChange: (value: Date) => void;\n /**\n * Проверяет, заблокирован ли день для выбора.\n */\n isDayDisabled: (value: Date) => boolean;\n /**\n * Определяет, является ли день началом выделенного диапазона.\n */\n isDaySelectionStart: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет, является ли день концом выделенного диапазона.\n */\n isDaySelectionEnd: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет начало диапазона при наведении (подсветка).\n */\n isHintedDaySelectionStart?: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Определяет конец диапазона при наведении (подсветка).\n */\n isHintedDaySelectionEnd?: (value: Date, dayOfWeek: number) => boolean;\n /**\n * Проверяет, является ли день активным (текущая дата).\n */\n isDayActive: (value: Date) => boolean;\n /**\n * Проверяет, подсвечен ли день (при наведении).\n */\n isDayHinted?: (value: Date) => boolean;\n /**\n * Проверяет, возможно ли сфокусироваться на дне с клавиатуры.\n */\n isDayFocusable?: (value: Date) => boolean;\n /**\n * Проверяет, выбран ли день.\n */\n isDaySelected?: (value: Date) => boolean;\n /**\n * Проверяет, находится ли день в фокусе.\n */\n isDayFocused: (value: Date) => boolean;\n /**\n * Обработчик события 'pointerenter' на элементе дня.\n */\n onDayEnter?: (value: Date) => void;\n /**\n * Обработчик события 'pointerleave' на элементе дня.\n */\n onDayLeave?: (value: Date) => void;\n /**\n * Обработчик события `focus` на элементе дня.\n */\n onDayFocus?: (value: Date) => void;\n}\n\nexport const CalendarDays = ({\n viewDate,\n value,\n weekStartsOn,\n onDayChange,\n isDaySelected,\n isDayActive,\n isDaySelectionEnd,\n isDaySelectionStart,\n onDayEnter,\n onDayLeave,\n onDayFocus,\n isDayHinted,\n isHintedDaySelectionStart,\n isHintedDaySelectionEnd,\n isDayFocused,\n isDayFocusable,\n isDayDisabled,\n size,\n showNeighboringMonth = false,\n dayProps,\n listenDayChangesForUpdate = false,\n getRootRef,\n renderDayContent,\n dayTestId,\n ...props\n}: CalendarDaysProps): React.ReactNode => {\n const { locale } = useConfigProvider();\n const now = useTodayDate(listenDayChangesForUpdate);\n\n const weeks = React.useMemo(() => getWeeks(viewDate, weekStartsOn), [weekStartsOn, viewDate]);\n\n const daysNames = React.useMemo(\n () => getDaysNames(now, weekStartsOn, locale),\n [locale, now, weekStartsOn],\n );\n\n const handleDayChange = React.useCallback(\n (date: Date) => {\n onDayChange(date);\n },\n [onDayChange],\n );\n\n const viewDateLabelId = React.useId();\n const currentMonthLabel = value\n ? new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n }).format(viewDate)\n : null;\n\n return (\n <React.Fragment>\n {/*\n * Нельзя помещать текст currentMonthLabel внутрь role=\"grid\" или с помощью aria-label,\n * иначе пользователи NVDA не смогут ходить по таблице\n * с помощью горячих клавиш <Ctrl+Alt+стрелочки>.\n * Имеется ввиду связка (применение которой визуально не видно):\n * - из заголовка календаря прыжок в таблицу с помощью клавиши <T>\n * - переход по ячейкам с помощью <Ctrl+Alrt+стрелочки>\n * NVDA будет говорить, что пользователь вне ячейки таблицы.\n * Также важно оставить aria-live=\"polite\". Так NVDA зачитывает текущий\n * месяц и год при переключении месяца и года в заголовке календаря.\n */}\n <VisuallyHidden aria-live=\"polite\" id={viewDateLabelId}>\n {currentMonthLabel}\n </VisuallyHidden>\n <RootComponent\n role=\"grid\"\n {...props}\n baseClassName={styles.host}\n aria-labelledby={viewDateLabelId}\n >\n <div\n role=\"row\"\n aria-rowindex={1}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n >\n {daysNames.map(({ short: shortDayName, long: longDayName }) => (\n <Footnote\n role=\"columnheader\"\n aria-label={longDayName}\n key={shortDayName}\n className={styles.weekday}\n >\n {shortDayName}\n </Footnote>\n ))}\n </div>\n\n {weeks.map((week, i) => (\n <div\n role=\"row\"\n aria-rowindex={i + 2}\n className={classNames(styles.row, size === 's' && styles.rowSizeS)}\n key={i}\n >\n {week.map((day, i) => {\n const sameMonth = isSameMonth(day, viewDate);\n const isHidden = !showNeighboringMonth && !sameMonth;\n const isToday = isSameDate(day, now);\n const isActive = isDayActive(day);\n const isFocused = isDayFocused(day);\n return (\n <CalendarDay\n role=\"gridcell\"\n aria-current={isToday ? 'date' : undefined}\n aria-selected={isActive ? 'true' : 'false'}\n aria-colindex={i + 1}\n tabIndex={isDayFocusable?.(day) ? 0 : -1}\n key={day.toISOString()}\n day={day}\n today={isToday}\n active={isActive}\n onChange={handleDayChange}\n hidden={isHidden}\n disabled={isDayDisabled(day)}\n selectionStart={isDaySelectionStart(day, i)}\n selectionEnd={isDaySelectionEnd(day, i)}\n hintedSelectionStart={isHintedDaySelectionStart?.(day, i)}\n hintedSelectionEnd={isHintedDaySelectionEnd?.(day, i)}\n selected={isDaySelected?.(day)}\n focused={isFocused}\n onEnter={onDayEnter}\n onLeave={onDayLeave}\n onFocus={onDayFocus}\n hinted={isDayHinted?.(day)}\n sameMonth={sameMonth}\n size={size}\n renderDayContent={renderDayContent}\n testId={dayTestId}\n {...dayProps}\n className={classNames(dayProps?.className, styles.rowDay)}\n />\n );\n })}\n </div>\n ))}\n </RootComponent>\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","isSameDate","useTodayDate","getDaysNames","getWeeks","isSameMonth","CalendarDay","useConfigProvider","RootComponent","Footnote","VisuallyHidden","CalendarDays","viewDate","value","weekStartsOn","onDayChange","isDaySelected","isDayActive","isDaySelectionEnd","isDaySelectionStart","onDayEnter","onDayLeave","onDayFocus","isDayHinted","isHintedDaySelectionStart","isHintedDaySelectionEnd","isDayFocused","isDayFocusable","isDayDisabled","size","showNeighboringMonth","dayProps","listenDayChangesForUpdate","getRootRef","renderDayContent","dayTestId","props","locale","now","weeks","useMemo","daysNames","handleDayChange","useCallback","date","viewDateLabelId","useId","currentMonthLabel","Intl","DateTimeFormat","year","month","format","Fragment","aria-live","id","role","baseClassName","aria-labelledby","div","aria-rowindex","className","map","short","shortDayName","long","longDayName","aria-label","week","i","day","sameMonth","isHidden","isToday","isActive","isFocused","aria-current","undefined","aria-selected","aria-colindex","tabIndex","today","active","onChange","hidden","disabled","selectionStart","selectionEnd","hintedSelectionStart","hintedSelectionEnd","selected","focused","onEnter","onLeave","onFocus","hinted","testId","toISOString"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,UAAU,QAAQ,kBAAkB;AACzD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,YAAY,EAAEC,QAAQ,QAAQ,wBAAqB;AAC5D,SAASC,WAAW,QAAQ,oBAAiB;AAE7C,SACEC,WAAW,QAIN,gCAA6B;AACpC,SAASC,iBAAiB,QAAQ,6CAA0C;AAC5E,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,cAAc,QAAQ,sCAAmC;AAoGlE,OAAO,MAAMC,eAAe;QAAC,EAC3BC,QAAQ,EACRC,KAAK,EACLC,YAAY,EACZC,WAAW,EACXC,aAAa,EACbC,WAAW,EACXC,iBAAiB,EACjBC,mBAAmB,EACnBC,UAAU,EACVC,UAAU,EACVC,UAAU,EACVC,WAAW,EACXC,yBAAyB,EACzBC,uBAAuB,EACvBC,YAAY,EACZC,cAAc,EACdC,aAAa,EACbC,IAAI,EACJC,uBAAuB,KAAK,EAC5BC,QAAQ,EACRC,4BAA4B,KAAK,EACjCC,UAAU,EACVC,gBAAgB,EAChBC,SAAS,EAES,WADfC;QAxBHxB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,EAAEE,MAAM,EAAE,GAAG9B;IACnB,MAAM+B,MAAMpC,aAAa8B;IAEzB,MAAMO,QAAQxC,MAAMyC,OAAO,CAAC,IAAMpC,SAASQ,UAAUE,eAAe;QAACA;QAAcF;KAAS;IAE5F,MAAM6B,YAAY1C,MAAMyC,OAAO,CAC7B,IAAMrC,aAAamC,KAAKxB,cAAcuB,SACtC;QAACA;QAAQC;QAAKxB;KAAa;IAG7B,MAAM4B,kBAAkB3C,MAAM4C,WAAW,CACvC,CAACC;QACC7B,YAAY6B;IACd,GACA;QAAC7B;KAAY;IAGf,MAAM8B,kBAAkB9C,MAAM+C,KAAK;IACnC,MAAMC,oBAAoBlC,QACtB,IAAImC,KAAKC,cAAc,CAACZ,QAAQ;QAC9Ba,MAAM;QACNC,OAAO;IACT,GAAGC,MAAM,CAACxC,YACV;IAEJ,qBACE,MAACb,MAAMsD,QAAQ;;0BAYb,KAAC3C;gBAAe4C,aAAU;gBAASC,IAAIV;0BACpCE;;0BAEH,MAACvC;gBACCgD,MAAK;eACDpB;gBACJqB,aAAa;gBACbC,mBAAiBb;;kCAEjB,KAACc;wBACCH,MAAK;wBACLI,iBAAe;wBACfC,WAAW7D,oCAAuB6B,SAAS;kCAE1CY,UAAUqB,GAAG,CAAC,CAAC,EAAEC,OAAOC,YAAY,EAAEC,MAAMC,WAAW,EAAE,iBACxD,KAACzD;gCACC+C,MAAK;gCACLW,cAAYD;gCAEZL,SAAS;0CAERG;+BAHIA;;oBAQVzB,MAAMuB,GAAG,CAAC,CAACM,MAAMC,kBAChB,KAACV;4BACCH,MAAK;4BACLI,iBAAeS,IAAI;4BACnBR,WAAW7D,oCAAuB6B,SAAS;sCAG1CuC,KAAKN,GAAG,CAAC,CAACQ,KAAKD;gCACd,MAAME,YAAYlE,YAAYiE,KAAK1D;gCACnC,MAAM4D,WAAW,CAAC1C,wBAAwB,CAACyC;gCAC3C,MAAME,UAAUxE,WAAWqE,KAAKhC;gCAChC,MAAMoC,WAAWzD,YAAYqD;gCAC7B,MAAMK,YAAYjD,aAAa4C;gCAC/B,qBACE,KAAChE;oCACCkD,MAAK;oCACLoB,gBAAcH,UAAU,SAASI;oCACjCC,iBAAeJ,WAAW,SAAS;oCACnCK,iBAAeV,IAAI;oCACnBW,UAAUrD,CAAAA,2BAAAA,qCAAAA,eAAiB2C,QAAO,IAAI,CAAC;oCAEvCA,KAAKA;oCACLW,OAAOR;oCACPS,QAAQR;oCACRS,UAAUzC;oCACV0C,QAAQZ;oCACRa,UAAUzD,cAAc0C;oCACxBgB,gBAAgBnE,oBAAoBmD,KAAKD;oCACzCkB,cAAcrE,kBAAkBoD,KAAKD;oCACrCmB,oBAAoB,EAAEhE,sCAAAA,gDAAAA,0BAA4B8C,KAAKD;oCACvDoB,kBAAkB,EAAEhE,oCAAAA,8CAAAA,wBAA0B6C,KAAKD;oCACnDqB,QAAQ,EAAE1E,0BAAAA,oCAAAA,cAAgBsD;oCAC1BqB,SAAShB;oCACTiB,SAASxE;oCACTyE,SAASxE;oCACTyE,SAASxE;oCACTyE,MAAM,EAAExE,wBAAAA,kCAAAA,YAAc+C;oCACtBC,WAAWA;oCACX1C,MAAMA;oCACNK,kBAAkBA;oCAClB8D,QAAQ7D;mCACJJ;oCACJ8B,WAAW7D,WAAW+B,qBAAAA,+BAAAA,SAAU8B,SAAS;oCAtBpCS,IAAI2B,WAAW;4BAyB1B;2BAxCK5B;;;;;AA8CjB,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarRange.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG;IAC7D;;OAEG;IACH,uBAAuB,CAAC,EAAE,wBAAwB,CAAC;IACnD;;OAEG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD,CAAC;AAEF,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC,EAClF,IAAI,CACF,mBAAmB,EACjB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,eAAe,GACf,eAAe,CAClB,EACD,IAAI,CAAC,iBAAiB,EAAE,2BAA2B,GAAG,kBAAkB,CAAC,EACzE,uBAAuB;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;IACtD;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;IAC7C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAUD;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,wXAuB3B,kBAAkB,KAAG,KAAK,CAAC,SA+O7B,CAAC"}
1
+ {"version":3,"file":"CalendarRange.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG;IAC7D;;OAEG;IACH,uBAAuB,CAAC,EAAE,wBAAwB,CAAC;IACnD;;OAEG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD,CAAC;AAEF,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC,EAClF,IAAI,CACF,mBAAmB,EACjB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,eAAe,GACf,eAAe,CAClB,EACD,IAAI,CAAC,iBAAiB,EAAE,2BAA2B,GAAG,kBAAkB,CAAC,EACzE,uBAAuB;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;IACtD;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;IAC7C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAUD;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,wXAuB3B,kBAAkB,KAAG,KAAK,CAAC,SAiP7B,CAAC"}
@@ -4,10 +4,12 @@ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
- import { addMonths, endOfDay, isAfter, isBefore, isSameDay, isWithinInterval, startOfDay, subMonths } from "date-fns";
7
+ import { isSameDate } from "@vkontakte/vkjs";
8
+ import { addMonths, startOfDay, subMonths } from "date-fns";
8
9
  import { useCalendar } from "../../hooks/useCalendar.js";
9
10
  import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
10
11
  import { isFirstDay, isLastDay } from "../../lib/calendar.js";
12
+ import { endOfDay, isWithinInterval } from "../../lib/date.js";
11
13
  import { CalendarDays } from "../CalendarDays/CalendarDays.js";
12
14
  import { CalendarHeader } from "../CalendarHeader/CalendarHeader.js";
13
15
  import { RootComponent } from "../RootComponent/RootComponent.js";
@@ -16,10 +18,10 @@ const getIsDaySelected = (day, value)=>{
16
18
  if (!(value === null || value === void 0 ? void 0 : value[0]) || !value[1]) {
17
19
  return false;
18
20
  }
19
- return isWithinInterval(day, {
20
- start: startOfDay(value[0]),
21
- end: endOfDay(value[1])
22
- });
21
+ return isWithinInterval(day, [
22
+ startOfDay(value[0]),
23
+ endOfDay(value[1])
24
+ ]);
23
25
  };
24
26
  /**
25
27
  * @see https://vkui.io/components/calendar-range
@@ -83,17 +85,17 @@ const getIsDaySelected = (day, value)=>{
83
85
  ];
84
86
  }
85
87
  const [start] = value;
86
- if (start && isSameDay(date, start)) {
88
+ if (start && isSameDate(date, start)) {
87
89
  return [
88
90
  startOfDay(start),
89
91
  endOfDay(start)
90
92
  ];
91
- } else if (start && isBefore(date, start)) {
93
+ } else if (start && date < start) {
92
94
  return [
93
95
  startOfDay(date),
94
96
  endOfDay(start)
95
97
  ];
96
- } else if (start && isAfter(date, start)) {
98
+ } else if (start && date > start) {
97
99
  return [
98
100
  start,
99
101
  endOfDay(date)
@@ -113,19 +115,19 @@ const getIsDaySelected = (day, value)=>{
113
115
  const isDaySelected = React.useCallback((day)=>getIsDaySelected(day, value), [
114
116
  value
115
117
  ]);
116
- const isDayActive = React.useCallback((day)=>Boolean((value === null || value === void 0 ? void 0 : value[0]) && isSameDay(day, value[0]) || (value === null || value === void 0 ? void 0 : value[1]) && isSameDay(day, value[1])), [
118
+ const isDayActive = React.useCallback((day)=>Boolean((value === null || value === void 0 ? void 0 : value[0]) && isSameDate(day, value[0]) || (value === null || value === void 0 ? void 0 : value[1]) && isSameDate(day, value[1])), [
117
119
  value
118
120
  ]);
119
- const isDaySelectionEnd = React.useCallback((day, dayOfWeek)=>Boolean(isLastDay(day, dayOfWeek) || (value === null || value === void 0 ? void 0 : value[1]) && isSameDay(day, value[1])), [
121
+ const isDaySelectionEnd = React.useCallback((day, dayOfWeek)=>Boolean(isLastDay(day, dayOfWeek) || (value === null || value === void 0 ? void 0 : value[1]) && isSameDate(day, value[1])), [
120
122
  value
121
123
  ]);
122
- const isHintedDaySelectionEnd = React.useCallback((day, dayOfWeek)=>Boolean(isLastDay(day, dayOfWeek) || (hintedDate === null || hintedDate === void 0 ? void 0 : hintedDate[1]) && isSameDay(day, hintedDate[1])), [
124
+ const isHintedDaySelectionEnd = React.useCallback((day, dayOfWeek)=>Boolean(isLastDay(day, dayOfWeek) || (hintedDate === null || hintedDate === void 0 ? void 0 : hintedDate[1]) && isSameDate(day, hintedDate[1])), [
123
125
  hintedDate
124
126
  ]);
125
- const isDaySelectionStart = React.useCallback((day, dayOfWeek)=>Boolean(isFirstDay(day, dayOfWeek) || (value === null || value === void 0 ? void 0 : value[0]) && isSameDay(day, value[0])), [
127
+ const isDaySelectionStart = React.useCallback((day, dayOfWeek)=>Boolean(isFirstDay(day, dayOfWeek) || (value === null || value === void 0 ? void 0 : value[0]) && isSameDate(day, value[0])), [
126
128
  value
127
129
  ]);
128
- const isHintedDaySelectionStart = React.useCallback((day, dayOfWeek)=>Boolean(isFirstDay(day, dayOfWeek) || (hintedDate === null || hintedDate === void 0 ? void 0 : hintedDate[0]) && isSameDay(day, hintedDate[0])), [
130
+ const isHintedDaySelectionStart = React.useCallback((day, dayOfWeek)=>Boolean(isFirstDay(day, dayOfWeek) || (hintedDate === null || hintedDate === void 0 ? void 0 : hintedDate[0]) && isSameDate(day, hintedDate[0])), [
129
131
  hintedDate
130
132
  ]);
131
133
  const onDayEnter = React.useCallback((date)=>setHintedDate(getNewValue(date)), [
@@ -156,7 +158,7 @@ const getIsDaySelected = (day, value)=>{
156
158
  isDayActive
157
159
  });
158
160
  const onDayFocus = React.useCallback((date)=>{
159
- if (focusedDay && isSameDay(focusedDay, date)) {
161
+ if (focusedDay && isSameDate(focusedDay, date)) {
160
162
  return;
161
163
  }
162
164
  setFocusedDay(date);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n addMonths,\n endOfDay,\n isAfter,\n isBefore,\n isSameDay,\n isWithinInterval,\n startOfDay,\n subMonths,\n} from 'date-fns';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { isFirstDay, isLastDay } from '../../lib/calendar';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDays,\n type CalendarDaysProps,\n type CalendarDaysTestsProps,\n} from '../CalendarDays/CalendarDays';\nimport {\n CalendarHeader,\n type CalendarHeaderProps,\n type CalendarHeaderTestsProps,\n} from '../CalendarHeader/CalendarHeader';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { DateRangeType } from './types';\nimport { useCalendarKeyboardNavigation, useIsDayFocusable } from './utils';\nimport styles from './CalendarRange.module.css';\n\nexport type { DateRangeType };\n\nexport type CalendarRangeTestsProps = CalendarDaysTestsProps & {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в левой части.\n */\n leftPartHeaderTestsData?: CalendarHeaderTestsProps;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в правой части.\n */\n rightPartHeaderTestsData?: CalendarHeaderTestsProps;\n};\n\nexport interface CalendarRangeProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n >,\n Pick<CalendarDaysProps, 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarRangeTestsProps {\n /**\n * Текущий выбранный промежуток.\n */\n value?: DateRangeType | null;\n /**\n * Начальный промежуток при монтировании.\n */\n defaultValue?: DateRangeType | null;\n /**\n * Запрещает выбор даты в прошлом.\n * Применяется, если не заданы `shouldDisableDate` и `disableFuture`.\n */\n disablePast?: boolean;\n /**\n * Запрещает выбор даты в будущем.\n * Применяется, если не задано `shouldDisableDate`.\n */\n disableFuture?: boolean;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Since 7.4.0.\n *\n * Будет удалeно в **VKUI v8**. Использовалось для задания aria-label для контейнера дней в календаре.\n * Теперь этот контейнер является таблицей (с помощью role=\"grid\") и\n * в aria-label рендерится текущий открытый в календаре месяц и год.\n */\n changeDayLabel?: string;\n /**\n * День недели, с которого начинается неделя.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: (value: DateRangeType | undefined) => void; // TODO [>=8]: поменять тип на `(value?: DateRangeType | null) => void`\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: (value: Date) => boolean;\n /**\n * @deprecated Свойство не используется.\n */\n onClose?: () => void;\n}\n\nconst getIsDaySelected = (day: Date, value?: DateRangeType | null) => {\n if (!value?.[0] || !value[1]) {\n return false;\n }\n\n return isWithinInterval(day, { start: startOfDay(value[0]), end: endOfDay(value[1]) });\n};\n\n/**\n * @see https://vkui.io/components/calendar-range\n */\nexport const CalendarRange = ({\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n weekStartsOn = 1,\n disablePickers,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n 'aria-label': ariaLabel = 'Календарь',\n prevMonthIcon,\n nextMonthIcon,\n listenDayChangesForUpdate,\n renderDayContent,\n dayTestId,\n leftPartHeaderTestsData,\n rightPartHeaderTestsData,\n getRootRef,\n ...props\n}: CalendarRangeProps): React.ReactNode => {\n const _onChange = React.useCallback(\n (newValue: DateRangeType | null | undefined) => onChange?.(newValue || undefined),\n [onChange],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null | undefined>({\n value: valueProp,\n defaultValue,\n onChange: _onChange,\n });\n\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n } = useCalendar({ value, disableFuture, disablePast, shouldDisableDate });\n\n const [hintedDate, setHintedDate] = React.useState<DateRangeType>();\n const secondViewDate = addMonths(viewDate, 1);\n\n const {\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n handleFirstCalendarKeyDown,\n handleSecondCalendarKeyDown,\n handleDayFocus,\n } = useCalendarKeyboardNavigation({\n focusedDay,\n setFocusedDay,\n value,\n viewDates: [viewDate, secondViewDate],\n setViewDate,\n });\n\n const getNewValue = React.useCallback(\n (date: Date): DateRangeType => {\n const isValueEmpty = !value || (value[0] === null && value[1] === null);\n const isRangeSelected = value && !!value[0] && !!value[1];\n if (isValueEmpty || isRangeSelected) {\n return [date, null];\n }\n\n const [start] = value;\n if (start && isSameDay(date, start)) {\n return [startOfDay(start), endOfDay(start)];\n } else if (start && isBefore(date, start)) {\n return [startOfDay(date), endOfDay(start)];\n } else if (start && isAfter(date, start)) {\n return [start, endOfDay(date)];\n }\n return value;\n },\n [value],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n updateValue(getNewValue(date));\n setHintedDate(undefined);\n },\n [updateValue, 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 const onRightPartViewDateChange = React.useCallback(\n (newDate: Date) => setViewDate(subMonths(newDate, 1)),\n [setViewDate],\n );\n\n const isDayFocusableInFirstCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate,\n isDayActive,\n });\n\n const isDayFocusableInSecondCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate: secondViewDate,\n isDayActive,\n });\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDay(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n handleDayFocus(date);\n },\n [focusedDay, handleDayFocus, setFocusedDay],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={styles.host}\n getRootRef={getRootRef}\n >\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={viewDate}\n onChange={setViewDate}\n nextMonthHidden\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...leftPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={viewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleFirstCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInFirstCalendar}\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 renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={secondViewDate}\n onChange={onRightPartViewDateChange}\n prevMonthHidden\n onNextMonth={setNextMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n nextMonthIcon={nextMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...rightPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={secondViewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleSecondCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInSecondCalendar}\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 renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","addMonths","endOfDay","isAfter","isBefore","isSameDay","isWithinInterval","startOfDay","subMonths","useCalendar","useCustomEnsuredControl","isFirstDay","isLastDay","CalendarDays","CalendarHeader","RootComponent","useCalendarKeyboardNavigation","useIsDayFocusable","getIsDaySelected","day","value","start","end","CalendarRange","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","weekStartsOn","disablePickers","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","ariaLabel","prevMonthIcon","nextMonthIcon","listenDayChangesForUpdate","renderDayContent","dayTestId","leftPartHeaderTestsData","rightPartHeaderTestsData","getRootRef","props","_onChange","useCallback","newValue","undefined","updateValue","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","hintedDate","setHintedDate","useState","secondViewDate","focusableDayOnFirstCalendar","focusableDayOnSecondCalendar","handleFirstCalendarKeyDown","handleSecondCalendarKeyDown","handleDayFocus","viewDates","getNewValue","date","isValueEmpty","isRangeSelected","onDayChange","isDaySelected","isDayActive","Boolean","isDaySelectionEnd","dayOfWeek","isHintedDaySelectionEnd","isDaySelectionStart","isHintedDaySelectionStart","onDayEnter","onDayLeave","isDayHinted","onRightPartViewDateChange","newDate","isDayFocusableInFirstCalendar","isDayFocusableInSecondCalendar","onDayFocus","aria-label","baseClassName","div","className","nextMonthHidden","onPrevMonth","onKeyDown","isDayFocusable","prevMonthHidden","onNextMonth"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,SAAS,EACTC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,gBAAgB,EAChBC,UAAU,EACVC,SAAS,QACJ,WAAW;AAClB,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,uBAAuB,QAAQ,mCAAgC;AACxE,SAASC,UAAU,EAAEC,SAAS,QAAQ,wBAAqB;AAE3D,SACEC,YAAY,QAGP,kCAA+B;AACtC,SACEC,cAAc,QAGT,sCAAmC;AAC1C,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,6BAA6B,EAAEC,iBAAiB,QAAQ,aAAU;AA+E3E,MAAMC,mBAAmB,CAACC,KAAWC;IACnC,IAAI,EAACA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAI,CAACA,KAAK,CAAC,EAAE,EAAE;QAC5B,OAAO;IACT;IAEA,OAAOd,iBAAiBa,KAAK;QAAEE,OAAOd,WAAWa,KAAK,CAAC,EAAE;QAAGE,KAAKpB,SAASkB,KAAK,CAAC,EAAE;IAAE;AACtF;AAEA;;CAEC,GACD,OAAO,MAAMG,gBAAgB;QAAC,EAC5B,SAASC,SAAS,EAClBC,YAAY,EACZC,QAAQ,EACRC,WAAW,EACXC,aAAa,EACbC,iBAAiB,EACjBC,eAAe,CAAC,EAChBC,cAAc,EACdC,iBAAiB,kBAAkB,EACnCC,iBAAiB,iBAAiB,EAClCC,mBAAmB,gBAAgB,EACnCC,kBAAkB,cAAc,EAChC,cAAcC,YAAY,WAAW,EACrCC,aAAa,EACbC,aAAa,EACbC,yBAAyB,EACzBC,gBAAgB,EAChBC,SAAS,EACTC,uBAAuB,EACvBC,wBAAwB,EACxBC,UAAU,EAES,WADhBC;QArBH;QACApB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACA;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,YAAY9C,MAAM+C,WAAW,CACjC,CAACC,WAA+CtB,qBAAAA,+BAAAA,SAAWsB,YAAYC,YACvE;QAACvB;KAAS;IAGZ,MAAM,CAACN,OAAO8B,YAAY,GAAGxC,wBAA0D;QACrFU,OAAOI;QACPC;QACAC,UAAUoB;IACZ;IAEA,MAAM,EACJK,QAAQ,EACRC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,aAAa,EACbC,YAAY,EACZC,aAAa,EACbC,eAAe,EACfC,cAAc,EACf,GAAGnD,YAAY;QAAEW;QAAOQ;QAAeD;QAAaE;IAAkB;IAEvE,MAAM,CAACgC,YAAYC,cAAc,GAAG9D,MAAM+D,QAAQ;IAClD,MAAMC,iBAAiB/D,UAAUkD,UAAU;IAE3C,MAAM,EACJc,2BAA2B,EAC3BC,4BAA4B,EAC5BC,0BAA0B,EAC1BC,2BAA2B,EAC3BC,cAAc,EACf,GAAGrD,8BAA8B;QAChCuC;QACAC;QACApC;QACAkD,WAAW;YAACnB;YAAUa;SAAe;QACrCZ;IACF;IAEA,MAAMmB,cAAcvE,MAAM+C,WAAW,CACnC,CAACyB;QACC,MAAMC,eAAe,CAACrD,SAAUA,KAAK,CAAC,EAAE,KAAK,QAAQA,KAAK,CAAC,EAAE,KAAK;QAClE,MAAMsD,kBAAkBtD,SAAS,CAAC,CAACA,KAAK,CAAC,EAAE,IAAI,CAAC,CAACA,KAAK,CAAC,EAAE;QACzD,IAAIqD,gBAAgBC,iBAAiB;YACnC,OAAO;gBAACF;gBAAM;aAAK;QACrB;QAEA,MAAM,CAACnD,MAAM,GAAGD;QAChB,IAAIC,SAAShB,UAAUmE,MAAMnD,QAAQ;YACnC,OAAO;gBAACd,WAAWc;gBAAQnB,SAASmB;aAAO;QAC7C,OAAO,IAAIA,SAASjB,SAASoE,MAAMnD,QAAQ;YACzC,OAAO;gBAACd,WAAWiE;gBAAOtE,SAASmB;aAAO;QAC5C,OAAO,IAAIA,SAASlB,QAAQqE,MAAMnD,QAAQ;YACxC,OAAO;gBAACA;gBAAOnB,SAASsE;aAAM;QAChC;QACA,OAAOpD;IACT,GACA;QAACA;KAAM;IAGT,MAAMuD,cAAc3E,MAAM+C,WAAW,CACnC,CAACyB;QACCtB,YAAYqB,YAAYC;QACxBV,cAAcb;IAChB,GACA;QAACC;QAAaqB;KAAY;IAG5B,MAAMK,gBAAgB5E,MAAM+C,WAAW,CAAC,CAAC5B,MAAcD,iBAAiBC,KAAKC,QAAQ;QAACA;KAAM;IAE5F,MAAMyD,cAAc7E,MAAM+C,WAAW,CACnC,CAAC5B,MACC2D,QAAQ,CAAC1D,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIf,UAAUc,KAAKC,KAAK,CAAC,EAAE,KAAOA,CAAAA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIf,UAAUc,KAAKC,KAAK,CAAC,EAAE,IAC5F;QAACA;KAAM;IAGT,MAAM2D,oBAAoB/E,MAAM+C,WAAW,CACzC,CAAC5B,KAAW6D,YACVF,QAAQlE,UAAUO,KAAK6D,cAAe5D,CAAAA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIf,UAAUc,KAAKC,KAAK,CAAC,EAAE,IAC7E;QAACA;KAAM;IAGT,MAAM6D,0BAA0BjF,MAAM+C,WAAW,CAC/C,CAAC5B,KAAW6D,YACVF,QAAQlE,UAAUO,KAAK6D,cAAenB,CAAAA,uBAAAA,iCAAAA,UAAY,CAAC,EAAE,KAAIxD,UAAUc,KAAK0C,UAAU,CAAC,EAAE,IACvF;QAACA;KAAW;IAGd,MAAMqB,sBAAsBlF,MAAM+C,WAAW,CAC3C,CAAC5B,KAAW6D,YACVF,QAAQnE,WAAWQ,KAAK6D,cAAe5D,CAAAA,kBAAAA,4BAAAA,KAAO,CAAC,EAAE,KAAIf,UAAUc,KAAKC,KAAK,CAAC,EAAE,IAC9E;QAACA;KAAM;IAGT,MAAM+D,4BAA4BnF,MAAM+C,WAAW,CACjD,CAAC5B,KAAW6D,YACVF,QAAQnE,WAAWQ,KAAK6D,cAAenB,CAAAA,uBAAAA,iCAAAA,UAAY,CAAC,EAAE,KAAIxD,UAAUc,KAAK0C,UAAU,CAAC,EAAE,IACxF;QAACA;KAAW;IAGd,MAAMuB,aAAapF,MAAM+C,WAAW,CAClC,CAACyB,OAAeV,cAAcS,YAAYC,QAC1C;QAACV;QAAeS;KAAY;IAG9B,MAAMc,aAAarF,MAAM+C,WAAW,CAAC,IAAMe,cAAcb,YAAY;QAACa;KAAc;IAEpF,MAAMwB,cAActF,MAAM+C,WAAW,CACnC,CAAC5B,MAAcD,iBAAiBC,KAAK0C,aACrC;QAACA;KAAW;IAGd,MAAM0B,4BAA4BvF,MAAM+C,WAAW,CACjD,CAACyC,UAAkBpC,YAAY5C,UAAUgF,SAAS,KAClD;QAACpC;KAAY;IAGf,MAAMqC,gCAAgCxE,kBAAkB;QACtDG;QACA6C;QACAC;QACAf;QACA0B;IACF;IAEA,MAAMa,iCAAiCzE,kBAAkB;QACvDG;QACA6C;QACAC;QACAf,UAAUa;QACVa;IACF;IAEA,MAAMc,aAAa3F,MAAM+C,WAAW,CAClC,CAACyB;QACC,IAAIjB,cAAclD,UAAUkD,YAAYiB,OAAO;YAC7C;QACF;QAEAhB,cAAcgB;QACdH,eAAeG;IACjB,GACA;QAACjB;QAAYc;QAAgBb;KAAc;IAG7C,qBACE,MAACzC;QACC6E,cAAYxD;OACRS;QACJgD,aAAa;QACbjD,YAAYA;;0BAEZ,MAACkD;gBAAIC,SAAS;;kCACZ,KAACjF;wBACCqC,UAAUA;wBACVzB,UAAU0B;wBACV4C,eAAe;wBACfC,aAAa5C;wBACbtB,gBAAgBA;wBAChBgE,SAAS;wBACT/D,gBAAgBA;wBAChBC,gBAAgBA;wBAChBC,kBAAkBA;wBAClBC,iBAAiBA;wBACjBE,eAAeA;wBACfsB,iBAAiBA;wBACjBC,gBAAgBA;uBACZlB;kCAEN,KAAC7B;wBACCsC,UAAUA;wBACV/B,OAAOA;wBACPU,cAAcA;wBACdoE,WAAW/B;wBACXwB,YAAYA;wBACZlC,cAAcA;wBACd0C,gBAAgBV;wBAChBd,aAAaA;wBACbC,eAAeA;wBACfC,aAAaA;wBACbE,mBAAmBA;wBACnBG,qBAAqBA;wBACrBI,aAAaA;wBACbF,YAAYA;wBACZC,YAAYA;wBACZJ,yBAAyBA;wBACzBE,2BAA2BA;wBAC3BzB,eAAeA;wBACfnB,2BAA2BA;wBAC3BC,kBAAkBA;wBAClBC,WAAWA;;;;0BAGf,MAACqD;gBAAIC,SAAS;;kCACZ,KAACjF;wBACCqC,UAAUa;wBACVtC,UAAU6D;wBACVa,eAAe;wBACfC,aAAa/C;wBACbvB,gBAAgBA;wBAChBgE,SAAS;wBACT/D,gBAAgBA;wBAChBC,gBAAgBA;wBAChBC,kBAAkBA;wBAClBC,iBAAiBA;wBACjBG,eAAeA;wBACfqB,iBAAiBA;wBACjBC,gBAAgBA;uBACZjB;kCAEN,KAAC9B;wBACCsC,UAAUa;wBACV5C,OAAOA;wBACPU,cAAcA;wBACdoE,WAAW9B;wBACXuB,YAAYA;wBACZlC,cAAcA;wBACd0C,gBAAgBT;wBAChBf,aAAaA;wBACbC,eAAeA;wBACfC,aAAaA;wBACbE,mBAAmBA;wBACnBG,qBAAqBA;wBACrBI,aAAaA;wBACbF,YAAYA;wBACZC,YAAYA;wBACZJ,yBAAyBA;wBACzBE,2BAA2BA;wBAC3BzB,eAAeA;wBACfnB,2BAA2BA;wBAC3BC,kBAAkBA;wBAClBC,WAAWA;;;;;;AAKrB,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/CalendarRange/CalendarRange.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { isSameDate } from '@vkontakte/vkjs';\nimport { addMonths, startOfDay, subMonths } from 'date-fns';\nimport { useCalendar } from '../../hooks/useCalendar';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { isFirstDay, isLastDay } from '../../lib/calendar';\nimport { endOfDay, isWithinInterval } from '../../lib/date';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport {\n CalendarDays,\n type CalendarDaysProps,\n type CalendarDaysTestsProps,\n} from '../CalendarDays/CalendarDays';\nimport {\n CalendarHeader,\n type CalendarHeaderProps,\n type CalendarHeaderTestsProps,\n} from '../CalendarHeader/CalendarHeader';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { DateRangeType } from './types';\nimport { useCalendarKeyboardNavigation, useIsDayFocusable } from './utils';\nimport styles from './CalendarRange.module.css';\n\nexport type { DateRangeType };\n\nexport type CalendarRangeTestsProps = CalendarDaysTestsProps & {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в левой части.\n */\n leftPartHeaderTestsData?: CalendarHeaderTestsProps;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в заголовке календаря в правой части.\n */\n rightPartHeaderTestsData?: CalendarHeaderTestsProps;\n};\n\nexport interface CalendarRangeProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange' | 'defaultValue'>,\n Pick<\n CalendarHeaderProps,\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n >,\n Pick<CalendarDaysProps, 'listenDayChangesForUpdate' | 'renderDayContent'>,\n CalendarRangeTestsProps {\n /**\n * Текущий выбранный промежуток.\n */\n value?: DateRangeType | null;\n /**\n * Начальный промежуток при монтировании.\n */\n defaultValue?: DateRangeType | null;\n /**\n * Запрещает выбор даты в прошлом.\n * Применяется, если не заданы `shouldDisableDate` и `disableFuture`.\n */\n disablePast?: boolean;\n /**\n * Запрещает выбор даты в будущем.\n * Применяется, если не задано `shouldDisableDate`.\n */\n disableFuture?: boolean;\n /**\n * Отключает селекторы выбора месяца/года.\n */\n disablePickers?: boolean;\n /**\n * `aria-label` для изменения дня.\n *\n * @deprecated Since 7.4.0.\n *\n * Будет удалeно в **VKUI v8**. Использовалось для задания aria-label для контейнера дней в календаре.\n * Теперь этот контейнер является таблицей (с помощью role=\"grid\") и\n * в aria-label рендерится текущий открытый в календаре месяц и год.\n */\n changeDayLabel?: string;\n /**\n * День недели, с которого начинается неделя.\n */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: (value: DateRangeType | undefined) => void; // TODO [>=8]: поменять тип на `(value?: DateRangeType | null) => void`\n /**\n * Функция для проверки запрета выбора даты.\n */\n shouldDisableDate?: (value: Date) => boolean;\n /**\n * @deprecated Свойство не используется.\n */\n onClose?: () => void;\n}\n\nconst getIsDaySelected = (day: Date, value?: DateRangeType | null) => {\n if (!value?.[0] || !value[1]) {\n return false;\n }\n\n return isWithinInterval(day, [startOfDay(value[0]), endOfDay(value[1])]);\n};\n\n/**\n * @see https://vkui.io/components/calendar-range\n */\nexport const CalendarRange = ({\n 'value': valueProp,\n defaultValue,\n onChange,\n disablePast,\n disableFuture,\n shouldDisableDate,\n weekStartsOn = 1,\n disablePickers,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n 'aria-label': ariaLabel = 'Календарь',\n prevMonthIcon,\n nextMonthIcon,\n listenDayChangesForUpdate,\n renderDayContent,\n dayTestId,\n leftPartHeaderTestsData,\n rightPartHeaderTestsData,\n getRootRef,\n ...props\n}: CalendarRangeProps): React.ReactNode => {\n const _onChange = React.useCallback(\n (newValue: DateRangeType | null | undefined) => onChange?.(newValue || undefined),\n [onChange],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null | undefined>({\n value: valueProp,\n defaultValue,\n onChange: _onChange,\n });\n\n const {\n viewDate,\n setViewDate,\n setPrevMonth,\n setNextMonth,\n focusedDay,\n setFocusedDay,\n isDayFocused,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n } = useCalendar({ value, disableFuture, disablePast, shouldDisableDate });\n\n const [hintedDate, setHintedDate] = React.useState<DateRangeType>();\n const secondViewDate = addMonths(viewDate, 1);\n\n const {\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n handleFirstCalendarKeyDown,\n handleSecondCalendarKeyDown,\n handleDayFocus,\n } = useCalendarKeyboardNavigation({\n focusedDay,\n setFocusedDay,\n value,\n viewDates: [viewDate, secondViewDate],\n setViewDate,\n });\n\n const getNewValue = React.useCallback(\n (date: Date): DateRangeType => {\n const isValueEmpty = !value || (value[0] === null && value[1] === null);\n const isRangeSelected = value && !!value[0] && !!value[1];\n if (isValueEmpty || isRangeSelected) {\n return [date, null];\n }\n\n const [start] = value;\n if (start && isSameDate(date, start)) {\n return [startOfDay(start), endOfDay(start)];\n } else if (start && date < start) {\n return [startOfDay(date), endOfDay(start)];\n } else if (start && date > start) {\n return [start, endOfDay(date)];\n }\n return value;\n },\n [value],\n );\n\n const onDayChange = React.useCallback(\n (date: Date) => {\n updateValue(getNewValue(date));\n setHintedDate(undefined);\n },\n [updateValue, 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(\n (value?.[0] && isSameDate(day, value[0])) || (value?.[1] && isSameDate(day, value[1])),\n ),\n [value],\n );\n\n const isDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (value?.[1] && isSameDate(day, value[1]))),\n [value],\n );\n\n const isHintedDaySelectionEnd = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isLastDay(day, dayOfWeek) || (hintedDate?.[1] && isSameDate(day, hintedDate[1]))),\n [hintedDate],\n );\n\n const isDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (value?.[0] && isSameDate(day, value[0]))),\n [value],\n );\n\n const isHintedDaySelectionStart = React.useCallback(\n (day: Date, dayOfWeek: number) =>\n Boolean(isFirstDay(day, dayOfWeek) || (hintedDate?.[0] && isSameDate(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 const onRightPartViewDateChange = React.useCallback(\n (newDate: Date) => setViewDate(subMonths(newDate, 1)),\n [setViewDate],\n );\n\n const isDayFocusableInFirstCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate,\n isDayActive,\n });\n\n const isDayFocusableInSecondCalendar = useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate: secondViewDate,\n isDayActive,\n });\n\n const onDayFocus = React.useCallback(\n (date: Date) => {\n if (focusedDay && isSameDate(focusedDay, date)) {\n return;\n }\n\n setFocusedDay(date);\n handleDayFocus(date);\n },\n [focusedDay, handleDayFocus, setFocusedDay],\n );\n\n return (\n <RootComponent\n aria-label={ariaLabel}\n {...props}\n baseClassName={styles.host}\n getRootRef={getRootRef}\n >\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={viewDate}\n onChange={setViewDate}\n nextMonthHidden\n onPrevMonth={setPrevMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...leftPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={viewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleFirstCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInFirstCalendar}\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 renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n <div className={styles.inner}>\n <CalendarHeader\n viewDate={secondViewDate}\n onChange={onRightPartViewDateChange}\n prevMonthHidden\n onNextMonth={setNextMonth}\n disablePickers={disablePickers}\n className={styles.header}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n nextMonthIcon={nextMonthIcon}\n isMonthDisabled={isMonthDisabled}\n isYearDisabled={isYearDisabled}\n {...rightPartHeaderTestsData}\n />\n <CalendarDays\n viewDate={secondViewDate}\n value={value}\n weekStartsOn={weekStartsOn}\n onKeyDown={handleSecondCalendarKeyDown}\n onDayFocus={onDayFocus}\n isDayFocused={isDayFocused}\n isDayFocusable={isDayFocusableInSecondCalendar}\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 renderDayContent={renderDayContent}\n dayTestId={dayTestId}\n />\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","isSameDate","addMonths","startOfDay","subMonths","useCalendar","useCustomEnsuredControl","isFirstDay","isLastDay","endOfDay","isWithinInterval","CalendarDays","CalendarHeader","RootComponent","useCalendarKeyboardNavigation","useIsDayFocusable","getIsDaySelected","day","value","CalendarRange","valueProp","defaultValue","onChange","disablePast","disableFuture","shouldDisableDate","weekStartsOn","disablePickers","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","ariaLabel","prevMonthIcon","nextMonthIcon","listenDayChangesForUpdate","renderDayContent","dayTestId","leftPartHeaderTestsData","rightPartHeaderTestsData","getRootRef","props","_onChange","useCallback","newValue","undefined","updateValue","viewDate","setViewDate","setPrevMonth","setNextMonth","focusedDay","setFocusedDay","isDayFocused","isDayDisabled","isMonthDisabled","isYearDisabled","hintedDate","setHintedDate","useState","secondViewDate","focusableDayOnFirstCalendar","focusableDayOnSecondCalendar","handleFirstCalendarKeyDown","handleSecondCalendarKeyDown","handleDayFocus","viewDates","getNewValue","date","isValueEmpty","isRangeSelected","start","onDayChange","isDaySelected","isDayActive","Boolean","isDaySelectionEnd","dayOfWeek","isHintedDaySelectionEnd","isDaySelectionStart","isHintedDaySelectionStart","onDayEnter","onDayLeave","isDayHinted","onRightPartViewDateChange","newDate","isDayFocusableInFirstCalendar","isDayFocusableInSecondCalendar","onDayFocus","aria-label","baseClassName","div","className","nextMonthHidden","onPrevMonth","onKeyDown","isDayFocusable","prevMonthHidden","onNextMonth"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarRange/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,wBAAgB,6BAA6B,CAAC,EAC5C,UAAU,EACV,KAAK,EACL,aAAa,EACb,SAAS,EAAE,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,EAC1D,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IACtE,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;CACzC;;;wCAgEW,KAAK,CAAC,aAAa;yCAOnB,KAAK,CAAC,aAAa;4BAOnB,IAAI;EA6Bf;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,2BAA2B,EAAE,IAAI,GAAG,SAAS,CAAC;IAC9C,4BAA4B,EAAE,IAAI,GAAG,SAAS,CAAC;IAC/C,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CACtC,SAaS,IAAI,aA6Bb"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/CalendarRange/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,wBAAgB,6BAA6B,CAAC,EAC5C,UAAU,EACV,KAAK,EACL,aAAa,EACb,SAAS,EAAE,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,EAC1D,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;IACtE,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;CACzC;;;wCAgEW,KAAK,CAAC,aAAa;yCAOnB,KAAK,CAAC,aAAa;4BAOnB,IAAI;EA6Bf;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,2BAA2B,EAAE,IAAI,GAAG,SAAS,CAAC;IAC9C,4BAA4B,EAAE,IAAI,GAAG,SAAS,CAAC;IAC/C,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;CACtC,SAaS,IAAI,aA6Bb"}
@@ -1,8 +1,9 @@
1
1
  import * as React from "react";
2
2
  import { isSameDate } from "@vkontakte/vkjs";
3
- import { isAfter, isBefore, isSameDay, isSameMonth, startOfMonth } from "date-fns";
3
+ import { startOfMonth } from "date-fns";
4
4
  import { Keys, pressedKey } from "../../lib/accessibility.js";
5
5
  import { navigateDate, NAVIGATION_KEYS } from "../../lib/calendar.js";
6
+ import { isSameMonth } from "../../lib/date.js";
6
7
  import { isHTMLElement } from "../../lib/dom.js";
7
8
  export function useCalendarKeyboardNavigation({ focusedDay, value, setFocusedDay, viewDates: [firstCalendarViewDate, secondCalendarViewDate], setViewDate }) {
8
9
  // соотвествует дню, на котором можно сфокусироваться с помощью Tab
@@ -22,13 +23,13 @@ export function useCalendarKeyboardNavigation({ focusedDay, value, setFocusedDay
22
23
  if (isFirst) {
23
24
  if (isSameMonth(newFocusedDay, firstCalendarViewDate)) {
24
25
  setFocusableDayOnFirstCalendar(newFocusedDay);
25
- } else if (isAfter(newFocusedDay, firstCalendarViewDate)) {
26
+ } else if (newFocusedDay > firstCalendarViewDate) {
26
27
  setFocusableDayOnSecondCalendar(newFocusedDay);
27
28
  }
28
29
  } else {
29
30
  if (isSameMonth(newFocusedDay, secondCalendarViewDate)) {
30
31
  setFocusableDayOnSecondCalendar(newFocusedDay);
31
- } else if (isBefore(newFocusedDay, secondCalendarViewDate)) {
32
+ } else if (newFocusedDay < secondCalendarViewDate) {
32
33
  setFocusableDayOnFirstCalendar(newFocusedDay);
33
34
  }
34
35
  }
@@ -99,7 +100,7 @@ export function useCalendarKeyboardNavigation({ focusedDay, value, setFocusedDay
99
100
  const isDayFocusable = React.useCallback((day)=>{
100
101
  // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex="0",
101
102
  if (isCalendarHasFocusableDay) {
102
- return Boolean(focusableDayOnFirstCalendar && isSameDay(focusableDayOnFirstCalendar, day) || focusableDayOnSecondCalendar && isSameDay(focusableDayOnSecondCalendar, day));
103
+ return Boolean(focusableDayOnFirstCalendar && isSameDate(focusableDayOnFirstCalendar, day) || focusableDayOnSecondCalendar && isSameDate(focusableDayOnSecondCalendar, day));
103
104
  }
104
105
  // при открытии календаря focusableDay не определён,
105
106
  // поэтому tabIndex="0" будет у дня, соответствующего дню в инпуте
@@ -108,7 +109,7 @@ export function useCalendarKeyboardNavigation({ focusedDay, value, setFocusedDay
108
109
  }
109
110
  // при переключении месяца любая навигация с помощью Tab начинается
110
111
  // с первого дня месяца.
111
- return isSameDay(startOfMonth(viewDate), day);
112
+ return isSameDate(startOfMonth(viewDate), day);
112
113
  }, [
113
114
  isCalendarHasFocusableDay,
114
115
  isValueVisibleOnCalendar,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CalendarRange/utils.ts"],"sourcesContent":["import * as React from 'react';\nimport { isSameDate } from '@vkontakte/vkjs';\nimport { isAfter, isBefore, isSameDay, isSameMonth, startOfMonth } from 'date-fns';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { navigateDate, NAVIGATION_KEYS } from '../../lib/calendar';\nimport { isHTMLElement } from '../../lib/dom';\nimport type { DateRangeType } from './types';\n\nexport function useCalendarKeyboardNavigation({\n focusedDay,\n value,\n setFocusedDay,\n viewDates: [firstCalendarViewDate, secondCalendarViewDate],\n setViewDate,\n}: {\n focusedDay: Date | undefined;\n setViewDate: (date: Date) => void;\n setFocusedDay: React.Dispatch<React.SetStateAction<Date | undefined>>;\n viewDates: [Date, Date];\n value: DateRangeType | null | undefined;\n}) {\n // соотвествует дню, на котором можно сфокусироваться с помощью Tab\n const [focusableDayOnFirstCalendar, setFocusableDayOnFirstCalendar] = React.useState<Date>();\n const [focusableDayOnSecondCalendar, setFocusableDayOnSecondCalendar] = React.useState<Date>();\n\n const handleCalendarKeyDown = React.useCallback(\n (event: React.KeyboardEvent, isFirst: boolean) => {\n const key = pressedKey(event);\n if (!key) {\n return;\n }\n\n if (NAVIGATION_KEYS.includes(key)) {\n event.preventDefault();\n\n const newFocusedDay = navigateDate(focusedDay ?? value?.[0], key);\n\n if (\n newFocusedDay &&\n !isSameMonth(newFocusedDay, firstCalendarViewDate) &&\n !isSameMonth(newFocusedDay, secondCalendarViewDate)\n ) {\n setViewDate(newFocusedDay);\n }\n\n if (isFirst) {\n if (isSameMonth(newFocusedDay, firstCalendarViewDate)) {\n setFocusableDayOnFirstCalendar(newFocusedDay);\n } else if (isAfter(newFocusedDay, firstCalendarViewDate)) {\n setFocusableDayOnSecondCalendar(newFocusedDay);\n }\n } else {\n if (isSameMonth(newFocusedDay, secondCalendarViewDate)) {\n setFocusableDayOnSecondCalendar(newFocusedDay);\n } else if (isBefore(newFocusedDay, secondCalendarViewDate)) {\n setFocusableDayOnFirstCalendar(newFocusedDay);\n }\n }\n\n setFocusedDay(newFocusedDay);\n\n return;\n }\n\n if (key === Keys.TAB) {\n setFocusedDay(undefined);\n if (isFirst) {\n setFocusableDayOnFirstCalendar(focusedDay);\n } else {\n setFocusableDayOnSecondCalendar(focusedDay);\n }\n\n return;\n }\n\n if ((key === Keys.ENTER || key === Keys.SPACE) && isHTMLElement(event.target)) {\n event.preventDefault();\n event.target.click?.();\n }\n },\n [focusedDay, value, firstCalendarViewDate, secondCalendarViewDate, setFocusedDay, setViewDate],\n );\n\n const handleFirstCalendarKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n handleCalendarKeyDown(event, true);\n },\n [handleCalendarKeyDown],\n );\n\n const handleSecondCalendarKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n handleCalendarKeyDown(event, false);\n },\n [handleCalendarKeyDown],\n );\n\n const handleDayFocus = React.useCallback(\n (value: Date) => {\n if (\n isSameMonth(firstCalendarViewDate, value) &&\n (!focusableDayOnFirstCalendar || !isSameDate(focusableDayOnFirstCalendar, value))\n ) {\n setFocusableDayOnFirstCalendar(value);\n }\n if (\n isSameMonth(secondCalendarViewDate, value) &&\n (!focusableDayOnSecondCalendar || !isSameDate(focusableDayOnSecondCalendar, value))\n ) {\n setFocusableDayOnSecondCalendar(value);\n }\n },\n [\n firstCalendarViewDate,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n secondCalendarViewDate,\n ],\n );\n\n return {\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n handleFirstCalendarKeyDown,\n handleSecondCalendarKeyDown,\n handleDayFocus,\n };\n}\n\n/**\n * Возвращает функцию, которая позволяет проверить является ли день в календаре днём на который\n * можно попасть с помощью Tab.\n * Единственный день в таблице календаря у которого есть tabIndex=\"0\"\n * Чтобы на него можно было попасть из заголовка календаря.\n */\nexport function useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate,\n isDayActive,\n}: {\n value: DateRangeType | null | undefined;\n focusableDayOnFirstCalendar: Date | undefined;\n focusableDayOnSecondCalendar: Date | undefined;\n viewDate: Date;\n isDayActive: (date: Date) => boolean;\n}) {\n const isValueVisibleOnCalendar = Boolean(\n value &&\n ((value[0] && isSameMonth(value[0], viewDate)) ||\n (value[1] && isSameMonth(value[1], viewDate))),\n );\n\n const isCalendarHasFocusableDay = Boolean(\n (focusableDayOnFirstCalendar && isSameMonth(focusableDayOnFirstCalendar, viewDate)) ||\n (focusableDayOnSecondCalendar && isSameMonth(focusableDayOnSecondCalendar, viewDate)),\n );\n\n const isDayFocusable = React.useCallback(\n (day: Date) => {\n // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex=\"0\",\n if (isCalendarHasFocusableDay) {\n return Boolean(\n (focusableDayOnFirstCalendar && isSameDay(focusableDayOnFirstCalendar, day)) ||\n (focusableDayOnSecondCalendar && isSameDay(focusableDayOnSecondCalendar, day)),\n );\n }\n\n // при открытии календаря focusableDay не определён,\n // поэтому tabIndex=\"0\" будет у дня, соответствующего дню в инпуте\n if (isValueVisibleOnCalendar) {\n return isDayActive(day);\n }\n\n // при переключении месяца любая навигация с помощью Tab начинается\n // с первого дня месяца.\n return isSameDay(startOfMonth(viewDate), day);\n },\n [\n isCalendarHasFocusableDay,\n isValueVisibleOnCalendar,\n viewDate,\n isDayActive,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n ],\n );\n return isDayFocusable;\n}\n"],"names":["React","isSameDate","isAfter","isBefore","isSameDay","isSameMonth","startOfMonth","Keys","pressedKey","navigateDate","NAVIGATION_KEYS","isHTMLElement","useCalendarKeyboardNavigation","focusedDay","value","setFocusedDay","viewDates","firstCalendarViewDate","secondCalendarViewDate","setViewDate","focusableDayOnFirstCalendar","setFocusableDayOnFirstCalendar","useState","focusableDayOnSecondCalendar","setFocusableDayOnSecondCalendar","handleCalendarKeyDown","useCallback","event","isFirst","key","includes","preventDefault","newFocusedDay","TAB","undefined","ENTER","SPACE","target","click","handleFirstCalendarKeyDown","handleSecondCalendarKeyDown","handleDayFocus","useIsDayFocusable","viewDate","isDayActive","isValueVisibleOnCalendar","Boolean","isCalendarHasFocusableDay","isDayFocusable","day"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CalendarRange/utils.ts"],"sourcesContent":["import * as React from 'react';\nimport { isSameDate } from '@vkontakte/vkjs';\nimport { startOfMonth } from 'date-fns';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { navigateDate, NAVIGATION_KEYS } from '../../lib/calendar';\nimport { isSameMonth } from '../../lib/date';\nimport { isHTMLElement } from '../../lib/dom';\nimport type { DateRangeType } from './types';\n\nexport function useCalendarKeyboardNavigation({\n focusedDay,\n value,\n setFocusedDay,\n viewDates: [firstCalendarViewDate, secondCalendarViewDate],\n setViewDate,\n}: {\n focusedDay: Date | undefined;\n setViewDate: (date: Date) => void;\n setFocusedDay: React.Dispatch<React.SetStateAction<Date | undefined>>;\n viewDates: [Date, Date];\n value: DateRangeType | null | undefined;\n}) {\n // соотвествует дню, на котором можно сфокусироваться с помощью Tab\n const [focusableDayOnFirstCalendar, setFocusableDayOnFirstCalendar] = React.useState<Date>();\n const [focusableDayOnSecondCalendar, setFocusableDayOnSecondCalendar] = React.useState<Date>();\n\n const handleCalendarKeyDown = React.useCallback(\n (event: React.KeyboardEvent, isFirst: boolean) => {\n const key = pressedKey(event);\n if (!key) {\n return;\n }\n\n if (NAVIGATION_KEYS.includes(key)) {\n event.preventDefault();\n\n const newFocusedDay = navigateDate(focusedDay ?? value?.[0], key);\n\n if (\n newFocusedDay &&\n !isSameMonth(newFocusedDay, firstCalendarViewDate) &&\n !isSameMonth(newFocusedDay, secondCalendarViewDate)\n ) {\n setViewDate(newFocusedDay);\n }\n\n if (isFirst) {\n if (isSameMonth(newFocusedDay, firstCalendarViewDate)) {\n setFocusableDayOnFirstCalendar(newFocusedDay);\n } else if (newFocusedDay > firstCalendarViewDate) {\n setFocusableDayOnSecondCalendar(newFocusedDay);\n }\n } else {\n if (isSameMonth(newFocusedDay, secondCalendarViewDate)) {\n setFocusableDayOnSecondCalendar(newFocusedDay);\n } else if (newFocusedDay < secondCalendarViewDate) {\n setFocusableDayOnFirstCalendar(newFocusedDay);\n }\n }\n\n setFocusedDay(newFocusedDay);\n\n return;\n }\n\n if (key === Keys.TAB) {\n setFocusedDay(undefined);\n if (isFirst) {\n setFocusableDayOnFirstCalendar(focusedDay);\n } else {\n setFocusableDayOnSecondCalendar(focusedDay);\n }\n\n return;\n }\n\n if ((key === Keys.ENTER || key === Keys.SPACE) && isHTMLElement(event.target)) {\n event.preventDefault();\n event.target.click?.();\n }\n },\n [focusedDay, value, firstCalendarViewDate, secondCalendarViewDate, setFocusedDay, setViewDate],\n );\n\n const handleFirstCalendarKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n handleCalendarKeyDown(event, true);\n },\n [handleCalendarKeyDown],\n );\n\n const handleSecondCalendarKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n handleCalendarKeyDown(event, false);\n },\n [handleCalendarKeyDown],\n );\n\n const handleDayFocus = React.useCallback(\n (value: Date) => {\n if (\n isSameMonth(firstCalendarViewDate, value) &&\n (!focusableDayOnFirstCalendar || !isSameDate(focusableDayOnFirstCalendar, value))\n ) {\n setFocusableDayOnFirstCalendar(value);\n }\n if (\n isSameMonth(secondCalendarViewDate, value) &&\n (!focusableDayOnSecondCalendar || !isSameDate(focusableDayOnSecondCalendar, value))\n ) {\n setFocusableDayOnSecondCalendar(value);\n }\n },\n [\n firstCalendarViewDate,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n secondCalendarViewDate,\n ],\n );\n\n return {\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n handleFirstCalendarKeyDown,\n handleSecondCalendarKeyDown,\n handleDayFocus,\n };\n}\n\n/**\n * Возвращает функцию, которая позволяет проверить является ли день в календаре днём на который\n * можно попасть с помощью Tab.\n * Единственный день в таблице календаря у которого есть tabIndex=\"0\"\n * Чтобы на него можно было попасть из заголовка календаря.\n */\nexport function useIsDayFocusable({\n value,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n viewDate,\n isDayActive,\n}: {\n value: DateRangeType | null | undefined;\n focusableDayOnFirstCalendar: Date | undefined;\n focusableDayOnSecondCalendar: Date | undefined;\n viewDate: Date;\n isDayActive: (date: Date) => boolean;\n}) {\n const isValueVisibleOnCalendar = Boolean(\n value &&\n ((value[0] && isSameMonth(value[0], viewDate)) ||\n (value[1] && isSameMonth(value[1], viewDate))),\n );\n\n const isCalendarHasFocusableDay = Boolean(\n (focusableDayOnFirstCalendar && isSameMonth(focusableDayOnFirstCalendar, viewDate)) ||\n (focusableDayOnSecondCalendar && isSameMonth(focusableDayOnSecondCalendar, viewDate)),\n );\n\n const isDayFocusable = React.useCallback(\n (day: Date) => {\n // если focusableDay день находится среди дней открытого сейчас месяца, то такой день получит tabIndex=\"0\",\n if (isCalendarHasFocusableDay) {\n return Boolean(\n (focusableDayOnFirstCalendar && isSameDate(focusableDayOnFirstCalendar, day)) ||\n (focusableDayOnSecondCalendar && isSameDate(focusableDayOnSecondCalendar, day)),\n );\n }\n\n // при открытии календаря focusableDay не определён,\n // поэтому tabIndex=\"0\" будет у дня, соответствующего дню в инпуте\n if (isValueVisibleOnCalendar) {\n return isDayActive(day);\n }\n\n // при переключении месяца любая навигация с помощью Tab начинается\n // с первого дня месяца.\n return isSameDate(startOfMonth(viewDate), day);\n },\n [\n isCalendarHasFocusableDay,\n isValueVisibleOnCalendar,\n viewDate,\n isDayActive,\n focusableDayOnFirstCalendar,\n focusableDayOnSecondCalendar,\n ],\n );\n return isDayFocusable;\n}\n"],"names":["React","isSameDate","startOfMonth","Keys","pressedKey","navigateDate","NAVIGATION_KEYS","isSameMonth","isHTMLElement","useCalendarKeyboardNavigation","focusedDay","value","setFocusedDay","viewDates","firstCalendarViewDate","secondCalendarViewDate","setViewDate","focusableDayOnFirstCalendar","setFocusableDayOnFirstCalendar","useState","focusableDayOnSecondCalendar","setFocusableDayOnSecondCalendar","handleCalendarKeyDown","useCallback","event","isFirst","key","includes","preventDefault","newFocusedDay","TAB","undefined","ENTER","SPACE","target","click","handleFirstCalendarKeyDown","handleSecondCalendarKeyDown","handleDayFocus","useIsDayFocusable","viewDate","isDayActive","isValueVisibleOnCalendar","Boolean","isCalendarHasFocusableDay","isDayFocusable","day"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../src/components/Cell/Cell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAA0B,MAAM,6BAA6B,CAAC;AAKnF,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EACzC,cAAc,EACd,UAAU,CAAC,cAAc,CAAC;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;IACvC,QAAQ,EAAE,OAAO,YAAY,CAAC;CA+H/B,CAAC"}
1
+ {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../src/components/Cell/Cell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAA0B,MAAM,6BAA6B,CAAC;AAKnF,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EACzC,cAAc,EACd,UAAU,CAAC,cAAc,CAAC;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;IACvC,QAAQ,EAAE,OAAO,YAAY,CAAC;CAkI/B,CAAC"}